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 <reinhard.muel...@bytewise.at>
properties: 
        branch-nick: forms

   + timestamp: 2010-12-16 21:55:02.346999884 +0100
committer: Reinhard Müller <reinhard.muel...@bytewise.at>
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 reinhard.muel...@bytewise.at-20100426083500-vtmq0qvd7htz02zx
3117 reinhard.muel...@bytewise.at-20100512151744-2jx8tmtop30kl5n0
3118 reinhard.muel...@bytewise.at-20100705094014-ks9yv7b8gs6ychrb
3119 reinhard.muel...@bytewise.at-20100706085143-hyxadj30ayg28jpx
3120 reinhard.muel...@bytewise.at-20100706140804-sn3npws1ykm81ubx
3121 reinhard.muel...@bytewise.at-20100909134008-5p7jq048nkutldse
3122 reinhard.muel...@bytewise.at-20100923144753-e8hthxho7n5mwg9z
3123 reinhard.muel...@bytewise.at-20100929193018-7r3injoy8g28fwm6
3124 reinhard.muel...@bytewise.at-20100930073631-ilf6smgjt6mfvkpz
3125 reinhard.muel...@bytewise.at-20101011191957-yaj9rkqbervc91ac
3126 reinhard.muel...@bytewise.at-20101020084039-jmfxjbctt6vc2usd
3127 reinhard.muel...@bytewise.at-20101020124425-0dpprxsmanmaenty
3128 reinhard.muel...@bytewise.at-20101020124541-zppkmzww1lnsk8x4
3129 reinhard.muel...@bytewise.at-20101020141905-vjg7r3wihnm7mxam
3130 reinhard.muel...@bytewise.at-20101020143045-pf9ywx1s3hdqbsh7
3131 reinhard.muel...@bytewise.at-20101020143328-ctfmr3fpp5quq1eo
3132 reinhard.muel...@bytewise.at-20101020152139-rlllh9m2qn45atcz
3133 reinhard.muel...@bytewise.at-20101020163022-tgnjcv18nzrc5sfw
3134 reinhard.muel...@bytewise.at-20101020165411-krluvclyw61ef9zp
3135 reinhard.muel...@bytewise.at-20101020185529-pmdkwkm59c1h630f
3136 reinhard.muel...@bytewise.at-20101020195954-1kd9avbmzkrzwzbt
3137 reinhard.muel...@bytewise.at-20101020202048-8q84nx5a54ifxkla
3138 reinhard.muel...@bytewise.at-20101027211256-o7pi879h2x1ceri2
3139 reinhard.muel...@bytewise.at-20101028135833-wftnu2r1cocknxyf
3140 reinhard.muel...@bytewise.at-20101028144709-dbamfa759xoeh127
3141 reinhard.muel...@bytewise.at-20101028145355-uhqftv7n1bcvuz8l
3142 reinhard.muel...@bytewise.at-20101028151042-ueeqwlufysjbke01
3143 reinhard.muel...@bytewise.at-20101028153459-522p7574jw2e11jj
3144 reinhard.muel...@bytewise.at-20101028164956-gua27xm7ad12a218
3145 reinhard.muel...@bytewise.at-20101028181046-hxaehghl84zx9ye0
3146 reinhard.muel...@bytewise.at-20101028194606-598w1lqua0te1m7j
3147 reinhard.muel...@bytewise.at-20101028205855-5k1f08wfdgofenjd
3148 reinhard.muel...@bytewise.at-20101102154340-basdvi9wrxzbx4va
3149 reinhard.muel...@bytewise.at-20101102155520-bbh74pv3qjur1epo
3150 reinhard.muel...@bytewise.at-20101112154024-57tv8mf0wbiycuw1
3151 reinhard.muel...@bytewise.at-20101112155954-ky2g6irsodlzg6yy
3152 reinhard.muel...@bytewise.at-20101114210345-8zsz8bdxtwjytkss
3153 reinhard.muel...@bytewise.at-20101114213813-m10tqf7r2elldh6l
3154 reinhard.muel...@bytewise.at-20101115202536-k0zrvggyt6jy8h0y
3155 reinhard.muel...@bytewise.at-20101122074637-ydmqkqy3udno2n5m
3156 reinhard.muel...@bytewise.at-20101122083336-1n0xys8y4ivtfzo4
3157 reinhard.muel...@bytewise.at-20101201210052-n8pz9fkj6z95zlo2
3158 reinhard.muel...@bytewise.at-20101202012351-kou0f0zchuws25al
3159 reinhard.muel...@bytewise.at-20101202125150-izgvlp3p35t6ny4q
3160 reinhard.muel...@bytewise.at-20101202145210-pf97mpvy5nvhkzqz
3161 reinhard.muel...@bytewise.at-20101202160021-cwhtwpidejk31t6w
3162 reinhard.muel...@bytewise.at-20101202174643-d9ydcs06o8kfy8h7
3163 reinhard.muel...@bytewise.at-20101202180214-zbmb7u0eec43z58g
3164 reinhard.muel...@bytewise.at-20101202202940-kv3x2nnl7ljp8ywo
3165 reinhard.muel...@bytewise.at-20101202204605-4conpgzutzq33iza
3166 reinhard.muel...@bytewise.at-20101202222547-mhsz18h7mqtifatt
3167 reinhard.muel...@bytewise.at-20101203082101-4u4p255falj52btx
3168 reinhard.muel...@bytewise.at-20101203101318-9xi1eyhql8obrhy1
3169 reinhard.muel...@bytewise.at-20101203101750-eeesm6a88ihyja18
3170 reinhard.muel...@bytewise.at-20101203105845-pb8n81gdqfjhb3fi
3171 reinhard.muel...@bytewise.at-20101203112140-2fva9rrj0j87abw4
3172 reinhard.muel...@bytewise.at-20101203115417-rw7t0y2fxoqksceo
3173 reinhard.muel...@bytewise.at-20101203133118-qtzn9umcgo0j75xj
3174 reinhard.muel...@bytewise.at-20101207234352-a0t9jal1a3hhl6w5
3175 reinhard.muel...@bytewise.at-20101208000304-7uofgoiy9afr66t0
3176 reinhard.muel...@bytewise.at-20101211165220-2jxsfkmi6hfk5vix
3177 reinhard.muel...@bytewise.at-20101216193526-a2stgysag5f7wdgx

   + 3116 reinhard.muel...@bytewise.at-20100426083500-vtmq0qvd7htz02zx
