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