summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorSteven M. Gava <elguavas@python.net>2002-01-19 01:30:56 (GMT)
committerSteven M. Gava <elguavas@python.net>2002-01-19 01:30:56 (GMT)
commit68d7336cb06ce84c01ee4307cd9fd23d5b273519 (patch)
tree2b132dd89a340c6a599017b9f1f939fc4121c4ac /Lib
parentfacfc09352f03930d7b5d6362f30c1141a634dc7 (diff)
downloadcpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.zip
cpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.tar.gz
cpython-68d7336cb06ce84c01ee4307cd9fd23d5b273519.tar.bz2
keybinding configuration
Diffstat (limited to 'Lib')
-rw-r--r--Lib/idlelib/configDialog.py5
-rw-r--r--Lib/idlelib/keybindingDialog.py39
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()