3117 reinhard.muel...@bytewise.at-20100512151744-2jx8tmtop30kl5n0
3118 reinhard.muel...@bytewise.at-20100705094014-ks9yv7b8gs6ychrb
3119 reinhard.muel...@bytewise.at-20100706085143-hyxadj30ayg28jpx
3120 reinhard.muel...@bytewise.at-20100706140804-sn3npws1ykm81ubx
3121 reinhard.muel...@bytewise.at-20100909134008-5p7jq048nkutldse
3122 reinhard.muel...@bytewise.at-20100923144753-e8hthxho7n5mwg9z
3123 reinhard.muel...@bytewise.at-20100929193018-7r3injoy8g28fwm6
3124 reinhard.muel...@bytewise.at-20100930073631-ilf6smgjt6mfvkpz
3125 reinhard.muel...@bytewise.at-20101011191957-yaj9rkqbervc91ac
3126 reinhard.muel...@bytewise.at-20101020084039-jmfxjbctt6vc2usd
3127 reinhard.muel...@bytewise.at-20101020124425-0dpprxsmanmaenty
3128 reinhard.muel...@bytewise.at-20101020124541-zppkmzww1lnsk8x4
3129 reinhard.muel...@bytewise.at-20101020141905-vjg7r3wihnm7mxam
3130 reinhard.muel...@bytewise.at-20101020143045-pf9ywx1s3hdqbsh7
3131 reinhard.muel...@bytewise.at-20101020143328-ctfmr3fpp5quq1eo
3132 reinhard.muel...@bytewise.at-20101020152139-rlllh9m2qn45atcz
3133 reinhard.muel...@bytewise.at-20101020163022-tgnjcv18nzrc5sfw
3134 reinhard.muel...@bytewise.at-20101020165411-krluvclyw61ef9zp
3135 reinhard.muel...@bytewise.at-20101020185529-pmdkwkm59c1h630f
3136 reinhard.muel...@bytewise.at-20101020195954-1kd9avbmzkrzwzbt
3137 reinhard.muel...@bytewise.at-20101020202048-8q84nx5a54ifxkla
3138 reinhard.muel...@bytewise.at-20101027211256-o7pi879h2x1ceri2
3139 reinhard.muel...@bytewise.at-20101028135833-wftnu2r1cocknxyf
3140 reinhard.muel...@bytewise.at-20101028144709-dbamfa759xoeh127
3141 reinhard.muel...@bytewise.at-20101028145355-uhqftv7n1bcvuz8l
3142 reinhard.muel...@bytewise.at-20101028151042-ueeqwlufysjbke01
3143 reinhard.muel...@bytewise.at-20101028153459-522p7574jw2e11jj
3144 reinhard.muel...@bytewise.at-20101028164956-gua27xm7ad12a218
3145 reinhard.muel...@bytewise.at-20101028181046-hxaehghl84zx9ye0
3146 reinhard.muel...@bytewise.at-20101028194606-598w1lqua0te1m7j
3147 reinhard.muel...@bytewise.at-20101028205855-5k1f08wfdgofenjd
3148 reinhard.muel...@bytewise.at-20101102154340-basdvi9wrxzbx4va
3149 reinhard.muel...@bytewise.at-20101102155520-bbh74pv3qjur1epo
3150 reinhard.muel...@bytewise.at-20101112154024-57tv8mf0wbiycuw1
3151 reinhard.muel...@bytewise.at-20101112155954-ky2g6irsodlzg6yy
3152 reinhard.muel...@bytewise.at-20101114210345-8zsz8bdxtwjytkss
3153 reinhard.muel...@bytewise.at-20101114213813-m10tqf7r2elldh6l
3154 reinhard.muel...@bytewise.at-20101115202536-k0zrvggyt6jy8h0y
3155 reinhard.muel...@bytewise.at-20101122074637-ydmqkqy3udno2n5m
3156 reinhard.muel...@bytewise.at-20101122083336-1n0xys8y4ivtfzo4
3157 reinhard.muel...@bytewise.at-20101201210052-n8pz9fkj6z95zlo2
3158 reinhard.muel...@bytewise.at-20101202012351-kou0f0zchuws25al
3159 reinhard.muel...@bytewise.at-20101202125150-izgvlp3p35t6ny4q
3160 reinhard.muel...@bytewise.at-20101202145210-pf97mpvy5nvhkzqz
3161 reinhard.muel...@bytewise.at-20101202160021-cwhtwpidejk31t6w
3162 reinhard.muel...@bytewise.at-20101202174643-d9ydcs06o8kfy8h7
3163 reinhard.muel...@bytewise.at-20101202180214-zbmb7u0eec43z58g
3164 reinhard.muel...@bytewise.at-20101202202940-kv3x2nnl7ljp8ywo
3165 reinhard.muel...@bytewise.at-20101202204605-4conpgzutzq33iza
3166 reinhard.muel...@bytewise.at-20101202222547-mhsz18h7mqtifatt
3167 reinhard.muel...@bytewise.at-20101203082101-4u4p255falj52btx
3168 reinhard.muel...@bytewise.at-20101203101318-9xi1eyhql8obrhy1
3169 reinhard.muel...@bytewise.at-20101203101750-eeesm6a88ihyja18
3170 reinhard.muel...@bytewise.at-20101203105845-pb8n81gdqfjhb3fi
3171 reinhard.muel...@bytewise.at-20101203112140-2fva9rrj0j87abw4
3172 reinhard.muel...@bytewise.at-20101203115417-rw7t0y2fxoqksceo
3173 reinhard.muel...@bytewise.at-20101203133118-qtzn9umcgo0j75xj
3174 reinhard.muel...@bytewise.at-20101207234352-a0t9jal1a3hhl6w5
3175 reinhard.muel...@bytewise.at-20101208000304-7uofgoiy9afr66t0
3176 reinhard.muel...@bytewise.at-20101211165220-2jxsfkmi6hfk5vix
3177 reinhard.muel...@bytewise.at-20101216193526-a2stgysag5f7wdgx
3178 reinhard.muel...@bytewise.at-20101216205502-y7rxbvt79w19avee

Name: bzr:text-parents
   - src/input/displayHandlers/Cursor.py        
reinhard.muel...@bytewise.at-20101202174643-d9ydcs06o8kfy8h7

   + src/GFForm.py      
reinhard.muel...@bytewise.at-20101203133118-qtzn9umcgo0j75xj
src/GFObjects/GFEntry.py        
reinhard.muel...@bytewise.at-20101207234352-a0t9jal1a3hhl6w5
src/GFObjects/GFTabStop.py      
reinhard.muel...@bytewise.at-20101203105845-pb8n81gdqfjhb3fi
src/input/displayHandlers/Checkbox.py   
reinhard.muel...@bytewise.at-20101202174643-d9ydcs06o8kfy8h7
src/uidrivers/wx/widgets/entry.py       
reinhard.muel...@bytewise.at-20101211165220-2jxsfkmi6hfk5vix


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
commit-gnue@gnu.org
http://lists.gnu.org/mailman/listinfo/commit-gnue

Reply via email to