From 68d7336cb06ce84c01ee4307cd9fd23d5b273519 Mon Sep 17 00:00:00 2001 From: "Steven M. Gava" Date: Sat, 19 Jan 2002 01:30:56 +0000 Subject: keybinding configuration --- Lib/idlelib/configDialog.py | 5 +++-- 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() -- cgit v0.12