Show
Ignore:
Timestamp:
12/15/06 19:59:24 (2 years ago)
Author:
asterix
Message:

updated buttons in FT window when selected row status changes. fixes #2785

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/filetransfers_window.py

    r7268 r7659  
    6060                self.tree.set_model(self.model) 
    6161                col = gtk.TreeViewColumn() 
    62                  
     62 
    6363                render_pixbuf = gtk.CellRendererPixbuf() 
    64                  
     64 
    6565                col.pack_start(render_pixbuf, expand = True) 
    6666                render_pixbuf.set_property('xpad', 3) 
     
    6969                col.add_attribute(render_pixbuf, 'pixbuf', 0) 
    7070                self.tree.append_column(col) 
    71                  
     71 
    7272                col = gtk.TreeViewColumn(_('File')) 
    7373                renderer = gtk.CellRendererText() 
     
    8484                col.set_expand(True) 
    8585                self.tree.append_column(col) 
    86                  
     86 
    8787                col = gtk.TreeViewColumn(_('Time')) 
    8888                renderer = gtk.CellRendererText() 
     
    9696                col.set_expand(False) 
    9797                self.tree.append_column(col) 
    98                  
     98 
    9999                col = gtk.TreeViewColumn(_('Progress')) 
    100100                renderer = gtk.CellRendererProgress() 
     
    107107                col.set_expand(False) 
    108108                self.tree.append_column(col) 
    109                  
     109 
    110110                self.set_images() 
    111111                self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE) 
     
    121121                self.remove_menuitem = self.xml.get_widget('remove_menuitem') 
    122122                self.xml.signal_autoconnect(self) 
    123                  
     123 
    124124        def find_transfer_by_jid(self, account, jid): 
    125125                ''' find all transfers with peer 'jid' that belong to 'account' ''' 
    126126                active_transfers = [[],[]] # ['senders', 'receivers'] 
    127                  
     127 
    128128                # 'account' is the sender 
    129129                for file_props in self.files_props['s'].values(): 
     
    133133                                        if not self.is_transfer_stoped(file_props): 
    134134                                                active_transfers[0].append(file_props) 
    135                  
     135 
    136136                # 'account' is the recipient 
    137137                for file_props in self.files_props['r'].values(): 
     
    142142                                                active_transfers[1].append(file_props) 
    143143                return active_transfers 
    144          
     144 
    145145        def show_completed(self, jid, file_props): 
    146146                ''' show a dialog saying that file (file_props) has been transferred''' 
     
    387387                self.images['ok'] = self.window.render_icon(gtk.STOCK_APPLY,  
    388388                        gtk.ICON_SIZE_MENU) 
    389                          
     389 
    390390        def set_status(self, typ, sid, status): 
    391391                ''' change the status of a transfer to state 'status' ''' 
     
    400400                        file_props['completed'] = True 
    401401                self.model.set(iter, C_IMAGE, self.images[status]) 
    402                  
     402                path = self.model.get_path(iter) 
     403                self.select_func(path) 
     404 
    403405        def _format_percent(self, percent): 
    404406                ''' add extra spaces from both sides of the percent, so that 
     
    411413                _str += unicode(percent) + '%          \n' 
    412414                return _str 
    413                  
     415 
    414416        def _format_time(self, _time): 
    415417                times = { 'hours': 0, 'minutes': 0, 'seconds': 0 } 
     
    421423                        if _time >= 60: 
    422424                                times['hours'] = _time / 60 
    423                  
     425 
    424426                #Print remaining time in format 00:00:00 
    425427                #You can change the places of (hours), (minutes), (seconds) - 
    426428                #they are not translatable. 
    427429                return _('%(hours)02.d:%(minutes)02.d:%(seconds)02.d')  % times 
    428                  
     430 
    429431        def _get_eta_and_speed(self, full_size, transfered_size, elapsed_time): 
    430432                if elapsed_time == 0: 
     
    436438                eta = remaining_size / speed 
    437439                return eta, speed 
    438                  
     440 
    439441        def _remove_transfer(self, iter, sid, file_props): 
    440442                self.model.remove(iter) 
     
    462464                del(self.files_props[sid[0]][sid[1:]]) 
    463465                del(file_props) 
    464                  
     466 
    465467        def set_progress(self, typ, sid, transfered_size, iter = None): 
    466468                ''' change the progress of a transfer with new transfered size''' 
     
    476478                        iter = self.get_iter_by_sid(typ, sid) 
    477479                if iter is not None: 
     480                        just_began = False 
     481                        if self.model[iter][C_PERCENT] == 0 and int(percent > 0): 
     482                                just_began = True 
    478483                        text = self._format_percent(percent) 
    479484                        if transfered_size == 0: 
     
    483488                        text += '/' + helpers.convert_bytes(full_size) 
    484489                        # Kb/s 
    485                          
     490 
    486491                        # remaining time 
    487492                        if file_props.has_key('offset') and file_props['offset']: 
     
    490495                        eta, speed = self._get_eta_and_speed(full_size, transfered_size,  
    491496                                file_props['elapsed-time']) 
    492                          
     497 
    493498                        self.model.set(iter, C_PROGRESS, text) 
    494499                        self.model.set(iter, C_PERCENT, int(percent)) 
     
    501506                                helpers.convert_bytes(speed)} 
    502507                        self.model.set(iter, C_TIME, text) 
    503                          
     508 
    504509                        # try to guess what should be the status image 
    505510                        if file_props['type'] == 'r': 
     
    516521                        if transfered_size == full_size: 
    517522                                self.set_status(typ, sid, 'ok') 
    518          
     523                        elif just_began: 
     524                                path = self.model.get_path(iter) 
     525                                self.select_func(path) 
     526 
    519527        def get_iter_by_sid(self, typ, sid): 
    520528                '''returns iter to the row, which holds file transfer, identified by the 
     
    525533                                return iter 
    526534                        iter = self.model.iter_next(iter) 
    527          
     535 
    528536        def get_send_file_props(self, account, contact, file_path, file_name): 
    529537                ''' create new file_props dict and set initial file transfer  
     
    549557                file_props['tt_account'] = account 
    550558                return file_props 
    551                  
     559 
    552560        def add_transfer(self, account, contact, file_props): 
    553561                ''' add new transfer to FT window and show the FT window ''' 
     
    563571                else: 
    564572                        text_labels += '<b>' + _('Recipient: ') + '</b>'  
    565                          
     573 
    566574                if file_props['type'] == 'r': 
    567575                        (file_path, file_name) = os.path.split(file_props['file-name']) 
     
    583591                self.set_cleanup_sensitivity() 
    584592                self.window.show_all() 
    585          
     593 
    586594        def on_transfers_list_motion_notify_event(self, widget, event): 
    587595                pointer = self.tree.get_pointer() 
     
    607615                                        self.tooltip.timeout = gobject.timeout_add(500, 
    608616                                                self.show_tooltip, widget) 
    609          
     617 
    610618        def on_transfers_list_leave_notify_event(self, widget = None, event = None): 
    611619                if event is not None: 
     
    619627                        if not props or self.tooltip.id == props[0]: 
    620628                                self.tooltip.hide_tooltip() 
    621          
     629 
    622630        def on_transfers_list_row_activated(self, widget, path, col): 
    623631                # try to open the containing folder 
    624632                self.on_open_folder_menuitem_activate(widget) 
    625                  
     633 
    626634        def is_transfer_paused(self, file_props): 
    627635                if file_props.has_key('stopped') and file_props['stopped']: 
     
    632640                        return False 
    633641                return file_props['paused'] 
    634                  
     642 
    635643        def is_transfer_active(self, file_props): 
    636644                if file_props.has_key('stopped') and file_props['stopped']: 
     
    643651                        return True 
    644652                return not file_props['paused'] 
    645                  
     653 
    646654        def is_transfer_stoped(self, file_props): 
    647655                if file_props.has_key('error') and file_props['error'] != 0: 
     
    662670                else: 
    663671                        self.cleanup_button.set_sensitive(True) 
    664          
     672 
    665673        def set_all_insensitive(self): 
    666674                ''' make all buttons/menuitems insensitive ''' 
     
    673681                self.open_folder_menuitem.set_sensitive(False) 
    674682                self.set_cleanup_sensitivity() 
    675          
     683 
    676684        def set_buttons_sensitive(self, path, is_row_selected): 
    677685                ''' make buttons/menuitems sensitive as appropriate to  
     
    711719                        self.continue_menuitem.set_sensitive(False) 
    712720                return True 
    713          
     721 
    714722        def selection_changed(self, args): 
    715723                ''' selection has changed - change the sensitivity of the  
     
    722730                else: 
    723731                        self.set_all_insensitive() 
    724          
     732 
    725733        def select_func(self, path): 
    726734                is_selected = False 
     
    733741                self.set_cleanup_sensitivity() 
    734742                return True 
    735          
     743 
    736744        def on_cleanup_button_clicked(self, widget): 
    737745                i = len(self.model) - 1 
     
    745753                self.tree.get_selection().unselect_all() 
    746754                self.set_all_insensitive() 
    747          
     755 
    748756        def toggle_pause_continue(self, status): 
    749757                if status: 
     
    752760                        self.pause_button.set_image(gtk.image_new_from_stock( 
    753761                                gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU)) 
    754                          
     762 
    755763                        self.pause_menuitem.set_sensitive(True) 
    756764                        self.pause_menuitem.set_no_show_all(False) 
    757765                        self.continue_menuitem.hide() 
    758766                        self.continue_menuitem.set_no_show_all(True) 
    759                          
     767 
    760768                else: 
    761769                        label = _('_Continue') 
     
    767775                        self.continue_menuitem.set_sensitive(True) 
    768776                        self.continue_menuitem.set_no_show_all(False) 
    769          
     777 
    770778        def on_pause_restore_button_clicked(self, widget): 
    771779                selected = self.tree.get_selection().get_selected() 
     
    786794                        self.set_status(file_props['type'], file_props['sid'], 'pause') 
    787795                        self.toggle_pause_continue(False) 
    788                  
     796 
    789797        def on_cancel_button_clicked(self, widget): 
    790798                selected = self.tree.get_selection().get_selected() 
     
    801809                gajim.connections[account].disconnect_transfer(file_props) 
    802810                self.set_status(file_props['type'], file_props['sid'], 'stop') 
    803          
     811 
    804812        def show_tooltip(self, widget): 
    805813                if self.height_diff == 0: 
     
    823831                else: 
    824832                        self.tooltip.hide_tooltip() 
    825          
     833 
    826834        def on_notify_ft_complete_checkbox_toggled(self, widget): 
    827835                gajim.config.set('notify_on_file_complete',  
    828836                        widget.get_active()) 
    829                  
     837 
    830838        def on_file_transfers_dialog_delete_event(self, widget, event): 
    831839                self.on_transfers_list_leave_notify_event(widget, None) 
    832840                self.window.hide() 
    833841                return True # do NOT destory window 
    834          
     842 
    835843        def on_close_button_clicked(self, widget): 
    836844                self.window.hide() 
     
    842850                        path = self.model.get_path(iter) 
    843851                self.set_buttons_sensitive(path, True) 
    844                  
     852 
    845853                event_button = gtkgui_helpers.get_possible_button_event(event) 
    846854                self.file_transfers_menu.show_all() 
    847855                self.file_transfers_menu.popup(None, self.tree, None,  
    848856                        event_button, event.time) 
    849          
     857 
    850858        def on_transfers_list_key_press_event(self, widget, event): 
    851859                '''when a key is pressed in the treeviews''' 
     
    856864                except TypeError: 
    857865                        self.tree.get_selection().unselect_all() 
    858                  
     866 
    859867                if iter is not None: 
    860868                        path = self.model.get_path(iter) 
    861869                        self.tree.get_selection().select_path(path) 
    862                  
     870 
    863871                if event.keyval == gtk.keysyms.Menu: 
    864872                        self.show_context_menu(event, iter) 
    865873                        return True 
    866                          
    867          
     874 
     875 
    868876        def on_transfers_list_button_release_event(self, widget, event): 
    869877                # hide tooltip, no matter the button is pressed 
     
    879887                else: 
    880888                        self.select_func(path) 
    881                          
     889 
    882890        def on_transfers_list_button_press_event(self, widget, event): 
    883891                # hide tooltip, no matter the button is pressed 
     
    896904                        if path is not None: 
    897905                                return True 
    898                  
     906 
    899907        def on_open_folder_menuitem_activate(self, widget): 
    900908                selected = self.tree.get_selection().get_selected() 
     
    909917                if os.path.exists(path) and os.path.isdir(path): 
    910918                        helpers.launch_file_manager(path) 
    911                  
     919 
    912920        def on_cancel_menuitem_activate(self, widget): 
    913921                self.on_cancel_button_clicked(widget) 
    914                  
     922 
    915923        def on_continue_menuitem_activate(self, widget): 
    916924                self.on_pause_restore_button_clicked(widget) 
    917          
     925 
    918926        def on_pause_menuitem_activate(self, widget): 
    919927                self.on_pause_restore_button_clicked(widget) 
    920                  
     928 
    921929        def on_remove_menuitem_activate(self, widget): 
    922930                selected = self.tree.get_selection().get_selected() 
     
    932940                if event.keyval == gtk.keysyms.Escape: # ESCAPE 
    933941                        self.window.hide() 
    934                  
     942