commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue] r10253 - in trunk/gnue-forms: . src/GFObjects src/uidrivers/wx/wi


From: reinhard
Subject: [gnue] r10253 - in trunk/gnue-forms: . src/GFObjects src/uidrivers/wx/widgets
Date: Thu, 2 Dec 2010 14:47:47 -0600 (CST)

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 record.



Property changes on: trunk/gnue-forms
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: 2010-12-02 19:02:14.151999950 +0100
committer: Reinhard Müller <address@hidden>
properties: 
        branch-nick: forms

   + timestamp: 2010-12-02 21:29:40.832000017 +0100
committer: Reinhard Müller <address@hidden>
properties: 
        branch-nick: forms

Name: bzr:file-ids
   - src/GFObjects/GFTabStop.py 
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py
src/uidrivers/qt3/widgets/entry.py      
address@hidden:trunk%2Fgnue-forms:src%2Fuidrivers%2Fqt3%2Fwidgets%2Fentry.py
src/uidrivers/qt4/widgets/entry.py      
address@hidden:trunk%2Fgnue-forms:src%2Fuidrivers%2Fqt4%2Fwidgets%2Fentry.py
src/uidrivers/wx/widgets/entry.py       
address@hidden:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py

   + src/GFObjects/GFBlock.py   
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFBlock.py
src/GFObjects/GFEntry.py        
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFEntry.py
src/GFObjects/GFField.py        
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFField.py
src/GFObjects/GFTabStop.py      
address@hidden:trunk%2Fgnue-forms:src%2FGFObjects%2FGFTabStop.py
src/uidrivers/wx/widgets/entry.py       
address@hidden:trunk%2Fgnue-forms:src%2Fuidrivers%2Fwx%2Fwidgets%2Fentry.py

Name: bzr:revision-id:v4
   - 3116 address@hidden
3117 address@hidden
3118 address@hidden
3119 address@hidden
3120 address@hidden
3121 address@hidden
3122 address@hidden
3123 address@hidden
3124 address@hidden
3125 address@hidden
3126 address@hidden
3127 address@hidden
3128 address@hidden
3129 address@hidden
3130 address@hidden
3131 address@hidden
3132 address@hidden
3133 address@hidden
3134 address@hidden
3135 address@hidden
3136 address@hidden
3137 address@hidden
3138 address@hidden
3139 address@hidden
3140 address@hidden
3141 address@hidden
3142 address@hidden
3143 address@hidden
3144 address@hidden
3145 address@hidden
3146 address@hidden
3147 address@hidden
3148 address@hidden
3149 address@hidden
3150 address@hidden
3151 address@hidden
3152 address@hidden
3153 address@hidden
3154 address@hidden
3155 address@hidden
3156 address@hidden
3157 address@hidden
3158 address@hidden
3159 address@hidden
3160 address@hidden
3161 address@hidden
3162 address@hidden
3163 address@hidden

   + 3116 address@hidden
3117 address@hidden
3118 address@hidden
3119 address@hidden
3120 address@hidden
3121 address@hidden
3122 address@hidden
3123 address@hidden
3124 address@hidden
3125 address@hidden
3126 address@hidden
3127 address@hidden
3128 address@hidden
3129 address@hidden
3130 address@hidden
3131 address@hidden
3132 address@hidden
3133 address@hidden
3134 address@hidden
3135 address@hidden
3136 address@hidden
3137 address@hidden
3138 address@hidden
3139 address@hidden
3140 address@hidden
3141 address@hidden
3142 address@hidden
3143 address@hidden
3144 address@hidden
3145 address@hidden
3146 address@hidden
3147 address@hidden
3148 address@hidden
3149 address@hidden
3150 address@hidden
3151 address@hidden
3152 address@hidden
3153 address@hidden
3154 address@hidden
3155 address@hidden
3156 address@hidden
3157 address@hidden
3158 address@hidden
3159 address@hidden
3160 address@hidden
3161 address@hidden
3162 address@hidden
3163 address@hidden
3164 address@hidden

Name: bzr:text-parents
   - src/uidrivers/qt3/widgets/entry.py 
svn-v3-single1-dHJ1bmsvZ251ZS1mb3Jtcw..: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       address@hidden

   + src/GFObjects/GFBlock.py   address@hidden
