[Idle-dev] CVS: idle keybindingDialog.py,1.1,1.2

Stephen M. Gava elguavas@users.sourceforge.net
Fri, 18 Jan 2002 16:28:02 -0800


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv18776

Modified Files:
	keybindingDialog.py 
Log Message:
keybinding configuration


Index: keybindingDialog.py
===================================================================
RCS file: /cvsroot/idlefork/idle/keybindingDialog.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -r1.1 -r1.2
*** keybindingDialog.py	2002/01/12 09:48:02	1.1
--- keybindingDialog.py	2002/01/19 00:28:00	1.2
***************
*** 6,11 ****
  import string, os
  
! class GetAccelDialog(Toplevel):
!     def __init__(self,parent,title,action,keySequenceStr):
          Toplevel.__init__(self, parent)
          self.configure(borderwidth=5)
--- 6,11 ----
  import string, os
  
! class GetKeysDialog(Toplevel):
!     def __init__(self,parent,title,action):
          Toplevel.__init__(self, parent)
          self.configure(borderwidth=5)
***************
*** 17,21 ****
          self.parent = parent
          self.action=action
!         self.keySequenceStr=keySequenceStr
          self.keyString=StringVar(self)
          self.keyString.set('')
--- 17,21 ----
          self.parent = parent
          self.action=action
!         self.result=''
          self.keyString=StringVar(self)
          self.keyString.set('')
***************
*** 108,118 ****
          self.listKeysFinal.config(yscrollcommand=scrollKeysFinal.set)
          scrollKeysFinal.grid(row=0,column=5,rowspan=4,sticky=NS)
!         self.buttonAddNew=Button(self.frameControlsBasic,
!                 text='Accept Key Sequence',width=25,command=None)
!         self.buttonAddNew.grid(row=2,column=0,columnspan=4)
!         self.buttonClearLast=Button(self.frameControlsBasic,
!                 text='Clear Last Key Sequence',width=25,
!                 command=self.ClearLastKeySeq)
!         self.buttonClearLast.grid(row=3,column=0,columnspan=4)
          labelTitleAdvanced = Label(self.frameKeySeqAdvanced,justify=LEFT,
                  text="Enter new binding(s) for  '"+self.action+"' :\n"+
--- 108,117 ----
          self.listKeysFinal.config(yscrollcommand=scrollKeysFinal.set)
          scrollKeysFinal.grid(row=0,column=5,rowspan=4,sticky=NS)
! #         self.buttonAddNew=Button(self.frameControlsBasic,
! #                 text='Accept Key Sequence',width=25,command=None)
! #         self.buttonAddNew.grid(row=2,column=0,columnspan=4)
!         self.buttonClear=Button(self.frameControlsBasic,
!                 text='Clear Keys',command=self.ClearKeySeq)
!         self.buttonClear.grid(row=2,column=0,columnspan=4)
          labelTitleAdvanced = Label(self.frameKeySeqAdvanced,justify=LEFT,
                  text="Enter new binding(s) for  '"+self.action+"' :\n"+
***************
*** 134,137 ****
--- 133,137 ----
      def ToggleLevel(self):
          if  self.buttonLevel.cget('text')[:8]=='Advanced':
+             self.ClearKeySeq()
              self.buttonLevel.config(text='<< Basic Key Binding Entry')
              self.frameKeySeqAdvanced.lift()
***************
*** 139,142 ****
--- 139,143 ----
              self.entryKeysAdvanced.focus_set()
          else:
+             self.ClearKeySeq()
              self.buttonLevel.config(text='Advanced Key Binding Entry >>')
              self.frameKeySeqBasic.lift()
***************
*** 148,153 ****
      def BuildKeyString(self):
          keyList=[]
!         modifiers=self.GetModifiers(self.keyCtrl.get(),self.keyAlt.get(),
!                 self.keyShift.get())
          finalKey=self.listKeysFinal.get(ANCHOR)
          if modifiers: modifiers[0]='<'+modifiers[0]
--- 149,153 ----
      def BuildKeyString(self):
          keyList=[]
!         modifiers=self.GetModifiers()
          finalKey=self.listKeysFinal.get(ANCHOR)
          if modifiers: modifiers[0]='<'+modifiers[0]
***************
*** 161,173 ****
          self.keyString.set(keyStr)
          
! 
! 
! #         if (finalKey not in self.functionKeys) and (not modifiers):
! #             tkMessageBox.showerror(title='Key Binding Error',
! #                     message='At least one modifier key should be specified.')
! #             return
!         
!     def GetModifiers(self,ctrl,alt,shift):
          modList=[]
          if ctrl: modList.append(ctrl)
          if alt: modList.append(alt)
--- 161,169 ----
          self.keyString.set(keyStr)
          
!     def GetModifiers(self):
          modList=[]
+         ctrl=self.keyCtrl.get()
+         alt=self.keyAlt.get()
+         shift=self.keyShift.get()
          if ctrl: modList.append(ctrl)
          if alt: modList.append(alt)
***************
*** 175,197 ****
          return modList
  
!     def ClearLastKeySeq(self):
!         pass
      
      def LoadFinalKeyList(self):
!         #make a tuple of most of the useful common 'final' keys
          self.functionKeys=('F1','F2','F2','F4','F5','F6','F7','F8','F9',
                  'F10','F11','F12')
!         keys=(tuple(string.ascii_lowercase+string.digits+
!                '~!@#%^&*()_-+={}[]|;:,./?')+('tab','space')+self.functionKeys)
          apply(self.listKeysFinal.insert,
              (END,)+keys)
      
      def Ok(self, event=None):
          if self.KeysOk():
!             self.keySequenceStr=self.keyDisplay.get()
              self.destroy()
!     
      def Cancel(self, event=None):
!         self.keySequenceStr=''
          self.destroy()
      
--- 171,225 ----
          return modList
  
!     def ClearKeySeq(self):
!         self.listKeysFinal.select_clear(0,END)
!         self.listKeysFinal.yview(MOVETO, '0.0')
!         self.keyCtrl.set('')
!         self.keyAlt.set(''),
!         self.keyShift.set('')
!         self.keyString.set('')    
      
      def LoadFinalKeyList(self):
!         #these tuples are also available for use in validity checks
          self.functionKeys=('F1','F2','F2','F4','F5','F6','F7','F8','F9',
                  'F10','F11','F12')
!         self.punctuationKeys=tuple('~!@#%^&*()_-+={}[]|;:,./?')
!         self.specialKeys=('tab','space')
!         self.alphanumKeys=tuple(string.ascii_lowercase+string.digits)
!         #make a tuple of most of the useful common 'final' keys
!         keys=(self.alphanumKeys+self.punctuationKeys+self.specialKeys+
!                 self.functionKeys)
          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()
              self.destroy()
!         
      def Cancel(self, event=None):
!         self.result=''
          self.destroy()
      
***************
*** 203,208 ****
          #aboutDialog.AboutDialog(root,'About')
          keySeq=''
!         GetAccelDialog(root,'Get Keys','find-again',keySeq)
!         print keySeq
      Button(root,text='Dialog',command=run).pack()
      root.mainloop()
--- 231,236 ----
          #aboutDialog.AboutDialog(root,'About')
          keySeq=''
!         dlg=GetKeysDialog(root,'Get Keys','find-again')
!         print dlg.result
      Button(root,text='Dialog',command=run).pack()
      root.mainloop()