mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
keybinding configuration
This commit is contained in:
parent
facfc09352
commit
68d7336cb0
2 changed files with 45 additions and 27 deletions
|
@ -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)
|
||||
|
|
|
@ -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,29 +198,6 @@ class GetKeysDialog(Toplevel):
|
|||
apply(self.listKeysFinal.insert,
|
||||
(END,)+keys)
|
||||
|
||||
def KeysOk(self):
|
||||
#simple validity check
|
||||
keysOk=1
|
||||
keys=self.keyString.get()
|
||||
keys.strip()
|
||||
finalKey=self.listKeysFinal.get(ANCHOR)
|
||||
modifiers=self.GetModifiers()
|
||||
if not keys: #no keys specified
|
||||
tkMessageBox.showerror(title='Key Sequence Error',
|
||||
message='No keys specified.')
|
||||
keysOk=0
|
||||
elif not keys.endswith('>'): #no final key specified
|
||||
tkMessageBox.showerror(title='Key Sequence Error',
|
||||
message='No final key 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
|
||||
return keysOk
|
||||
|
||||
def Ok(self, event=None):
|
||||
if self.KeysOk():
|
||||
self.result=self.keyString.get()
|
||||
|
@ -223,6 +207,39 @@ class GetKeysDialog(Toplevel):
|
|||
self.result=''
|
||||
self.destroy()
|
||||
|
||||
def KeysOk(self):
|
||||
#simple validity check
|
||||
keysOk=1
|
||||
keys=self.keyString.get()
|
||||
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.')
|
||||
keysOk=0
|
||||
elif not keys.endswith('>'): #no final key specified
|
||||
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
|
||||
|
||||
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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue