[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: