Fixed up Pausing/Resuming in the interface, especially the Torrent menu.

Forcing update() on pausing/resuming and queue changes to improve UI 
responsiveness.
This commit is contained in:
Andrew Resch 2007-06-16 02:09:03 +00:00
parent 57d5ae802f
commit eede17988a
2 changed files with 29 additions and 17 deletions

View File

@ -8,17 +8,10 @@
<widget class="GtkImageMenuItem" id="menu_pause"> <widget class="GtkImageMenuItem" id="menu_pause">
<property name="visible">True</property> <property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property> <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">StartPause</property> <property name="label" translatable="yes">gtk-media-pause</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="start_pause"/> <signal name="activate" handler="start_pause"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image9">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-missing-image</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget> </widget>
</child> </child>
<child> <child>

View File

@ -265,6 +265,7 @@ class DelugeGTK:
"queue_down": self.q_torrent_down, "queue_down": self.q_torrent_down,
"queue_bottom": self.q_to_bottom, "queue_bottom": self.q_to_bottom,
}) })
self.torrent_menu.connect("focus", self.torrent_menu_focus)
# UID, Q#, Name, Size, Progress, Message, Seeders, Peers, DL, UL, ETA, Share # UID, Q#, Name, Size, Progress, Message, Seeders, Peers, DL, UL, ETA, Share
self.torrent_model = gtk.ListStore(int, int, str, str, float, str, int, int, int, int, int, int, str, float) self.torrent_model = gtk.ListStore(int, int, str, str, float, str, int, int, int, int, int, int, str, float)
self.torrent_view.set_model(self.torrent_model) self.torrent_view.set_model(self.torrent_model)
@ -375,8 +376,6 @@ class DelugeGTK:
return True return True
def torrent_view_clicked(self, widget, event): def torrent_view_clicked(self, widget, event):
# print widget
# print event
if event.button == 3: if event.button == 3:
x = int(event.x) x = int(event.x)
y = int(event.y) y = int(event.y)
@ -387,11 +386,13 @@ class DelugeGTK:
self.right_click = self.torrent_view.get_selection().path_is_selected(path) self.right_click = self.torrent_view.get_selection().path_is_selected(path)
self.torrent_view.grab_focus() self.torrent_view.grab_focus()
self.torrent_view.set_cursor(path, col, 0) self.torrent_view.set_cursor(path, col, 0)
#unique_id = self.get_selected_torrent() unique_id = self.torrent_model.get_value(self.torrent_model.get_iter(path), 0)
# Get the torrent state so we can check if the torrent is paused.
torrent_state = self.manager.get_torrent_state(unique_id)
widget = self.torrent_glade.get_widget("menu_pause") widget = self.torrent_glade.get_widget("menu_pause")
if(self.manager.is_user_paused(self.torrent_model.get_value(self.torrent_model.get_iter(path), 0))): if torrent_state["is_paused"]:
widget.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_MENU)) widget.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_MENU))
widget.get_children()[0].set_text(_("Start")) widget.get_children()[0].set_text(_("Resume"))
else: else:
widget.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU)) widget.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU))
widget.get_children()[0].set_text(_("Pause")) widget.get_children()[0].set_text(_("Pause"))
@ -404,15 +405,30 @@ class DelugeGTK:
return False return False
def start_pause(self, widget): def start_pause(self, widget):
print "Pause btn clicked"
unique_ids = self.get_selected_torrent_rows() unique_ids = self.get_selected_torrent_rows()
try: try:
for uid in unique_ids: for uid in unique_ids:
self.manager.set_user_pause(uid, not self.manager.is_user_paused(uid)) self.manager.set_user_pause(uid, not self.manager.is_user_paused(uid))
# We need to force an update so the GUI looks more responsive
print "doing update()"
self.update()
except KeyError: except KeyError:
pass pass
def torrent_menu_focus(self, widget, direction):
# Get the selected torrent state so we can check if the torrent is paused.
unique_id = self.get_selected_torrent()
torrent_state = self.manager.get_torrent_state(unique_id)
menuitem = self.torrent_glade.get_widget("menu_pause")
if torrent_state["is_paused"]:
menuitem.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PLAY, gtk.ICON_SIZE_MENU))
menuitem.get_children()[0].set_text(_("Resume"))
else:
menuitem.set_image(gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_MENU))
menuitem.get_children()[0].set_text(_("Pause"))
def build_summary_tab(self): def build_summary_tab(self):
#Torrent Summary tab #Torrent Summary tab
# Look into glade's widget prefix function # Look into glade's widget prefix function
@ -717,7 +733,7 @@ class DelugeGTK:
try: try:
if self.manager.is_user_paused(self.get_selected_torrent()): if self.manager.is_user_paused(self.get_selected_torrent()):
self.wtree.get_widget("toolbutton_pause").set_stock_id(gtk.STOCK_MEDIA_PLAY) self.wtree.get_widget("toolbutton_pause").set_stock_id(gtk.STOCK_MEDIA_PLAY)
self.wtree.get_widget("toolbutton_pause").set_label("Play") self.wtree.get_widget("toolbutton_pause").set_label(_("Resume"))
else: else:
self.wtree.get_widget("toolbutton_pause").set_stock_id(gtk.STOCK_MEDIA_PAUSE) self.wtree.get_widget("toolbutton_pause").set_stock_id(gtk.STOCK_MEDIA_PAUSE)
self.wtree.get_widget("toolbutton_pause").set_label(_("Pause")) self.wtree.get_widget("toolbutton_pause").set_label(_("Pause"))
@ -1011,16 +1027,19 @@ class DelugeGTK:
torrent = self.get_selected_torrent() torrent = self.get_selected_torrent()
if torrent is not None: if torrent is not None:
self.manager.queue_up(torrent) self.manager.queue_up(torrent)
self.update()
def q_torrent_down(self, obj=None): def q_torrent_down(self, obj=None):
torrent = self.get_selected_torrent() torrent = self.get_selected_torrent()
if torrent is not None: if torrent is not None:
self.manager.queue_down(torrent) self.manager.queue_down(torrent)
self.update()
def q_to_bottom(self, widget): def q_to_bottom(self, widget):
torrent = self.get_selected_torrent() torrent = self.get_selected_torrent()
if torrent is not None: if torrent is not None:
self.manager.queue_bottom(torrent) self.manager.queue_bottom(torrent)
self.update()
def toolbar_toggle(self, widget): def toolbar_toggle(self, widget):
if widget.get_active(): if widget.get_active():