[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r8759 - trunk/gnue-forms/src/GFObjects
From: |
reinhard |
Subject: |
[gnue] r8759 - trunk/gnue-forms/src/GFObjects |
Date: |
Wed, 11 Oct 2006 17:43:22 -0500 (CDT) |
Author: reinhard
Date: 2006-10-11 17:43:22 -0500 (Wed, 11 Oct 2006)
New Revision: 8759
Modified:
trunk/gnue-forms/src/GFObjects/GFBlock.py
trunk/gnue-forms/src/GFObjects/GFEntry.py
trunk/gnue-forms/src/GFObjects/GFTabStop.py
Log:
Be ultra smart about which UI entries to refresh.
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2006-10-11 17:19:26 UTC (rev
8758)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2006-10-11 22:43:22 UTC (rev
8759)
@@ -94,6 +94,9 @@
# Are we scrolling the visible portion along with record movement?
self.__scrolling = False
+ # Has the result set changed since the last refresh?
+ self.__has_resultset_changed = False
+
# Trigger exposure
self._validTriggers = {
'ON-NEWRECORD': 'On-NewRecord',
@@ -266,6 +269,8 @@
self._resultSet = event.resultSet
+ self.__has_resultset_changed = True
+
# FIXME: during commit, master datasources navigate the current record
# through the dirty record list and cause the detail blocks to follow
# through this event. However, in that case, we wouldn't want the UI to
@@ -273,7 +278,7 @@
recno = self._resultSet.getRecordNumber ()
if recno == -1:
if not self._resultSet.firstRecord ():
- self.new_record()
+ self._resultSet.insertRecord(self._lastValues)
else:
self.__switch_record (recno - self._currentRecord)
@@ -848,6 +853,7 @@
self.mode = 'query'
self.__query_values = {}
self.__query_values.update(self._queryDefaults)
+ self.__has_resultset_changed = True
self.__switch_record(0)
# ---------------------------------------------------------------------------
@@ -856,6 +862,7 @@
self.__query_values = {}
self.__query_values.update(self.__last_query_values)
+ self.__has_resultset_changed = True
self.__switch_record(0)
# ---------------------------------------------------------------------------
@@ -863,6 +870,7 @@
def cancel_query(self):
self.mode = 'normal'
+ self.__has_resultset_changed = True
self.__switch_record(0)
# ---------------------------------------------------------------------------
@@ -959,12 +967,14 @@
if self._getMasterBlock() is None:
self._dataSourceLink.requeryAll(commit)
- # Our recordCount might have changed if records were deleted
+ self.__has_resultset_changed = True
+
+ # If the last record was deleted, insert a new one
if not self._resultSet.getRecordCount():
- self.new_record()
+ self._resultSet.insertRecord(self._lastValues)
+ else:
+ self.__switch_record(0)
- self.__switch_record(0)
-
# ---------------------------------------------------------------------------
def clear(self):
@@ -1135,12 +1145,24 @@
self.__visibleStart = max (self.__visibleStart, newRecord - self._rows + 1)
self.__visibleStart = max (self.__visibleStart, 0)
+ # Find out which ui entries to refresh
+ if self.__has_resultset_changed:
+ # Result set completely changed, refresh everything
+ refresh = 'all'
+ self.__has_resultset_changed = False
+ elif newRecordCount != self._recordCount:
+ # Newly inserted or deleted record, so all records starting from this
+ # one have moved, so refresh them
+ refresh = 'current'
+ else:
+ refresh = 'none'
+
self._currentRecord = newRecord
self._recordCount = newRecordCount
for entry in self._entryList:
entry.recalculate_visible (adjustment, self._currentRecord,
- self._recordCount)
+ self._recordCount, refresh)
for field in self._fieldList:
field._event_new_current_record ()
Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py 2006-10-11 17:19:26 UTC (rev
8758)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py 2006-10-11 22:43:22 UTC (rev
8759)
@@ -205,3 +205,5 @@
def endEdit(self):
self._displayHandler.endEdit()
+
+ self.refresh_ui_current()
Modified: trunk/gnue-forms/src/GFObjects/GFTabStop.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFTabStop.py 2006-10-11 17:19:26 UTC (rev
8758)
+++ trunk/gnue-forms/src/GFObjects/GFTabStop.py 2006-10-11 22:43:22 UTC (rev
8759)
@@ -137,22 +137,32 @@
# Recalculate the visible index of an object
# -------------------------------------------------------------------------
- def recalculate_visible(self, adjustment, cur_record, rec_count):
+ def recalculate_visible(self, adjustment, cur_record, rec_count, refresh):
"""
- Recalculate the visible index of an object. This determines that real
UI
- widget of a 'row-based grid' which should be visible.
+ Process a record pointer movement or a result set change for this
+ entry.
+ This function sets the C{_visibleIndex} property of this entry. It also
+ takes care of disabling rows of this entry that are outside the actual
+ 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 cur_record: the currently active record
@param rec_count: the number of records available at all
-
- As a result of this recalculation the property self._visibleIndex will
- be set to the new value.
+ @param refresh: 'none' if no records have to be redisplayed (i.e. only
+ the cursor position has changed), 'current' if all records starting
+ with the current record have to be redisplayed (i.e. a new record
+ has been inserted), or 'all' if all records have to be redisplayed
+ (i.e. the complete resultset has changed); if the records scroll
+ within this entry, everything is redisplayed anyway
"""
if self.hidden:
return
+ old_visible_index = self._visibleIndex
+
index = min(max(self._visibleIndex + adjustment, 0),
int(self._rows)-1)
@@ -183,16 +193,23 @@
self.__last_enabled_row = last_enabled_row
- # If we have scrolled, redisplay all records
first_visible_record = cur_record - self._visibleIndex
- # FIXME
- # if first_visible_record != self.__first_visible_record:
- if True:
- if isinstance(self, GFFieldBound):
- self.refresh_ui(0, self._rows - 1)
+ if first_visible_record != self.__first_visible_record:
+ # If we have scrolled, redisplay all records
+ refresh_start = 0
self.__first_visible_record = first_visible_record
+ else:
+ if refresh == 'all':
+ refresh_start = 0
+ elif refresh == 'current':
+ refresh_start = max(old_visible_index, self._visibleIndex)
+ else:
+ refresh_start = None
+ if isinstance(self, GFFieldBound) and refresh_start is not None:
+ self.refresh_ui(refresh_start, self._rows - 1)
+
# =============================================================================
# Base class for all widgets bound to a field
# =============================================================================
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r8759 - trunk/gnue-forms/src/GFObjects,
reinhard <=