Author: reinhard
Date: 2010-12-16 14:56:25 -0600 (Thu, 16 Dec 2010)
New Revision: 10272

Modified:
   trunk/gnue-forms/
   trunk/gnue-forms/src/GFForm.py
   trunk/gnue-forms/src/GFObjects/GFEntry.py
   trunk/gnue-forms/src/GFObjects/GFTabStop.py
   trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
   trunk/gnue-forms/src/input/displayHandlers/Cursor.py
   trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
Log:
Reworked text entry simulation, the previous implementation was broken
especially with regard to backspace handling.



Property changes on: trunk/gnue-forms
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2010-12-16 20:35:26.068000078 +0100
committer: Reinhard Müller <[email protected]>
properties: 
        branch-nick: forms

   + timestamp: 2010-12-16 21:55:02.346999884 +0100
committer: Reinhard Müller <[email protected]>
properties: 
        branch-nick: forms

Name: bzr:file-ids
   - src/input/displayHandlers/Cursor.py        
7...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCursor.py

   + src/GFForm.py      
6...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2FGFForm.py
src/GFObjects/GFEntry.py        
1...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2FGFObjects%2FGFEntry.py
src/GFObjects/GFTabStop.py      
3...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py
src/input/displayHandlers/Checkbox.py   
7...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCheckbox.py
src/input/displayHandlers/Cursor.py     
7...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2Finput%2FdisplayHandlers%2FCursor.py
src/uidrivers/wx/widgets/entry.py       
10...@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py

Name: bzr:revision-id:v4
   - 3116 [email protected]
3117 [email protected]
3118 [email protected]
3119 [email protected]
3120 [email protected]
3121 [email protected]
3122 [email protected]
3123 [email protected]
3124 [email protected]
3125 [email protected]
3126 [email protected]
3127 [email protected]
3128 [email protected]
3129 [email protected]
3130 [email protected]
3131 [email protected]
3132 [email protected]
3133 [email protected]
3134 [email protected]
3135 [email protected]
3136 [email protected]
3137 [email protected]
3138 [email protected]
3139 [email protected]
3140 [email protected]
3141 [email protected]
3142 [email protected]
3143 [email protected]
3144 [email protected]
3145 [email protected]
3146 [email protected]
3147 [email protected]
3148 [email protected]
3149 [email protected]
3150 [email protected]
3151 [email protected]
3152 [email protected]
3153 [email protected]
3154 [email protected]
3155 [email protected]
3156 [email protected]
3157 [email protected]
3158 [email protected]
3159 [email protected]
3160 [email protected]
3161 [email protected]
3162 [email protected]
3163 [email protected]
3164 [email protected]
3165 [email protected]
3166 [email protected]
3167 [email protected]
3168 [email protected]
3169 [email protected]
3170 [email protected]
3171 [email protected]
3172 [email protected]
3173 [email protected]
3174 [email protected]
3175 [email protected]
3176 [email protected]
3177 [email protected]

   + 3116 [email protected]
3117 [email protected]
3118 [email protected]
3119 [email protected]
3120 [email protected]
3121 [email protected]
3122 [email protected]
3123 [email protected]
3124 [email protected]
3125 [email protected]
3126 [email protected]
3127 [email protected]
3128 [email protected]
3129 [email protected]
3130 [email protected]
3131 [email protected]
3132 [email protected]
3133 [email protected]
3134 [email protected]
3135 [email protected]
3136 [email protected]
3137 [email protected]
3138 [email protected]
3139 [email protected]
3140 [email protected]
3141 [email protected]
3142 [email protected]
3143 [email protected]
3144 [email protected]
3145 [email protected]
3146 [email protected]
3147 [email protected]
3148 [email protected]
3149 [email protected]
3150 [email protected]
3151 [email protected]
3152 [email protected]
3153 [email protected]
3154 [email protected]
3155 [email protected]
3156 [email protected]
3157 [email protected]
3158 [email protected]
3159 [email protected]
3160 [email protected]
3161 [email protected]
3162 [email protected]
3163 [email protected]
3164 [email protected]
3165 [email protected]
3166 [email protected]
3167 [email protected]
3168 [email protected]
3169 [email protected]
3170 [email protected]
3171 [email protected]
3172 [email protected]
3173 [email protected]
3174 [email protected]
3175 [email protected]
3176 [email protected]
3177 [email protected]
3178 [email protected]

