]> granicus.if.org Git - python/commitdiff
1. Polish variables in EditorWindow extension loading and Tkinter variable code.
authorKurt B. Kaiser <kbk@shore.net>
Sat, 24 Apr 2004 03:01:48 +0000 (03:01 +0000)
committerKurt B. Kaiser <kbk@shore.net>
Sat, 24 Apr 2004 03:01:48 +0000 (03:01 +0000)
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

Lib/idlelib/Bindings.py
Lib/idlelib/EditorWindow.py
Lib/idlelib/extend.txt

index af6ec56bc32a3c6d009c41e0fec196c5d06b1219..b5e90b009af8b4bb259c9d75112adb6625c664c4 100644 (file)
@@ -70,6 +70,7 @@ menudefs = [
    ]),
  ('options', [
    ('_Configure IDLE...', '<<open-config-dialog>>'),
+   None,
    ]),
  ('help', [
    ('_About IDLE', '<<about-idle>>'),
index ca52ccb582fc38d6cfa32c10e6c72cdfe2a8f6fa..605d34c781950d205bd00798added98bb763276b 100644 (file)
@@ -46,7 +46,6 @@ class EditorWindow:
     from Tkinter import Toplevel
     from MultiStatusBar import MultiStatusBar
 
-    vars = {}
     help_url = None
 
     def __init__(self, flist=None, filename=None, key=None, root=None):
@@ -78,10 +77,13 @@ class EditorWindow:
         self.menubar = Menu(root)
         self.top = top = self.Toplevel(root, menu=self.menubar)
         if flist:
-            self.vars = flist.vars
+            self.tkinter_vars = flist.vars
             #self.top.instance_dict makes flist.inversedict avalable to
             #configDialog.py so it can access all EditorWindow instaces
             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(),
                 'recent-files.lst')
         self.vbar = vbar = Scrollbar(top, name='vbar')
@@ -553,10 +555,8 @@ class EditorWindow:
                             if menuEventDict[menubarItem].has_key(itemName):
                                 event=menuEventDict[menubarItem][itemName]
                         if event:
-                            #print 'accel was:',accel
                             accel=get_accelerator(keydefs, event)
                             menu.entryconfig(index,accelerator=accel)
-                            #print 'accel now:',accel,'\n'
 
     def reset_help_menu_entries(self):
         "Update the additional help entries on the Help menu"
@@ -711,7 +711,6 @@ class EditorWindow:
         return reply
 
     def _close(self):
-        #print self.io.filename
         if self.io.filename:
             self.update_recent_files_list(new_file=self.io.filename)
         WindowList.unregister_callback(self.postwindowsmenu)
@@ -727,7 +726,7 @@ class EditorWindow:
             doh = colorizing and self.top
             self.color.close(doh) # Cancel colorization
         self.text = None
-        self.vars = None
+        self.tkinter_vars = None
         self.per.close(); self.per = None
         if not colorizing:
             self.top.destroy()
@@ -784,35 +783,35 @@ class EditorWindow:
             if 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
 
         Menus that are absent or None in self.menudict are ignored.
         """
-        if defs is None:
-            defs = self.Bindings.menudefs
+        if menudefs is None:
+            menudefs = self.Bindings.menudefs
         if keydefs is None:
             keydefs = self.Bindings.default_keydefs
         menudict = self.menudict
         text = self.text
-        for mname, itemlist in defs:
+        for mname, entrylist in menudefs:
             menu = menudict.get(mname)
             if not menu:
                 continue
-            for item in itemlist:
-                if not item:
+            for entry in entrylist:
+                if not entry:
                     menu.add_separator()
                 else:
-                    label, event = item
+                    label, eventname = entry
                     checkbutton = (label[:1] == '!')
                     if checkbutton:
                         label = label[1:]
                     underline, label = prepstr(label)
-                    accelerator = get_accelerator(keydefs, event)
-                    def command(text=text, event=event):
-                        text.event_generate(event)
+                    accelerator = get_accelerator(keydefs, eventname)
+                    def command(text=text, eventname=eventname):
+                        text.event_generate(eventname)
                     if checkbutton:
-                        var = self.getrawvar(event, BooleanVar)
+                        var = self.get_var_obj(eventname, BooleanVar)
                         menu.add_checkbutton(label=label, underline=underline,
                             command=command, accelerator=accelerator,
                             variable=var)
@@ -822,19 +821,25 @@ class EditorWindow:
                                          accelerator=accelerator)
 
     def getvar(self, name):
-        var = self.getrawvar(name)
+        var = self.get_var_obj(name)
         if var:
-            return var.get()
+            value = var.get()
+            return value
+        else:
+            raise NameError, name
 
     def setvar(self, name, value, vartype=None):
-        var = self.getrawvar(name, vartype)
+        var = self.get_var_obj(name, vartype)
         if var:
             var.set(value)
+        else:
+            raise NameError, name
 
-    def getrawvar(self, name, vartype=None):
-        var = self.vars.get(name)
+    def get_var_obj(self, name, vartype=None):
+        var = self.tkinter_vars.get(name)
         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
 
     # Tk implementations of "virtual text methods" -- each platform
@@ -1367,8 +1372,8 @@ keynames = {
  'slash': '/',
 }
 
-def get_accelerator(keydefs, event):
-    keylist = keydefs.get(event)
+def get_accelerator(keydefs, eventname):
+    keylist = keydefs.get(eventname)
     if not keylist:
         return ""
     s = keylist[0]
index efb0fc7edf5aa89159f4b7156f78372b3f2f1865..f5fb3e0409c7529e67fed77a5a0f57ac4aab2db8 100644 (file)
@@ -51,8 +51,8 @@ entry definitions are then ignored, but key bindings are still applied.  (This
 should probably be refined in the future.)
 
 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
-virtual event?)
+implement.  (They are also not required to create keybindings, but in that
+case there must be empty bindings in cofig-extensions.def)
 
 Here is a complete example example: