Commit 68d7336c authored by Steven M. Gava's avatar Steven M. Gava

keybinding configuration

parent facfc093
...@@ -595,8 +595,9 @@ class ConfigDialog(Toplevel): ...@@ -595,8 +595,9 @@ class ConfigDialog(Toplevel):
listIndex=self.listBindings.index(ANCHOR) listIndex=self.listBindings.index(ANCHOR)
binding=self.listBindings.get(listIndex) binding=self.listBindings.get(listIndex)
bindName=binding.split()[0] #first part, up to first space bindName=binding.split()[0] #first part, up to first space
newKeys=GetKeysDialog(self,'Get New Keys',bindName) currentKeySet=idleConf.CurrentKeys()
print newKeys.result currentKeySequences=idleConf.GetKeys(currentKeySet).values()
newKeys=GetKeysDialog(self,'Get New Keys',bindName,currentKeySequences)
if newKeys.result: #new keys were specified if newKeys.result: #new keys were specified
self.listBindings.delete(listIndex) self.listBindings.delete(listIndex)
self.listBindings.insert(listIndex,bindName+' - '+newKeys.result) self.listBindings.insert(listIndex,bindName+' - '+newKeys.result)
......
...@@ -6,7 +6,13 @@ import tkMessageBox ...@@ -6,7 +6,13 @@ import tkMessageBox
import string, os import string, os
class GetKeysDialog(Toplevel): 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) Toplevel.__init__(self, parent)
self.configure(borderwidth=5) self.configure(borderwidth=5)
self.resizable(height=FALSE,width=FALSE) self.resizable(height=FALSE,width=FALSE)
...@@ -16,6 +22,7 @@ class GetKeysDialog(Toplevel): ...@@ -16,6 +22,7 @@ class GetKeysDialog(Toplevel):
self.protocol("WM_DELETE_WINDOW", self.Cancel) self.protocol("WM_DELETE_WINDOW", self.Cancel)
self.parent = parent self.parent = parent
self.action=action self.action=action
self.currentKeySequences=currentKeySequences
self.result='' self.result=''
self.keyString=StringVar(self) self.keyString=StringVar(self)
self.keyString.set('') self.keyString.set('')
...@@ -191,6 +198,15 @@ class GetKeysDialog(Toplevel): ...@@ -191,6 +198,15 @@ class GetKeysDialog(Toplevel):
apply(self.listKeysFinal.insert, apply(self.listKeysFinal.insert,
(END,)+keys) (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): def KeysOk(self):
#simple validity check #simple validity check
keysOk=1 keysOk=1
...@@ -198,6 +214,7 @@ class GetKeysDialog(Toplevel): ...@@ -198,6 +214,7 @@ class GetKeysDialog(Toplevel):
keys.strip() keys.strip()
finalKey=self.listKeysFinal.get(ANCHOR) finalKey=self.listKeysFinal.get(ANCHOR)
modifiers=self.GetModifiers() modifiers=self.GetModifiers()
keySequence=keys.split()#make into a key sequence list for overlap check
if not keys: #no keys specified if not keys: #no keys specified
tkMessageBox.showerror(title='Key Sequence Error', tkMessageBox.showerror(title='Key Sequence Error',
message='No keys specified.') message='No keys specified.')
...@@ -206,23 +223,23 @@ class GetKeysDialog(Toplevel): ...@@ -206,23 +223,23 @@ class GetKeysDialog(Toplevel):
tkMessageBox.showerror(title='Key Sequence Error', tkMessageBox.showerror(title='Key Sequence Error',
message='No final key specified.') message='No final key specified.')
keysOk=0 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): elif (modifiers==['Shift']) and (finalKey not in self.functionKeys):
#shift alone is only a useful modifier with a function key #shift alone is only a useful modifier with a function key
tkMessageBox.showerror(title='Key Sequence Error', tkMessageBox.showerror(title='Key Sequence Error',
message='Shift alone is only a useful modifier '+ message='Shift alone is only a useful modifier '+
'when used with a function key.') 'when used with a function key.')
keysOk=0 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 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__': if __name__ == '__main__':
#test the dialog #test the dialog
root=Tk() root=Tk()
...@@ -230,7 +247,7 @@ if __name__ == '__main__': ...@@ -230,7 +247,7 @@ if __name__ == '__main__':
#import aboutDialog #import aboutDialog
#aboutDialog.AboutDialog(root,'About') #aboutDialog.AboutDialog(root,'About')
keySeq='' keySeq=''
dlg=GetKeysDialog(root,'Get Keys','find-again') dlg=GetKeysDialog(root,'Get Keys','find-again',[])
print dlg.result print dlg.result
Button(root,text='Dialog',command=run).pack() Button(root,text='Dialog',command=run).pack()
root.mainloop() root.mainloop()
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