add a progressbar to FT model

This commit is contained in:
Dimitur Kirov 2005-09-08 20:05:28 +00:00
parent e969ff6558
commit 50679ba5c2
1 changed files with 32 additions and 19 deletions

View File

@ -39,7 +39,7 @@ gtk.glade.bindtextdomain (APP, i18n.DIR)
gtk.glade.textdomain (APP) gtk.glade.textdomain (APP)
GTKGUI_GLADE = 'gtkgui.glade' GTKGUI_GLADE = 'gtkgui.glade'
SID_INDEX = 5
class FileTransfersWindow: class FileTransfersWindow:
def __init__(self, plugin): def __init__(self, plugin):
self.files_props = {'r' : {}, 's': {}} self.files_props = {'r' : {}, 's': {}}
@ -58,7 +58,7 @@ class FileTransfersWindow:
self.notify_ft_checkbox.set_active(True) self.notify_ft_checkbox.set_active(True)
else: else:
self.notify_ft_checkbox.set_active(False) self.notify_ft_checkbox.set_active(False)
self.model = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str, str, str) self.model = gtk.ListStore(gtk.gdk.Pixbuf, str, str, str, int, str)
self.tree.set_model(self.model) self.tree.set_model(self.model)
col = gtk.TreeViewColumn() col = gtk.TreeViewColumn()
@ -87,12 +87,13 @@ class FileTransfersWindow:
self.tree.append_column(col) self.tree.append_column(col)
col = gtk.TreeViewColumn(_('Progress')) col = gtk.TreeViewColumn(_('Progress'))
renderer = gtk.CellRendererText() renderer = gtk.CellRendererProgress()
renderer.set_property('yalign', 0.) renderer.set_property('yalign', 0.5)
renderer.set_property('xalign', 0.) renderer.set_property('xalign', 0.5)
col.pack_start(renderer, expand = True) col.pack_start(renderer, expand = False)
col.set_expand(False) col.set_expand(False)
col.add_attribute(renderer, 'text' , 3) col.add_attribute(renderer, 'text' , 3)
col.add_attribute(renderer, 'value' , 4)
self.tree.append_column(col) self.tree.append_column(col)
self.set_images() self.set_images()
self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE) self.tree.get_selection().set_mode(gtk.SELECTION_SINGLE)
@ -347,14 +348,24 @@ _('Connection with peer cannot be established.'))
iter = self.get_iter_by_sid(typ, sid) iter = self.get_iter_by_sid(typ, sid)
if iter is None: if iter is None:
return return
sid = self.model[iter][4].decode('utf-8') sid = self.model[iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if status == 'stop': if status == 'stop':
file_props['stopped'] = True file_props['stopped'] = True
elif status == 'ok': elif status == 'ok':
file_props['completed'] = True file_props['completed'] = True
self.model.set(iter, 0, self.images[status]) self.model.set(iter, 0, self.images[status])
def format_percent(self, percent):
''' add extra spaces from both sides of the percent, so that
progress string has always a fixed size'''
_str = ' '
if percent != 100.:
_str += ' '
if percent < 10:
_str += ' '
_str += unicode(percent) + '% \n'
return _str
def set_progress(self, typ, sid, transfered_size, iter = None): def set_progress(self, typ, sid, transfered_size, iter = None):
''' change the progress of a transfer with new transfered size''' ''' change the progress of a transfer with new transfered size'''
if not self.files_props[typ].has_key(sid): if not self.files_props[typ].has_key(sid):
@ -368,13 +379,14 @@ _('Connection with peer cannot be established.'))
if iter is None: if iter is None:
iter = self.get_iter_by_sid(typ, sid) iter = self.get_iter_by_sid(typ, sid)
if iter is not None: if iter is not None:
text = unicode(percent) + '%\n' text = self.format_percent(percent)
if transfered_size == 0: if transfered_size == 0:
text += '0' text += '0'
else: else:
text += helpers.convert_bytes(transfered_size) text += helpers.convert_bytes(transfered_size)
text += '/' + helpers.convert_bytes(full_size) text += '/' + helpers.convert_bytes(full_size)
self.model.set(iter, 3, text) self.model.set(iter, 3, text)
self.model.set(iter, 4, int(percent))
if file_props['type'] == 'r': if file_props['type'] == 'r':
status = 'download' status = 'download'
else: else:
@ -394,7 +406,7 @@ _('Connection with peer cannot be established.'))
session id''' session id'''
iter = self.model.get_iter_root() iter = self.model.get_iter_root()
while iter: while iter:
if typ + sid == self.model[iter][4].decode('utf-8'): if typ + sid == self.model[iter][SID_INDEX].decode('utf-8'):
return iter return iter
iter = self.model.iter_next(iter) iter = self.model.iter_next(iter)
@ -443,8 +455,9 @@ _('Connection with peer cannot be established.'))
file_name = file_props['name'] file_name = file_props['name']
text_props = gtkgui_helpers.escape_for_pango_markup(file_name) + '\n' text_props = gtkgui_helpers.escape_for_pango_markup(file_name) + '\n'
text_props += gtkgui_helpers.escape_for_pango_markup(contact.name) text_props += gtkgui_helpers.escape_for_pango_markup(contact.name)
self.model.set(iter, 1, text_labels, 2, text_props, 4, \ self.model.set(iter, 1, text_labels, 2, text_props, SID_INDEX, \
file_props['type'] + file_props['sid']) file_props['type'] + file_props['sid'])
#~ self.model.set(iter, 4, 40)
self.set_progress(file_props['type'], file_props['sid'], 0, iter) self.set_progress(file_props['type'], file_props['sid'], 0, iter)
if file_props.has_key('started') and file_props['started'] is False: if file_props.has_key('started') and file_props['started'] is False:
status = 'waiting' status = 'waiting'
@ -473,7 +486,7 @@ _('Connection with peer cannot be established.'))
except: except:
self.tooltip.hide_tooltip() self.tooltip.hide_tooltip()
return return
sid = self.model[iter][4].decode('utf-8') sid = self.model[iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if file_props is not None: if file_props is not None:
if self.tooltip.timeout == 0 or self.tooltip.id != props[0]: if self.tooltip.timeout == 0 or self.tooltip.id != props[0]:
@ -554,7 +567,7 @@ _('Connection with peer cannot be established.'))
self.set_all_insensitive() self.set_all_insensitive()
return return
current_iter = self.model.get_iter(path) current_iter = self.model.get_iter(path)
sid = self.model[current_iter][4].decode('utf-8') sid = self.model[current_iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
self.remove_menuitem.set_sensitive(is_row_selected) self.remove_menuitem.set_sensitive(is_row_selected)
self.open_folder_menuitem.set_sensitive(is_row_selected) self.open_folder_menuitem.set_sensitive(is_row_selected)
@ -611,7 +624,7 @@ _('Connection with peer cannot be established.'))
i = len(self.model) - 1 i = len(self.model) - 1
while i >= 0: while i >= 0:
iter = self.model.get_iter((i)) iter = self.model.get_iter((i))
sid = self.model[iter][4].decode('utf-8') sid = self.model[iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if file_props.has_key('completed') and file_props['completed']: if file_props.has_key('completed') and file_props['completed']:
self.model.remove(iter) self.model.remove(iter)
@ -648,7 +661,7 @@ _('Connection with peer cannot be established.'))
if selected is None or selected[1] is None: if selected is None or selected[1] is None:
return return
s_iter = selected[1] s_iter = selected[1]
sid = self.model[s_iter][4].decode('utf-8') sid = self.model[s_iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if self.is_transfer_paused(file_props): if self.is_transfer_paused(file_props):
file_props['paused'] = False file_props['paused'] = False
@ -665,7 +678,7 @@ _('Connection with peer cannot be established.'))
if selected is None or selected[1] is None: if selected is None or selected[1] is None:
return return
s_iter = selected[1] s_iter = selected[1]
sid = self.model[s_iter][4].decode('utf-8') sid = self.model[s_iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if not file_props.has_key('tt_account'): if not file_props.has_key('tt_account'):
return return
@ -686,7 +699,7 @@ _('Connection with peer cannot be established.'))
# check if the current pointer is at the same path # check if the current pointer is at the same path
# as it was before setting the timeout # as it was before setting the timeout
iter = self.model.get_iter(props[0]) iter = self.model.get_iter(props[0])
sid = self.model[iter][4].decode('utf-8') sid = self.model[iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
rect = self.tree.get_cell_area(props[0],props[1]) rect = self.tree.get_cell_area(props[0],props[1])
position = widget.window.get_origin() position = widget.window.get_origin()
@ -782,7 +795,7 @@ _('Connection with peer cannot be established.'))
if selected is None or selected[1] is None: if selected is None or selected[1] is None:
return return
s_iter = selected[1] s_iter = selected[1]
sid = self.model[s_iter][4].decode('utf-8') sid = self.model[s_iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if not file_props.has_key('file-name'): if not file_props.has_key('file-name'):
return return
@ -805,7 +818,7 @@ _('Connection with peer cannot be established.'))
if selected is None or selected[1] is None: if selected is None or selected[1] is None:
return return
s_iter = selected[1] s_iter = selected[1]
sid = self.model[s_iter][4].decode('utf-8') sid = self.model[s_iter][SID_INDEX].decode('utf-8')
file_props = self.files_props[sid[0]][sid[1:]] file_props = self.files_props[sid[0]][sid[1:]]
if not file_props.has_key('tt_account'): if not file_props.has_key('tt_account'):
# file transfer is not set yet # file transfer is not set yet