示例#1
0
	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
示例#2
0
    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)