From 906536e96026e371ced0285a69ee1897ccb3537c Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sat, 23 Feb 2008 12:33:07 +0000 Subject: [PATCH] Added Stop button to cancel current downloads. Refresh All now shades while solving, forcing you to stop the current download first. Unselecting the Run/Download button no longer cancels, it just stops the action from taking place once the download is complete. --- zeroinstall/0launch-gui/0launch-gui | 35 ++++++++++++++++++------------ zeroinstall/0launch-gui/dialog.py | 9 ++++++++ zeroinstall/0launch-gui/mainwindow.py | 5 +++-- zeroinstall/0launch-gui/zero-install.glade | 2 +- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/zeroinstall/0launch-gui/0launch-gui b/zeroinstall/0launch-gui/0launch-gui index 7a83e1c..43e0806 100755 --- a/zeroinstall/0launch-gui/0launch-gui +++ b/zeroinstall/0launch-gui/0launch-gui @@ -109,21 +109,28 @@ root = iface_cache.get_interface(policy.root) window.browser.set_root(root) window.window.connect('destroy', lambda w: handler.abort_all_downloads()) - + @tasks.async def main(): - solved = policy.solve_with_downloads(force = bool(options.refresh)) - - window.show() - yield solved - try: - tasks.check(solved) - except model.SafeException, ex: - dialog.alert(window.window, str(ex)) - except Exception, ex: - import traceback - traceback.print_exc() - dialog.alert(window.window, str(ex)) - yield [] + force_refresh = bool(options.refresh) + while True: + window.refresh_button.set_sensitive(False) + + solved = policy.solve_with_downloads(force = force_refresh) + + window.show() + yield solved + try: + window.refresh_button.set_sensitive(True) + tasks.check(solved) + except model.SafeException, ex: + dialog.alert(window.window, str(ex)) + except Exception, ex: + import traceback + traceback.print_exc() + dialog.alert(window.window, str(ex)) + + yield dialog.ButtonClickedBlocker(window.refresh_button) + force_refresh = True handler.wait_for_blocker(main()) diff --git a/zeroinstall/0launch-gui/dialog.py b/zeroinstall/0launch-gui/dialog.py index 05b2cac..c99ed81 100644 --- a/zeroinstall/0launch-gui/dialog.py +++ b/zeroinstall/0launch-gui/dialog.py @@ -49,6 +49,15 @@ class DialogResponse(tasks.Blocker): self.trigger() a = dialog.connect('response', response) +class ButtonClickedBlocker(tasks.Blocker): + def __init__(self, button): + tasks.Blocker.__init__(self, "Button click") + a = None + def clicked(b): + b.disconnect(a) + self.trigger() + a = button.connect('clicked', lambda b: self.trigger()) + def alert(parent, message, type = gtk.MESSAGE_ERROR): if type == gtk.MESSAGE_ERROR: global last_error diff --git a/zeroinstall/0launch-gui/mainwindow.py b/zeroinstall/0launch-gui/mainwindow.py index 8c3da6f..1c5ec01 100644 --- a/zeroinstall/0launch-gui/mainwindow.py +++ b/zeroinstall/0launch-gui/mainwindow.py @@ -31,11 +31,13 @@ class MainWindow: self.progress = widgets.get_widget('progress') self.progress_area = widgets.get_widget('progress_area') + widgets.get_widget('stop').connect('clicked', lambda b: policy.handler.abort_all_downloads()) + cache = widgets.get_widget('show_cache') cache.connect('clicked', lambda b: os.spawnlp(os.P_WAIT, sys.argv[0], sys.argv[0], '-c')) - widgets.get_widget('refresh').connect('clicked', lambda b: policy.refresh_all()) + self.refresh_button = widgets.get_widget('refresh') # Tree view self.browser = InterfaceBrowser(policy, widgets) @@ -93,7 +95,6 @@ class MainWindow: tasks.check(blockers) if cancelled.happened: - self.policy.handler.abort_all_downloads() return if self.policy.get_uncached_implementations(): diff --git a/zeroinstall/0launch-gui/zero-install.glade b/zeroinstall/0launch-gui/zero-install.glade index a5ef5d7..81cda31 100644 --- a/zeroinstall/0launch-gui/zero-install.glade +++ b/zeroinstall/0launch-gui/zero-install.glade @@ -240,7 +240,7 @@ True - _Show cache + Sho_w cache True False GTK_JUSTIFY_LEFT -- 2.11.4.GIT