commit-gnue
[Top][All Lists]
Advanced

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

[gnue] r7954 - in trunk/gnue-forms/src: GFObjects uidrivers/gtk2/widgets


From: reinhard
Subject: [gnue] r7954 - in trunk/gnue-forms/src: GFObjects uidrivers/gtk2/widgets uidrivers/win32/widgets uidrivers/wx/widgets
Date: Wed, 28 Sep 2005 12:35:31 -0500 (CDT)

Author: reinhard
Date: 2005-09-21 13:10:06 -0500 (Wed, 21 Sep 2005)
New Revision: 7954

Modified:
   trunk/gnue-forms/src/GFObjects/GFBlock.py
   trunk/gnue-forms/src/GFObjects/GFScrollBar.py
   trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py
   trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py
   trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py
   trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py
Log:
Changed scrollbar to scroll instead of moving the record pointer.


Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py   2005-09-21 16:30:39 UTC (rev 
7953)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py   2005-09-21 18:10:06 UTC (rev 
7954)
@@ -67,9 +67,12 @@
     self._fieldMap = {}
     self._fieldList = []
 
-    # True if the block has been saved but the transaction has not yet been
-    # committed. The block will still return True on isPending().
+    # Current top of visible portion
+    self.__visibleStart = 0
 
+    # Are we scrolling the visible portion along with record movement?
+    self.__scrolling = False
+
     #
     # Trigger exposure
     #
@@ -280,7 +283,10 @@
     # Blocks can't cope with current record #-1
     recno = self._resultSet.getRecordNumber ()
     if recno != -1:
-      self.switchRecord (recno - self._currentRecord)
+      if self.__scrolling:
+        self.switchRecord (0)
+      else:
+        self.switchRecord (recno - self._currentRecord)
 
   # ---------------------------------------------------------------------------
 
@@ -407,7 +413,20 @@
     """
     Moves the proper record into editing position
     """
-    self._currentRecord = self._resultSet.getRecordNumber()
+    newRecord = self._resultSet.getRecordNumber ()
+    newRecordCount = self._resultSet.getRecordCount ()
+
+    self.__visibleStart += newRecord - self._currentRecord - adjustment
+    if self.__visibleStart > newRecord:
+      self.__visibleStart = newRecord
+    if self.__visibleStart < newRecord - self._rows + 1:
+      self.__visibleStart = newRecord - self._rows + 1
+    if self.__visibleStart < 0:
+      self.__visibleStart = 0
+
+    self._currentRecord = newRecord
+    self._recordCount = newRecordCount
+
     for field in self._fieldList:
       field.gotNewCurrentRecord()
       for entry in field._entryList:
@@ -419,7 +438,8 @@
 
     # Adjusting scrollbars
     for sb in self._scrollbars:
-      sb.adjustScrollbar (self._currentRecord, self._recordCount)
+      sb.adjustScrollbar (self.__visibleStart,
+          max (self._recordCount, self.__visibleStart + self._rows))
 
   #
   # newRecord
@@ -554,6 +574,54 @@
 
     self.jumpRecord(targetRecord)
 
+
+  # ---------------------------------------------------------------------------
+  # Scroll a given number of records
+  # ---------------------------------------------------------------------------
+
+  def scrollRecords (self, adjustment):
+    """
+    Scroll the given number of records.
+    """
+
+    self.scrollToRecord (self.__visibleStart + adjustment)
+
+
+  # ---------------------------------------------------------------------------
+  # Scroll to given record number
+  # ---------------------------------------------------------------------------
+
+  def scrollToRecord (self, position):
+    """
+    Scrolls the block to the given position.
+
+    The record number given in position will become the first visible record.
+    """
+
+    # First, scroll as far as possible without moving the record pointer
+    newVisibleStart = position
+
+    if newVisibleStart > self._currentRecord:
+      newVisibleStart = self._currentRecord
+    if newVisibleStart < self._currentRecord - self._rows + 1:
+      newVisibleStart = self._currentRecord - self._rows + 1
+
+    if newVisibleStart != self.__visibleStart:
+      self.switchRecord (self.__visibleStart - newVisibleStart)
+
+    # Now we have to move the record pointer to keep it in the visible portion
+    if position != self.__visibleStart:
+      self.__scrolling = True
+      try:
+        self.jumpRecords (position - self.__visibleStart)
+      finally:
+        self.__scrolling = False
+    else:
+      # If we didn't move the cursor, we have to update cursor position in UI
+      if self._form._currentEntry._block == self:
+        self._form.findAndChangeFocus (self._form._currentEntry)
+
+
   #
   # processCommit
   #

