dabo Commit
Revision 4900
Date: 2008-12-31 16:17:02 -0800 (Wed, 31 Dec 2008)
Author: Paul
Trac: http://trac.dabodev.com/changeset/4900

Changed:
U   trunk/dabo/ui/uiwx/dSpinner.py

Log:
I did some refactoring of duplicated code in dSpinner.py, and cleared 
up cases where duplicate spin an hit events were being raised.


Diff:
Modified: trunk/dabo/ui/uiwx/dSpinner.py
===================================================================
--- trunk/dabo/ui/uiwx/dSpinner.py      2008-12-29 22:22:39 UTC (rev 4899)
+++ trunk/dabo/ui/uiwx/dSpinner.py      2009-01-01 00:17:02 UTC (rev 4900)
@@ -26,14 +26,14 @@
                                *args, **kwargs)
 
 
-       def __onWxSpinUp(self, evt):
-               self.raiseEvent(dEvents.SpinUp, spinType="button")
-               self.raiseEvent(dEvents.Spinner, spinType="button")
+#      def __onWxSpinUp(self, evt):
+#              self.raiseEvent(dEvents.SpinUp, spinType="button")
+#              self.raiseEvent(dEvents.Spinner, spinType="button")
 
 
-       def __onWxSpinDown(self, evt):
-               self.raiseEvent(dEvents.SpinDown, spinType="button")
-               self.raiseEvent(dEvents.Spinner, spinType="button")
+#      def __onWxSpinDown(self, evt):
+#              self.raiseEvent(dEvents.SpinDown, spinType="button")
+#              self.raiseEvent(dEvents.Spinner, spinType="button")
 
 
 
@@ -78,10 +78,12 @@
                self._proxy_spinner._addWindowStyleFlag(wx.SP_WRAP)
                ps.Bind(wx.EVT_SPIN_UP, self.__onWxSpinUp)
                ps.Bind(wx.EVT_SPIN_DOWN, self.__onWxSpinDown)
-               ps.Bind(wx.EVT_SPIN, self._onWxHit)
+               #ps.Bind(wx.EVT_SPIN, self._onWxHit)
                pt.Bind(wx.EVT_TEXT, self._onWxHit)
+               pt.Bind(wx.EVT_KEY_DOWN, self._onWxKeyDown)
+               ps.Bind(wx.EVT_KEY_DOWN, self._onWxKeyDown)
                pt.Bind(wx.EVT_KILL_FOCUS, self._onLostFocus)
-               self.bindEvent(dEvents.KeyChar, self._onChar)
+               #self.bindEvent(dEvents.KeyChar, self._onChar)
                self._rerestoreValue()
  
 
@@ -147,58 +149,58 @@
                return ret
                
 
-       def _spinUp(self, evt=None):
-               """Handles a user request to increment the value."""
-               ret = True
-               curr = self._proxy_textbox.Value
-               newVal = self._applyIncrement(operator.add)
-               minn, maxx, margin = self._coerceTypes(newVal, self.Min, 
self.Max, 0.0001)
-               diff = newVal - maxx
-               if diff < margin:
-                       self._proxy_textbox.Value = newVal
-               elif self._spinWrap:
-                       self._proxy_textbox.Value = minn + diff
-               else:
-                       ret = False
-               self._checkBounds()
-               self._userChanged = True
-               self.flushValue()
-               self.raiseEvent(dEvents.Hit, hitType="button")
-               return ret
+       def _spin(self, direction, spinType=None):
+               assert direction in ("up", "down")
 
+               incrementFunc = operator.add
+               margin = 0.0001
+               if direction == "down":
+                       incrementFunc = operator.sub
+                       margin = -0.0001
 
-       def _spinDown(self, evt=None):
-               """Handles a user request to decrement the value."""
                ret = True
                curr = self._proxy_textbox.Value
-               newVal = self._applyIncrement(operator.sub)
-               minn, maxx, margin = self._coerceTypes(newVal, self.Min, 
self.Max, -0.0001)
-               diff = newVal - minn
-               if diff > margin:
-                       self._proxy_textbox.Value = newVal
-               elif self._spinWrap:
-                       self._proxy_textbox.Value = maxx + diff
+               newVal = self._applyIncrement(incrementFunc)
+               minn, maxx, margin = self._coerceTypes(newVal, self.Min, 
self.Max, margin)
+
+               if direction == "up":
+                       diff = newVal - maxx
+                       if diff < margin:
+                               self._proxy_textbox.Value = newVal
+                       elif self._spinWrap:
+                               self._proxy_textbox.Value = minn
+                       else:
+                               ret = False
+                       if ret:
+                               self.raiseEvent(dEvents.SpinUp, 
spinType=spinType)
+                               self.raiseEvent(dEvents.Spinner, 
spinType=spinType)
+                               
                else:
-                       ret = False
+                       diff = newVal - minn
+                       if diff > margin:
+                               self._proxy_textbox.Value = newVal
+                       elif self._spinWrap:
+                               self._proxy_textbox.Value = maxx
+                       else:
+                               ret = False
+                       if ret:
+                               self.raiseEvent(dEvents.SpinDown, 
spinType=spinType)
+                               self.raiseEvent(dEvents.Spinner, 
spinType=spinType)
+
                self._checkBounds()
                self._userChanged = True
                self.flushValue()
-               self.raiseEvent(dEvents.Hit, hitType="button")
+               self.raiseEvent(dEvents.Hit, hitType=spinType)
                return ret
 
 
        def __onWxSpinUp(self, evt):
                """Respond to the wx event by raising the Dabo event."""
-               if self._spinUp():
-                       self.raiseEvent(dEvents.SpinUp, spinType="button")
-                       self.raiseEvent(dEvents.Spinner, spinType="button")
+               self._spin("up", spinType="button")
 
-
        def __onWxSpinDown(self, evt):
                """Respond to the wx event by raising the Dabo event."""
-               if self._spinDown():
-                       self.raiseEvent(dEvents.SpinDown, spinType="button")
-                       self.raiseEvent(dEvents.Spinner, spinType="button")
+               self._spin("down", spinType="button")
        
        
        def _checkBounds(self):
@@ -220,24 +222,19 @@
                super(dSpinner, self)._onWxHit(evt, hitType=typ)
 
 
-       def _onChar(self, evt):
+       def _onWxKeyDown(self, evt):
                """Handle the case where the user presses the up/down arrows to 
                activate the spinner.
                """
                keys = dabo.ui.dKeys
-               kc = evt.keyCode
+               kc = evt.GetKeyCode()
                if kc in (keys.key_Up, keys.key_Numpad_up):
-                       if self._spinUp():
-                               self.raiseEvent(dEvents.SpinUp, spinType="key")
-                               self.raiseEvent(dEvents.Spinner, spinType="key")
-                       self._onWxHit(None)
+                       self._spin("up", spinType="key")
                elif kc in (keys.key_Down, keys.key_Numpad_down):
-                       if self._spinDown():
-                               self.raiseEvent(dEvents.SpinDown, 
spinType="key")
-                               self.raiseEvent(dEvents.Spinner, spinType="key")
-                       self._onWxHit(None)
+                       self._spin("down", spinType="key")
+               else:
+                       evt.Skip()
 
-
        def _onLostFocus(self, evt):
                """We need to handle the case where the user types an invalid 
value
                into the textbox and then tabs/clicks away.




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: 
http://leafe.com/archives/byMID/[email protected]

Reply via email to