diff options
author | Steven M. Gava <elguavas@python.net> | 2002-01-19 01:30:56 (GMT) |
---|---|---|
committer | Steven M. Gava <elguavas@python.net> | 2002-01-19 01:30:56 (GMT) |
commit | 68d7336cb06ce84c01ee4307cd9fd23d5b273519 (patch) | |
tree | 2b132dd89a340c6a599017b9f1f939fc4121c4ac /Lib | |
parent | facfc09352f03930d7b5d6362f30c1141a634dc7 (diff) | |
download | cpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.zip cpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.tar.gz cpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.tar.bz2 |
keybinding configuration
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/idlelib/configDialog.py | 5 | ||||
-rw-r--r-- | Lib/idlelib/keybindingDialog.py | 39 |
2 files changed, 31 insertions, 13 deletions
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py index a45188b..2b13391 100644 --- a/Lib/idlelib/configDialog.py +++ b/Lib/idlelib/configDialog.py @@ -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) diff --git a/Lib/idlelib/keybindingDialog.py b/Lib/idlelib/keybindingDialog.py index ef0fda9..0958578 100644 --- a/Lib/idlelib/keybindingDialog.py +++ b/Lib/idlelib/keybindingDialog.py @@ -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() |