def plugin_prefs(parent, cmdr, is_beta): ''' Prepare the preferences tab in the settings window that appears ''' # Skeletony bits this.frame = nb.Frame(parent) frameTop = nb.Frame(this.frame) frameTop.grid(row=0, column=0, sticky=tk.W) frameBottom = nb.Frame(this.frame) frameBottom.grid(row=1, column=0, sticky=tk.SW) #End skeleton #headline this.evacCount = tk.IntVar(value=config.getint( "EvacCountSetting")) # Retrieve saved value from config frame = nb.Frame(parent) # Should we display totals? evacuatedTotal = nb.Checkbutton(frameBottom, variable=evacuatedTotalOption, text="Calculate totals") evacuatedTotal.var = evacuatedTotalOption evacuatedTotal.grid(row=0, column=0, padx=this.PADX * 2, sticky=tk.W) resetButton = nb.Button(frameBottom, text="Reset Totals", command=resetTotalEvacuated) resetButton.grid(row=1, column=0, padx=this.PADX * 4, pady=5, sticky=tk.W) # Calculate numbers for current session? evacuatedSession = nb.Checkbutton( frameBottom, variable=evacuatedSessionOption, text="Calculate totals for current session") evacuatedSession.var = evacuatedSessionOption evacuatedSession.grid(row=2, column=0, padx=this.PADX * 2, sticky=tk.W) # radio button value: 1 = calculate for ED session; 0 = calculate for EDMC session evacuatedSessionEdmc = nb.Radiobutton(frameBottom, variable=evacuatedSessionSelected, value=0, text="EDMC session") evacuatedSessionEdmc.var = evacuatedSessionSelected evacuatedSessionEdmc.grid(row=3, column=0, padx=this.PADX * 4, sticky=tk.W) evacuatedSessionElite = nb.Radiobutton(frameBottom, variable=evacuatedSessionSelected, value=1, text="Elite session") evacuatedSessionElite.var = evacuatedSessionSelected evacuatedSessionElite.grid(row=4, column=0, padx=this.PADX * 4, sticky=tk.W) # Search and Rescue settings nb.Label(frameBottom, text="Search and rescue options").grid(row=5, column=0, padx=this.PADX, sticky=tk.W) sarBlackBox = nb.Checkbutton(frameBottom, variable=blackBoxOption, text="Track black boxes") sarBlackBox.var = blackBoxOption sarBlackBox.grid(row=6, column=0, padx=this.PADX * 2, sticky=tk.W) sarWreckage = nb.Checkbutton(frameBottom, variable=wreckageOption, text="Track wreckage") sarWreckage.var = wreckageOption sarWreckage.grid(row=7, column=0, padx=this.PADX * 2, sticky=tk.W) sarEscapePod = nb.Checkbutton(frameBottom, variable=occupiedPodOption, text="Track occupied escape pods") sarEscapePod.var = occupiedPodOption sarEscapePod.grid(row=8, column=0, padx=this.PADX * 2, sticky=tk.W) sarPersonalEffects = nb.Checkbutton(frameBottom, variable=personalEffectsOption, text="Track personal effects") sarPersonalEffects.var = personalEffectsOption sarPersonalEffects.grid(row=9, column=0, padx=this.PADX * 2, sticky=tk.W) sarDamagedPod = nb.Checkbutton(frameBottom, variable=damagedPodOption, text="Track damaged pods") sarDamagedPod.var = damagedPodOption sarDamagedPod.grid(row=10, column=0, padx=this.PADX * 2, sticky=tk.W) sarPrisoners = nb.Checkbutton(frameBottom, variable=prisonersOption, text="Track political prisoners") sarPrisoners.var = prisonersOption sarPrisoners.grid(row=11, column=0, padx=this.PADX * 2, sticky=tk.W) sarEncrypted = nb.Checkbutton(frameBottom, variable=correspondenceOption, text="Track encrypted correspondence") sarEncrypted.var = correspondenceOption sarEncrypted.grid(row=12, column=0, padx=this.PADX * 2, sticky=tk.W) setStateRadioButtons(evacuatedSessionEdmc, evacuatedSessionElite) evacuatedSession.config(command=partial( setStateRadioButtons, evacuatedSessionEdmc, evacuatedSessionElite)) nb.Label(frameBottom).grid(row=13) # spacer nb.Label(frameBottom).grid(row=14) # spacer nb.Label(frameBottom, text="Plugin version: {0}".format( this.VERSION)).grid(row=15, column=0, padx=this.PADX, sticky=tk.W) return this.frame
def plugin_prefs(self, parent, cmdr, is_beta): "Called to get a tk Frame for the settings dialog." frame = nb.Frame(parent) return self.__populate_plugin_prefs_frame(frame)
def __init__(self, parent, callback): tk.Toplevel.__init__(self, parent) self.parent = parent self.callback = callback self.title(platform=='darwin' and _('Preferences') or _('Settings')) if parent.winfo_viewable(): self.transient(parent) # position over parent if platform!='darwin' or parent.winfo_rooty()>0: # http://core.tcl.tk/tk/tktview/c84f660833546b1b84e7 self.geometry("+%d+%d" % (parent.winfo_rootx(), parent.winfo_rooty())) # remove decoration if platform=='win32': self.attributes('-toolwindow', tk.TRUE) elif platform=='darwin': # http://wiki.tcl.tk/13428 parent.call('tk::unsupported::MacWindowStyle', 'style', self, 'utility') self.resizable(tk.FALSE, tk.FALSE) style = ttk.Style() frame = ttk.Frame(self) frame.grid(sticky=tk.NSEW) notebook = nb.Notebook(frame) PADX = 10 BUTTONX = 12 # indent Checkbuttons and Radiobuttons PADY = 2 # close spacing credframe = nb.Frame(notebook) credframe.columnconfigure(1, weight=1) nb.Label(credframe, text=_('Credentials')).grid(padx=PADX, sticky=tk.W) # Section heading in settings ttk.Separator(credframe, orient=tk.HORIZONTAL).grid(columnspan=2, padx=PADX, pady=PADY, sticky=tk.EW) nb.Label(credframe, text=_('Please log in with your Elite: Dangerous account details')).grid(padx=PADX, columnspan=2, sticky=tk.W) # Use same text as E:D Launcher's login dialog nb.Label(credframe, text=_('Username (Email)')).grid(row=10, padx=PADX, sticky=tk.W) # Use same text as E:D Launcher's login dialog nb.Label(credframe, text=_('Password')).grid(row=11, padx=PADX, sticky=tk.W) # Use same text as E:D Launcher's login dialog self.username = nb.Entry(credframe) self.username.insert(0, config.get('username') or '') self.username.grid(row=10, column=1, padx=PADX, pady=PADY, sticky=tk.EW) self.username.focus_set() self.password = nb.Entry(credframe, show=u'•') self.password.insert(0, config.get('password') or '') self.password.grid(row=11, column=1, padx=PADX, pady=PADY, sticky=tk.EW) nb.Label(credframe).grid(sticky=tk.W) # big spacer nb.Label(credframe, text=_('Privacy')).grid(padx=PADX, sticky=tk.W) # Section heading in settings ttk.Separator(credframe, orient=tk.HORIZONTAL).grid(columnspan=2, padx=PADX, pady=PADY, sticky=tk.EW) self.out_anon= tk.IntVar(value = config.getint('anonymous') and 1) nb.Label(credframe, text=_('How do you want to be identified in the saved data')).grid(columnspan=2, padx=PADX, sticky=tk.W) nb.Radiobutton(credframe, text=_('Cmdr name'), variable=self.out_anon, value=0).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) # Privacy setting nb.Radiobutton(credframe, text=_('Pseudo-anonymized ID'), variable=self.out_anon, value=1).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) # Privacy setting notebook.add(credframe, text=_('Identity')) # Tab heading in settings outframe = nb.Frame(notebook) outframe.columnconfigure(0, weight=1) output = config.getint('output') or (config.OUT_MKT_EDDN | config.OUT_SYS_EDDN | config.OUT_SHIP_EDS) # default settings nb.Label(outframe, text=_('Please choose what data to save')).grid(columnspan=2, padx=PADX, sticky=tk.W) self.out_csv = tk.IntVar(value = (output & config.OUT_MKT_CSV ) and 1) nb.Checkbutton(outframe, text=_('Market data in CSV format file'), variable=self.out_csv, command=self.outvarchanged).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_bpc = tk.IntVar(value = (output & config.OUT_MKT_BPC ) and 1) nb.Checkbutton(outframe, text=_("Market data in Slopey's BPC format file"), variable=self.out_bpc, command=self.outvarchanged).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_td = tk.IntVar(value = (output & config.OUT_MKT_TD ) and 1) nb.Checkbutton(outframe, text=_('Market data in Trade Dangerous format file'), variable=self.out_td, command=self.outvarchanged).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_ship_eds= tk.IntVar(value = (output & config.OUT_SHIP_EDS) and 1) nb.Checkbutton(outframe, text=_('Ship loadout in E:D Shipyard format file'), variable=self.out_ship_eds, command=self.outvarchanged).grid(columnspan=2, padx=BUTTONX, pady=(5,0), sticky=tk.W) self.out_ship_coriolis= tk.IntVar(value = (output & config.OUT_SHIP_CORIOLIS) and 1) nb.Checkbutton(outframe, text=_('Ship loadout in Coriolis format file'), variable=self.out_ship_coriolis, command=self.outvarchanged).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_auto = tk.IntVar(value = 0 if output & config.OUT_MKT_MANUAL else 1) # inverted self.out_auto_button = nb.Checkbutton(outframe, text=_('Automatically update on docking'), variable=self.out_auto, command=self.outvarchanged) # Output setting self.out_auto_button.grid(columnspan=2, padx=BUTTONX, pady=(5,0), sticky=tk.W) self.outdir_label = nb.Label(outframe, text=_('File location')+':') # Section heading in settings self.outdir_label.grid(padx=BUTTONX, pady=(5,0), sticky=tk.W) self.outdir = nb.Entry(outframe, takefocus=False) if config.get('outdir').startswith(config.home): self.outdir.insert(0, '~' + config.get('outdir')[len(config.home):]) else: self.outdir.insert(0, config.get('outdir')) self.outdir.grid(row=20, padx=(PADX,0), sticky=tk.EW) self.outbutton = nb.Button(outframe, text=(platform=='darwin' and _('Change...') or # Folder selection button on OSX _('Browse...')), # Folder selection button on Windows command = lambda:self.filebrowse(_('File location'), self.outdir)) self.outbutton.grid(row=20, column=1, padx=PADX, sticky=tk.NSEW) nb.Frame(outframe).grid(pady=5) # bottom spacer notebook.add(outframe, text=_('Output')) # Tab heading in settings eddnframe = nb.Frame(notebook) HyperlinkLabel(eddnframe, text='Elite Dangerous Data Network', background=nb.Label().cget('background'), url='https://github.com/jamesremuscat/EDDN/wiki', underline=True).grid(padx=PADX, sticky=tk.W) # Don't translate self.eddn_station= tk.IntVar(value = (output & config.OUT_MKT_EDDN) and 1) nb.Checkbutton(eddnframe, text=_('Send station data to the Elite Dangerous Data Network'), variable=self.eddn_station, command=self.outvarchanged).grid(padx=BUTTONX, pady=(5,0), sticky=tk.W) # Output setting self.eddn_auto_button = nb.Checkbutton(eddnframe, text=_('Automatically update on docking'), variable=self.out_auto, command=self.outvarchanged) # Output setting self.eddn_auto_button.grid(padx=BUTTONX, sticky=tk.W) self.eddn_system = tk.IntVar(value = (output & config.OUT_SYS_EDDN) and 1) self.eddn_system_button = nb.Checkbutton(eddnframe, text=_('Send system and scan data to the Elite Dangerous Data Network'), variable=self.eddn_system, command=self.outvarchanged) # Output setting new in E:D 2.2 self.eddn_system_button.grid(padx=BUTTONX, pady=(5,0), sticky=tk.W) self.eddn_delay= tk.IntVar(value = (output & config.OUT_SYS_DELAY) and 1) self.eddn_delay_button = nb.Checkbutton(eddnframe, text=_('Delay sending until docked'), variable=self.eddn_delay, command=self.outvarchanged) # Output setting under 'Send system and scan data to the Elite Dangerous Data Network' new in E:D 2.2 self.eddn_delay_button.grid(padx=BUTTONX, sticky=tk.W) notebook.add(eddnframe, text='EDDN') # Not translated edsmframe = nb.Frame(notebook) edsmframe.columnconfigure(1, weight=1) HyperlinkLabel(edsmframe, text='Elite Dangerous Star Map', background=nb.Label().cget('background'), url='https://www.edsm.net/', underline=True).grid(columnspan=2, padx=PADX, sticky=tk.W) # Don't translate self.edsm_log = tk.IntVar(value = (output & config.OUT_SYS_EDSM) and 1) self.edsm_log_button = nb.Checkbutton(edsmframe, text=_('Send flight log to Elite Dangerous Star Map'), variable=self.edsm_log, command=self.outvarchanged) self.edsm_log_button.grid(columnspan=2, padx=BUTTONX, pady=(5,0), sticky=tk.W) nb.Label(edsmframe).grid(sticky=tk.W) # big spacer self.edsm_label = HyperlinkLabel(edsmframe, text=_('Elite Dangerous Star Map credentials'), background=nb.Label().cget('background'), url='https://www.edsm.net/settings/api', underline=True) # Section heading in settings self.edsm_label.grid(columnspan=2, padx=PADX, sticky=tk.W) self.edsm_cmdr_label = nb.Label(edsmframe, text=_('Commander Name')) # EDSM setting self.edsm_cmdr_label.grid(row=10, padx=PADX, sticky=tk.W) self.edsm_cmdr = nb.Entry(edsmframe) self.edsm_cmdr.insert(0, config.get('edsm_cmdrname') or '') self.edsm_cmdr.grid(row=10, column=1, padx=PADX, pady=PADY, sticky=tk.EW) self.edsm_apikey_label = nb.Label(edsmframe, text=_('API Key')) # EDSM setting self.edsm_apikey_label.grid(row=11, padx=PADX, sticky=tk.W) self.edsm_apikey = nb.Entry(edsmframe) self.edsm_apikey.insert(0, config.get('edsm_apikey') or '') self.edsm_apikey.grid(row=11, column=1, padx=PADX, pady=PADY, sticky=tk.EW) notebook.add(edsmframe, text='EDSM') # Not translated configframe = nb.Frame(notebook) configframe.columnconfigure(1, weight=1) self.logdir = nb.Entry(configframe, takefocus=False) logdir = config.get('journaldir') or config.default_journal_dir if not logdir: pass elif logdir.startswith(config.home): self.logdir.insert(0, '~' + logdir[len(config.home):]) else: self.logdir.insert(0, logdir) self.logdir['state'] = 'readonly' if platform != 'darwin': # Apple's SMB implementation is way too flaky - no filesystem events and bogus NULLs nb.Label(configframe, text = _('E:D journal file location')+':').grid(columnspan=3, padx=PADX, sticky=tk.W) # Location of the new Journal file in E:D 2.2 self.logdir.grid(row=10, columnspan=2, padx=(PADX,0), sticky=tk.EW) self.logbutton = nb.Button(configframe, text=(platform=='darwin' and _('Change...') or # Folder selection button on OSX _('Browse...')), # Folder selection button on Windows command = lambda:self.filebrowse(_('E:D journal file location'), self.logdir)) self.logbutton.grid(row=10, column=2, padx=PADX, sticky=tk.EW) if config.default_journal_dir: nb.Button(configframe, text=_('Default'), command=self.logdir_reset, state = config.get('journaldir') and tk.NORMAL or tk.DISABLED).grid(column=2, padx=PADX, pady=(5,0), sticky=tk.EW) # Appearance theme and language setting if platform == 'win32': ttk.Separator(configframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY*8, sticky=tk.EW) if platform in ['darwin','win32']: self.hotkey_code = config.getint('hotkey_code') self.hotkey_mods = config.getint('hotkey_mods') self.hotkey_only = tk.IntVar(value = not config.getint('hotkey_always')) self.hotkey_play = tk.IntVar(value = not config.getint('hotkey_mute')) nb.Label(configframe, text = platform=='darwin' and _('Keyboard shortcut') or # Hotkey/Shortcut settings prompt on OSX _('Hotkey') # Hotkey/Shortcut settings prompt on Windows ).grid(row=20, padx=PADX, sticky=tk.W) if platform == 'darwin' and not was_accessible_at_launch: if AXIsProcessTrusted(): nb.Label(configframe, text = _('Re-start {APP} to use shortcuts').format(APP=applongname), foreground='firebrick').grid(padx=PADX, sticky=tk.W) # Shortcut settings prompt on OSX else: nb.Label(configframe, text = _('{APP} needs permission to use shortcuts').format(APP=applongname), foreground='firebrick').grid(columnspan=3, padx=PADX, sticky=tk.W) # Shortcut settings prompt on OSX nb.Button(configframe, text = _('Open System Preferences'), command = self.enableshortcuts).grid(column=2, padx=PADX, sticky=tk.E) # Shortcut settings button on OSX else: self.hotkey_text = nb.Entry(configframe, width = (platform == 'darwin' and 20 or 30), justify=tk.CENTER) self.hotkey_text.insert(0, self.hotkey_code and hotkeymgr.display(self.hotkey_code, self.hotkey_mods) or _('None')) # No hotkey/shortcut currently defined self.hotkey_text.bind('<FocusIn>', self.hotkeystart) self.hotkey_text.bind('<FocusOut>', self.hotkeyend) self.hotkey_text.grid(row=20, column=1, columnspan=2, padx=PADX, pady=(5,0), sticky=tk.W) self.hotkey_only_btn = nb.Checkbutton(configframe, text=_('Only when Elite: Dangerous is the active app'), variable=self.hotkey_only, state = self.hotkey_code and tk.NORMAL or tk.DISABLED) # Hotkey/Shortcut setting self.hotkey_only_btn.grid(columnspan=3, padx=PADX, pady=(5,0), sticky=tk.W) self.hotkey_play_btn = nb.Checkbutton(configframe, text=_('Play sound'), variable=self.hotkey_play, state = self.hotkey_code and tk.NORMAL or tk.DISABLED) # Hotkey/Shortcut setting self.hotkey_play_btn.grid(columnspan=3, padx=PADX, sticky=tk.W) notebook.add(configframe, text=_('Configuration')) # Tab heading in settings self.languages = Translations().available_names() self.lang = tk.StringVar(value = self.languages.get(config.get('language'), _('Default'))) # Appearance theme and language setting self.always_ontop = tk.BooleanVar(value = config.getint('always_ontop')) self.theme = tk.IntVar(value = config.getint('theme') and 1 or 0) self.theme_colors = [config.get('dark_text'), config.get('dark_highlight')] self.theme_prompts = [ _('Normal text'), # Dark theme color setting _('Highlighted text'), # Dark theme color setting ] themeframe = nb.Frame(notebook) themeframe.columnconfigure(2, weight=1) nb.Label(themeframe, text=_('Language')).grid(row=10, padx=PADX, sticky=tk.W) # Appearance setting prompt self.lang_button = nb.OptionMenu(themeframe, self.lang, self.lang.get(), *self.languages.values()) self.lang_button.grid(row=10, column=1, columnspan=2, padx=PADX, sticky=tk.W) ttk.Separator(themeframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY*8, sticky=tk.EW) nb.Label(themeframe, text=_('Theme')).grid(columnspan=3, padx=PADX, sticky=tk.W) # Appearance setting nb.Radiobutton(themeframe, text=_('Default'), variable=self.theme, value=0, command=self.themevarchanged).grid(columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance theme and language setting nb.Radiobutton(themeframe, text=_('Dark'), variable=self.theme, value=1, command=self.themevarchanged).grid(columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance theme setting self.theme_label_0 = nb.Label(themeframe, text=self.theme_prompts[0]) self.theme_label_0.grid(row=20, padx=PADX, sticky=tk.W) self.theme_button_0 = nb.ColoredButton(themeframe, text=_('Station'), background='grey4', command=lambda:self.themecolorbrowse(0)) # Main window self.theme_button_0.grid(row=20, column=1, padx=PADX, pady=PADY, sticky=tk.NSEW) self.theme_label_1 = nb.Label(themeframe, text=self.theme_prompts[1]) self.theme_label_1.grid(row=21, padx=PADX, sticky=tk.W) self.theme_button_1 = nb.ColoredButton(themeframe, text=' Hutton Orbital ', background='grey4', command=lambda:self.themecolorbrowse(1)) # Do not translate self.theme_button_1.grid(row=21, column=1, padx=PADX, pady=PADY, sticky=tk.NSEW) ttk.Separator(themeframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY*8, sticky=tk.EW) self.ontop_button = nb.Checkbutton(themeframe, text=_('Always on top'), variable=self.always_ontop, command=self.themevarchanged) self.ontop_button.grid(columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance setting nb.Label(themeframe).grid(sticky=tk.W) # big spacer notebook.add(themeframe, text=_('Appearance')) # Tab heading in settings # build plugin prefs tabs for plugname in plug.PLUGINS: plugframe = plug.get_plugin_pref(plugname, notebook) if plugframe: notebook.add(plugframe, text=plugname) if platform=='darwin': self.protocol("WM_DELETE_WINDOW", self.apply) # close button applies changes else: buttonframe = ttk.Frame(frame) buttonframe.grid(padx=PADX, pady=PADX, sticky=tk.NSEW) buttonframe.columnconfigure(0, weight=1) ttk.Label(buttonframe).grid(row=0, column=0) # spacer button = ttk.Button(buttonframe, text=_('OK'), command=self.apply) button.grid(row=0, column=1, sticky=tk.E) button.bind("<Return>", lambda event:self.apply()) self.protocol("WM_DELETE_WINDOW", self._destroy) # Selectively disable buttons depending on output settings self.outvarchanged() self.themevarchanged() # disable hotkey for the duration hotkeymgr.unregister() # wait for window to appear on screen before calling grab_set self.parent.wm_attributes('-topmost', 0) # needed for dialog to appear ontop of parent on OSX & Linux self.wait_visibility() self.grab_set()
def __init__(self, parent, callback): tk.Toplevel.__init__(self, parent) self.parent = parent self.callback = callback self.title(platform == 'darwin' and _('Preferences') or _('Settings')) if parent.winfo_viewable(): self.transient(parent) # position over parent if platform != 'darwin' or parent.winfo_rooty( ) > 0: # http://core.tcl.tk/tk/tktview/c84f660833546b1b84e7 self.geometry("+%d+%d" % (parent.winfo_rootx(), parent.winfo_rooty())) # remove decoration if platform == 'win32': self.attributes('-toolwindow', tk.TRUE) elif platform == 'darwin': # http://wiki.tcl.tk/13428 parent.call('tk::unsupported::MacWindowStyle', 'style', self, 'utility') self.resizable(tk.FALSE, tk.FALSE) self.cmdr = False # Note if Cmdr changes in the Journal self.is_beta = False # Note if Beta status changes in the Journal self.cmdrchanged_alarm = None frame = ttk.Frame(self) frame.grid(sticky=tk.NSEW) notebook = nb.Notebook(frame) notebook.bind('<<NotebookTabChanged>>', self.outvarchanged) # Recompute on tab change PADX = 10 BUTTONX = 12 # indent Checkbuttons and Radiobuttons PADY = 2 # close spacing credframe = nb.Frame(notebook) credframe.columnconfigure(1, weight=1) nb.Label(credframe, text=_('Credentials')).grid( padx=PADX, sticky=tk.W) # Section heading in settings ttk.Separator(credframe, orient=tk.HORIZONTAL).grid(columnspan=2, padx=PADX, pady=PADY, sticky=tk.EW) self.cred_label = nb.Label(credframe) self.cred_label.grid(padx=PADX, columnspan=2, sticky=tk.W) self.cmdr_label = nb.Label(credframe, text=_('Cmdr')) # Main window self.cmdr_label.grid(row=10, padx=PADX, sticky=tk.W) self.username_label = nb.Label( credframe, text=_('Username (Email)') ) # Use same text as E:D Launcher's login dialog self.username_label.grid(row=11, padx=PADX, sticky=tk.W) self.password_label = nb.Label( credframe, text=_('Password')) # Use same text as E:D Launcher's login dialog self.password_label.grid(row=12, padx=PADX, sticky=tk.W) self.token_label = nb.Label( credframe, text=_('Token')) # Use same text as E:D Launcher's login dialog self.token_label.grid(row=13, padx=PADX, sticky=tk.W) self.cmdr_text = nb.Label(credframe) self.cmdr_text.grid(row=10, column=1, padx=PADX, pady=PADY, sticky=tk.W) self.username = nb.Entry(credframe) self.username.grid(row=11, column=1, padx=PADX, pady=PADY, sticky=tk.EW) if monitor.cmdr: self.username.focus_set() self.password = nb.Entry(credframe, show=u'•') self.password.grid(row=12, column=1, padx=PADX, pady=PADY, sticky=tk.EW) token = config.get('token') or '42' # default self.token = nb.Entry(credframe) self.token.insert(10, token) self.token.grid(row=13, column=1, padx=PADX, pady=PADY, sticky=tk.EW) nb.Label(credframe).grid(sticky=tk.W) # big spacer nb.Label(credframe, text=_('Privacy')).grid( padx=PADX, sticky=tk.W) # Section heading in settings ttk.Separator(credframe, orient=tk.HORIZONTAL).grid(columnspan=2, padx=PADX, pady=PADY, sticky=tk.EW) self.out_anon = tk.IntVar(value=config.getint('anonymous') and 1) nb.Label( credframe, text=_('How do you want to be identified in the saved data')).grid( columnspan=2, padx=PADX, sticky=tk.W) nb.Radiobutton(credframe, text=_('Cmdr name'), variable=self.out_anon, value=0).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) # Privacy setting nb.Radiobutton(credframe, text=_('Pseudo-anonymized ID'), variable=self.out_anon, value=1).grid(columnspan=2, padx=BUTTONX, sticky=tk.W) # Privacy setting notebook.add(credframe, text=_('Identity')) # Tab heading in settings outframe = nb.Frame(notebook) outframe.columnconfigure(0, weight=1) output = config.getint('output') or config.OUT_SHIP # default settings self.out_label = nb.Label(outframe, text=_('Please choose what data to save')) self.out_label.grid(columnspan=2, padx=PADX, sticky=tk.W) self.out_csv = tk.IntVar(value=(output & config.OUT_MKT_CSV) and 1) self.out_csv_button = nb.Checkbutton( outframe, text=_('Market data in CSV format file'), variable=self.out_csv, command=self.outvarchanged) self.out_csv_button.grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_td = tk.IntVar(value=(output & config.OUT_MKT_TD) and 1) self.out_td_button = nb.Checkbutton( outframe, text=_('Market data in Trade Dangerous format file'), variable=self.out_td, command=self.outvarchanged) self.out_td_button.grid(columnspan=2, padx=BUTTONX, sticky=tk.W) self.out_ship = tk.IntVar(value=(output & config.OUT_SHIP and 1)) self.out_ship_button = nb.Checkbutton( outframe, text=_('Ship loadout'), variable=self.out_ship, command=self.outvarchanged) # Output setting self.out_ship_button.grid(columnspan=2, padx=BUTTONX, pady=(5, 0), sticky=tk.W) self.out_auto = tk.IntVar(value=0 if output & config.OUT_MKT_MANUAL else 1) # inverted self.out_auto_button = nb.Checkbutton( outframe, text=_('Automatically update on docking'), variable=self.out_auto, command=self.outvarchanged) # Output setting self.out_auto_button.grid(columnspan=2, padx=BUTTONX, pady=(5, 0), sticky=tk.W) self.outdir = tk.StringVar() self.outdir.set(config.get('outdir')) self.outdir_label = nb.Label(outframe, text=_('File location') + ':') # Section heading in settings self.outdir_label.grid(padx=PADX, pady=(5, 0), sticky=tk.W) self.outdir_entry = nb.Entry(outframe, takefocus=False) self.outdir_entry.grid(columnspan=2, padx=PADX, pady=(0, PADY), sticky=tk.EW) self.outbutton = nb.Button( outframe, text=( platform == 'darwin' and _('Change...') or # Folder selection button on OSX _('Browse...')), # Folder selection button on Windows command=lambda: self.filebrowse(_('File location'), self.outdir)) self.outbutton.grid(column=1, padx=PADX, pady=PADY, sticky=tk.NSEW) nb.Frame(outframe).grid(pady=5) # bottom spacer notebook.add(outframe, text=_('Output')) # Tab heading in settings # build plugin prefs tabs for plugin in plug.PLUGINS: plugframe = plugin.get_prefs(notebook, monitor.cmdr, monitor.is_beta) if plugframe: notebook.add(plugframe, text=plugin.name) configframe = nb.Frame(notebook) configframe.columnconfigure(1, weight=1) self.logdir = tk.StringVar() self.logdir.set( config.get('journaldir') or config.default_journal_dir or '') self.logdir_entry = nb.Entry(configframe, takefocus=False) nb.Label(configframe, text=_('E:D journal file location') + ':').grid( columnspan=4, padx=PADX, sticky=tk.W) # Location of the new Journal file in E:D 2.2 self.logdir_entry.grid(columnspan=4, padx=PADX, pady=(0, PADY), sticky=tk.EW) self.logbutton = nb.Button( configframe, text=( platform == 'darwin' and _('Change...') or # Folder selection button on OSX _('Browse...')), # Folder selection button on Windows command=lambda: self.filebrowse(_('E:D journal file location'), self.logdir)) self.logbutton.grid(row=10, column=3, padx=PADX, pady=PADY, sticky=tk.EW) if config.default_journal_dir: nb.Button( configframe, text=_('Default'), command=self.logdir_reset, state=config.get('journaldir') and tk.NORMAL or tk.DISABLED).grid( row=10, column=2, pady=PADY, sticky=tk.EW) # Appearance theme and language setting if platform in ['darwin', 'win32']: ttk.Separator(configframe, orient=tk.HORIZONTAL).grid(columnspan=4, padx=PADX, pady=PADY * 4, sticky=tk.EW) self.hotkey_code = config.getint('hotkey_code') self.hotkey_mods = config.getint('hotkey_mods') self.hotkey_only = tk.IntVar( value=not config.getint('hotkey_always')) self.hotkey_play = tk.IntVar( value=not config.getint('hotkey_mute')) nb.Label( configframe, text=platform == 'darwin' and _('Keyboard shortcut') or # Hotkey/Shortcut settings prompt on OSX _('Hotkey') # Hotkey/Shortcut settings prompt on Windows ).grid(row=20, padx=PADX, sticky=tk.W) if platform == 'darwin' and not was_accessible_at_launch: if AXIsProcessTrusted(): nb.Label( configframe, text=_('Re-start {APP} to use shortcuts').format( APP=applongname), foreground='firebrick').grid( padx=PADX, sticky=tk.W) # Shortcut settings prompt on OSX else: nb.Label( configframe, text=_('{APP} needs permission to use shortcuts' ).format(APP=applongname), foreground='firebrick').grid( columnspan=4, padx=PADX, sticky=tk.W) # Shortcut settings prompt on OSX nb.Button( configframe, text=_('Open System Preferences'), command=self.enableshortcuts).grid( padx=PADX, sticky=tk.E) # Shortcut settings button on OSX else: self.hotkey_text = nb.Entry(configframe, width=(platform == 'darwin' and 20 or 30), justify=tk.CENTER) self.hotkey_text.insert( 0, self.hotkey_code and hotkeymgr.display(self.hotkey_code, self.hotkey_mods) or _('None')) # No hotkey/shortcut currently defined self.hotkey_text.bind('<FocusIn>', self.hotkeystart) self.hotkey_text.bind('<FocusOut>', self.hotkeyend) self.hotkey_text.grid(row=20, column=1, columnspan=2, pady=(5, 0), sticky=tk.W) self.hotkey_only_btn = nb.Checkbutton( configframe, text=_('Only when Elite: Dangerous is the active app'), variable=self.hotkey_only, state=self.hotkey_code and tk.NORMAL or tk.DISABLED) # Hotkey/Shortcut setting self.hotkey_only_btn.grid(columnspan=4, padx=PADX, pady=(5, 0), sticky=tk.W) self.hotkey_play_btn = nb.Checkbutton( configframe, text=_('Play sound'), variable=self.hotkey_play, state=self.hotkey_code and tk.NORMAL or tk.DISABLED) # Hotkey/Shortcut setting self.hotkey_play_btn.grid(columnspan=4, padx=PADX, sticky=tk.W) ttk.Separator(configframe, orient=tk.HORIZONTAL).grid(columnspan=4, padx=PADX, pady=PADY * 4, sticky=tk.EW) nb.Label(configframe, text=_('Preferred websites')).grid( row=30, columnspan=4, padx=PADX, sticky=tk.W ) # Settings prompt for preferred ship loadout, system and station info websites self.shipyard_provider = tk.StringVar( value=config.get('shipyard_provider') in plug.provides( 'shipyard_url') and config.get('shipyard_provider') or 'EDSY') nb.Label(configframe, text=_('Shipyard')).grid( row=31, padx=PADX, pady=2 * PADY, sticky=tk.W ) # Setting to decide which ship outfitting website to link to - either E:D Shipyard or Coriolis self.shipyard_button = nb.OptionMenu(configframe, self.shipyard_provider, self.shipyard_provider.get(), *plug.provides('shipyard_url')) self.shipyard_button.configure(width=15) self.shipyard_button.grid(row=31, column=1, sticky=tk.W) self.system_provider = tk.StringVar( value=config.get('system_provider') in plug.provides('system_url') and config.get('system_provider') or 'EDSM') nb.Label(configframe, text=_('System')).grid(row=32, padx=PADX, pady=2 * PADY, sticky=tk.W) self.system_button = nb.OptionMenu(configframe, self.system_provider, self.system_provider.get(), *plug.provides('system_url')) self.system_button.configure(width=15) self.system_button.grid(row=32, column=1, sticky=tk.W) self.station_provider = tk.StringVar( value=config.get('station_provider') in plug.provides( 'station_url') and config.get('station_provider') or 'eddb') nb.Label(configframe, text=_('Station')).grid(row=33, padx=PADX, pady=2 * PADY, sticky=tk.W) self.station_button = nb.OptionMenu(configframe, self.station_provider, self.station_provider.get(), *plug.provides('station_url')) self.station_button.configure(width=15) self.station_button.grid(row=33, column=1, sticky=tk.W) nb.Label(configframe).grid(sticky=tk.W) # big spacer notebook.add(configframe, text=_('Configuration')) # Tab heading in settings self.languages = Translations.available_names() self.lang = tk.StringVar(value=self.languages.get( config.get('language'), _('Default'))) # Appearance theme and language setting self.always_ontop = tk.BooleanVar(value=config.getint('always_ontop')) self.theme = tk.IntVar(value=config.getint('theme')) self.theme_colors = [ config.get('dark_text'), config.get('dark_highlight') ] self.theme_prompts = [ _('Normal text'), # Dark theme color setting _('Highlighted text'), # Dark theme color setting ] themeframe = nb.Frame(notebook) themeframe.columnconfigure(2, weight=1) nb.Label(themeframe, text=_('Language')).grid( row=10, padx=PADX, sticky=tk.W) # Appearance setting prompt self.lang_button = nb.OptionMenu(themeframe, self.lang, self.lang.get(), *self.languages.values()) self.lang_button.grid(row=10, column=1, columnspan=2, padx=PADX, sticky=tk.W) ttk.Separator(themeframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY * 4, sticky=tk.EW) nb.Label(themeframe, text=_('Theme')).grid(columnspan=3, padx=PADX, sticky=tk.W) # Appearance setting nb.Radiobutton( themeframe, text=_('Default'), variable=self.theme, value=0, command=self.themevarchanged).grid( columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance theme and language setting nb.Radiobutton(themeframe, text=_('Dark'), variable=self.theme, value=1, command=self.themevarchanged).grid( columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance theme setting if platform == 'win32': nb.Radiobutton(themeframe, text=_('Transparent'), variable=self.theme, value=2, command=self.themevarchanged).grid( columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance theme setting self.theme_label_0 = nb.Label(themeframe, text=self.theme_prompts[0]) self.theme_label_0.grid(row=20, padx=PADX, sticky=tk.W) self.theme_button_0 = nb.ColoredButton( themeframe, text=_('Station'), background='grey4', command=lambda: self.themecolorbrowse(0)) # Main window self.theme_button_0.grid(row=20, column=1, padx=PADX, pady=PADY, sticky=tk.NSEW) self.theme_label_1 = nb.Label(themeframe, text=self.theme_prompts[1]) self.theme_label_1.grid(row=21, padx=PADX, sticky=tk.W) self.theme_button_1 = nb.ColoredButton( themeframe, text=' Hutton Orbital ', background='grey4', command=lambda: self.themecolorbrowse(1)) # Do not translate self.theme_button_1.grid(row=21, column=1, padx=PADX, pady=PADY, sticky=tk.NSEW) ttk.Separator(themeframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY * 4, sticky=tk.EW) self.ontop_button = nb.Checkbutton(themeframe, text=_('Always on top'), variable=self.always_ontop, command=self.themevarchanged) self.ontop_button.grid(columnspan=3, padx=BUTTONX, sticky=tk.W) # Appearance setting nb.Label(themeframe).grid(sticky=tk.W) # big spacer notebook.add(themeframe, text=_('Appearance')) # Tab heading in settings # Plugin settings and info plugsframe = nb.Frame(notebook) plugsframe.columnconfigure(0, weight=1) plugdir = tk.StringVar() plugdir.set(config.plugin_dir) nb.Label(plugsframe, text=_('Plugins folder') + ':').grid( padx=PADX, sticky=tk.W) # Section heading in settings plugdirentry = nb.Entry(plugsframe, justify=tk.LEFT) self.displaypath(plugdir, plugdirentry) plugdirentry.grid(row=10, padx=PADX, sticky=tk.EW) nb.Button( plugsframe, text=_('Open'), # Button that opens a folder in Explorer/Finder command=lambda: webbrowser.open('file:///%s' % plugdir.get()) ).grid(row=10, column=1, padx=(0, PADX), sticky=tk.NSEW) nb.Label( plugsframe, text= _("Tip: You can disable a plugin by{CR}adding '{EXT}' to its folder name" ).format(EXT='.disabled')).grid( # Help text in settings columnspan=2, padx=PADX, pady=10, sticky=tk.NSEW) enabled_plugins = [x for x in plug.PLUGINS if x.folder and x.module] if len(enabled_plugins): ttk.Separator(plugsframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY * 8, sticky=tk.EW) nb.Label(plugsframe, text=_('Enabled Plugins') + ':').grid( padx=PADX, sticky=tk.W) # List of plugins in settings for plugin in enabled_plugins: if plugin.name == plugin.folder: label = nb.Label(plugsframe, text=plugin.name) else: label = nb.Label(plugsframe, text='%s (%s)' % (plugin.folder, plugin.name)) label.grid(columnspan=2, padx=PADX * 2, sticky=tk.W) disabled_plugins = [ x for x in plug.PLUGINS if x.folder and not x.module ] if len(disabled_plugins): ttk.Separator(plugsframe, orient=tk.HORIZONTAL).grid(columnspan=3, padx=PADX, pady=PADY * 8, sticky=tk.EW) nb.Label(plugsframe, text=_('Disabled Plugins') + ':').grid( padx=PADX, sticky=tk.W) # List of plugins in settings for plugin in disabled_plugins: nb.Label(plugsframe, text=plugin.name).grid(columnspan=2, padx=PADX * 2, sticky=tk.W) notebook.add(plugsframe, text=_('Plugins')) # Tab heading in settings if platform == 'darwin': self.protocol("WM_DELETE_WINDOW", self.apply) # close button applies changes else: buttonframe = ttk.Frame(frame) buttonframe.grid(padx=PADX, pady=PADX, sticky=tk.NSEW) buttonframe.columnconfigure(0, weight=1) ttk.Label(buttonframe).grid(row=0, column=0) # spacer button = ttk.Button(buttonframe, text=_('OK'), command=self.apply) button.grid(row=0, column=1, sticky=tk.E) button.bind("<Return>", lambda event: self.apply()) self.protocol("WM_DELETE_WINDOW", self._destroy) # Selectively disable buttons depending on output settings self.cmdrchanged() self.themevarchanged() # disable hotkey for the duration hotkeymgr.unregister() # wait for window to appear on screen before calling grab_set self.parent.wm_attributes( '-topmost', 0) # needed for dialog to appear ontop of parent on OSX & Linux self.wait_visibility() self.grab_set() # Ensure fully on-screen if platform == 'win32': position = RECT() GetWindowRect(GetParent(self.winfo_id()), position) if CalculatePopupWindowPosition( POINT(parent.winfo_rootx(), parent.winfo_rooty()), SIZE(position.right - position.left, position.bottom - position.top), 0x10000, None, position): self.geometry("+%d+%d" % (position.left, position.top))
def plugin_prefs(parent): PADX = 5 frame = nb.Frame(parent) frame.columnconfigure(0, weight=1) nb.Checkbutton( frame, variable=this.edsmBodyCheck, text="Display number of bodies known to EDSM in current system").grid( padx=PADX, sticky=tk.W) # enable projects ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PADX * 2, pady=8, sticky=tk.EW) nb.Label(frame, text="Please choose which projects to enable").grid(padx=PADX, sticky=tk.W) for rseProject in this.rseData.projectsDict.values(): invertedFlag = not (this.rseData.ignoredProjectsFlags & rseProject.projectId == rseProject.projectId) variable = this.ignoredProjectsCheckboxes.setdefault( rseProject.projectId, tk.BooleanVar(value=invertedFlag)) text = rseProject.name if not rseProject.enabled: text += " (globally disabled)" nb.Checkbutton(frame, variable=variable, text=text).grid(padx=PADX, sticky=tk.W) nb.Label(frame, text=rseProject.explanation).grid(padx=PADX * 4, sticky=tk.W) # overwrite disabled state when EDDN/EDSM is off in EDMC ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PADX * 2, pady=8, sticky=tk.EW) nb.Checkbutton(frame, variable=this.clipboard, text="Copy system name to clipboard after jump").grid( padx=PADX, sticky=tk.W) nb.Checkbutton( frame, variable=this.overwrite, text="I use another tool to transmit data to EDSM/EDDN").grid( padx=PADX, sticky=tk.W) # clear caches ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PADX * 2, pady=8, sticky=tk.EW) nb.Label(frame, text="Clear caches").grid(padx=PADX, sticky=tk.W) clearCachesFrame = nb.Frame(frame) clearCachesFrame.grid(padx=PADX * 2, pady=8, sticky=tk.EW) frame.columnconfigure(2, weight=1) nb.Button(clearCachesFrame, text="Fully scanned systems", command=lambda: clearScannedSystemsCacheCallback(RseData.CACHE_FULLY_SCANNED_BODIES, "fully scanned systems"))\ .grid(padx=PADX, sticky=tk.W, row=0, column=0) nb.Button(clearCachesFrame, text="Ignored systems", command=lambda: clearScannedSystemsCacheCallback(RseData.CACHE_IGNORED_SYSTEMS, "ignored systems")) \ .grid(padx=PADX, sticky=tk.W, row=0, column=1) # links ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PADX * 2, pady=8, sticky=tk.EW) nb.Label(frame, text="Plugin Version: {}".format(RseData.VERSION)).grid( padx=PADX, sticky=tk.W) HyperlinkLabel(frame, text="Open the Github page for this plugin", background=nb.Label().cget("background"), url="https://github.com/Thurion/EDSM-RSE-for-EDMC", underline=True).grid(padx=PADX, sticky=tk.W) HyperlinkLabel(frame, text="A big thanks to EDTS for providing the coordinates.", background=nb.Label().cget("background"), url="http://edts.thargoid.space/", underline=True).grid(padx=PADX, sticky=tk.W) return frame
def plugin_prefs(parent: nb.Notebook, cmdr: str, is_beta: bool) -> nb.Frame: global xpos_var, ypos_var, width_var, height_var xpos_var = tk.IntVar(value=int(config.get("edmcoverlay2_xpos") or 0)) ypos_var = tk.IntVar(value=int(config.get("edmcoverlay2_ypos") or 0)) width_var = tk.IntVar(value=int(config.get("edmcoverlay2_width") or 1920)) height_var = tk.IntVar( value=int(config.get("edmcoverlay2_height") or 1080)) frame = nb.Frame(parent) frame.columnconfigure(0, weight=1) PAD_X = 10 PAD_Y = 2 f0 = nb.Frame(frame) HyperlinkLabel(f0, text="edmcoverlay Crab Edition", url="https://github.com/sersorrel/edmcoverlay.rs", background=nb.Label().cget('background'), underline=True).grid(row=0, column=0, sticky=tk.W, padx=(PAD_X, 0)) nb.Label(f0, text="by Ash Holland").grid(row=0, column=1, sticky=tk.W, padx=(0, PAD_X)) f0.grid(sticky=tk.EW) ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PAD_X, pady=2 * PAD_Y, sticky=tk.EW) f1 = nb.Frame(frame) nb.Label(f1, text="Overlay configuration:").grid(row=0, column=0, columnspan=3, padx=PAD_X, pady=PAD_Y, sticky=tk.W) nb.Label(f1, text="X position").grid(row=1, column=0, padx=PAD_X, pady=(PAD_Y, 0), sticky=tk.E) nb.Entry(f1, textvariable=xpos_var).grid(row=1, column=1, columnspan=3, padx=(0, PAD_X), pady=PAD_Y, sticky=tk.W) nb.Label(f1, text="Y position").grid(row=2, column=0, padx=PAD_X, pady=(PAD_Y, 0), sticky=tk.E) nb.Entry(f1, textvariable=ypos_var).grid(row=2, column=1, columnspan=3, padx=(0, PAD_X), pady=PAD_Y, sticky=tk.W) nb.Label(f1, text="Width").grid(row=3, column=0, padx=PAD_X, pady=(PAD_Y, 0), sticky=tk.E) nb.Entry(f1, textvariable=width_var).grid(row=3, column=1, columnspan=3, padx=(0, PAD_X), pady=PAD_Y, sticky=tk.W) nb.Label(f1, text="Height").grid(row=4, column=0, padx=PAD_X, pady=(PAD_Y, 0), sticky=tk.E) nb.Entry(f1, textvariable=height_var).grid(row=4, column=1, columnspan=3, padx=(0, PAD_X), pady=PAD_Y, sticky=tk.W) f1.grid(sticky=tk.EW) ttk.Separator(frame, orient=tk.HORIZONTAL).grid(padx=PAD_X, pady=2 * PAD_Y, sticky=tk.EW) f2 = nb.Frame(frame) nb.Label(f2, text="Manual overlay controls:").grid(row=0, column=0, padx=PAD_X, pady=PAD_Y) nb.Button(f2, text="Start overlay", command=lambda: edmcoverlay._edmcoverlay.start_overlay()).grid( row=0, column=1, padx=PAD_X, pady=PAD_Y) nb.Button(f2, text="Stop overlay", command=lambda: edmcoverlay._edmcoverlay.stop_overlay()).grid( row=0, column=2, padx=PAD_X, pady=PAD_Y) f2.grid(sticky=tk.EW) return frame
def plugin_prefs(parent, cmdr, is_beta): if config.get(CFG_GPL_SHOW) != None: this.showgpl = tk.IntVar(value=config.get(CFG_GPL_SHOW)) else: this.showgpl = tk.IntVar(value=DEFAULT_SHOWGPL) if config.get(CFG_GPL_REP) != None: this.showrep = tk.IntVar(value=config.get(CFG_GPL_REP)) else: this.showrep = tk.IntVar(value=DEFAULT_SHOWREP) if config.get(CFG_GPL_PIL) != None: this.showpil = tk.IntVar(value=config.get(CFG_GPL_PIL)) else: this.showpil = tk.IntVar(value=DEFAULT_SHOWPIL) if config.get(CFG_GPL_OTH) != None: this.showoth = tk.IntVar(value=config.get(CFG_GPL_OTH)) else: this.showoth = tk.IntVar(value=DEFAULT_SHOWOTH) if config.get(CFG_GPL_COL) != None: this.showcol = tk.IntVar(value=config.get(CFG_GPL_COL)) else: this.showcol = tk.IntVar(value=DEFAULT_SHOWCOL) if config.get(CFG_GPL_INT) != None: this.gplint = tk.IntVar(value=config.get(CFG_GPL_INT)) else: this.gplint = tk.IntVar(value=DEFAULT_GPLINT) if config.get(CFG_GPL_ALL) != None: this.repall = tk.IntVar(value=config.get(CFG_GPL_ALL)) else: this.repall = tk.IntVar(value=DEFAULT_REPALL) this.old_gplint = 0 this.old_showpil = 0 this.old_repall = 0 frame = nb.Frame(parent) nb.Label(frame, text="GPL-EDMC Version: {INSTALLED}\n".format( INSTALLED=APP_VERSION)).grid(padx=10, sticky=tk.W) this.factionbutton = nb.Checkbutton( frame, text=_("Show other System Factions").encode('iso-8859-1'), variable=this.showoth, onvalue=1, offvalue=0, command=prefs_faction_changed) this.factionbutton.grid(padx=10, pady=3, sticky=tk.W) this.pilotbutton = nb.Checkbutton( frame, text=_("Show 'Pilots' Federation Local Branch'-Faction in Factionlist" ).encode('iso-8859-1'), variable=this.showpil, onvalue=1, offvalue=0, command=prefs_normal_changed) this.pilotbutton.grid(padx=25, pady=1, sticky=tk.W) this.extragplbutton = nb.Checkbutton( frame, text=_("Show Extra influence for Own-Faction").encode('iso-8859-1'), variable=this.showgpl, onvalue=1, offvalue=0, command=prefs_faction_changed) this.extragplbutton.grid(padx=10, pady=3, sticky=tk.W) this.integratebutton = nb.Checkbutton( frame, text=_("Integrate notice in Factionlist").encode('iso-8859-1'), variable=this.gplint, onvalue=1, offvalue=0, command=prefs_normal_changed) this.integratebutton.grid(padx=25, pady=1, sticky=tk.W) this.reputationbutton = nb.Checkbutton( frame, text=_("Show own reputation").encode('iso-8859-1'), variable=this.showrep, onvalue=1, offvalue=0, command=prefs_faction_changed) this.reputationbutton.grid(padx=10, pady=3, sticky=tk.W) this.reforallbutton = nb.Checkbutton( frame, text=_("Show reputation for all factions").encode('iso-8859-1'), variable=this.repall, onvalue=1, offvalue=0, command=prefs_normal_changed) this.reforallbutton.grid(padx=25, pady=1, sticky=tk.W) this.colorizebutton = nb.Checkbutton( frame, text=_("Show colorized percentage values").encode('iso-8859-1'), variable=this.showcol, onvalue=1, offvalue=0) this.colorizebutton.grid(padx=10, pady=3, sticky=tk.W) prefs_normal_changed() prefs_faction_changed() return frame
def plugin_prefs(parent: tk.Tk, cmdr: str, is_beta: bool) -> tk.Frame: """Plugin preferences setup hook.""" PADX = 10 # noqa: N806 BUTTONX = 12 # indent Checkbuttons and Radiobuttons # noqa: N806 PADY = 2 # close spacing # noqa: N806 frame = nb.Frame(parent) frame.columnconfigure(1, weight=1) HyperlinkLabel(frame, text='Elite Dangerous Star Map', background=nb.Label().cget('background'), url='https://www.edsm.net/', underline=True).grid(columnspan=2, padx=PADX, sticky=tk.W) # Don't translate this.log = tk.IntVar(value=config.getint('edsm_out') and 1) this.log_button = nb.Checkbutton( frame, text=_('Send flight log and Cmdr status to EDSM'), variable=this.log, command=prefsvarchanged) this.log_button.grid(columnspan=2, padx=BUTTONX, pady=(5, 0), sticky=tk.W) nb.Label(frame).grid(sticky=tk.W) # big spacer # Section heading in settings this.label = HyperlinkLabel(frame, text=_('Elite Dangerous Star Map credentials'), background=nb.Label().cget('background'), url='https://www.edsm.net/settings/api', underline=True) cur_row = 10 this.label.grid(columnspan=2, padx=PADX, sticky=tk.W) this.cmdr_label = nb.Label(frame, text=_('Cmdr')) # Main window this.cmdr_label.grid(row=cur_row, padx=PADX, sticky=tk.W) this.cmdr_text = nb.Label(frame) this.cmdr_text.grid(row=cur_row, column=1, padx=PADX, pady=PADY, sticky=tk.W) cur_row += 1 this.user_label = nb.Label(frame, text=_('Commander Name')) # EDSM setting this.user_label.grid(row=cur_row, padx=PADX, sticky=tk.W) this.user = nb.Entry(frame) this.user.grid(row=cur_row, column=1, padx=PADX, pady=PADY, sticky=tk.EW) cur_row += 1 this.apikey_label = nb.Label(frame, text=_('API Key')) # EDSM setting this.apikey_label.grid(row=cur_row, padx=PADX, sticky=tk.W) this.apikey = nb.Entry(frame) this.apikey.grid(row=cur_row, column=1, padx=PADX, pady=PADY, sticky=tk.EW) prefs_cmdr_changed(cmdr, is_beta) return frame