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
