Lines Matching refs:self

49     def __init__(self, parent, title='', *, _htest=False, _utest=False):
64 Toplevel.__init__(self, parent)
65 self.parent = parent
69 self.withdraw()
71 self.title(title or 'IDLE Preferences')
74 self.geometry(f'+{x}+{y}')
78 self.create_widgets()
79 self.resizable(height=FALSE, width=FALSE)
80 self.transient(parent)
81 self.protocol("WM_DELETE_WINDOW", self.cancel)
82 self.fontpage.fontlist.focus_set()
85 # self.bind('<Escape>', self.Cancel) #dismiss dialog, no save
86 # self.bind('<Alt-a>', self.Apply) #apply changes, save
87 # self.bind('<F1>', self.Help) #context help
92 self.grab_set()
93 self.wm_deiconify()
94 self.wait_window()
96 def create_widgets(self):
99 Widgets Bound to self:
114 self.frame = frame = Frame(self, padding="5px")
115 self.frame.grid(sticky="nwes")
116 self.note = note = Notebook(frame)
117 self.extpage = ExtPage(note)
118 self.highpage = HighPage(note, self.extpage)
119 self.fontpage = FontPage(note, self.highpage)
120 self.keyspage = KeysPage(note, self.extpage)
121 self.winpage = WinPage(note)
122 self.shedpage = ShedPage(note)
124 note.add(self.fontpage, text=' Fonts ')
125 note.add(self.highpage, text='Highlights')
126 note.add(self.keyspage, text=' Keys ')
127 note.add(self.winpage, text=' Windows ')
128 note.add(self.shedpage, text=' Shell/Ed ')
129 note.add(self.extpage, text='Extensions')
132 self.create_action_buttons().pack(side=BOTTOM)
134 def create_action_buttons(self):
158 outer = Frame(self.frame, padding=2)
160 self.buttons = {}
162 ('Ok', self.ok),
163 ('Apply', self.apply),
164 ('Cancel', self.cancel),
165 ('Help', self.help)):
166 self.buttons[txt] = Button(buttons_frame, text=txt, command=cmd,
168 self.buttons[txt].pack(side=LEFT, padx=5)
174 def ok(self):
176 self.apply()
177 self.destroy()
179 def apply(self):
181 self.deactivate_current_config()
183 self.extpage.save_all_changed_extensions()
184 self.activate_config_changes()
186 def cancel(self):
193 self.destroy()
195 def destroy(self):
197 font_sample_text = self.fontpage.font_sample.get('1.0', 'end')
198 self.grab_release()
201 def help(self):
209 page = self.note.tab(self.note.select(), option='text').strip()
210 view_text(self, title='Help for IDLE preferences',
213 def deactivate_current_config(self):
220 win_instances = self.parent.instance_dict.keys()
224 def activate_config_changes(self):
230 win_instances = self.parent.instance_dict.keys()
243 # def __init__(self, master):
245 # self.create_page_tab()
246 # self.load_tab_cfg()
247 # def create_page_tab(self):
251 # def load_tab_cfg(self):
290 def __init__(self, master, highpage):
292 self.highlight_sample = highpage.highlight_sample
293 self.create_page_font()
294 self.load_font_cfg()
296 def create_page_font(self):
321 Widgets for FontPage(Frame): (*) widgets bound to self
334 self.font_name = tracers.add(StringVar(self), self.var_changed_font)
335 self.font_size = tracers.add(StringVar(self), self.var_changed_font)
336 self.font_bold = tracers.add(BooleanVar(self), self.var_changed_font)
339 frame_font = LabelFrame(self, borderwidth=2, relief=GROOVE,
341 frame_sample = LabelFrame(self, borderwidth=2, relief=GROOVE,
348 self.fontlist = Listbox(frame_font_name, height=15,
350 self.fontlist.bind('<ButtonRelease-1>', self.on_fontlist_select)
351 self.fontlist.bind('<KeyRelease-Up>', self.on_fontlist_select)
352 self.fontlist.bind('<KeyRelease-Down>', self.on_fontlist_select)
354 scroll_font.config(command=self.fontlist.yview)
355 self.fontlist.config(yscrollcommand=scroll_font.set)
357 self.sizelist = DynOptionMenu(frame_font_param, self.font_size, None)
358 self.bold_toggle = Checkbutton(
359 frame_font_param, variable=self.font_bold,
363 self.font_sample = font_sample_frame.text
364 self.font_sample.config(wrap=NONE, width=1, height=1)
365 self.font_sample.insert(END, font_sample_text)
368 self.columnconfigure(1, weight=1)
369 self.rowconfigure(2, weight=1)
377 self.fontlist.pack(side=LEFT, expand=TRUE, fill=X)
380 self.sizelist.pack(side=LEFT, anchor=W)
381 self.bold_toggle.pack(side=LEFT, anchor=W, padx=20)
385 def load_font_cfg(self):
392 configured_font = idleConf.GetFont(self, 'main', 'EditorWindow')
398 fonts = sorted(set(tkfont.families(self)))
400 self.fontlist.insert(END, font)
401 self.font_name.set(font_name)
405 self.fontlist.see(current_font_index)
406 self.fontlist.select_set(current_font_index)
407 self.fontlist.select_anchor(current_font_index)
408 self.fontlist.activate(current_font_index)
412 self.sizelist.SetMenu(('7', '8', '9', '10', '11', '12', '13', '14',
416 self.font_bold.set(font_bold)
417 self.set_samples()
419 def var_changed_font(self, *params):
426 value = self.font_name.get()
428 value = self.font_size.get()
430 value = self.font_bold.get()
432 self.set_samples()
434 def on_fontlist_select(self, event):
440 font = self.fontlist.get(
442 self.font_name.set(font.lower())
444 def set_samples(self, event=None):
451 font_name = self.font_name.get()
452 font_weight = tkfont.BOLD if self.font_bold.get() else tkfont.NORMAL
453 new_font = (font_name, self.font_size.get(), font_weight)
454 self.font_sample['font'] = new_font
455 self.highlight_sample['font'] = new_font
460 def __init__(self, master, extpage):
462 self.extpage = extpage
463 self.cd = master.winfo_toplevel()
464 self.style = Style(master)
465 self.create_page_highlight()
466 self.load_theme_cfg()
468 def create_page_highlight(self):
566 Widgets of highlights page frame: (*) widgets bound to self
585 self.theme_elements = {
603 self.builtin_name = tracers.add(
604 StringVar(self), self.var_changed_builtin_name)
605 self.custom_name = tracers.add(
606 StringVar(self), self.var_changed_custom_name)
607 self.fg_bg_toggle = BooleanVar(self)
608 self.color = tracers.add(
609 StringVar(self), self.var_changed_color)
610 self.theme_source = tracers.add(
611 BooleanVar(self), self.var_changed_theme_source)
612 self.highlight_target = tracers.add(
613 StringVar(self), self.var_changed_highlight_target)
617 frame_custom = LabelFrame(self, borderwidth=2, relief=GROOVE,
619 frame_theme = LabelFrame(self, borderwidth=2, relief=GROOVE,
624 text = self.highlight_sample = sample_frame.text
656 for element in self.theme_elements:
659 self.highlight_target.set(elem)
661 self.theme_elements[element][0], '<ButtonPress-1>', tem)
663 self.style.configure('frame_color_set.TFrame', borderwidth=1,
665 self.frame_color_set = Frame(frame_custom, style='frame_color_set.TFrame')
667 self.button_set_color = Button(
668 self.frame_color_set, text='Choose Color for :',
669 command=self.get_color)
670 self.targetlist = DynOptionMenu(
671 self.frame_color_set, self.highlight_target, None,
672 highlightthickness=0) #, command=self.set_highlight_targetBinding
673 self.fg_on = Radiobutton(
674 frame_fg_bg_toggle, variable=self.fg_bg_toggle, value=1,
675 text='Foreground', command=self.set_color_sample_binding)
676 self.bg_on = Radiobutton(
677 frame_fg_bg_toggle, variable=self.fg_bg_toggle, value=0,
678 text='Background', command=self.set_color_sample_binding)
679 self.fg_bg_toggle.set(1)
680 self.button_save_custom = Button(
682 command=self.save_as_new_theme)
685 self.builtin_theme_on = Radiobutton(
686 frame_theme, variable=self.theme_source, value=1,
687 command=self.set_theme_type, text='a Built-in Theme')
688 self.custom_theme_on = Radiobutton(
689 frame_theme, variable=self.theme_source, value=0,
690 command=self.set_theme_type, text='a Custom Theme')
691 self.builtinlist = DynOptionMenu(
692 frame_theme, self.builtin_name, None, command=None)
693 self.customlist = DynOptionMenu(
694 frame_theme, self.custom_name, None, command=None)
695 self.button_delete_custom = Button(
697 command=self.delete_custom)
698 self.theme_message = Label(frame_theme, borderwidth=2)
704 self.frame_color_set.pack(side=TOP, padx=5, pady=5, fill=X)
708 self.button_set_color.pack(side=TOP, expand=TRUE, fill=X, padx=8, pady=4)
709 self.targetlist.pack(side=TOP, expand=TRUE, fill=X, padx=8, pady=3)
710 self.fg_on.pack(side=LEFT, anchor=E)
711 self.bg_on.pack(side=RIGHT, anchor=W)
712 self.button_save_custom.pack(side=BOTTOM, fill=X, padx=5, pady=5)
715 self.builtin_theme_on.pack(side=TOP, anchor=W, padx=5)
716 self.custom_theme_on.pack(side=TOP, anchor=W, padx=5, pady=2)
717 self.builtinlist.pack(side=TOP, fill=X, padx=5, pady=5)
718 self.customlist.pack(side=TOP, fill=X, anchor=W, padx=5, pady=5)
719 self.button_delete_custom.pack(side=TOP, fill=X, padx=5, pady=5)
720 self.theme_message.pack(side=TOP, fill=X, pady=5)
722 def load_theme_cfg(self):
735 targetlist: Create menu from self.theme_elements.
743 self.theme_source.set(idleConf.GetOption(
748 if self.theme_source.get(): # Default theme selected.
751 self.builtinlist.SetMenu(item_list, current_option)
755 self.custom_theme_on.state(('disabled',))
756 self.custom_name.set('- no custom themes -')
758 self.customlist.SetMenu(item_list, item_list[0])
762 self.customlist.SetMenu(item_list, current_option)
765 self.builtinlist.SetMenu(item_list, item_list[0])
766 self.set_theme_type()
768 theme_names = list(self.theme_elements.keys())
769 theme_names.sort(key=lambda x: self.theme_elements[x][1])
770 self.targetlist.SetMenu(theme_names, theme_names[0])
771 self.paint_theme_sample()
772 self.set_highlight_target()
774 def var_changed_builtin_name(self, *params):
781 value = self.builtin_name.get()
786 self.theme_message['text'] = 'New theme, see Help'
790 self.theme_message['text'] = ''
791 self.paint_theme_sample()
793 def var_changed_custom_name(self, *params):
799 value = self.custom_name.get()
802 self.paint_theme_sample()
804 def var_changed_theme_source(self, *params):
810 value = self.theme_source.get()
813 self.var_changed_builtin_name()
815 self.var_changed_custom_name()
817 def var_changed_color(self, *params):
819 self.on_new_color_set()
821 def var_changed_highlight_target(self, *params):
823 self.set_highlight_target()
825 def set_theme_type(self):
843 if self.theme_source.get():
844 self.builtinlist['state'] = 'normal'
845 self.customlist['state'] = 'disabled'
846 self.button_delete_custom.state(('disabled',))
848 self.builtinlist['state'] = 'disabled'
849 self.custom_theme_on.state(('!disabled',))
850 self.customlist['state'] = 'normal'
851 self.button_delete_custom.state(('!disabled',))
853 def get_color(self):
871 target = self.highlight_target.get()
872 prev_color = self.style.lookup(self.frame_color_set['style'],
875 parent=self, title='Pick new color for : '+target,
879 if self.theme_source.get(): # Current theme is a built-in.
882 new_theme = self.get_new_theme_name(message)
886 self.create_new(new_theme)
887 self.color.set(color_string)
889 self.color.set(color_string)
891 def on_new_color_set(self):
893 new_color = self.color.get()
894 self.style.configure('frame_color_set.TFrame', background=new_color)
895 plane = 'foreground' if self.fg_bg_toggle.get() else 'background'
896 sample_element = self.theme_elements[self.highlight_target.get()][0]
897 self.highlight_sample.tag_config(sample_element, **{plane: new_color})
898 theme = self.custom_name.get()
902 def get_new_theme_name(self, message):
907 self, 'New Custom Theme', message, used_names).result
910 def save_as_new_theme(self):
917 new_theme_name = self.get_new_theme_name('New Theme Name:')
919 self.create_new(new_theme_name)
921 def create_new(self, new_theme_name):
940 if self.theme_source.get():
942 theme_name = self.builtin_name.get()
945 theme_name = self.custom_name.get()
953 self.save_new(new_theme_name, new_theme)
957 self.customlist.SetMenu(custom_theme_list, new_theme_name)
958 self.theme_source.set(0)
959 self.set_theme_type()
961 def set_highlight_target(self):
979 if self.highlight_target.get() == 'Cursor': # bg not possible
980 self.fg_on.state(('disabled',))
981 self.bg_on.state(('disabled',))
982 self.fg_bg_toggle.set(1)
984 self.fg_on.state(('!disabled',))
985 self.bg_on.state(('!disabled',))
986 self.fg_bg_toggle.set(1)
987 self.set_color_sample()
989 def set_color_sample_binding(self, *args):
995 self.set_color_sample()
997 def set_color_sample(self):
1010 tag = self.theme_elements[self.highlight_target.get()][0]
1011 plane = 'foreground' if self.fg_bg_toggle.get() else 'background'
1012 color = self.highlight_sample.tag_cget(tag, plane)
1013 self.style.configure('frame_color_set.TFrame', background=color)
1015 def paint_theme_sample(self):
1035 if self.theme_source.get(): # Default theme
1036 theme = self.builtin_name.get()
1038 theme = self.custom_name.get()
1039 for element_title in self.theme_elements:
1040 element = self.theme_elements[element_title][0]
1052 self.highlight_sample.tag_config(element, **colors)
1053 self.set_color_sample()
1055 def save_new(self, theme_name, theme):
1066 def askyesno(self, *args, **kwargs):
1070 def delete_custom(self):
1092 theme_name = self.custom_name.get()
1094 if not self.askyesno(
1095 'Delete Theme', delmsg % theme_name, parent=self):
1097 self.cd.deactivate_current_config()
1104 self.custom_theme_on.state(('disabled',))
1105 self.customlist.SetMenu(item_list, '- no custom themes -')
1107 self.customlist.SetMenu(item_list, item_list[0])
1109 self.theme_source.set(idleConf.defaultCfg['main'].Get('Theme', 'default'))
1110 self.builtin_name.set(idleConf.defaultCfg['main'].Get('Theme', 'name'))
1113 self.extpage.save_all_changed_extensions()
1114 self.cd.activate_config_changes()
1115 self.set_theme_type()
1120 def __init__(self, master, extpage):
1122 self.extpage = extpage
1123 self.cd = master.winfo_toplevel()
1124 self.create_page_keys()
1125 self.load_key_cfg()
1127 def create_page_keys(self):
1188 Widgets for KeysPage(frame): (*) widgets bound to self
1209 self.builtin_name = tracers.add(
1210 StringVar(self), self.var_changed_builtin_name)
1211 self.custom_name = tracers.add(
1212 StringVar(self), self.var_changed_custom_name)
1213 self.keyset_source = tracers.add(
1214 BooleanVar(self), self.var_changed_keyset_source)
1215 self.keybinding = tracers.add(
1216 StringVar(self), self.var_changed_keybinding)
1221 self, borderwidth=2, relief=GROOVE,
1224 self, borderwidth=2, relief=GROOVE, text=' Key Set ')
1230 self.bindingslist = Listbox(
1232 self.bindingslist.bind('<ButtonRelease-1>',
1233 self.on_bindingslist_select)
1234 scroll_target_y['command'] = self.bindingslist.yview
1235 scroll_target_x['command'] = self.bindingslist.xview
1236 self.bindingslist['yscrollcommand'] = scroll_target_y.set
1237 self.bindingslist['xscrollcommand'] = scroll_target_x.set
1238 self.button_new_keys = Button(
1240 command=self.get_new_keys, state='disabled')
1244 self.builtin_keyset_on = Radiobutton(
1245 frames[0], variable=self.keyset_source, value=1,
1246 command=self.set_keys_type, text='Use a Built-in Key Set')
1247 self.custom_keyset_on = Radiobutton(
1248 frames[0], variable=self.keyset_source, value=0,
1249 command=self.set_keys_type, text='Use a Custom Key Set')
1250 self.builtinlist = DynOptionMenu(
1251 frames[0], self.builtin_name, None, command=None)
1252 self.customlist = DynOptionMenu(
1253 frames[0], self.custom_name, None, command=None)
1254 self.button_delete_custom_keys = Button(
1256 command=self.delete_custom_keys)
1257 self.button_save_custom_keys = Button(
1259 command=self.save_as_new_key_set)
1260 self.keys_message = Label(frames[0], borderwidth=2)
1267 self.button_new_keys.pack(side=BOTTOM, fill=X, padx=5, pady=5)
1273 self.bindingslist.grid(row=1, column=0, sticky=NSEW)
1277 self.builtin_keyset_on.grid(row=0, column=0, sticky=W+NS)
1278 self.custom_keyset_on.grid(row=1, column=0, sticky=W+NS)
1279 self.builtinlist.grid(row=0, column=1, sticky=NSEW)
1280 self.customlist.grid(row=1, column=1, sticky=NSEW)
1281 self.keys_message.grid(row=0, column=2, sticky=NSEW, padx=5, pady=5)
1282 self.button_delete_custom_keys.pack(side=LEFT, fill=X, expand=True, padx=2)
1283 self.button_save_custom_keys.pack(side=LEFT, fill=X, expand=True, padx=2)
1287 def load_key_cfg(self):
1290 self.keyset_source.set(idleConf.GetOption(
1295 if self.keyset_source.get(): # Default theme selected.
1298 self.builtinlist.SetMenu(item_list, current_option)
1302 self.custom_keyset_on.state(('disabled',))
1303 self.custom_name.set('- no custom keys -')
1305 self.customlist.SetMenu(item_list, item_list[0])
1309 self.customlist.SetMenu(item_list, current_option)
1312 self.builtinlist.SetMenu(item_list, idleConf.default_keys())
1313 self.set_keys_type()
1316 self.load_keys_list(keyset_name)
1318 def var_changed_builtin_name(self, *params):
1326 value = self.builtin_name.get()
1331 self.keys_message['text'] = 'New key set, see Help'
1335 self.keys_message['text'] = ''
1336 self.load_keys_list(value)
1338 def var_changed_custom_name(self, *params):
1340 value = self.custom_name.get()
1343 self.load_keys_list(value)
1345 def var_changed_keyset_source(self, *params):
1347 value = self.keyset_source.get()
1350 self.var_changed_builtin_name()
1352 self.var_changed_custom_name()
1354 def var_changed_keybinding(self, *params):
1356 value = self.keybinding.get()
1357 key_set = self.custom_name.get()
1358 event = self.bindingslist.get(ANCHOR).split()[0]
1366 def set_keys_type(self):
1368 if self.keyset_source.get():
1369 self.builtinlist['state'] = 'normal'
1370 self.customlist['state'] = 'disabled'
1371 self.button_delete_custom_keys.state(('disabled',))
1373 self.builtinlist['state'] = 'disabled'
1374 self.custom_keyset_on.state(('!disabled',))
1375 self.customlist['state'] = 'normal'
1376 self.button_delete_custom_keys.state(('!disabled',))
1378 def get_new_keys(self):
1387 list_index = self.bindingslist.index(ANCHOR)
1388 binding = self.bindingslist.get(list_index)
1390 if self.keyset_source.get():
1391 current_key_set_name = self.builtin_name.get()
1393 current_key_set_name = self.custom_name.get()
1400 new_keys = GetKeysWindow(self, 'Get New Keys', bind_name,
1403 if self.keyset_source.get(): # Current key set is a built-in.
1406 new_keyset = self.get_new_keys_name(message)
1408 self.bindingslist.select_set(list_index)
1409 self.bindingslist.select_anchor(list_index)
1412 self.create_new_key_set(new_keyset)
1413 self.bindingslist.delete(list_index)
1414 self.bindingslist.insert(list_index, bind_name+' - '+new_keys)
1415 self.bindingslist.select_set(list_index)
1416 self.bindingslist.select_anchor(list_index)
1417 self.keybinding.set(new_keys)
1419 self.bindingslist.select_set(list_index)
1420 self.bindingslist.select_anchor(list_index)
1422 def get_new_keys_name(self, message):
1427 self, 'New Custom Key Set', message, used_names).result
1430 def save_as_new_key_set(self):
1432 new_keys_name = self.get_new_keys_name('New Key Set Name:')
1434 self.create_new_key_set(new_keys_name)
1436 def on_bindingslist_select(self, event):
1438 self.button_new_keys.state(('!disabled',))
1440 def create_new_key_set(self, new_key_set_name):
1446 if self.keyset_source.get():
1447 prev_key_set_name = self.builtin_name.get()
1449 prev_key_set_name = self.custom_name.get()
1462 self.save_new_key_set(new_key_set_name, new_keys)
1466 self.customlist.SetMenu(custom_key_list, new_key_set_name)
1467 self.keyset_source.set(0)
1468 self.set_keys_type()
1470 def load_keys_list(self, keyset_name):
1476 if self.bindingslist.curselection():
1478 list_index = self.bindingslist.index(ANCHOR)
1482 self.bindingslist.delete(0, END)
1490 self.bindingslist.insert(END, bind_name+' - '+key)
1492 self.bindingslist.see(list_index)
1493 self.bindingslist.select_set(list_index)
1494 self.bindingslist.select_anchor(list_index)
1512 def askyesno(self, *args, **kwargs):
1516 def delete_custom_keys(self):
1523 keyset_name = self.custom_name.get()
1525 if not self.askyesno(
1526 'Delete Key Set', delmsg % keyset_name, parent=self):
1528 self.cd.deactivate_current_config()
1535 self.custom_keyset_on.state(('disabled',))
1536 self.customlist.SetMenu(item_list, '- no custom keys -')
1538 self.customlist.SetMenu(item_list, item_list[0])
1540 self.keyset_source.set(idleConf.defaultCfg['main']
1542 self.builtin_name.set(idleConf.defaultCfg['main'].Get('Keys', 'name')
1546 self.extpage.save_all_changed_extensions()
1547 self.cd.activate_config_changes()
1548 self.set_keys_type()
1553 def __init__(self, master):
1556 self.init_validators()
1557 self.create_page_windows()
1558 self.load_windows_cfg()
1560 def init_validators(self):
1565 self.digits_only = (self.register(is_digits_or_empty), '%P',)
1567 def create_page_windows(self):
1577 Widgets for WinPage(Frame): > vars, bound to self
1608 self.startup_edit = tracers.add(
1609 IntVar(self), ('main', 'General', 'editor-on-startup'))
1610 self.win_width = tracers.add(
1611 StringVar(self), ('main', 'EditorWindow', 'width'))
1612 self.win_height = tracers.add(
1613 StringVar(self), ('main', 'EditorWindow', 'height'))
1614 self.indent_spaces = tracers.add(
1615 StringVar(self), ('main', 'Indent', 'num-spaces'))
1616 self.cursor_blink = tracers.add(
1617 BooleanVar(self), ('main', 'EditorWindow', 'cursor-blink'))
1618 self.autocomplete_wait = tracers.add(
1619 StringVar(self), ('extensions', 'AutoComplete', 'popupwait'))
1620 self.paren_style = tracers.add(
1621 StringVar(self), ('extensions', 'ParenMatch', 'style'))
1622 self.flash_delay = tracers.add(
1623 StringVar(self), ('extensions', 'ParenMatch', 'flash-delay'))
1624 self.paren_bell = tracers.add(
1625 BooleanVar(self), ('extensions', 'ParenMatch', 'bell'))
1626 self.format_width = tracers.add(
1627 StringVar(self), ('extensions', 'FormatParagraph', 'max-width'))
1630 frame_window = LabelFrame(self, borderwidth=2, relief=GROOVE,
1635 self.startup_editor_on = Radiobutton(
1636 frame_run, variable=self.startup_edit, value=1,
1638 self.startup_shell_on = Radiobutton(
1639 frame_run, variable=self.startup_edit, value=0,
1646 self.win_width_int = Entry(
1647 frame_win_size, textvariable=self.win_width, width=3,
1648 validatecommand=self.digits_only, validate='key',
1651 self.win_height_int = Entry(
1652 frame_win_size, textvariable=self.win_height, width=3,
1653 validatecommand=self.digits_only, validate='key',
1660 self.indent_chooser = Spinbox(
1661 frame_cursor, textvariable=self.indent_spaces,
1663 validatecommand=self.digits_only, validate='key')
1665 self.indent_chooser = Combobox(
1666 frame_cursor, textvariable=self.indent_spaces,
1669 self.cursor_blink_bool = Checkbutton(frame_cursor, text="Cursor blink",
1670 variable=self.cursor_blink)
1675 self.auto_wait_int = Entry(
1676 frame_autocomplete, textvariable=self.autocomplete_wait,
1677 width=6, validatecommand=self.digits_only, validate='key')
1681 self.paren_style_type = OptionMenu(
1682 frame_paren1, self.paren_style, 'expression',
1688 self.paren_flash_time = Entry(
1689 frame_paren2, textvariable=self.flash_delay, width=6,
1690 validatecommand=self.digits_only, validate='key')
1691 self.bell_on = Checkbutton(
1692 frame_paren2, text="Bell on Mismatch", variable=self.paren_bell)
1696 self.format_width_int = Entry(
1697 frame_format, textvariable=self.format_width, width=4,
1698 validatecommand=self.digits_only, validate='key',
1706 self.startup_shell_on.pack(side=RIGHT, anchor=W, padx=5, pady=5)
1707 self.startup_editor_on.pack(side=RIGHT, anchor=W, padx=5, pady=5)
1711 self.win_height_int.pack(side=RIGHT, anchor=E, padx=10, pady=5)
1713 self.win_width_int.pack(side=RIGHT, anchor=E, padx=10, pady=5)
1718 self.indent_chooser.pack(side=LEFT, anchor=W, padx=10)
1719 self.cursor_blink_bool.pack(side=RIGHT, anchor=E, padx=15, pady=5)
1723 self.auto_wait_int.pack(side=TOP, padx=10, pady=5)
1727 self.paren_style_type.pack(side=TOP, padx=10, pady=5)
1730 self.bell_on.pack(side=RIGHT, anchor=E, padx=15, pady=5)
1731 self.paren_flash_time.pack(side=TOP, anchor=W, padx=15, pady=5)
1735 self.format_width_int.pack(side=TOP, padx=10, pady=5)
1737 def load_windows_cfg(self):
1739 self.startup_edit.set(idleConf.GetOption(
1741 self.win_width.set(idleConf.GetOption(
1743 self.win_height.set(idleConf.GetOption(
1745 self.indent_spaces.set(idleConf.GetOption(
1747 self.cursor_blink.set(idleConf.GetOption(
1749 self.autocomplete_wait.set(idleConf.GetOption(
1751 self.paren_style.set(idleConf.GetOption(
1753 self.flash_delay.set(idleConf.GetOption(
1755 self.paren_bell.set(idleConf.GetOption(
1757 self.format_width.set(idleConf.GetOption(
1763 def __init__(self, master):
1766 self.init_validators()
1767 self.create_page_shed()
1768 self.load_shelled_cfg()
1770 def init_validators(self):
1775 self.digits_only = (self.register(is_digits_or_empty), '%P',)
1777 def create_page_shed(self):
1786 Widgets for ShedPage(Frame): (*) widgets bound to self
1808 self.auto_squeeze_min_lines = tracers.add(
1809 StringVar(self), ('main', 'PyShell', 'auto-squeeze-min-lines'))
1811 self.autosave = tracers.add(
1812 IntVar(self), ('main', 'General', 'autosave'))
1813 self.line_numbers_default = tracers.add(
1814 BooleanVar(self),
1816 self.context_lines = tracers.add(
1817 StringVar(self), ('extensions', 'CodeContext', 'maxlines'))
1820 frame_shell = LabelFrame(self, borderwidth=2, relief=GROOVE,
1822 frame_editor = LabelFrame(self, borderwidth=2, relief=GROOVE,
1828 self.auto_squeeze_min_lines_int = Entry(
1830 textvariable=self.auto_squeeze_min_lines,
1831 validatecommand=self.digits_only, validate='key',
1837 self.save_ask_on = Radiobutton(
1838 frame_save, variable=self.autosave, value=0,
1840 self.save_auto_on = Radiobutton(
1841 frame_save, variable=self.autosave, value=1,
1847 self.line_numbers_default_bool = Checkbutton(
1849 variable=self.line_numbers_default,
1854 self.context_int = Entry(
1855 frame_context, textvariable=self.context_lines, width=3,
1856 validatecommand=self.digits_only, validate='key',
1861 Label(self).pack() # Spacer -- better solution?
1866 self.auto_squeeze_min_lines_int.pack(side=TOP, padx=5, pady=5)
1870 self.save_auto_on.pack(side=RIGHT, anchor=W, padx=5, pady=5)
1871 self.save_ask_on.pack(side=RIGHT, anchor=W, padx=5, pady=5)
1875 self.line_numbers_default_bool.pack(side=LEFT, padx=5, pady=5)
1879 self.context_int.pack(side=TOP, padx=5, pady=5)
1881 def load_shelled_cfg(self):
1883 self.auto_squeeze_min_lines.set(idleConf.GetOption(
1886 self.autosave.set(idleConf.GetOption(
1888 self.line_numbers_default.set(idleConf.GetOption(
1890 self.context_lines.set(idleConf.GetOption(
1895 def __init__(self, master):
1897 self.ext_defaultCfg = idleConf.defaultCfg['extensions']
1898 self.ext_userCfg = idleConf.userCfg['extensions']
1899 self.is_int = self.register(is_int)
1900 self.load_extensions()
1901 self.create_page_extensions() # Requires extension names.
1903 def create_page_extensions(self):
1927 self.extension_names = StringVar(self)
1929 frame_ext = LabelFrame(self, borderwidth=2, relief=GROOVE,
1931 self.frame_help = HelpFrame(self, borderwidth=2, relief=GROOVE,
1936 self.extension_list = Listbox(frame_ext, listvariable=self.extension_names,
1938 self.extension_list.bind('<<ListboxSelect>>', self.extension_selected)
1939 scroll = Scrollbar(frame_ext, command=self.extension_list.yview)
1940 self.extension_list.yscrollcommand=scroll.set
1941 self.details_frame = LabelFrame(frame_ext, width=250, height=250)
1942 self.extension_list.grid(column=0, row=0, sticky='nws')
1944 self.details_frame.grid(column=2, row=0, sticky='nsew', padx=[10, 0])
1946 self.config_frame = {}
1947 self.current_extension = None
1949 self.outerframe = self # TEMPORARY
1950 self.tabbed_page_set = self.extension_list # TEMPORARY
1954 for ext_name in sorted(self.extensions):
1955 self.create_extension_frame(ext_name)
1957 self.extension_names.set(ext_names)
1958 self.extension_list.selection_set(0)
1959 self.extension_selected(None)
1963 Label(self).grid(row=1, column=0) # Spacer. Replace with config?
1964 self.frame_help.grid(row=2, column=0, sticky='sew')
1966 def load_extensions(self):
1967 "Fill self.extensions with data from the default and user configs."
1968 self.extensions = {}
1971 self.extensions[ext_name] = []
1973 for ext_name in self.extensions:
1974 opt_list = sorted(self.ext_defaultCfg.GetOptionList(ext_name))
1984 def_str = self.ext_defaultCfg.Get(
1997 value = self.ext_userCfg.Get(
2002 var = StringVar(self)
2005 self.extensions[ext_name].append({'name': opt_name,
2012 def extension_selected(self, event):
2014 newsel = self.extension_list.curselection()
2016 newsel = self.extension_list.get(newsel)
2017 if newsel is None or newsel != self.current_extension:
2018 if self.current_extension:
2019 self.details_frame.config(text='')
2020 self.config_frame[self.current_extension].grid_forget()
2021 self.current_extension = None
2023 self.details_frame.config(text=newsel)
2024 self.config_frame[newsel].grid(column=0, row=0, sticky='nsew')
2025 self.current_extension = newsel
2027 def create_extension_frame(self, ext_name):
2029 f = VerticalScrolledFrame(self.details_frame, height=250, width=250)
2030 self.config_frame[ext_name] = f
2033 for row, opt in enumerate(self.extensions[ext_name]):
2044 validatecommand=(self.is_int, '%P'), width=10
2053 def set_extension_value(self, section, opt):
2063 # if self.defaultCfg.has_section(section):
2066 return self.ext_userCfg.RemoveOption(section, name)
2068 return self.ext_userCfg.SetOption(section, name, value)
2070 def save_all_changed_extensions(self):
2080 for ext_name in self.extensions:
2081 options = self.extensions[ext_name]
2083 if self.set_extension_value(ext_name, opt):
2086 self.ext_userCfg.Save()
2091 def __init__(self, master, **cfg):
2093 self.create_frame_help()
2094 self.load_helplist()
2096 def create_frame_help(self):
2107 Widgets for HelpFrame(LabelFrame): (*) widgets bound to self
2116 # self = frame_help in dialog (until ExtPage class).
2117 frame_helplist = Frame(self)
2118 self.helplist = Listbox(
2122 scroll_helplist['command'] = self.helplist.yview
2123 self.helplist['yscrollcommand'] = scroll_helplist.set
2124 self.helplist.bind('<ButtonRelease-1>', self.help_source_selected)
2126 frame_buttons = Frame(self)
2127 self.button_helplist_edit = Button(
2129 width=8, command=self.helplist_item_edit)
2130 self.button_helplist_add = Button(
2132 width=8, command=self.helplist_item_add)
2133 self.button_helplist_remove = Button(
2135 width=8, command=self.helplist_item_remove)
2139 self.helplist.pack(side=LEFT, anchor=E, expand=TRUE, fill=BOTH)
2142 self.button_helplist_edit.pack(side=TOP, anchor=W, pady=5)
2143 self.button_helplist_add.pack(side=TOP, anchor=W)
2144 self.button_helplist_remove.pack(side=TOP, anchor=W, pady=5)
2146 def help_source_selected(self, event):
2148 self.set_add_delete_state()
2150 def set_add_delete_state(self):
2152 if self.helplist.size() < 1: # No entries in list.
2153 self.button_helplist_edit.state(('disabled',))
2154 self.button_helplist_remove.state(('disabled',))
2156 if self.helplist.curselection(): # There currently is a selection.
2157 self.button_helplist_edit.state(('!disabled',))
2158 self.button_helplist_remove.state(('!disabled',))
2160 self.button_helplist_edit.state(('disabled',))
2161 self.button_helplist_remove.state(('disabled',))
2163 def helplist_item_add(self):
2169 help_source = HelpSource(self, 'New Help Source').result
2171 self.user_helplist.append(help_source)
2172 self.helplist.insert(END, help_source[0])
2173 self.update_help_changes()
2175 def helplist_item_edit(self):
2181 item_index = self.helplist.index(ANCHOR)
2182 help_source = self.user_helplist[item_index]
2184 self, 'Edit Help Source',
2189 self.user_helplist[item_index] = new_help_source
2190 self.helplist.delete(item_index)
2191 self.helplist.insert(item_index, new_help_source[0])
2192 self.update_help_changes()
2193 self.set_add_delete_state() # Selected will be un-selected
2195 def helplist_item_remove(self):
2200 item_index = self.helplist.index(ANCHOR)
2201 del(self.user_helplist[item_index])
2202 self.helplist.delete(item_index)
2203 self.update_help_changes()
2204 self.set_add_delete_state()
2206 def update_help_changes(self):
2209 for num in range(1, len(self.user_helplist) + 1):
2212 ';'.join(self.user_helplist[num-1][:2]))
2214 def load_helplist(self):
2216 self.user_helplist = idleConf.GetAllExtraHelpSourcesList()
2217 self.helplist.delete(0, 'end')
2218 for help_item in self.user_helplist:
2219 self.helplist.insert(END, help_item[0])
2220 self.set_add_delete_state()
2226 def __init__(self):
2235 self.untraced = []
2236 self.traced = []
2238 def clear(self):
2241 self.untraced.clear()
2242 self.traced.clear()
2244 def add(self, var, callback):
2257 callback = self.make_callback(var, callback)
2258 self.untraced.append((var, callback))
2269 def attach(self):
2271 while self.untraced:
2272 var, callback = self.untraced.pop()
2274 self.traced.append((var, callback))
2276 def detach(self):
2278 while self.traced:
2279 var, callback = self.traced.pop()
2281 self.untraced.append((var, callback))
2373 def __init__(self, parent, *args, **kw):
2374 Frame.__init__(self, parent, *args, **kw)
2377 vscrollbar = Scrollbar(self, orient=VERTICAL)
2379 canvas = Canvas(self, borderwidth=0, highlightthickness=0,
2389 self.interior = interior = Frame(canvas)