Kaydet (Commit) 610c7e07 authored tarafından Kurt B. Kaiser's avatar Kurt B. Kaiser

1. Polish variables in EditorWindow extension loading and Tkinter variable code.

2. Add exception handling to EditorWindow Tkinter variable setvar() and getvar() fcns.
3. EditorWindow: remove some unneeded comments.
4. Add a separator to the Options menu
5. extend.txt: describe how to create a menu entry which has no keybinding.

M Bindings.py
M EditorWindow.py
M extend.txt
üst 46a16f29
...@@ -70,6 +70,7 @@ menudefs = [ ...@@ -70,6 +70,7 @@ menudefs = [
]), ]),
('options', [ ('options', [
('_Configure IDLE...', '<<open-config-dialog>>'), ('_Configure IDLE...', '<<open-config-dialog>>'),
None,
]), ]),
('help', [ ('help', [
('_About IDLE', '<<about-idle>>'), ('_About IDLE', '<<about-idle>>'),
......
...@@ -46,7 +46,6 @@ class EditorWindow: ...@@ -46,7 +46,6 @@ class EditorWindow:
from Tkinter import Toplevel from Tkinter import Toplevel
from MultiStatusBar import MultiStatusBar from MultiStatusBar import MultiStatusBar
vars = {}
help_url = None help_url = None
def __init__(self, flist=None, filename=None, key=None, root=None): def __init__(self, flist=None, filename=None, key=None, root=None):
...@@ -78,10 +77,13 @@ class EditorWindow: ...@@ -78,10 +77,13 @@ class EditorWindow:
self.menubar = Menu(root) self.menubar = Menu(root)
self.top = top = self.Toplevel(root, menu=self.menubar) self.top = top = self.Toplevel(root, menu=self.menubar)
if flist: if flist:
self.vars = flist.vars self.tkinter_vars = flist.vars
#self.top.instance_dict makes flist.inversedict avalable to #self.top.instance_dict makes flist.inversedict avalable to
#configDialog.py so it can access all EditorWindow instaces #configDialog.py so it can access all EditorWindow instaces
self.top.instance_dict=flist.inversedict self.top.instance_dict=flist.inversedict
else:
self.tkinter_vars = {} # keys: Tkinter event names
# values: Tkinter variable instances
self.recent_files_path=os.path.join(idleConf.GetUserCfgDir(), self.recent_files_path=os.path.join(idleConf.GetUserCfgDir(),
'recent-files.lst') 'recent-files.lst')
self.vbar = vbar = Scrollbar(top, name='vbar') self.vbar = vbar = Scrollbar(top, name='vbar')
...@@ -553,10 +555,8 @@ class EditorWindow: ...@@ -553,10 +555,8 @@ class EditorWindow:
if menuEventDict[menubarItem].has_key(itemName): if menuEventDict[menubarItem].has_key(itemName):
event=menuEventDict[menubarItem][itemName] event=menuEventDict[menubarItem][itemName]
if event: if event:
#print 'accel was:',accel
accel=get_accelerator(keydefs, event) accel=get_accelerator(keydefs, event)
menu.entryconfig(index,accelerator=accel) menu.entryconfig(index,accelerator=accel)
#print 'accel now:',accel,'\n'
def reset_help_menu_entries(self): def reset_help_menu_entries(self):
"Update the additional help entries on the Help menu" "Update the additional help entries on the Help menu"
...@@ -711,7 +711,6 @@ class EditorWindow: ...@@ -711,7 +711,6 @@ class EditorWindow:
return reply return reply
def _close(self): def _close(self):
#print self.io.filename
if self.io.filename: if self.io.filename:
self.update_recent_files_list(new_file=self.io.filename) self.update_recent_files_list(new_file=self.io.filename)
WindowList.unregister_callback(self.postwindowsmenu) WindowList.unregister_callback(self.postwindowsmenu)
...@@ -727,7 +726,7 @@ class EditorWindow: ...@@ -727,7 +726,7 @@ class EditorWindow:
doh = colorizing and self.top doh = colorizing and self.top
self.color.close(doh) # Cancel colorization self.color.close(doh) # Cancel colorization
self.text = None self.text = None
self.vars = None self.tkinter_vars = None
self.per.close(); self.per = None self.per.close(); self.per = None
if not colorizing: if not colorizing:
self.top.destroy() self.top.destroy()
...@@ -784,35 +783,35 @@ class EditorWindow: ...@@ -784,35 +783,35 @@ class EditorWindow:
if keylist: if keylist:
text.event_add(event, *keylist) text.event_add(event, *keylist)
def fill_menus(self, defs=None, keydefs=None): def fill_menus(self, menudefs=None, keydefs=None):
"""Add appropriate entries to the menus and submenus """Add appropriate entries to the menus and submenus
Menus that are absent or None in self.menudict are ignored. Menus that are absent or None in self.menudict are ignored.
""" """
if defs is None: if menudefs is None:
defs = self.Bindings.menudefs menudefs = self.Bindings.menudefs
if keydefs is None: if keydefs is None:
keydefs = self.Bindings.default_keydefs keydefs = self.Bindings.default_keydefs
menudict = self.menudict menudict = self.menudict
text = self.text text = self.text
for mname, itemlist in defs: for mname, entrylist in menudefs:
menu = menudict.get(mname) menu = menudict.get(mname)
if not menu: if not menu:
continue continue
for item in itemlist: for entry in entrylist:
if not item: if not entry:
menu.add_separator() menu.add_separator()
else: else:
label, event = item label, eventname = entry
checkbutton = (label[:1] == '!') checkbutton = (label[:1] == '!')
if checkbutton: if checkbutton:
label = label[1:] label = label[1:]
underline, label = prepstr(label) underline, label = prepstr(label)
accelerator = get_accelerator(keydefs, event) accelerator = get_accelerator(keydefs, eventname)
def command(text=text, event=event): def command(text=text, eventname=eventname):
text.event_generate(event) text.event_generate(eventname)
if checkbutton: if checkbutton:
var = self.getrawvar(event, BooleanVar) var = self.get_var_obj(eventname, BooleanVar)
menu.add_checkbutton(label=label, underline=underline, menu.add_checkbutton(label=label, underline=underline,
command=command, accelerator=accelerator, command=command, accelerator=accelerator,
variable=var) variable=var)
...@@ -822,19 +821,25 @@ class EditorWindow: ...@@ -822,19 +821,25 @@ class EditorWindow:
accelerator=accelerator) accelerator=accelerator)
def getvar(self, name): def getvar(self, name):
var = self.getrawvar(name) var = self.get_var_obj(name)
if var: if var:
return var.get() value = var.get()
return value
else:
raise NameError, name
def setvar(self, name, value, vartype=None): def setvar(self, name, value, vartype=None):
var = self.getrawvar(name, vartype) var = self.get_var_obj(name, vartype)
if var: if var:
var.set(value) var.set(value)
else:
raise NameError, name
def getrawvar(self, name, vartype=None): def get_var_obj(self, name, vartype=None):
var = self.vars.get(name) var = self.tkinter_vars.get(name)
if not var and vartype: if not var and vartype:
self.vars[name] = var = vartype(self.text) # create a Tkinter variable object with self.text as master:
self.tkinter_vars[name] = var = vartype(self.text)
return var return var
# Tk implementations of "virtual text methods" -- each platform # Tk implementations of "virtual text methods" -- each platform
...@@ -1367,8 +1372,8 @@ keynames = { ...@@ -1367,8 +1372,8 @@ keynames = {
'slash': '/', 'slash': '/',
} }
def get_accelerator(keydefs, event): def get_accelerator(keydefs, eventname):
keylist = keydefs.get(event) keylist = keydefs.get(eventname)
if not keylist: if not keylist:
return "" return ""
s = keylist[0] s = keylist[0]
......
...@@ -51,8 +51,8 @@ entry definitions are then ignored, but key bindings are still applied. (This ...@@ -51,8 +51,8 @@ entry definitions are then ignored, but key bindings are still applied. (This
should probably be refined in the future.) should probably be refined in the future.)
Extensions are not required to define menu entries for all the events they Extensions are not required to define menu entries for all the events they
implement. (XXX KBK 15Jul03: But it appears they must have keybindings for each implement. (They are also not required to create keybindings, but in that
virtual event?) case there must be empty bindings in cofig-extensions.def)
Here is a complete example example: Here is a complete example example:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment