[gnue] r10253 - in trunk/gnue-forms: . src/GFObjects src/uidrivers/wx/widgets
[email protected] Thu, 2 Dec 2010 14:47:47 -0600 (CST)
| Newsgroups | gmane.comp.cms.gnue.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: reinhard Date: 2010-12-02 14:47:47 -0600 (Thu, 02 Dec 2010) New Revision: 10253 Modified: trunk/gnue-forms/ trunk/gnue-forms/src/GFObjects/GFBlock.py trunk/gnue-forms/src/GFObjects/GFEntry.py trunk/gnue-forms/src/GFObjects/GFField.py trunk/gnue-forms/src/GFObjects/GFTabStop.py trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py Log: Much improved behaviour of entries and grids when there is no current rec= ord. Property changes on: trunk/gnue-forms ___________________________________________________________________ Name: bzr:revision-info - timestamp: 2010-12-02 19:02:14.151999950 +0100 committer: Reinhard M=C3=BCller <[email protected]> properties:=20 branch-nick: forms + timestamp: 2010-12-02 21:29:40.832000017 +0100 committer: Reinhard M=C3=BCller <[email protected]> properties:=20 branch-nick: forms Name: bzr:file-ids - src/GFObjects/GFTabStop.py 3166@3a364389-8fce-0310-8f11-cc363fde16c7= :trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py src/uidrivers/qt3/widgets/entry.py 8696@3a364389-8fce-0310-8f11-cc363fde1= 6c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fqt3%2Fwidgets%2Fentry.py src/uidrivers/qt4/widgets/entry.py 9330@3a364389-8fce-0310-8f11-cc363fde1= 6c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fqt4%2Fwidgets%2Fentry.py src/uidrivers/wx/widgets/entry.py 10053@3a364389-8fce-0310-8f11-cc363fde1= 6c7:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py + src/GFObjects/GFBlock.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:t= runk%2Fgnue-forms:src%2FGFObjects%2FGFBlock.py src/GFObjects/GFEntry.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%= 2Fgnue-forms:src%2FGFObjects%2FGFEntry.py src/GFObjects/GFField.py 1459@3a364389-8fce-0310-8f11-cc363fde16c7:trunk%= 2Fgnue-forms:src%2FGFObjects%2FGFField.py src/GFObjects/GFTabStop.py 3166@3a364389-8fce-0310-8f11-cc363fde16c7:trun= k%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py src/uidrivers/wx/widgets/entry.py 10053@3a364389-8fce-0310-8f11-cc363fde1= 6c7: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] + 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] Name: bzr:text-parents - src/uidrivers/qt3/widgets/entry.py svn-v3-single1-dHJ1bmsvZ251ZS1mb3= Jtcw..:3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:10108 src/uidrivers/qt4/widgets/entry.py svn-v3-single1-dHJ1bmsvZ251ZS1mb3Jtcw.= .:3a364389-8fce-0310-8f11-cc363fde16c7:trunk%2Fgnue-forms:10108 src/uidrivers/wx/widgets/entry.py [email protected]= 3813-m10tqf7r2elldh6l + src/GFObjects/GFBlock.py [email protected]= -d9ydcs06o8kfy8h7 src/GFObjects/GFEntry.py [email protected]= cs06o8kfy8h7 src/GFObjects/GFField.py [email protected]= cs06o8kfy8h7 Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-12-02 20:47:44 UTC (re= v 10252) +++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2010-12-02 20:47:47 UTC (re= v 10253) @@ -943,9 +943,6 @@ current record. """ =20 - if self._dataSourceLink.type =3D=3D 'unbound': - return None - if self.mode =3D=3D 'query': return None =20 @@ -1531,21 +1528,20 @@ newRecord =3D 0 newRecordCount =3D 1 elif self.__resultset is None: - newRecord =3D 0 + newRecord =3D -1 newRecordCount =3D 0 else: newRecord =3D self.__resultset.getRecordNumber() newRecordCount =3D self.__resultset.getRecordCount() =20 - adjustment =3D newRecord - self._currentRecord - if new_visible_start is None: new_visible_start =3D self.__visible_start new_visible_start =3D max(new_visible_start, newRecord - self._r= ows + 1) new_visible_start =3D max(new_visible_start, 0) new_visible_start =3D min(new_visible_start, newRecord) =20 - adjustment +=3D self.__visible_start - new_visible_start + scroll =3D new_visible_start - self.__visible_start + self.__visible_start =3D new_visible_start =20 # Find out which ui entries to refresh @@ -1566,7 +1562,7 @@ # also contains the entries that are bound to us via grid_link. for field in self._fieldMap.itervalues(): for entry in field._entryList: - entry.recalculate_visible(adjustment, self._currentRecor= d, + entry.recalculate_visible(scroll, self._currentRecord, self.__record_count, refresh) =20 self.__adjust_scrollbars() Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFEntry.py 2010-12-02 20:47:44 UTC (re= v 10252) +++ trunk/gnue-forms/src/GFObjects/GFEntry.py 2010-12-02 20:47:47 UTC (re= v 10253) @@ -118,18 +118,22 @@ if self.style =3D=3D 'label': if not GFTabStop._is_enabled_(self, index): return False + + if self.visible_offset is None: + # No record displayed at all + return False + + # Consider empty labels disabled. This makes a difference fo= r + # the enclosing boxes. + if index is None: + record_number =3D None else: - # Consider empty labels disabled. This makes a differenc= e for - # the enclosing boxes. - if index is None: - record_number =3D None - else: - record_number =3D self.visible_offset + index - return (self._field.get_value(record_number) is not None= ) - else: - return GFFieldBound._is_enabled_(self, index) + record_number =3D self.visible_offset + index + return (self._field.get_value(record_number) is not None) =20 + return GFFieldBound._is_enabled_(self, index) =20 + # ------------------------------------------------------------------= ------- # Refresh the user interface with the current field data # ------------------------------------------------------------------= ------- Modified: trunk/gnue-forms/src/GFObjects/GFField.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFField.py 2010-12-02 20:47:44 UTC (re= v 10252) +++ trunk/gnue-forms/src/GFObjects/GFField.py 2010-12-02 20:47:47 UTC (re= v 10253) @@ -297,9 +297,12 @@ if self.editable =3D=3D 'N': return False =20 - new =3D (self._block.get_record_status(record_number) \ - in ['empty', 'inserted', 'void']) + status =3D self._block.get_record_status(record_number) + if status is None: + return False =20 + new =3D status in ['empty', 'inserted', 'void'] + if self._block.editable =3D=3D 'new' and not new: return False if self.editable =3D=3D 'new' and not new: Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-02 20:47:44 UTC (= rev 10252) +++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2010-12-02 20:47:47 UTC (= rev 10253) @@ -77,10 +77,9 @@ self._rows =3D 1 self._gap =3D 0 =20 - self.__visible_offset =3D 0 + self.__visible_offset =3D None self.__visible_index =3D 0 - self.__last_enabled_row =3D None - self.__current_row_enabled =3D True + self.__enabled_rows =3D None =20 =20 # ------------------------------------------------------------------= ------- @@ -114,7 +113,7 @@ if self._block: self._block._entryList.append(self) =20 - self.__last_enabled_row =3D self._rows - 1 + self.__enabled_rows =3D self._rows =20 =20 # ------------------------------------------------------------------= ------- @@ -143,9 +142,14 @@ and index =3D=3D self.__visible_index: return =20 - self._form._event_focus_changed(self, - self.__visible_offset + index) + if self.__visible_offset is None: + # Click on a button which is bound to a block. + record_number =3D None + else: + record_number =3D self.__visible_offset + index =20 + self._form._event_focus_changed(self, record_number) + # ------------------------------------------------------------------= ------- =20 def _event_line_up(self): @@ -244,6 +248,8 @@ If this entry is part of a grid, this property contains the reco= rd number of the record visible in the first line. This is equal to= the number of records which have scrolled out through the top of the= grid. + If the grid is completely empty because the current block has no + records, this property contains None. =20 If this entry is not part of a grid, this property simply contai= ns the record number currently visible in the entry, or None if no reco= rd is @@ -261,7 +267,8 @@ current record is not visible in the grid (for example, because = there is no current record set), this property holds None. =20 - If this entry is not part of a grid, this property always contai= ns 0. + If this entry is not part of a grid, this property always contai= ns if + there is a current record, and None if there is no current recor= d. """ return self.__visible_index =20 @@ -269,7 +276,7 @@ # Recalculate the visible index of an object # ------------------------------------------------------------------= ------- =20 - def recalculate_visible(self, adjustment, cur_record, rec_count, ref= resh): + def recalculate_visible(self, scroll, cur_record, rec_count, refresh= ): """ Process a record pointer movement or a result set change for thi= s entry. @@ -279,7 +286,7 @@ number of available records, and it redisplays the contents of t= he entry as needed. =20 - @param adjustment: value to change the visible index, e.g. 1 or = -1 + @param scroll: How much records to scroll. @param cur_record: the currently active record, or -1 if there i= s no record active currently. @param rec_count: the number of records available at all @@ -296,66 +303,67 @@ =20 if self._form.get_focus_object() is self: self.ui_focus_out() + try: old_visible_index =3D self.__visible_index =20 - index =3D min(max(self.__visible_index + adjustment, 0), - int(self._rows)-1) + if cur_record =3D=3D -1 and self._rows =3D=3D 1: + # Single entry (no grid), no current record: no record + # displayed. + new_visible_offset =3D None + else: + # Display records, if the entry is in a grid even if the= re is + # no current record. + if self.__visible_offset is not None: + new_visible_offset =3D self.__visible_offset + scrol= l + else: + new_visible_offset =3D 0 =20 - # Don't let the index pass the number of records - lowestVisible =3D max(cur_record - index, 0) - if lowestVisible + index > rec_count: - index =3D index -1 + new_visible_offset =3D min(new_visible_offset, rec_count= - self._rows) + new_visible_offset =3D max(new_visible_offset, 0) + if cur_record !=3D -1: + new_visible_offset =3D max(new_visible_offset, cur_r= ecord - self._rows + 1) + new_visible_offset =3D min(new_visible_offset, cur_r= ecord) =20 - # If the current record has rolled around from the top to th= e - # bottom then reset the counter. - if cur_record =3D=3D 0: - index =3D 0 + if new_visible_offset !=3D self.__visible_offset: + # If we have scrolled, redisplay all records + refresh =3D 'all' =20 - self.__visible_index =3D index + self.__visible_offset =3D new_visible_offset =20 + if cur_record =3D=3D -1: + self.__visible_index =3D None + else: + self.__visible_index =3D cur_record - self.__visible_off= set + if self.uiWidget is not None: - if self.__last_enabled_row is None: + if self.__enabled_rows is None: # if running for the first time, all rows are enable= d # because widgets are created enabled by default - self.__last_enabled_row =3D self._rows - 1 + self.__enabled_rows =3D self._rows =20 - # Re-enable old current row if it was disabled - if not self.__current_row_enabled: - self.uiWidget._ui_set_enabled_(old_visible_index, Tr= ue) - self.__current_row_enabled =3D True + if self.__visible_offset is None: + enabled_rows =3D 0 + else: + enabled_rows =3D rec_count - self.__visible_offset + enabled_rows =3D min(enabled_rows, self._rows) =20 - last_enabled_row =3D self.__visible_index + \ - (rec_count - cur_record) - 1 - last_enabled_row =3D min(last_enabled_row, self._rows - = 1) - # Disable rows if necessary - for i in range(last_enabled_row+1, self.__last_enabled_r= ow+1): + for i in range(enabled_rows, self.__enabled_rows): self.uiWidget._ui_set_enabled_(i, False) =20 # Enable rows if necessary - for i in range(self.__last_enabled_row+1, last_enabled_r= ow+1): - self.uiWidget._ui_set_enabled_(i, False) + for i in range(self.__enabled_rows, enabled_rows): + self.uiWidget._ui_set_enabled_(i, True) =20 - self.__last_enabled_row =3D last_enabled_row + self.__enabled_rows =3D enabled_rows =20 - # Disable current row if current record is -1 - if cur_record =3D=3D -1: - self.uiWidget._ui_set_enabled_(self.__visible_index,= False) - self.__current_row_enabled =3D False - - first_visible_record =3D cur_record - self.__visible_ind= ex - if first_visible_record !=3D self.__visible_offset: - # If we have scrolled, redisplay all records + if refresh =3D=3D 'all': refresh_start =3D 0 - self.__visible_offset =3D first_visible_record + elif refresh =3D=3D 'current': + refresh_start =3D max(old_visible_index, self.__visi= ble_index) else: - if refresh =3D=3D 'all': - refresh_start =3D 0 - elif refresh =3D=3D 'current': - refresh_start =3D max(old_visible_index, self.__= visible_index) - else: - refresh_start =3D None + refresh_start =3D None =20 if isinstance(self, GFFieldBound) and refresh_start is n= ot None: self.refresh_ui(refresh_start, self._rows - 1) @@ -395,7 +403,7 @@ def __update_status(self, refresh_start): =20 if self.uiWidget is not None: - for index in range(refresh_start, self.__last_enabled_row + = 1): + for index in range(refresh_start, self.__enabled_rows): self.uiWidget._ui_set_enabled_(index, self._is_enabled_(= index)) self.getParent().update_status() =20 @@ -570,10 +578,7 @@ record. """ =20 - if self.__current_row_enabled: - self.uiWidget._ui_set_current_row_(self.__visible_index) - else: - self.uiWidget._ui_set_current_row_(-1) + self.uiWidget._ui_set_current_row_(self.__visible_index) =20 =20 # =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D @@ -627,19 +632,23 @@ =20 if not GFTabStop._is_enabled_(self, index): return False + + if self.visible_offset is None: + # No record displayed + return False + + if index is None: + record_number =3D None else: - if index is None: - record_number =3D None - else: - record_number =3D self.visible_offset + index - return self._field.is_editable(record_number) + record_number =3D self.visible_offset + index + return self._field.is_editable(record_number) =20 =20 # ------------------------------------------------------------------= ------- # UI events (called from UIEntry) # ------------------------------------------------------------------= ------- =20 - def _event_jump_records(self, index): + def _event_goto_record(self, index): """ Move the database cursor as a result of the user clicking on a p= art of the grid which can't receive the focus. @@ -725,7 +734,8 @@ =20 def refresh_ui_current(self): =20 - self.refresh_ui(self.visible_index, self.visible_index) + if self.visible_index is not None: + self.refresh_ui(self.visible_index, self.visible_index) =20 =20 # ------------------------------------------------------------------= ------- @@ -748,14 +758,18 @@ =20 for index in range (from_index, to_index + 1): # Do not execute if we were editing - would overwrite unsave= d change - if not (index =3D=3D self.visible_index \ - and self._displayHandler.editing): + if (index =3D=3D self.visible_index and self._displayHandler= .editing): + continue + + if self.visible_offset is not None: try: value =3D self._field.get_value(self.visible_offset = + index) except Exception: # invalid value value =3D None - display =3D self._displayHandler.build_display(value, Fa= lse) - self.uiWidget._ui_set_value_(index, display) + else: + value =3D None + display =3D self._displayHandler.build_display(value, False) + self.uiWidget._ui_set_value_(index, display) =20 =20 # ------------------------------------------------------------------= ------- Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py 2010-12-02 20:47:4= 4 UTC (rev 10252) +++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py 2010-12-02 20:47:4= 7 UTC (rev 10253) @@ -696,7 +696,7 @@ widget.GetParent().Refresh() # Needed for Windows =20 # Set new current row to specific color. - if index =3D=3D -1: + if index is None: self.__current_row =3D None self.__current_row_color_save =3D None else: