]> granicus.if.org Git - python/commitdiff
keybinding configuration
authorSteven M. Gava <elguavas@python.net>
Sat, 19 Jan 2002 01:30:56 +0000 (01:30 +0000)
committerSteven M. Gava <elguavas@python.net>
Sat, 19 Jan 2002 01:30:56 +0000 (01:30 +0000)
Lib/idlelib/configDialog.py
Lib/idlelib/keybindingDialog.py

index a45188b79b6e69ca766464b094facc66431bdeb5..2b133915572d3e43390ffc60133d6aeac69c50ef 100644 (file)
@@ -595,8 +595,9 @@ class ConfigDialog(Toplevel):
         listIndex=self.listBindings.index(ANCHOR)
         binding=self.listBindings.get(listIndex)
         bindName=binding.split()[0] #first part, up to first space
-        newKeys=GetKeysDialog(self,'Get New Keys',bindName)
-        print newKeys.result
+        currentKeySet=idleConf.CurrentKeys()
+        currentKeySequences=idleConf.GetKeys(currentKeySet).values()
+        newKeys=GetKeysDialog(self,'Get New Keys',bindName,currentKeySequences)
         if newKeys.result: #new keys were specified
             self.listBindings.delete(listIndex)
             self.listBindings.insert(listIndex,bindName+' - '+newKeys.result)
index ef0fda9c28350d57fca01befa0659c5fa8187ce8..0958578c0355eb815da2d03cbd8f79839752296b 100644 (file)
@@ -6,7 +6,13 @@ import tkMessageBox
 import string, os
 
 class GetKeysDialog(Toplevel):
-    def __init__(self,parent,title,action):
+    def __init__(self,parent,title,action,currentKeySequences):
+        """
+        action - string, the name of the virtual event these keys will be
+                 mapped to
+        currentKeys - list, a list of all key sequence lists currently mapped
+                 to virtual events, for overlap checking   
+        """
         Toplevel.__init__(self, parent)
         self.configure(borderwidth=5)
         self.resizable(height=FALSE,width=FALSE)
@@ -16,6 +22,7 @@ class GetKeysDialog(Toplevel):
         self.protocol("WM_DELETE_WINDOW", self.Cancel)
         self.parent = parent
         self.action=action
+        self.currentKeySequences=currentKeySequences
         self.result=''
         self.keyString=StringVar(self)
         self.keyString.set('')
@@ -191,6 +198,15 @@ class GetKeysDialog(Toplevel):
         apply(self.listKeysFinal.insert,
             (END,)+keys)
     
+    def Ok(self, event=None):
+        if self.KeysOk():
+            self.result=self.keyString.get()
+            self.destroy()
+        
+    def Cancel(self, event=None):
+        self.result=''
+        self.destroy()
+    
     def KeysOk(self):
         #simple validity check
         keysOk=1
@@ -198,6 +214,7 @@ class GetKeysDialog(Toplevel):
         keys.strip()
         finalKey=self.listKeysFinal.get(ANCHOR)
         modifiers=self.GetModifiers()
+        keySequence=keys.split()#make into a key sequence list for overlap check
         if not keys: #no keys specified
             tkMessageBox.showerror(title='Key Sequence Error',
                     message='No keys specified.')
@@ -206,23 +223,23 @@ class GetKeysDialog(Toplevel):
             tkMessageBox.showerror(title='Key Sequence Error',
                     message='No final key specified.')
             keysOk=0
+        elif (not modifiers) and (finalKey not in self.functionKeys):
+            #modifier required if not a function key
+            tkMessageBox.showerror(title='Key Sequence Error',
+                    message='No modifier key(s) specified.')
+            keysOk=0
         elif (modifiers==['Shift']) and (finalKey not in self.functionKeys):
             #shift alone is only a useful modifier with a function key
             tkMessageBox.showerror(title='Key Sequence Error',
                     message='Shift alone is only a useful modifier '+
                             'when used with a function key.')
             keysOk=0
+        elif keySequence in self.currentKeySequences: #keys combo already in use
+            tkMessageBox.showerror(title='Key Sequence Error',
+                    message='This key combination is already in use.')
+            keysOk=0
         return keysOk
     
-    def Ok(self, event=None):
-        if self.KeysOk():
-            self.result=self.keyString.get()
-            self.destroy()
-        
-    def Cancel(self, event=None):
-        self.result=''
-        self.destroy()
-    
 if __name__ == '__main__':
     #test the dialog
     root=Tk()
@@ -230,7 +247,7 @@ if __name__ == '__main__':
         #import aboutDialog
         #aboutDialog.AboutDialog(root,'About')
         keySeq=''
-        dlg=GetKeysDialog(root,'Get Keys','find-again')
+        dlg=GetKeysDialog(root,'Get Keys','find-again',[])
         print dlg.result
     Button(root,text='Dialog',command=run).pack()
     root.mainloop()