[Top][All Lists]
[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)
# ----------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7954 - in trunk/gnue-forms/src: GFObjects uidrivers/gtk2/widgets uidrivers/win32/widgets uidrivers/wx/widgets,
reinhard <=