Name: bzr:text-parents
   - src/input/displayHandlers/Cursor.py        
[email protected]

   + src/GFForm.py      
[email protected]
src/GFObjects/GFEntry.py        
[email protected]
src/GFObjects/GFTabStop.py      
[email protected]
src/input/displayHandlers/Checkbox.py   
[email protected]
src/uidrivers/wx/widgets/entry.py       
[email protected]


Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py      2010-12-16 19:46:27 UTC (rev 10271)
+++ trunk/gnue-forms/src/GFForm.py      2010-12-16 20:56:25 UTC (rev 10272)
@@ -161,7 +161,6 @@
             'paste': {'function': self.paste},
             'select_all': {'function': self.select_all},
             'enter_text': {'function': self.enter_text},
-            'backspace': {'function': self.backspace},
 
             # Focus movement
             'next_entry': {'function': self.next_entry},
@@ -741,7 +740,7 @@
 
 
     # =========================================================================
-    # Clipboard and selection
+    # Clipboard, selection, and text entry
     # =========================================================================
 
     # -------------------------------------------------------------------------
@@ -776,6 +775,7 @@
         if isinstance(self._currentEntry, GFFieldBound):
             self._currentEntry.paste()
 
+
     # -------------------------------------------------------------------------
     # Selection
     # -------------------------------------------------------------------------
@@ -788,6 +788,7 @@
         if isinstance(self._currentEntry, GFFieldBound):
             self._currentEntry.select_all()
 
+
     # -------------------------------------------------------------------------
     # Text entry
     # -------------------------------------------------------------------------
@@ -795,21 +796,17 @@
     def enter_text(self, text):
         """
         Enter text into the current entry as if typed in by the user.
-        """
 
-        if isinstance(self._currentEntry, GFFieldBound):
-            self._currentEntry.enter_text(text)
+        When given a backspace in the text parameter, the current entry behaves
+        as if the backspace key was hit by the user.
 
-    # -------------------------------------------------------------------------
-
-    def backspace(self):
+        Not all kinds of entries handle this.
         """
-        Delete the character left to the cursor in the current entry.
-        """
 
-        if isinstance(self._currentEntry, GFFieldBound):
-            self._currentEntry.backspace()
+        if isinstance(self._currentEntry, GFEntry):
+            self._currentEntry.enter_text(text)
 
+
     # =========================================================================
     # Focus functions
     # =========================================================================

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2010-12-16 19:46:27 UTC (rev 
10271)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2010-12-16 20:56:25 UTC (rev 
10272)
@@ -158,6 +158,25 @@
     has_label = property(__get_has_label)
 
 
+    # -------------------------------------------------------------------------
+    # Simulate text entry
+    # -------------------------------------------------------------------------
+
+    def enter_text(self, text):
+        """
+        Add the given text to the entry as if it was typed in by the user.
+
+        This can only used for real texts, it does not process function or
+        control keys. If the entry currently has an active selection, it is
+        overwritten.
+
+        @param text: text to add to the entry.
+        @type text: unicode
+        """
+
+        self.uiWidget._ui_enter_text_(self.visible_index, text)
+
+
     # =========================================================================
     # Trigger functions
     # =========================================================================

Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-16 19:46:27 UTC (rev 
10271)
+++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-16 20:56:25 UTC (rev 
10272)
@@ -709,29 +709,8 @@
         if self.uiWidget is not None and self.visible_index is not None:
             self.uiWidget._ui_select_all_(self.visible_index)
 
-    # -------------------------------------------------------------------------
 
-    def enter_text(self, text):
-        """
-        Add the given text to the entry as if it was typed in by the user.
-
-        This can only used for real texts, it does not process function or
-        control keys. If the entry currently has an active selection, it is
-        overwritten.
-
-        @param text: text to add to the entry.
-        @type text: unicode
-        """
-
-        self._displayHandler.enter_text(text)
-
     # -------------------------------------------------------------------------
