⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 settingswindow.py

📁 bittorrent source by python. please enjoy
💻 PY
📖 第 1 页 / 共 2 页
字号:
            self.ip_field = IPValidator(self, 'ip',                                        self.settings_window.config,                                        self.settings_window.setfunc)            ip_label = ElectroStaticText(self, wx.ID_ANY,                                     _("(Has no effect unless you are on the\nsame local network as the tracker)"))            # sizers            self.ip_box_sizer = wx.StaticBoxSizer(self.ip_box, wx.VERTICAL)            self.ip_box_sizer.Add(self.ip_field, flag=wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW, border=SPACING)            self.ip_box_sizer.Add(ip_label, flag=wx.ALL, border=SPACING)            self.sizer.Add(self.ip_box_sizer, flag=wx.GROW)    def bandwidth_management_callback(self):        enable = not self.autodetect.GetValue()        if enable:            self.up_rate_slider.LoadValue()            self.down_rate_slider.LoadValue()        self.up_rate_slider.Enable(enable)        self.down_rate_slider.Enable(enable)class AppearanceSettingsPanel(SettingsPanel):    label = _("Appearance")    pb_config_key = 'progressbar_style'    # sample data    sample_value = 0.4    sample_data = {'h': SparseSet(xrange(0, 80)),                   't': SparseSet(xrange(80, 100)),                   }    for i in range(20,0,-1):        s = SparseSet()        s.add(200-i*5, 200-(i-1)*5)        sample_data[i-1] = s    del i,s    def __init__(self, parent, *a, **k):        SettingsPanel.__init__(self, parent, *a, **k)        # widgets        self.gauge_box = wx.StaticBox(self, label=_("Progress bar style:"))        self.gauge_sizer = wx.StaticBoxSizer(self.gauge_box, wx.VERTICAL)        self.null_radio = wx.RadioButton(self,                                         label=_("&None (just show percent complete)"),                                         style=wx.RB_GROUP)        self.null_radio.value = 0        self.simple_radio = wx.RadioButton(self,                                           label=_("&Ordinary progress bar"))        self.simple_radio.value = 1        self.simple_sample = self.new_sample(SimpleDownloadGauge, 1)        self.moderate_radio = wx.RadioButton(self,                                             label=_("&Detailed progress bar"))        self.moderate_radio.value = 2        msg = _("(shows the percentage of complete, transferring, available and missing pieces in the torrent)")        if not text_wrappable:            half = len(msg)//2            for i in xrange(half):                if msg[half+i] == ' ':                    msg = msg[:half+i+1] + '\n' + msg[half+i+1:]                    break                elif msg[half-i] == ' ':                    msg = msg[:half-i+1] + '\n' + msg[half-i+1:]                    break        self.moderate_text = ElectroStaticText(self, wx.ID_ANY, msg)        if text_wrappable: self.moderate_text.Wrap(250)        self.moderate_sample = self.new_sample(ModerateDownloadGauge, 2)        self.fancy_radio = wx.RadioButton(self,                                          label=_("&Piece bar"))        self.fancy_radio.value = 3        self.fancy_text = ElectroStaticText(self, wx.ID_ANY,                                        _("(shows the status of each piece in the torrent)"))        if text_wrappable: self.fancy_text.Wrap(250)        # generate random sample data        r = set(xrange(200))         self.sample_data = {}        for key, count in (('h',80), ('t',20)) + tuple([(i,5) for i in range(19)]):            self.sample_data[key] = SparseSet()            for d in random.sample(r, count):                self.sample_data[key].add(d)                r.remove(d)        for d in r:            self.sample_data[0].add(d)        self.fancy_sample = self.new_sample(FancyDownloadGauge, 3)        # sizers        gauge = wx.TOP|wx.LEFT|wx.RIGHT        extra = wx.TOP|wx.LEFT|wx.RIGHT|wx.GROW        self.gauge_sizer.Add(self.null_radio     , flag=gauge, border=SPACING)        self.gauge_sizer.AddSpacer((SPACING, SPACING))        self.gauge_sizer.Add(self.simple_radio   , flag=gauge, border=SPACING)        self.gauge_sizer.Add(self.simple_sample  , flag=extra, border=SPACING)        self.gauge_sizer.AddSpacer((SPACING, SPACING))        self.gauge_sizer.Add(self.moderate_radio , flag=gauge, border=SPACING)        self.gauge_sizer.Add(self.moderate_sample, flag=extra, border=SPACING)        self.gauge_sizer.Add(self.moderate_text  , flag=extra, border=SPACING)        self.gauge_sizer.AddSpacer((SPACING, SPACING))        self.gauge_sizer.Add(self.fancy_radio    , flag=gauge, border=SPACING)        self.gauge_sizer.Add(self.fancy_sample   , flag=extra, border=SPACING)        self.gauge_sizer.Add(self.fancy_text     , flag=extra, border=SPACING)        self.sizer.AddFirst(self.gauge_sizer, flag=wx.GROW)        # setup        self.pb_group = (self.null_radio, self.simple_radio, self.moderate_radio, self.fancy_radio)        for r in self.pb_group:            r.Bind(wx.EVT_RADIOBUTTON, self.radio)            if r.value == wx.the_app.config[self.pb_config_key]:                r.SetValue(True)            else:                r.SetValue(False)        # toolbar widgets        self.toolbar_box = wx.StaticBox(self, label=_("Toolbar style:"))        self.toolbar_text = CheckButton(self, _("Show text"),                                        self.settings_window,                                        'toolbar_text',                                        self.settings_window.config['toolbar_text'],                                        wx.the_app.reset_toolbar_style)        self.toolbar_size_text = ElectroStaticText(self, id=wx.ID_ANY, label=_("Icon size:"))        self.toolbar_size_choice = wx.Choice(self, choices=(_("Small"), _("Normal"), _("Large")))        self.toolbar_config_to_choice(wx.the_app.config['toolbar_size'])        self.toolbar_size_choice.Bind(wx.EVT_CHOICE, self.toolbar_choice_to_config)        # toolbar sizers        self.toolbar_sizer = HSizer()        self.toolbar_sizer.AddFirst(self.toolbar_text, flag=wx.ALIGN_CENTER_VERTICAL)        line = wx.StaticLine(self, id=wx.ID_ANY, style=wx.VERTICAL)        self.toolbar_sizer.Add(line,                               flag=wx.ALIGN_CENTER_VERTICAL|wx.GROW)        self.toolbar_sizer.Add(self.toolbar_size_text, flag=wx.ALIGN_CENTER_VERTICAL)        self.toolbar_sizer.Add(self.toolbar_size_choice, flag=wx.GROW|wx.ALIGN_TOP, proportion=1)        self.toolbar_box_sizer = wx.StaticBoxSizer(self.toolbar_box, wx.VERTICAL)        self.toolbar_box_sizer.Add(self.toolbar_sizer, flag=wx.GROW)        self.sizer.Add(self.toolbar_box_sizer, flag=wx.GROW)        if wx.the_app.config['debug']:            # the T-Word widgets            self.themes = []            self.theme_choice = wx.Choice(self, choices=[])            self.theme_choice.Enable(False)            self.theme_choice.Bind(wx.EVT_CHOICE, self.set_theme)            self.restart_hint = ElectroStaticText(self, id=wx.ID_ANY, label=_("(Changing themes requires restart.)"))            self.theme_static_box = wx.StaticBox(self, label=_("Theme:"))            # the T-Word sizers            self.theme_sizer = VSizer()            self.theme_sizer.AddFirst(self.theme_choice, flag=wx.GROW|wx.ALIGN_RIGHT)            self.theme_sizer.Add(self.restart_hint, flag=wx.GROW|wx.ALIGN_RIGHT)            self.theme_static_box_sizer = wx.StaticBoxSizer(self.theme_static_box, wx.VERTICAL)            self.theme_static_box_sizer.Add(self.theme_sizer, flag=wx.GROW)            self.sizer.Add(self.theme_static_box_sizer, flag=wx.GROW)            self.get_themes()    def get_themes(self):        def _callback(themes):            self.themes.extend(themes)            self.theme_choice.AppendItems(strings=themes)            curr_theme = wx.the_app.config['theme']            if curr_theme not in self.themes:                self.settings_window.setfunc('theme', 'default')                curr_theme = wx.the_app.config['theme']            curr_idx = self.themes.index(curr_theme)            self.theme_choice.SetSelection(curr_idx)            self.theme_choice.Enable(True)        def callback(themes):            gui_wrap(_callback, themes)        df = list_themes()        df.addCallback(callback)        df.getResult()    def set_theme(self, e):        i = self.theme_choice.GetSelection()        t = self.themes[i]        self.settings_window.setfunc('theme', t)    def toolbar_choice_to_config(self, *a):        i = self.toolbar_size_choice.GetSelection(),        size = 8*(i[0]+2)        self.settings_window.setfunc('toolbar_size', size)        wx.the_app.reset_toolbar_style()    def toolbar_config_to_choice(self, value):        i = (value//8) - 2        self.toolbar_size_choice.SetSelection(i)    def new_sample(self, sample_class, value):        sample = sample_class(self, size=wx.Size(-1, -1), style=wx.SUNKEN_BORDER)        # I happen to know 200 is the right number because I looked.        sample.SetValue(self.sample_value, 'running', (200, 0, self.sample_data))        sample.Bind(wx.EVT_LEFT_DOWN, self.sample)        sample.Bind(wx.EVT_CONTEXT_MENU, None)        sample.value = value        return sample    def radio(self, event):        widget = event.GetEventObject()        value = widget.value        self.settings_window.setfunc(self.pb_config_key, value)        gui_wrap(wx.the_app.main_window.torrentlist.change_gauge_type, value)    def sample(self, event):        self.radio(event)        pb = event.GetEventObject()        value = pb.value        for p in self.pb_group:            if p.value == value:                p.SetValue(True)                breakclass LanguageSettingsPanel(LanguageSettings):    label = _("Language")    def __init__(self, parent, *a, **k):        LanguageSettings.__init__(self, parent, *a, **k)        parent.AddPage(self, self.label)        self.settings_window = parent.GetParent()class SettingsWindow(BTDialog):    use_listbook = False    def __init__(self, main_window, config, setfunc):        BTDialog.__init__(self, main_window, style=wx.DEFAULT_DIALOG_STYLE|wx.CLIP_CHILDREN|wx.WANTS_CHARS)        self.Bind(wx.EVT_CLOSE, self.close)        self.Bind(wx.EVT_CHAR, self.key)        self.SetTitle(_("%s Settings")%app_name)        self.setfunc = setfunc        self.config = config        if self.use_listbook:            self.notebook = wx.Listbook(self)            # BUG use real icons            imagelist = wx.ImageList(32, 32)            p = os.path.join(image_root, 'logo', 'bittorrent_icon_32.png')            assert os.access(p, os.F_OK)            bitmap = wx.Bitmap(p, type=wx.BITMAP_TYPE_ANY)            assert bitmap.Ok()            imagelist.Add(bitmap)            # end bug            self.notebook.AssignImageList(imagelist)        else:            self.notebook = wx.Notebook(self)        self.notebook.Bind(wx.EVT_CHAR, self.key)        self.general_panel    =    GeneralSettingsPanel(self.notebook)        self.saving_panel     =     SavingSettingsPanel(self.notebook)        self.network_panel    =    NetworkSettingsPanel(self.notebook)        self.appearance_panel = AppearanceSettingsPanel(self.notebook)        self.language_panel   =   LanguageSettingsPanel(self.notebook)        if self.use_listbook:            for i in range(self.notebook.GetPageCount()):                # BUG use real icons                self.notebook.SetPageImage(i, 0)        self.vbox = VSizer()        self.vbox.AddFirst(self.notebook, proportion=1, flag=wx.GROW)        self.vbox.Layout()        self.SetSizerAndFit(self.vbox)        self.SetFocus()    def key(self, event):        c = event.GetKeyCode()        if c == wx.WXK_ESCAPE:            self.close()        event.Skip()    def get_save_in(self, *e):        d = wx.DirDialog(self, "", style=wx.DD_DEFAULT_STYLE|wx.DD_NEW_DIR_BUTTON)        d.SetPath(self.config['save_in'])        if d.ShowModal() == wx.ID_OK:            path = d.GetPath()            self.saving_panel.save_in_button.SetLabel(path)            self.setfunc('save_in', path)    def start_torrent_behavior_changed(self, event):        widget = event.GetEventObject()        state_name = widget.state_name        self.setfunc('start_torrent_behavior', state_name)    def close(self, *e):        self.Hide()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -