def __init__(self, policy, widgets, download_only, select_only = False): self.policy = policy self.select_only = select_only def update_ok_state(): self.window.set_response_sensitive(gtk.RESPONSE_OK, policy.solver.ready) if policy.solver.ready and self.window.get_focus() is None: run_button.grab_focus() policy.watchers.append(update_ok_state) self.window = widgets.get_widget('main') self.window.set_default_size(gtk.gdk.screen_width() * 2 / 5, 300) self.progress = widgets.get_widget('progress') self.progress_area = widgets.get_widget('progress_area') self.comment = widgets.get_widget('comment') widgets.get_widget('stop').connect('clicked', lambda b: policy.handler.abort_all_downloads()) self.refresh_button = widgets.get_widget('refresh') # Tree view self.browser = InterfaceBrowser(policy, widgets) prefs = widgets.get_widget('preferences') self.window.action_area.set_child_secondary(prefs, True) # Glade won't let me add this to the template! if select_only: run_button = dialog.MixedButton(_("_Select"), gtk.STOCK_EXECUTE, button = gtk.ToggleButton()) elif download_only: run_button = dialog.MixedButton(_("_Download"), gtk.STOCK_EXECUTE, button = gtk.ToggleButton()) else: run_button = dialog.MixedButton(_("_Run"), gtk.STOCK_EXECUTE, button = gtk.ToggleButton()) self.window.add_action_widget(run_button, gtk.RESPONSE_OK) run_button.show_all() run_button.set_flags(gtk.CAN_DEFAULT) self.run_button = run_button run_button.grab_focus() def response(dialog, resp): if resp in (gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT): self.window.destroy() sys.exit(1) elif resp == gtk.RESPONSE_OK: if self.cancel_download_and_run: self.cancel_download_and_run.trigger() if run_button.get_active(): self.cancel_download_and_run = tasks.Blocker("cancel downloads") self.download_and_run(run_button, self.cancel_download_and_run) elif resp == gtk.RESPONSE_HELP: gui_help.display() elif resp == SHOW_PREFERENCES: import preferences preferences.show_preferences(policy.config, notify_cb = lambda: policy.solve_with_downloads()) self.window.connect('response', response) self.window.realize() # Make busy pointer work, even with --systray
def __init__(self, prog_args): Dialog.__init__(self) self.set_title('Dependency Injector') self.set_default_size(400, 300) tips = gtk.Tooltips() # Network use hbox = gtk.HBox(False, 2) self.vbox.pack_start(hbox, False, True, 0) hbox.set_border_width(4) network = gtk.combo_box_new_text() for level in network_levels: network.append_text(level.capitalize()) network.set_active(list(network_levels).index(policy.network_use)) hbox.pack_start(gtk.Label('Network use:'), False, True, 0) hbox.pack_start(network, True, True, 2) def set_network_use(combo): policy.network_use = network_levels[network.get_active()] policy.save_config() policy.recalculate() network.connect('changed', set_network_use) hbox.show_all() # Freshness hbox = gtk.HBox(False, 2) self.vbox.pack_start(hbox, False, True, 0) hbox.set_border_width(4) times = [x.time for x in freshness_levels] if policy.freshness not in times: freshness_levels.append( Freshness(policy.freshness, '%d seconds' % policy.freshness)) times.append(policy.freshness) freshness = gtk.combo_box_new_text() for level in freshness_levels: freshness.append_text(str(level)) freshness.set_active(times.index(policy.freshness)) hbox.pack_start(gtk.Label('Freshness:'), False, True, 0) hbox.pack_start(freshness, True, True, 2) def set_freshness(combo): policy.freshness = freshness_levels[freshness.get_active()].time policy.save_config() policy.recalculate() freshness.connect('changed', set_freshness) button = gtk.Button('Refresh all now') def refresh_all(b): for x in policy.walk_interfaces(): policy.begin_iface_download(x, True) button.connect('clicked', refresh_all) hbox.pack_start(button, False, True, 2) hbox.show_all() # Tree view self.browser = InterfaceBrowser() self.vbox.pack_start(self.browser, True, True, 0) self.browser.show() # Select versions hbox = gtk.HBox(False, 2) self.vbox.pack_start(hbox, False, True, 0) hbox.set_border_width(4) button = gtk.Button() self.browser.edit_properties.connect_proxy(button) hbox.pack_start(button, False, True, 0) stable_toggle = gtk.CheckButton('Help test new versions') hbox.pack_start(stable_toggle, False, True, 0) tips.set_tip( stable_toggle, "Try out new versions as soon as they are available, instead of " "waiting for them to be marked as 'stable'. " "This sets the default policy. Click on 'Interface Properties...' " "to set the policy for an individual interface.") stable_toggle.set_active(policy.help_with_testing) def toggle_stability(toggle): policy.help_with_testing = toggle.get_active() policy.save_config() policy.recalculate() stable_toggle.connect('toggled', toggle_stability) hbox.show_all() # Progress bar self.progress = gtk.ProgressBar() self.vbox.pack_start(self.progress, False, True, 0) # Responses self.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP) self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL) self.add_button(gtk.STOCK_EXECUTE, gtk.RESPONSE_OK) self.set_default_response(gtk.RESPONSE_OK) def response(dialog, resp): if resp == gtk.RESPONSE_CANCEL: self.destroy() elif resp == gtk.RESPONSE_OK: import download_box download_box.download_and_run(self, prog_args) elif resp == gtk.RESPONSE_HELP: gui_help.display() self.connect('response', response)