Modified: trunk/gnue-forms/src/GFObjects/GFScrollBar.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFScrollBar.py       2005-09-21 16:30:39 UTC 
(rev 7953)
+++ trunk/gnue-forms/src/GFObjects/GFScrollBar.py       2005-09-21 18:10:06 UTC 
(rev 7954)
@@ -57,6 +57,22 @@
 
 
   # ---------------------------------------------------------------------------
+  # Phase I init: find the parent GFForm and the bound GFBlock
+  # ---------------------------------------------------------------------------
+
+  def __initialize (self):
+
+    self._form = self.findParentOfType ('GFForm')
+
+    # ...Block
+    if not self.block in self._form._logic._blockMap:
+      raise MissingBlockError, self.block
+
+    self._block = self._form._logic._blockMap [self.block]
+    self._block.registerScrollbar (self)
+
+
+  # ---------------------------------------------------------------------------
   # Get the number of records and rows of the wrapped block
   # ---------------------------------------------------------------------------
 
@@ -80,7 +96,7 @@
     """
     Update the UI scrollbar to reflect a new position or record-count.
 
-    @param current: current record number in the block
+    @param current: current first visible record number in the block
     @param count: number of records in the block
     """
 
@@ -89,44 +105,28 @@
 
 
   # ---------------------------------------------------------------------------
-  # Jump to a given record number
-  # ---------------------------------------------------------------------------
-
-  def jumpToRecord (self, recordNumber):
-    """
-    Jump to the given record in the underlying block.
-
-    @param recordNumber: number of record to jump to.
-    """
-
-    self._block.jumpRecord (recordNumber)
-
-
-  # ---------------------------------------------------------------------------
   # Jump to a record relative to the current record
   # ---------------------------------------------------------------------------
 
-  def jumpRelative (self, adjustment):
+  def scrollRecords (self, adjustment):
     """
     Move the current record by a given adjustment
 
     @param adjustment: number of records to be moved (can be negative)
     """
 
-    self._block.jumpRecords (adjustment)
+    self._block.scrollRecords (adjustment)
 
 
   # ---------------------------------------------------------------------------
-  # Phase I init: find the parent GFForm and the bound GFBlock
+  # Jump to a given record number
   # ---------------------------------------------------------------------------
 
-  def __initialize (self):
+  def scrollToRecord (self, recordNumber):
+    """
+    Jump to the given record in the underlying block.
 
-    self._form = self.findParentOfType ('GFForm')
+    @param recordNumber: number of record to jump to.
+    """
 
-    # ...Block
-    if not self.block in self._form._logic._blockMap:
-      raise MissingBlockError, self.block
-
-    self._block = self._form._logic._blockMap [self.block]
-    self._block.registerScrollbar (self)
+    self._block.scrollToRecord (recordNumber)

Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py    2005-09-21 
16:30:39 UTC (rev 7953)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py    2005-09-21 
18:10:06 UTC (rev 7954)
@@ -41,14 +41,14 @@
 
     (crec, recs, page) = gfObject.getRecordAndPageCount ()
 
-    self.adjustment = gtk.Adjustment (crec, 0, recs - 1, 1, page - 1, 0)
+    self.adjustment = gtk.Adjustment (crec, 0, recs - 1, 1, page - 1, page - 1)
 
     newWidget = gtk.VScrollbar (self.adjustment)
     height    = gfObject.Char__height * event.widgetHeight
     newWidget.set_size_request (-1, height)
 
-    self.adjustment.__scrollHandler = self.adjustment.connect ('value-changed',
-                                                self.__scrollHandler)
+    self.adjustment._scrollHandler = self.adjustment.connect ('value-changed',
+                                                self._scrollHandler)
     
     event.container.put (newWidget, self.itemX, self.itemY)
     newWidget.show ()
@@ -65,19 +65,19 @@
     if int (self.adjustment.upper) != count - 1:
       self.adjustment.upper = float (count - 1)
 
-    self._blockHandler (self.adjustment, '__scrollHandler')
+    self._blockHandler (self.adjustment, '_scrollHandler')
     self.adjustment.set_value (position)
-    self._blockHandler (self.adjustment, '__scrollHandler', True)
+    self._blockHandler (self.adjustment, '_scrollHandler', True)
 
 
   # ---------------------------------------------------------------------------
   # Handle changes of the adjustment's value
   # ---------------------------------------------------------------------------
 
-  def __scrollHandler (self, adjustment):
+  def _scrollHandler (self, adjustment):
 
     assert gDebug (6, "Adjust to %s" % int (adjustment.value))
-    self._gfObject.jumpToRecord (int (adjustment.value))
+    self._gfObject.scrollToRecord (int (adjustment.value))
 
     return True
 

Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py       2005-09-21 
16:30:39 UTC (rev 7953)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py       2005-09-21 
18:10:06 UTC (rev 7954)
@@ -447,30 +447,25 @@
       win32gui.SendMessage(lParam, win32con.SBM_GETSCROLLINFO, 0, scrollinfo)
       size, mask, min, max, page, pos, trackpos = struct.unpack (format,
           scrollinfo)
-      recno = int (trackpos)
-      gfObject.jumpToRecord (recno)
+      gfObject.scrollToRecord (int (trackpos))
 
     elif scrollCode == win32con.SB_PAGEUP:
-      action = events.Event ('requestJUMPROWSUP', object = gfObject, _form =
-          gfObject._form)
-      uiObject._uiForm._eventHandler (action)
+      gfObject.scrollRecords (- uiObject.pageSize)
 
     elif scrollCode == win32con.SB_PAGEDOWN:
-      action = events.Event ('requestJUMPROWSDOWN', object = gfObject, _form =
-          gfObject._form)
-      uiObject._uiForm._eventHandler (action)
+      gfObject.scrollRecords (uiObject.pageSize)
 
     elif scrollCode == win32con.SB_LINEDOWN:
-      gfObject.jumpRelative (1)
+      gfObject.scrollRecords (1)
 
     elif scrollCode == win32con.SB_LINEUP:
-      gfObject.jumpRelative (-1)
+      gfObject.scrollRecords (-1)
 
     elif scrollCode == win32con.SB_BOTTOM:
-      gfObject.jumpToRecord (self.lastRecord)
+      gfObject.scrollToRecord (uiObject.lastRecord)
 
     elif scrollCode == win32con.SB_TOP:
-      gfObject.jumpToRecord (0)
+      gfObject.scrollToRecord (0)
 
 
 class Win32Image(Win32Base):

Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py   2005-09-21 
16:30:39 UTC (rev 7953)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py   2005-09-21 
18:10:06 UTC (rev 7954)
@@ -76,7 +76,7 @@
     format = "IIiiIii"
     size = struct.calcsize (format)
     mask = win32con.SIF_RANGE | win32con.SIF_PAGE | win32con.SIF_POS
-    scrollinfo = struct.pack (format, size, mask, 0, count + 1, 
self.pageSize-1,
+    scrollinfo = struct.pack (format, size, mask, 0, count - 1, self.pageSize,
         current, 0)
     win32gui.SendMessage (self._hwnd, win32con.SBM_SETSCROLLINFO, 1, 
scrollinfo)
 

Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py      2005-09-21 
16:30:39 UTC (rev 7953)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py      2005-09-21 
18:10:06 UTC (rev 7954)
@@ -82,7 +82,7 @@
     object = _eventObjTowxWindow(event)
     id = object.GetId ()
 
-    self._gfObject.jumpToRecord (int (object.GetThumbPosition ()))
+    self._gfObject.scrollToRecord (int (object.GetThumbPosition ()))
 
 
   # --------------------------------------------------------------------------
@@ -94,7 +94,7 @@
     """
 
     # position, thumbSize, range, pageSize, refresh = TRUE
-    self._widget.SetScrollbar (current, 1, count, self.pageSize - 1)
+    self._widget.SetScrollbar (current, self.pageSize, count, self.pageSize - 
1)
 
 
 # ----------------------------------------------------------------------------





reply via email to

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