src/GFObjects/GFEntry.py        address@hidden
src/GFObjects/GFField.py        address@hidden


Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2010-12-02 20:47:44 UTC (rev 
10252)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2010-12-02 20:47:47 UTC (rev 
10253)
@@ -943,9 +943,6 @@
             current record.
         """
 
-        if self._dataSourceLink.type == 'unbound':
-            return None
-
         if self.mode == 'query':
             return None
 
@@ -1531,21 +1528,20 @@
             newRecord = 0
             newRecordCount = 1
         elif self.__resultset is None:
-            newRecord = 0
+            newRecord = -1
             newRecordCount = 0
         else:
             newRecord = self.__resultset.getRecordNumber()
             newRecordCount = self.__resultset.getRecordCount()
 
-        adjustment = newRecord - self._currentRecord
-
         if new_visible_start is None:
             new_visible_start = self.__visible_start
         new_visible_start = max(new_visible_start, newRecord - self._rows + 1)
         new_visible_start = max(new_visible_start, 0)
         new_visible_start = min(new_visible_start, newRecord)
 
-        adjustment += self.__visible_start - new_visible_start
+        scroll = new_visible_start - self.__visible_start
+
         self.__visible_start = new_visible_start
 
         # 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._currentRecord,
+                entry.recalculate_visible(scroll, self._currentRecord,
                         self.__record_count, refresh)
 
         self.__adjust_scrollbars()

Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py   2010-12-02 20:47:44 UTC (rev 
10252)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py   2010-12-02 20:47:47 UTC (rev 
10253)
@@ -118,18 +118,22 @@
         if self.style == '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 for
+            # the enclosing boxes.
+            if index is None:
+                record_number = None
             else:
-                # Consider empty labels disabled. This makes a difference for
-                # the enclosing boxes.
-                if index is None:
-                    record_number = None
-                else:
-                    record_number = self.visible_offset + index
-                return (self._field.get_value(record_number) is not None)
-        else:
-            return GFFieldBound._is_enabled_(self, index)
+                record_number = self.visible_offset + index
+            return (self._field.get_value(record_number) is not None)
 
+        return GFFieldBound._is_enabled_(self, index)
 
+
     # -------------------------------------------------------------------------
     # Refresh the user interface with the current field data
     # -------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/GFObjects/GFField.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFField.py   2010-12-02 20:47:44 UTC (rev 
10252)
+++ trunk/gnue-forms/src/GFObjects/GFField.py   2010-12-02 20:47:47 UTC (rev 
10253)
@@ -297,9 +297,12 @@
             if self.editable == 'N':
                 return False
 
-            new = (self._block.get_record_status(record_number) \
-                    in ['empty', 'inserted', 'void'])
+            status = self._block.get_record_status(record_number)
+            if status is None:
+                return False
 
+            new = status in ['empty', 'inserted', 'void']
+
             if self._block.editable == 'new' and not new:
                 return False
             if self.editable == 'new' and not new:

Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- 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 = 1
         self._gap = 0
 
-        self.__visible_offset = 0
+        self.__visible_offset = None
         self.__visible_index = 0
-        self.__last_enabled_row = None
-        self.__current_row_enabled = True
+        self.__enabled_rows = None
 
 
     # -------------------------------------------------------------------------
@@ -114,7 +113,7 @@
         if self._block:
             self._block._entryList.append(self)
 
-        self.__last_enabled_row = self._rows - 1
+        self.__enabled_rows = self._rows
 
 
     # -------------------------------------------------------------------------
@@ -143,9 +142,14 @@
                 and index == self.__visible_index:
             return
 
-        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 = None
+        else:
+            record_number = self.__visible_offset + index
 
+        self._form._event_focus_changed(self, record_number)
+
     # -------------------------------------------------------------------------
 
     def _event_line_up(self):
@@ -244,6 +248,8 @@
         If this entry is part of a grid, this property contains the record
         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.
 
         If this entry is not part of a grid, this property simply contains the
         record number currently visible in the entry, or None if no record 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.
 
-        If this entry is not part of a grid, this property always contains 0.
+        If this entry is not part of a grid, this property always contains if
+        there is a current record, and None if there is no current record.
         """
         return self.__visible_index
 
@@ -269,7 +276,7 @@
     # Recalculate the visible index of an object
     # -------------------------------------------------------------------------
 