-
-    def backspace(self):
-
-        self._displayHandler.backspace()
-
-    # -------------------------------------------------------------------------
     # Refresh the user interface with the current field data for current row
     # -------------------------------------------------------------------------
 

Modified: trunk/gnue-forms/src/input/displayHandlers/Checkbox.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Checkbox.py      2010-12-16 
19:46:27 UTC (rev 10271)
+++ trunk/gnue-forms/src/input/displayHandlers/Checkbox.py      2010-12-16 
20:56:25 UTC (rev 10272)
@@ -123,7 +123,7 @@
 
 
   # Correctly handle requestKEYPRESS event
-  def enter_text(self, text):
+  def _addText(self, text):
     if text == ' ':
       self.__toggle ()
     elif text in ['0', '-']:      # TODO: add "Y" for current language

Modified: trunk/gnue-forms/src/input/displayHandlers/Cursor.py
===================================================================
--- trunk/gnue-forms/src/input/displayHandlers/Cursor.py        2010-12-16 
19:46:27 UTC (rev 10271)
+++ trunk/gnue-forms/src/input/displayHandlers/Cursor.py        2010-12-16 
20:56:25 UTC (rev 10272)
@@ -180,15 +180,6 @@
 
     def _addText(self, event):
 
-        self.enter_text(event.text)
-
-    # -------------------------------------------------------------------------
-
-    def enter_text(self, text):
-        """
-        Enter a text into the entry.
-        """
-
         if self._selection1 is not None:
             # If text is selected, then we will replace
             (start, end) = self.getSelectionArea()
@@ -224,12 +215,6 @@
 
     def _backspace(self, event):
 
-        self.backspace()
-
-    # -------------------------------------------------------------------------
-
-    def backspace(self):
-
         # If there is a selection, delete the selected portion.
         if self._selection1 is not None:
             (start, end) = self.getSelectionArea()

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2010-12-16 19:46:27 UTC 
(rev 10271)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2010-12-16 20:56:25 UTC 
(rev 10272)
@@ -657,6 +657,28 @@
 
 
     # -------------------------------------------------------------------------
+    # Keypress simulation
+    # -------------------------------------------------------------------------
+
+    def _ui_enter_text_(self, index, text):
+
+        widget = self.widgets[index]
+
+        if isinstance(widget, (wx.TextCtrl, wx.ComboBox, NumberEntryCtrl)):
+            if isinstance(widget, wx.ComboBox):
+                (s1, s2) = widget.GetMark()
+            else:
+                (s1, s2) = widget.GetSelection()
+            if text == "\x08":
+                # Backspace
+                if s1 == s2 and s1 > 0:
+                    s1 -= 1
+                widget.Remove(s1, s2)
+            else:
+                widget.Replace(s1, s2, text)
+
+
+    # -------------------------------------------------------------------------
     # Clipboard and selection
     # -------------------------------------------------------------------------
 
@@ -910,6 +932,12 @@
 
     # -------------------------------------------------------------------------
 
+    def GetSelection(self, *args, **kwargs):
+
+        return self.GetTextCtrl().GetSelection(*args, **kwargs)
+
+    # -------------------------------------------------------------------------
+
     def SetSelection(self, *args, **kwargs):
 
         return self.GetTextCtrl().SetSelection(*args, **kwargs)
@@ -920,6 +948,18 @@
 
         return self.GetTextCtrl().SetInsertionPoint(*args, **kwargs)
 
+    # -------------------------------------------------------------------------
+
+    def Remove(self, *args, **kwargs):
+
+        return self.GetTextCtrl().Remove(*args, **kwargs)
+
+    # -------------------------------------------------------------------------
+
+    def Replace(self, *args, **kwargs):
+
+        return self.GetTextCtrl().Replace(*args, **kwargs)
+
 # =============================================================================
 
 class NumberEntryPopup(wx.combo.ComboPopup):


_______________________________________________
commit-gnue mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/commit-gnue

Reply via email to