[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r7929 - in trunk/gnue-forms/src: GFObjects uidrivers/_base uidriv
From: |
johannes |
Subject: |
[gnue] r7929 - in trunk/gnue-forms/src: GFObjects uidrivers/_base uidrivers/gtk2/widgets uidrivers/win32/widgets uidrivers/wx/widgets |
Date: |
Wed, 28 Sep 2005 12:35:25 -0500 (CDT) |
Author: johannes
Date: 2005-09-20 10:25:31 -0500 (Tue, 20 Sep 2005)
New Revision: 7929
Modified:
trunk/gnue-forms/src/GFObjects/GFBlock.py
trunk/gnue-forms/src/GFObjects/GFObj.py
trunk/gnue-forms/src/GFObjects/GFScrollBar.py
trunk/gnue-forms/src/uidrivers/_base/UIdriver.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:
Fixed scrollbars for gtk2, wx and win32
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2005-09-20 09:18:44 UTC (rev
7928)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2005-09-20 15:25:31 UTC (rev
7929)
@@ -427,7 +427,7 @@
# Adjusting scrollbars
for sb in self._scrollbars:
- sb.adjustScrollbar(self._currentRecord, self._recordCount)
+ sb.adjustScrollbar (self._currentRecord, self._recordCount)
#
# newRecord
@@ -545,7 +545,14 @@
self.processTrigger('PRE-FOCUSIN')
self.processTrigger('POST-FOCUSIN')
+ if self._form._currentEntry._block != self:
+ self._form.findAndChangeFocus (self)
+ else:
+ self._form.findAndChangeFocus (self._form._currentEntry)
+ self._form._instance.updateRecordCounter (self._form)
+
+
def jumpRecords(self, adjustment):
targetRecord = self._resultSet.getRecordNumber() + adjustment
@@ -714,12 +721,13 @@
# Adjusting scrollbars
for sb in self._scrollbars:
- sb.adjustScrollbar(self._currentRecord, self._recordCount)
+ sb.adjustScrollbar (self._currentRecord, self._recordCount)
- def registerScrollbar(self, sb):
- self._scrollbars.append(sb)
+ def registerScrollbar (self, sb):
+ self._scrollbars.append (sb)
+
# ---------------------------------------------------------------------------
# Call a datasource's function
# ---------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/GFObjects/GFObj.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFObj.py 2005-09-20 09:18:44 UTC (rev
7928)
+++ trunk/gnue-forms/src/GFObjects/GFObj.py 2005-09-20 15:25:31 UTC (rev
7929)
@@ -60,6 +60,10 @@
self._gap = 0
self._inits = []
+ # The reference to the uiWidget will be set by the
+ # uidrivers._base.UIdriver._buildUI () function
+ self.uiWidget = None
+
def isNavigable(self, mode='edit'):
"""
Is the current object currently navigable?
Modified: trunk/gnue-forms/src/GFObjects/GFScrollBar.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFScrollBar.py 2005-09-20 09:18:44 UTC
(rev 7928)
+++ trunk/gnue-forms/src/GFObjects/GFScrollBar.py 2005-09-20 15:25:31 UTC
(rev 7929)
@@ -1,56 +1,122 @@
+# GNU Enterprise Forms - GF Class Hierarchy - Scrollbar
#
-# This file is part of GNU Enterprise.
+# Copyright 2001-2005 Free Software Foundation
#
-# GNU Enterprise is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation; either
+# This file is part of GNU Enterprise
+#
+# GNU Enterprise is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation; either
# version 2, or (at your option) any later version.
#
-# GNU Enterprise is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied
-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# GNU Enterprise is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public
-# License along with program; see the file COPYING. If not,
-# write to the Free Software Foundation, Inc., 59 Temple Place
+# You should have received a copy of the GNU General Public
+# License along with program; see the file COPYING. If not,
+# write to the Free Software Foundation, Inc., 59 Temple Place
# - Suite 330, Boston, MA 02111-1307, USA.
#
-# Copyright 2000-2005 Free Software Foundation
-#
-# FILE:
-# GFObjects.py
-#
-# DESCRIPTION:
+# $Id$
"""
-Implements logical scrollbar support
+Class implementing scrollbars for controlling record positions within blocks
"""
-# NOTES:
-#
-from GFObj import GFObj
+from gnue.common.apps import errors
+from gnue.forms.GFObjects.GFObj import GFObj
-#
+# =============================================================================
+# Exceptions
+# =============================================================================
+
+class MissingBlockError (errors.ApplicationError):
+ def __init__ (self, block):
+ msg = u_("Scrollbar references a non-existent block '%s'") % block
+ errors.ApplicationError.__init__ (self, msg)
+
+
+# =============================================================================
# GFScrollBar
-#
-class GFScrollBar(GFObj):
- def __init__(self, parent=None):
- GFObj.__init__(self, parent)
+# =============================================================================
+
+class GFScrollBar (GFObj):
+
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+
+ def __init__ (self, parent = None):
+ GFObj.__init__ (self, parent)
self._type = "GFScrollBar"
self.label = ""
- self.rows = 1
+ self.rows = 1
- # Runtime Variables
- self._inits = [self.initialize]
+ self._inits = [self.__initialize]
- def initialize(self):
- self._form = self.findParentOfType('GFForm')
- # ...Block
- try:
- self._block = block = self._form._logic._blockMap[self.block]
- except KeyError:
- raise "Entry references non-existent block '%s'" % self.block
+ # ---------------------------------------------------------------------------
+ # Get the number of records and rows of the wrapped block
+ # ---------------------------------------------------------------------------
+ def getRecordAndPageCount (self):
+ """
+ Get the current record, the number of records and the number of rows of the
+ underlying block. The number of rows is usable as a page size.
+ @return: tuple (current-record, record-count, rows)
+ """
+ return (self._block._currentRecord, self._block._recordCount,
+ self._block._rows)
+
+
+ # ---------------------------------------------------------------------------
+ # Adjust the ui scrollbar to reflect new position and/or record-cound
+ # ---------------------------------------------------------------------------
+
+ def adjustScrollbar (self, current, count):
+ """
+ Update the UI scrollbar to reflect a new position or record-count.
+
+ @param current: current record number in the block
+ @param count: number of records in the block
+ """
+
+ if self.uiWidget is not None:
+ self.uiWidget.adjustScrollbar (current, count)
+
+
+ # ---------------------------------------------------------------------------
+ # 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)
+
+ def jumpRelative (self, adjustment):
+
+ self._block.jumpRecords (adjustment)
+
+
+ # ---------------------------------------------------------------------------
+ # 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)
Property changes on: trunk/gnue-forms/src/GFObjects/GFScrollBar.py
___________________________________________________________________
Name: svn:keywords
+ Id
Modified: trunk/gnue-forms/src/uidrivers/_base/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2005-09-20 09:18:44 UTC
(rev 7928)
+++ trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2005-09-20 15:25:31 UTC
(rev 7929)
@@ -270,6 +270,7 @@
# Add to the cross refernce
#
self._gfObjToUIWidget [object] = uiWidget
+ object.uiWidget = uiWidget
#
# If the current object is a GFForm then add it to the
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py 2005-09-20
09:18:44 UTC (rev 7928)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py 2005-09-20
15:25:31 UTC (rev 7929)
@@ -38,55 +38,50 @@
def _createWidget (self, event, spacer):
gfObject = event.object
- gfBlock = gfObject._block
- pageSize = getattr (gfBlock, '_rows') or 1
- self.adjustment = gtk.Adjustment (1, 1, gfBlock._recordCount, 1, pageSize,
- pageSize)
+ (crec, recs, page) = gfObject.getRecordAndPageCount ()
+ self.adjustment = gtk.Adjustment (crec, 0, recs, 1, page - 1, 0)
+
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, gfObject)
+
+ self.adjustment.__scrollHandler = self.adjustment.connect ('value-changed',
+ self.__scrollHandler)
event.container.put (newWidget, self.itemX, self.itemY)
newWidget.show ()
- gfBlock.registerScrollbar (self)
-
return newWidget
# ---------------------------------------------------------------------------
- # Handle changes of the adjustment's value
+ # adjust the scrollbar to a new position
# ---------------------------------------------------------------------------
- def _scrollHandler (self, adjustment, gfObject):
+ def adjustScrollbar (self, position, count):
- assert gDebug (6, "Adjust to %s" % (int (adjustment.value)))
- action = events.Event ('requestRECORDNUMBER', int (adjustment.value),
- _form = gfObject._form)
- adjustment.stop_emission ('value-changed')
- gtk.idle_add (self._eventHandler, action)
+ if int (self.adjustment.upper) != count:
+ self.adjustment.upper = float (count)
- return True
+ self._blockHandler (self.adjustment, '__scrollHandler')
+ self.adjustment.set_value (position)
+ self._blockHandler (self.adjustment, '__scrollHandler', True)
# ---------------------------------------------------------------------------
- # adjust the scrollbar to a new position
+ # Handle changes of the adjustment's value
# ---------------------------------------------------------------------------
- def adjustScrollbar (self, position, count):
- if int (self.adjustment.upper) != count:
- self.adjustment.upper = float (count)
+ def __scrollHandler (self, adjustment):
- newPos = position + 1
- self._blockHandler (self.adjustment, '_scrollHandler')
- self.adjustment.set_value (newPos)
- self._blockHandler (self.adjustment, '_scrollHandler', True)
+ assert gDebug (6, "Adjust to %s" % int (adjustment.value))
+ self._gfObject.jumpToRecord (int (adjustment.value))
+ return True
+
# -----------------------------------------------------------------------------
# Configuration data
# -----------------------------------------------------------------------------
Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py 2005-09-20
09:18:44 UTC (rev 7928)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/_base.py 2005-09-20
15:25:31 UTC (rev 7929)
@@ -442,28 +442,36 @@
if scrollCode == win32con.SB_THUMBTRACK:
format = "IIiiIii"
- size = struct.calcsize(format)
- scrollinfo = struct.pack(format, size, win32con.SIF_ALL, 0, 0, 0, 0, 0)
+ size = struct.calcsize (format)
+ scrollinfo = struct.pack (format, size, win32con.SIF_ALL, 0, 0, 0, 0, 0)
win32gui.SendMessage(lParam, win32con.SBM_GETSCROLLINFO, 0, scrollinfo)
- size, mask, min, max, page, pos, trackpos = struct.unpack(format,
scrollinfo)
- recno = int(trackpos)+1
- action = events.Event('requestRECORDNUMBER',object=gfObject,
- data=recno,
- _form=gfObject._form)
+ size, mask, min, max, page, pos, trackpos = struct.unpack (format,
+ scrollinfo)
+ recno = int (trackpos)
+ gfObject.jumpToRecord (recno)
+
+ elif scrollCode == win32con.SB_PAGEUP:
+ action = events.Event ('requestJUMPROWSUP', object = gfObject, _form =
+ gfObject._form)
+ uiObject._uiForm._eventHandler (action)
+
elif scrollCode == win32con.SB_PAGEDOWN:
- action = events.Event('requestJUMPROWSDOWN',object=gfObject,
_form=gfObject._form)
- elif scrollCode == win32con.SB_PAGEUP:
- action = events.Event('requestJUMPROWSUP',object=gfObject,
_form=gfObject._form)
+ action = events.Event ('requestJUMPROWSDOWN', object = gfObject, _form =
+ gfObject._form)
+ uiObject._uiForm._eventHandler (action)
+
elif scrollCode == win32con.SB_LINEDOWN:
- action = events.Event('requestNEXTRECORD',object=gfObject,
_form=gfObject._form)
+ gfObject.jumpRelative (1)
+
elif scrollCode == win32con.SB_LINEUP:
- action = events.Event('requestPREVRECORD',object=gfObject,
_form=gfObject._form)
+ gfObject.jumpRelative (-1)
+
elif scrollCode == win32con.SB_BOTTOM:
- action = events.Event('requestLASTRECORD',object=gfObject,
_form=gfObject._form)
+ gfObject.jumpToRecord (self.lastRecord)
+
elif scrollCode == win32con.SB_TOP:
- action = events.Event('requestFIRSTRECORD',object=gfObject,
_form=gfObject._form)
+ gfObject.jumpToRecord (0)
- uiObject._uiForm._eventHandler(action)
class Win32Image(Win32Base):
Modified: trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py 2005-09-20
09:18:44 UTC (rev 7928)
+++ trunk/gnue-forms/src/uidrivers/win32/widgets/scrollbar.py 2005-09-20
15:25:31 UTC (rev 7929)
@@ -33,40 +33,58 @@
from gnue.forms.uidrivers.win32.widgets._base import UIHelper, Win32Window
from gnue.forms.uidrivers.win32.common import getNextId
-#
-# UIScrollBar
-#
-# Widget set specific function that creates a single instance of a scroll bar
used
-# to navigate multiple records
-#
-class UIScrollBar(UIHelper):
- def _createWidget(self, event, spacer):
+# =============================================================================
+# Class implementing an UI scroll bar
+# =============================================================================
+
+class UIScrollBar (UIHelper):
+
+ # ---------------------------------------------------------------------------
+ # Create a new scrollbar widget
+ # ---------------------------------------------------------------------------
+
+ def _createWidget (self, event, spacer):
+
object = event.object
- style = win32con.WS_CHILD | win32con.WS_VISIBLE |win32con.SBS_VERT |
win32con.SBS_LEFTALIGN
+ style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.SBS_VERT | \
+ win32con.SBS_LEFTALIGN
styleEx = 0
- newWidget = self._widget = Win32Window(self._uiDriver, styleEx,
"Scrollbar", "", style,
- self.itemX,
- self.itemY,
+ newWidget = self._widget = Win32Window (self._uiDriver, styleEx,
+ "Scrollbar", "", style,
+ self.itemX, self.itemY,
-1, #object.Char__width*event.widgetWidth,
object.Char__height*event.widgetHeight,
- event.container, getNextId())
+ event.container, getNextId ())
if event.initialize:
- object._block.registerScrollbar(self)
- self._rows = object._block._rows
- self._hwnd = newWidget.GetHwnd()
+ (crec, self.lastRecord, self.pageSize) = object.getRecordAndPageCount ()
+ self._rows = self.pageSize
+ self._hwnd = newWidget.GetHwnd ()
+ self.adjustScrollbar (crec, self.lastRecord)
return newWidget
- def adjustScrollbar(self, pos, range):
- format = "IIiiIii"
- size = struct.calcsize(format)
- mask = win32con.SIF_RANGE | win32con.SIF_PAGE | win32con.SIF_POS
- scrollinfo = struct.pack(format, size, mask, 0, range+self._rows-3,
self._rows-1, pos, 0)
- win32gui.SendMessage(self._hwnd, win32con.SBM_SETSCROLLINFO , 1,
scrollinfo)
+ # ---------------------------------------------------------------------------
+ # Adjust the scrollbar to reflect changed record or record-cound
+ # ---------------------------------------------------------------------------
+
+ def adjustScrollbar (self, current, count):
+
+ 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,
+ current, 0)
+ win32gui.SendMessage (self._hwnd, win32con.SBM_SETSCROLLINFO, 1,
scrollinfo)
+
+
+# =============================================================================
+# Config dictionary
+# =============================================================================
+
configuration = {
'baseClass' : UIScrollBar,
'provides' : 'GFScrollBar',
Modified: trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py 2005-09-20
09:18:44 UTC (rev 7928)
+++ trunk/gnue-forms/src/uidrivers/wx/widgets/scrollbar.py 2005-09-20
15:25:31 UTC (rev 7929)
@@ -44,29 +44,30 @@
# --------------------------------------------------------------------------
# Create a scrollbar widget
# --------------------------------------------------------------------------
- def _createWidget(self, event, spacer):
+ def _createWidget (self, event, spacer):
"""
Creates a new wxScrollBar widget.
"""
- object = event.object
+ gfObject = event.object
itemX = self.itemX
- itemY = (object.Char__y + spacer) * event.widgetHeight
- itemWidth = object.Char__width * event.widgetWidth
- itemHeight = object.Char__height * event.widgetHeight
+ itemY = (gfObject.Char__y + spacer) * event.widgetHeight
+ itemWidth = gfObject.Char__width * event.widgetWidth
+ itemHeight = gfObject.Char__height * event.widgetHeight
- newWidget = self._widget = wxScrollBar(event.container, -1,
+ newWidget = self._widget = wxScrollBar (event.container, -1,
wxPoint(itemX, itemY),
wxSize(itemWidth, itemHeight),
wxSB_VERTICAL)
if event.initialize:
self._eventHandler = event.eventHandler
- EVT_COMMAND_SCROLL(newWidget, newWidget.GetId(), self.scrollbarHandler)
- _setDefaultEventHandlers(newWidget, event.eventHandler,
event.initialize,self._uiDriver)
+ EVT_COMMAND_SCROLL (newWidget, newWidget.GetId (), self.scrollbarHandler)
+ _setDefaultEventHandlers (newWidget, event.eventHandler,
+ event.initialize,self._uiDriver)
- object._block.registerScrollbar(self)
- self._rows = object._block._rows
+ (crec, recs, self.pageSize) = gfObject.getRecordAndPageCount ()
+ self.adjustScrollbar (crec, recs)
return newWidget
@@ -74,31 +75,26 @@
# --------------------------------------------------------------------------
# Handle scrollbar events
# --------------------------------------------------------------------------
- def scrollbarHandler(self, event):
+ def scrollbarHandler (self, event):
"""
Handles scrollbar events.
"""
object = _eventObjTowxWindow(event)
- id = object.GetId()
+ id = object.GetId ()
- value = object.GetThumbPosition()
- recno = int(value) + 1
+ self._gfObject.jumpToRecord (int (object.GetThumbPosition ()))
- gfObject = self._uiDriver._IdToGFObj[id]
- action = events.Event('requestRECORDNUMBER', object=gfObject, data=recno,
- _form=gfObject._form)
- self._eventHandler(action)
-
# --------------------------------------------------------------------------
# Adjusts scrollbar pos and size
# --------------------------------------------------------------------------
- def adjustScrollbar(self, pos, range):
+ def adjustScrollbar (self, current, count):
"""
Adjusts the scrollbar's position and size
"""
+
# position, thumbSize, range, pageSize, refresh = TRUE
- self._widget.SetScrollbar(pos, self._rows, range + self._rows - 1,
self._rows - 1)
+ self._widget.SetScrollbar (current, 1, count, self.pageSize - 1)
# ----------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r7929 - in trunk/gnue-forms/src: GFObjects uidrivers/_base uidrivers/gtk2/widgets uidrivers/win32/widgets uidrivers/wx/widgets,
johannes <=