-    def recalculate_visible(self, adjustment, cur_record, rec_count, refresh):
+    def recalculate_visible(self, scroll, cur_record, rec_count, refresh):
         """
         Process a record pointer movement or a result set change for this
         entry.
@@ -279,7 +286,7 @@
         number of available records, and it redisplays the contents of the
         entry as needed.
 
-        @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 is no
             record active currently.
         @param rec_count: the number of records available at all
@@ -296,66 +303,67 @@
 
         if self._form.get_focus_object() is self:
             self.ui_focus_out()
+
         try:
             old_visible_index = self.__visible_index
 
-            index = min(max(self.__visible_index + adjustment, 0),
-                        int(self._rows)-1)
+            if cur_record == -1 and self._rows == 1:
+                # Single entry (no grid), no current record: no record
+                # displayed.
+                new_visible_offset = None
+            else:
+                # Display records, if the entry is in a grid even if there is
+                # no current record.
+                if self.__visible_offset is not None:
+                    new_visible_offset = self.__visible_offset + scroll
+                else:
+                    new_visible_offset = 0
 
-            # Don't let the index pass the number of records
-            lowestVisible = max(cur_record - index, 0)
-            if lowestVisible + index > rec_count:
-                index = index -1
+                new_visible_offset = min(new_visible_offset, rec_count - 
self._rows)
+                new_visible_offset = max(new_visible_offset, 0)
+                if cur_record != -1:
+                    new_visible_offset = max(new_visible_offset, cur_record - 
self._rows + 1)
+                    new_visible_offset = min(new_visible_offset, cur_record)
 
-            # If the current record has rolled around from the top to the
-            # bottom then reset the counter.
-            if cur_record == 0:
-                index = 0
+            if new_visible_offset != self.__visible_offset:
+                # If we have scrolled, redisplay all records
+                refresh = 'all'
 
-            self.__visible_index = index
+            self.__visible_offset = new_visible_offset
 
+            if cur_record == -1:
+                self.__visible_index = None
+            else:
+                self.__visible_index = cur_record - self.__visible_offset
+
             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 enabled
                     # because widgets are created enabled by default
-                    self.__last_enabled_row = self._rows - 1
+                    self.__enabled_rows = self._rows
 
-                # Re-enable old current row if it was disabled
-                if not self.__current_row_enabled:
-                    self.uiWidget._ui_set_enabled_(old_visible_index, True)
-                    self.__current_row_enabled = True
+                if self.__visible_offset is None:
+                    enabled_rows = 0
+                else:
+                    enabled_rows = rec_count - self.__visible_offset
+                    enabled_rows = min(enabled_rows, self._rows)
 
-                last_enabled_row = self.__visible_index + \
-                        (rec_count - cur_record) - 1
-                last_enabled_row = min(last_enabled_row, self._rows - 1)
-
                 # Disable rows if necessary
-                for i in range(last_enabled_row+1, self.__last_enabled_row+1):
+                for i in range(enabled_rows, self.__enabled_rows):
                     self.uiWidget._ui_set_enabled_(i, False)
 
                 # Enable rows if necessary
-                for i in range(self.__last_enabled_row+1, last_enabled_row+1):
-                    self.uiWidget._ui_set_enabled_(i, False)
+                for i in range(self.__enabled_rows, enabled_rows):
+                    self.uiWidget._ui_set_enabled_(i, True)
 
-                self.__last_enabled_row = last_enabled_row
+                self.__enabled_rows = enabled_rows
 
-                # Disable current row if current record is -1
-                if cur_record == -1:
-                    self.uiWidget._ui_set_enabled_(self.__visible_index, False)
-                    self.__current_row_enabled = False
-
-                first_visible_record = cur_record - self.__visible_index
-                if first_visible_record != self.__visible_offset:
-                    # If we have scrolled, redisplay all records
+                if refresh == 'all':
                     refresh_start = 0
-                    self.__visible_offset = first_visible_record
+                elif refresh == 'current':
+                    refresh_start = max(old_visible_index, 
self.__visible_index)
                 else:
-                    if refresh == 'all':
-                        refresh_start = 0
-                    elif refresh == 'current':
-                        refresh_start = max(old_visible_index, 
self.__visible_index)
-                    else:
-                        refresh_start = None
+                    refresh_start = None
 
                 if isinstance(self, GFFieldBound) and refresh_start is not 
None:
                     self.refresh_ui(refresh_start, self._rows - 1)
@@ -395,7 +403,7 @@
     def __update_status(self, refresh_start):
 
         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()
 
@@ -570,10 +578,7 @@
         record.
         """
 
-        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)
 
 
 # =============================================================================
@@ -627,19 +632,23 @@
 
         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 = None
         else:
-            if index is None:
-                record_number = None
-            else:
-                record_number = self.visible_offset + index
-            return self._field.is_editable(record_number)
+            record_number = self.visible_offset + index
+        return self._field.is_editable(record_number)
 
 
     # -------------------------------------------------------------------------
     # UI events (called from UIEntry)
     # -------------------------------------------------------------------------
 
-    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 part of
         the grid which can't receive the focus.
@@ -725,7 +734,8 @@
 
     def refresh_ui_current(self):
 
-        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)
 
 
     # -------------------------------------------------------------------------
@@ -748,14 +758,18 @@
 
         for index in range (from_index, to_index + 1):
             # Do not execute if we were editing - would overwrite unsaved 
change
-            if not (index == self.visible_index \
-                    and self._displayHandler.editing):
+            if (index == self.visible_index and self._displayHandler.editing):
+                continue
+
+            if self.visible_offset is not None:
                 try:
                     value = self._field.get_value(self.visible_offset + index)
                 except Exception:               # invalid value
                     value = None
-                display = self._displayHandler.build_display(value, False)
-                self.uiWidget._ui_set_value_(index, display)
+            else:
+                value = None
+            display = self._displayHandler.build_display(value, False)
+            self.uiWidget._ui_set_value_(index, display)
 
 
     # -------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2010-12-02 20:47:44 UTC 
(rev 10252)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/entry.py  2010-12-02 20:47:47 UTC 
(rev 10253)
@@ -696,7 +696,7 @@
                 widget.GetParent().Refresh()    # Needed for Windows
 
             # Set new current row to specific color.
-            if index == -1:
+            if index is None:
                 self.__current_row = None
                 self.__current_row_color_save = None
             else:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]