示例#1
0
class MainWindow(Dialog):
    progress = None
    browser = None

    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)