From 7968e644d4b5402ad89b6770c1d2adffb3e943ef Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Sat, 9 Feb 2008 19:53:28 +0000 Subject: [PATCH] Removed GUI object. --- zeroinstall/0launch-gui/0launch-gui | 33 +++++++++++++++--- zeroinstall/0launch-gui/dialog.py | 17 ++++++++++ zeroinstall/0launch-gui/gui.py | 62 +++------------------------------- zeroinstall/0launch-gui/mainwindow.py | 2 ++ zeroinstall/0launch-gui/preferences.py | 3 +- zeroinstall/0launch-gui/properties.py | 3 +- 6 files changed, 55 insertions(+), 65 deletions(-) diff --git a/zeroinstall/0launch-gui/0launch-gui b/zeroinstall/0launch-gui/0launch-gui index 0c9bdc1..323b83b 100755 --- a/zeroinstall/0launch-gui/0launch-gui +++ b/zeroinstall/0launch-gui/0launch-gui @@ -87,19 +87,44 @@ from zeroinstall.injector import model, autopolicy, namespaces from zeroinstall.injector.policy import Policy from zeroinstall.injector.iface_cache import iface_cache from zeroinstall.support import tasks +import mainwindow, dialog restrictions = [] if options.before or options.not_before: restrictions.append(model.Restriction(model.parse_version(options.before), model.parse_version(options.not_before))) +widgets = dialog.Template('main') + handler = gui.GUIHandler() policy = Policy(interface_uri, handler, src = bool(options.source)) root_iface = iface_cache.get_interface(interface_uri) policy.solver.extra_restrictions[root_iface] = restrictions policy.solver.record_details = True -gui = gui.GUI(policy, download_only = bool(options.download_only)) -handler.policy = gui -main = tasks.Task(gui.main(bool(options.refresh)), "main") -handler.wait_for_blocker(main.finished) +window = mainwindow.MainWindow(policy, widgets, download_only = bool(options.download_only)) +handler.mainwindow = window + +root = iface_cache.get_interface(policy.root) +window.browser.set_root(root) + +def abort_all_downloads(): + for dl in policy.handler.monitored_downloads.values(): + dl.abort() +window.window.connect('destroy', lambda w: 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 Exception, ex: + import traceback + traceback.print_exc() + dialog.alert(window.window, str(ex)) + yield [] + +handler.wait_for_blocker(main()) diff --git a/zeroinstall/0launch-gui/dialog.py b/zeroinstall/0launch-gui/dialog.py index da5927c..05b2cac 100644 --- a/zeroinstall/0launch-gui/dialog.py +++ b/zeroinstall/0launch-gui/dialog.py @@ -1,10 +1,27 @@ import gtk +import gtk.glade +import os from zeroinstall.support import tasks n_windows = 0 last_error = None +gladefile = os.path.join(os.path.dirname(__file__), 'zero-install.glade') + +# Wrapped for glade widget tree that throws a sensible exception if the widget isn't found +class Template: + def __init__(self, root): + self.widgets = gtk.glade.XML(gladefile, root) + self.root = root + + def get_widget(self, name = None): + if not name: + name = self.root + widget = self.widgets.get_widget(name) + assert widget, "Widget '%s' not found in glade file '%s'" % (name, gladefile) + return widget + class Dialog(gtk.Dialog): __shown = False diff --git a/zeroinstall/0launch-gui/gui.py b/zeroinstall/0launch-gui/gui.py index 7abfe01..6fbb245 100644 --- a/zeroinstall/0launch-gui/gui.py +++ b/zeroinstall/0launch-gui/gui.py @@ -1,5 +1,4 @@ import gtk, os, gobject, sys -import gtk.glade from zeroinstall.injector.iface_cache import iface_cache from zeroinstall.injector.policy import Policy @@ -11,30 +10,15 @@ import dialog version = '0.31' -gladefile = os.path.join(os.path.dirname(__file__), 'zero-install.glade') - -# Wrapped for glade widget tree that throws a sensible exception if the widget isn't found -class Template: - def __init__(self, root): - self.widgets = gtk.glade.XML(gladefile, root) - self.root = root - - def get_widget(self, name = None): - if not name: - name = self.root - widget = self.widgets.get_widget(name) - assert widget, "Widget '%s' not found in glade file '%s'" % (name, gladefile) - return widget - class GUIHandler(handler.Handler): dl_callbacks = None # Download -> [ callback ] pulse = None - policy = None + mainwindow = None def downloads_changed(self): if self.monitored_downloads and self.pulse is None: def pulse(): - progress = self.policy.window.progress + progress = self.mainwindow.progress any_known = False done = total = self.total_bytes_downloaded # Completed downloads @@ -63,7 +47,7 @@ class GUIHandler(handler.Handler): return True pulse() self.pulse = gobject.timeout_add(50, pulse) - self.policy.window.progress.show() + self.mainwindow.progress.show() elif len(self.monitored_downloads) == 0: # Reset counters self.n_completed_downloads = 0 @@ -72,48 +56,12 @@ class GUIHandler(handler.Handler): # Stop animation if self.pulse: gobject.source_remove(self.pulse) - self.policy.window.progress.hide() + self.mainwindow.progress.hide() self.pulse = None def confirm_trust_keys(self, interface, sigs, iface_xml): import trust_box - return trust_box.confirm_trust(interface, sigs, iface_xml, parent = self.policy.window.window) + return trust_box.confirm_trust(interface, sigs, iface_xml, parent = self.mainwindow.window) def report_error(self, ex): dialog.alert(None, str(ex)) - -class GUI: - policy = None - window = None - - def __init__(self, policy, download_only): - widgets = Template('main') - self.policy = policy - - import mainwindow - self.window = mainwindow.MainWindow(policy, widgets, download_only) - root = iface_cache.get_interface(self.policy.root) - self.window.browser.set_root(root) - - policy.watchers.append(self.update_display) # XXX - self.window.window.connect('destroy', lambda w: self.abort_all_downloads()) - - def update_display(self): - self.window.set_response_sensitive(gtk.RESPONSE_OK, self.policy.solver.ready) - - def main(self, refresh): - solved = self.policy.solve_with_downloads(force = refresh) - - self.window.show() - yield solved - try: - tasks.check(solved) - except Exception, ex: - import traceback - traceback.print_exc() - dialog.alert(self.window.window, str(ex)) - yield [] - - def abort_all_downloads(self): - for dl in self.policy.handler.monitored_downloads.values(): - dl.abort() diff --git a/zeroinstall/0launch-gui/mainwindow.py b/zeroinstall/0launch-gui/mainwindow.py index 5fe56d9..634ccfc 100644 --- a/zeroinstall/0launch-gui/mainwindow.py +++ b/zeroinstall/0launch-gui/mainwindow.py @@ -18,6 +18,8 @@ class MainWindow: cancel_download_and_run = None def __init__(self, policy, widgets, download_only): + policy.watchers.append(lambda: self.window.set_response_sensitive(gtk.RESPONSE_OK, policy.solver.ready)) + self.window = widgets.get_widget('main') self.window.set_default_size(gtk.gdk.screen_width() * 2 / 5, 300) diff --git a/zeroinstall/0launch-gui/preferences.py b/zeroinstall/0launch-gui/preferences.py index c2f2bc9..5e889a3 100644 --- a/zeroinstall/0launch-gui/preferences.py +++ b/zeroinstall/0launch-gui/preferences.py @@ -2,8 +2,7 @@ import gtk from logging import warn import os, sys import help_box -from gui import Template -from dialog import Dialog, MixedButton, frame +from dialog import Dialog, MixedButton, frame, Template from zeroinstall.injector.model import network_levels from zeroinstall.injector import trust, gpg from freshness import freshness_levels, Freshness diff --git a/zeroinstall/0launch-gui/properties.py b/zeroinstall/0launch-gui/properties.py index 2a170b6..00a8c0d 100644 --- a/zeroinstall/0launch-gui/properties.py +++ b/zeroinstall/0launch-gui/properties.py @@ -8,8 +8,7 @@ import gtk, sys, os from logging import warn import help_box -from dialog import DialogResponse -from gui import Template +from dialog import DialogResponse, Template from impl_list import ImplementationList import time import dialog -- 2.11.4.GIT