diff -X exclude -Nur orig/forms/src/GFForm.py src/forms/src/GFForm.py --- orig/forms/src/GFForm.py Wed May 15 22:14:44 2002 +++ src/forms/src/GFForm.py Fri Jun 14 12:08:14 2002 @@ -48,6 +48,19 @@ #TabStops = ('GFEntry','GFButton') TabStops = ('GFEntry',) +class GFMainMenuBar(GFObj, GFEventAware): + def __init__(self, parent=None, window=None): + GFObj.__init__(self, parent) + self._type = "GFMainMenuBar" + self._currentObject = [self] + +class GFMainToolBar(GFObj, GFEventAware): + def __init__(self, parent=None, window=None): + GFObj.__init__(self, parent) + self._type = "GFMainToolBar" + self._currentObject = [self] + + class GFForm(GFObj, GRootObj, GFEventAware): def __init__(self, parent=None, app=None): GRootObj.__init__(self) diff -X exclude -Nur orig/forms/src/GFObjects/GFScrollBox.py src/forms/src/GFObjects/GFScrollBox.py --- orig/forms/src/GFObjects/GFScrollBox.py Wed Dec 31 21:00:00 1969 +++ src/forms/src/GFObjects/GFScrollBox.py Thu Jun 13 20:31:54 2002 @@ -0,0 +1,29 @@ +# +# 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 +# - Suite 330, Boston, MA 02111-1307, USA. +# +# Copyright 2000-2002 Free Software Foundation +# +# FILE: +# GFScollBox.py +# +# DESCRIPTION: +# Scroll box, where you can place widgets at will and they'll get scrolled. +# +# NOTES: is not official code yet. +# NOTE: remove previous note when it is official. +# + +from GFObj import GFObj + +class GFScrollBox(GFObj): + def __init__(self, parent=None): + GFObj.__init__(self, parent) + self._type = "GFScrollBox" diff -X exclude -Nur orig/forms/src/GFObjects/__init__.py src/forms/src/GFObjects/__init__.py --- orig/forms/src/GFObjects/__init__.py Sat Jun 30 02:03:07 2001 +++ src/forms/src/GFObjects/__init__.py Tue Jun 11 16:48:21 2002 @@ -12,7 +12,8 @@ "GFButton", "GFEntry", "GFObj", - "GFPage" + "GFPage", + "GFScrollBox", ] for module in __all__: diff -X exclude -Nur orig/forms/src/GFParser.py src/forms/src/GFParser.py --- orig/forms/src/GFParser.py Thu Jun 13 13:10:10 2002 +++ src/forms/src/GFParser.py Fri Jun 14 10:27:23 2002 @@ -537,6 +537,75 @@ 'MixedContent': 1, 'SingleInstance': 1, 'ParentTags': ('options',) }, + + 'maintoolbar': { + 'BaseClass': GFForm.GFMainToolBar, + 'Required': 0, + 'SingleInstance': 1, + 'Attributes': { + 'enabled': { + 'Typecast': GTypecast.boolean, + 'Default': 1, + }, + }, + 'ParentTags': ('form', ), + }, + + 'mainmenubar': { + 'BaseClass': GFForm.GFMainMenuBar, + 'Required': 0, + 'SingleInstance': 1, + 'Attributes': { + 'enabled': { + 'Typecast': GTypecast.boolean, + 'Default': 1, + }, + }, + 'ParentTags': ('form', ), + }, + + 'scrollbox': { + 'BaseClass': GFObjects.GFScrollBox, + 'Required': 0, + 'Attributes': { + 'scrollbars': { + 'Typecast': GTypecast.name, + 'ValueSet': { + 'none': {}, + 'horizontal': {}, + 'vertical': {}, + 'both': {}, + }, + 'Default': 'both', + }, + 'width': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + 'height': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + 'x': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + 'y': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + 'vwidth': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + 'vheight': { + 'Required': 1, + 'Typecast': GTypecast.whole + }, + }, + 'ParentTags': ('panel',), + }, + } diff -X exclude -Nur orig/forms/src/uidrivers/_base/UIdriver.py src/forms/src/uidrivers/_base/UIdriver.py --- orig/forms/src/uidrivers/_base/UIdriver.py Thu Jun 6 15:06:11 2002 +++ src/forms/src/uidrivers/_base/UIdriver.py Fri Jun 14 10:28:29 2002 @@ -32,6 +32,9 @@ from gnue.forms.GFEvent import * from gnue.common.GObjects import * +# mdione +import sys + # Used in updating the status bar statusValues = {'saved':'OK', @@ -78,7 +81,7 @@ self._formToUIWidget = {} # dictionary of driver specific UIfoo # widgets with the GFObj used as the key - self.containerWidgets= ['GFPage'] # GFForm objects that contain others + self.containerWidgets= ['GFPage', 'GFScrollBox'] # GFForm objects that contain others self._pageList = [] # A list of page widgets created by the form @@ -95,6 +98,9 @@ 'GFLabel' : self._stdHandler, 'GFScrollBar' : self._stdHandler, 'GFPage' : self._stdHandler, + 'GFMainToolBar' : self._stdHandler, + 'GFMainMenuBar' : self._stdHandler, + 'GFScrollBox' : self._stdHandler, } def _stdHandler(self): @@ -144,6 +150,8 @@ self.currentWidget.insert(0,widget[0]) except KeyError: + # mdione + GDebug.printMesg (2, "_buildUI failed on a %s: %s" % (self._currentObject[0]._type, sys.exc_info()[0])) pass diff -X exclude -Nur orig/forms/src/uidrivers/wx/UIdriver.py src/forms/src/uidrivers/wx/UIdriver.py --- orig/forms/src/uidrivers/wx/UIdriver.py Thu Jun 6 15:06:11 2002 +++ src/forms/src/uidrivers/wx/UIdriver.py Fri Jun 14 12:13:16 2002 @@ -88,7 +88,11 @@ # def initFont(widget, affectsLayout=1): if int(gConfig('fixedWidthFont')): - widget.SetFont(wxFont(int(gConfig('pointSize')),wxMODERN,wxNORMAL,wxNORMAL)) + try: + widget.SetFont(wxFont(int(gConfig('pointSize')),wxMODERN,wxNORMAL,wxNORMAL)) + except: + GDebug.printMesg(2,"could not set font for %s" % widget) + pass # # GFUserInterface @@ -204,92 +208,6 @@ self.statusBar.SetStatusWidths([-1,50,50,75,75]) initFont(self.statusBar,0) - fileMenu = wxMenu() - fileMenu.Append( 100, _("Save (F6)"),_('Save all changes to database.')) - EVT_MENU(self._wxapp, 100, lambda event, l=self: l.dispatchEvent(GFEvent('requestCOMMIT'))) - fileMenu.Append( 102, _("Clear Form (F11)"),_('Clear Form')) - EVT_MENU(self._wxapp, 102, lambda event, l=self: l.dispatchEvent(GFEvent('requestROLLBACK'))) - fileMenu.AppendSeparator() - fileMenu.Append( 104, _("&Print"),_('Perform print routine for this form.')) - EVT_MENU(self._wxapp, 104, lambda event, l=self: l.dispatchEvent(GFEvent('requestPRINTOUT'))) - fileMenu.AppendSeparator() - fileMenu.Append( 101, _("E&xit"),_('Leave the application.')) - EVT_MENU(self._wxapp, 101, self.menuExitEvent) - - editMenu = wxMenu() - editMenu.Append(401, _("Cut"),_("Cut the selected text")) - EVT_MENU(self._wxapp, 401, lambda event, l=self: l.dispatchEvent(GFEvent('requestCUT'))) - editMenu.Append(402, _("Copy"),_("Copy the selected text")) - EVT_MENU(self._wxapp, 402, lambda event, l=self: l.dispatchEvent(GFEvent('requestCOPY'))) - editMenu.Append(403, _("Paste"),_("Paste text")) - EVT_MENU(self._wxapp, 403, lambda event, l=self: l.dispatchEvent(GFEvent('requestPASTE'))) - - dataMenu = wxMenu() - dataMenu.Append( 211, _("First Record (Shft+Up)"),_('Navigate to first record in memory.')) - EVT_MENU(self._wxapp, 211, lambda event, l=self: l.dispatchEvent(GFEvent('requestFIRSTRECORD'))) - dataMenu.Append( 202, _("Previous Record (Up)"),_('Navigate to previous record in memory.')) - EVT_MENU(self._wxapp, 202, lambda event, l=self: l.dispatchEvent(GFEvent('requestPREVRECORD'))) - dataMenu.Append( 201, _("Next Record (Down)"),_('Navigate to next record in memory.')) - EVT_MENU(self._wxapp, 201, lambda event, l=self: l.dispatchEvent(GFEvent('requestNEXTRECORD'))) - dataMenu.Append( 210, _("Last Record (Shft+Down)"),_('Navigate to last record in memory.')) - EVT_MENU(self._wxapp, 210, lambda event, l=self: l.dispatchEvent(GFEvent('requestLASTRECORD'))) - dataMenu.Append( 209, _("Jump to Record... (F2)"),_('Prompts for a record number to which the system should jump.')) - EVT_MENU(self._wxapp, 209, _PROMPTFORRECORD) - dataMenu.Append( 203, _("New Record (F12)"),_('Create a new record for data input.')) - EVT_MENU(self._wxapp, 203, lambda event, l=self: l.dispatchEvent(GFEvent('requestNEWRECORD'))) - dataMenu.Append( 204, _("Mark Record for Delete (F5)"),_('Mark record for removal at next commit.')) - EVT_MENU(self._wxapp, 204, lambda event, l=self: l.dispatchEvent(GFEvent('requestMARKFORDELETE'))) - dataMenu.AppendSeparator() - dataMenu.Append( 205, _("Next Block (PgDn)"),_('Navigate to next data block.')) - EVT_MENU(self._wxapp, 205, lambda event, l=self: l.dispatchEvent(GFEvent('requestNEXTBLOCK'))) - dataMenu.Append( 206, _("Previous Block (PgUp)"),_('Navigate to previous data block.')) - EVT_MENU(self._wxapp, 206, lambda event, l=self: l.dispatchEvent(GFEvent('requestPREVBLOCK'))) - dataMenu.AppendSeparator() - dataMenu.Append( 207, _("Enter Query (F8)"),_('Switch to input query mask mode.')) - EVT_MENU(self._wxapp, 207, lambda event, l=self: l.dispatchEvent(GFEvent('requestENTERQUERY'))) - dataMenu.Append( 208, _("Execute Query (F9)"), _('Execute query using current mask.')) - EVT_MENU(self._wxapp, 208, lambda event, l=self: l.dispatchEvent(GFEvent('requestEXECQUERY'))) - - helpMenu = wxMenu() - helpMenu.Append( 300, _("&About..."), _('Display info about GNUe Forms.')) - EVT_MENU(self._wxapp, 300, lambda event, l=self: l.dispatchEvent(GFEvent('requestABOUT'))) - - menuBar = wxMenuBar() - menuBar.Append( fileMenu, _("&File") ) - menuBar.Append( editMenu, _("&Edit") ) - menuBar.Append( dataMenu, _("&Data") ) - menuBar.Append( helpMenu, _("&Help") ) - - self.mainWindow.SetMenuBar( menuBar ); - - # - # There has got to be better way to call events to ride off the EVT_MENU - # Ok if i give buttons same id as menu's they share events - # I dont know if this is horribly wrong or design - # - if sys.platform == 'win32': - mainToolBar = self.mainWindow.CreateToolBar() - else: - mainToolBar = self.mainWindow.CreateToolBar(wxTB_HORIZONTAL|wxTB_DOCKABLE) - - mainToolBar.SetToolBitmapSize(wxSize(24,24)) - mainToolBar.AddSimpleTool(100, wxImage(images_dir+gConfig('tb_commit'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Save Changes"), _('Save all changes to database.')) - mainToolBar.AddSimpleTool(203, wxImage(images_dir+gConfig('tb_insert'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Insert Record"), _('Create a new record for data input.')) - mainToolBar.AddSimpleTool(204, wxImage(images_dir+gConfig('tb_delete'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Delete Record"), _('Mark record for removal at next commit.')) - mainToolBar.AddSeparator() - mainToolBar.AddSimpleTool(211, wxImage(images_dir+gConfig('tb_first'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("First Record"),_('Navigate to first record in memory.')) - mainToolBar.AddSimpleTool(202, wxImage(images_dir+gConfig('tb_previous'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Previous Record"),_('Navigate to previous record in memory.')) - mainToolBar.AddSimpleTool(201, wxImage(images_dir+gConfig('tb_next'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Next Record"),_('Navigate to next record in memory.')) - mainToolBar.AddSimpleTool(210, wxImage(images_dir+gConfig('tb_last'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Last Record"),_('Navigate to last record in memory.')) - mainToolBar.AddSimpleTool(209, wxImage(images_dir+gConfig('tb_jump'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Jump to Record"),_('Navigate to user specified record in memory.')) - mainToolBar.AddSeparator() - mainToolBar.AddSimpleTool(207, wxImage(images_dir+gConfig('tb_query_prep'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Prepare Query"), _('Switch to input query mask mode.')) - mainToolBar.AddSimpleTool(208, wxImage(images_dir+gConfig('tb_query'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Execute Query"), _('Execute query using current mask.')) - mainToolBar.AddSeparator() - mainToolBar.AddSimpleTool(102, wxImage(images_dir+gConfig('tb_rollback'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Clear Form"), _('Clear Form')) - mainToolBar.AddSimpleTool(101, wxImage(images_dir+gConfig('tb_exit'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Exit Form"), _('Exit Form')) - mainToolBar.Realize() - self.mainWindow.panel = wxPanel(self.mainWindow,-1, wxDefaultPosition,self.mainWindow.GetSize()) self.currentWidget = [self.mainWindow.panel] @@ -618,6 +536,109 @@ self._deleteFromCrossRef(widget, object) +class UIMainMenuBar (UIHelper, UIWidget): + def _createWidget(self, event, spacer): + interface= event.interface + window= interface.mainWindow + self.iface= interface + + fileMenu = wxMenu() + fileMenu.Append( 100, _("Save (F6)"),_('Save all changes to database.')) + EVT_MENU(interface._wxapp, 100, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestCOMMIT'))) + fileMenu.Append( 102, _("Clear Form (F11)"),_('Clear Form')) + EVT_MENU(interface._wxapp, 102, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestROLLBACK'))) + fileMenu.AppendSeparator() + fileMenu.Append( 104, _("&Print"),_('Perform print routine for this form.')) + EVT_MENU(interface._wxapp, 104, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestPRINTOUT'))) + fileMenu.AppendSeparator() + fileMenu.Append( 101, _("E&xit"),_('Leave the application.')) + EVT_MENU(interface._wxapp, 101, interface.menuExitEvent) + + editMenu = wxMenu() + editMenu.Append(401, _("Cut"),_("Cut the selected text")) + EVT_MENU(interface._wxapp, 401, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestCUT'))) + editMenu.Append(402, _("Copy"),_("Copy the selected text")) + EVT_MENU(interface._wxapp, 402, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestCOPY'))) + editMenu.Append(403, _("Paste"),_("Paste text")) + EVT_MENU(interface._wxapp, 403, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestPASTE'))) + + dataMenu = wxMenu() + dataMenu.Append( 211, _("First Record (Shft+Up)"),_('Navigate to first record in memory.')) + EVT_MENU(interface._wxapp, 211, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestFIRSTRECORD'))) + dataMenu.Append( 202, _("Previous Record (Up)"),_('Navigate to previous record in memory.')) + EVT_MENU(interface._wxapp, 202, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestPREVRECORD'))) + dataMenu.Append( 201, _("Next Record (Down)"),_('Navigate to next record in memory.')) + EVT_MENU(interface._wxapp, 201, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestNEXTRECORD'))) + dataMenu.Append( 210, _("Last Record (Shft+Down)"),_('Navigate to last record in memory.')) + EVT_MENU(interface._wxapp, 210, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestLASTRECORD'))) + dataMenu.Append( 209, _("Jump to Record... (F2)"),_('Prompts for a record number to which the system should jump.')) + EVT_MENU(interface._wxapp, 209, _PROMPTFORRECORD) + dataMenu.Append( 203, _("New Record (F12)"),_('Create a new record for data input.')) + EVT_MENU(interface._wxapp, 203, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestNEWRECORD'))) + dataMenu.Append( 204, _("Mark Record for Delete (F5)"),_('Mark record for removal at next commit.')) + EVT_MENU(interface._wxapp, 204, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestMARKFORDELETE'))) + dataMenu.AppendSeparator() + dataMenu.Append( 205, _("Next Block (PgDn)"),_('Navigate to next data block.')) + EVT_MENU(interface._wxapp, 205, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestNEXTBLOCK'))) + dataMenu.Append( 206, _("Previous Block (PgUp)"),_('Navigate to previous data block.')) + EVT_MENU(interface._wxapp, 206, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestPREVBLOCK'))) + dataMenu.AppendSeparator() + dataMenu.Append( 207, _("Enter Query (F8)"),_('Switch to input query mask mode.')) + EVT_MENU(interface._wxapp, 207, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestENTERQUERY'))) + dataMenu.Append( 208, _("Execute Query (F9)"), _('Execute query using current mask.')) + EVT_MENU(interface._wxapp, 208, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestEXECQUERY'))) + + helpMenu = wxMenu() + helpMenu.Append( 300, _("&About..."), _('Display info about GNUe Forms.')) + EVT_MENU(interface._wxapp, 300, lambda event, l=self.iface: l.dispatchEvent(GFEvent('requestABOUT'))) + + menuBar = wxMenuBar() + menuBar.Append( fileMenu, _("&File") ) + menuBar.Append( editMenu, _("&Edit") ) + menuBar.Append( dataMenu, _("&Data") ) + menuBar.Append( helpMenu, _("&Help") ) + + window.SetMenuBar( menuBar ) + + return menuBar + +class UIMainToolBar (UIHelper, UIWidget): + def _createWidget(self, event, spacer): + interface= event.interface + window= interface.mainWindow + + # + # There has got to be better way to call events to ride off the EVT_MENU + # Ok if i give buttons same id as menu's they share events + # I dont know if this is horribly wrong or design + # + # mdione: as maintoolbar can only be son of a form.... + if sys.platform == 'win32': + mainToolBar = window.CreateToolBar() + else: + mainToolBar = window.CreateToolBar(wxTB_HORIZONTAL|wxTB_DOCKABLE) + + mainToolBar.SetToolBitmapSize(wxSize(24,24)) + mainToolBar.AddSimpleTool(100, wxImage(images_dir+gConfig('tb_commit'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Save Changes"), _('Save all changes to database.')) + mainToolBar.AddSimpleTool(203, wxImage(images_dir+gConfig('tb_insert'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Insert Record"), _('Create a new record for data input.')) + mainToolBar.AddSimpleTool(204, wxImage(images_dir+gConfig('tb_delete'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Delete Record"), _('Mark record for removal at next commit.')) + mainToolBar.AddSeparator() + mainToolBar.AddSimpleTool(211, wxImage(images_dir+gConfig('tb_first'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("First Record"),_('Navigate to first record in memory.')) + mainToolBar.AddSimpleTool(202, wxImage(images_dir+gConfig('tb_previous'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Previous Record"),_('Navigate to previous record in memory.')) + mainToolBar.AddSimpleTool(201, wxImage(images_dir+gConfig('tb_next'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Next Record"),_('Navigate to next record in memory.')) + mainToolBar.AddSimpleTool(210, wxImage(images_dir+gConfig('tb_last'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Last Record"),_('Navigate to last record in memory.')) + mainToolBar.AddSimpleTool(209, wxImage(images_dir+gConfig('tb_jump'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Jump to Record"),_('Navigate to user specified record in memory.')) + mainToolBar.AddSeparator() + mainToolBar.AddSimpleTool(207, wxImage(images_dir+gConfig('tb_query_prep'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Prepare Query"), _('Switch to input query mask mode.')) + mainToolBar.AddSimpleTool(208, wxImage(images_dir+gConfig('tb_query'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Execute Query"), _('Execute query using current mask.')) + mainToolBar.AddSeparator() + mainToolBar.AddSimpleTool(102, wxImage(images_dir+gConfig('tb_rollback'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Clear Form"), _('Clear Form')) + mainToolBar.AddSimpleTool(101, wxImage(images_dir+gConfig('tb_exit'), wxBITMAP_TYPE_PNG).ConvertToBitmap(), _("Exit Form"), _('Exit Form')) + mainToolBar.Realize() + + return mainToolBar + + # # UILabel # @@ -637,6 +658,32 @@ (object.y+spacer+(spacer*object._gap))*event.widgetHeight), wxSize(self.itemWidth,self.itemHeight), style) return newWidget + +class UIScrollBox (UIHelper, UIWidget): + childs= [] + scrollBars= { + 'horizontal': wxHSCROLL, + 'vertical' : wxVSCROLL, + 'both' : wxHSCROLL | wxVSCROLL, + 'none' : 0, + } + + def _createWidget (self, event, spacer): + object = event.object + scrollbars= self.scrollBars[object.scrollbars] + + newWidget= wxScrolledWindow (event.container, -1, + wxPoint (object.x*event.widgetWidth, + (object.y+spacer+(spacer*object._gap))*event.widgetHeight), + wxSize (object.width*event.widgetWidth, object.height*event.widgetHeight), + wxHSCROLL | wxVSCROLL) + + GDebug.printMesg (4, "[uiscrollbox._cw] %s %dx%d+%d-%d %s" % (event.container, object.x*event.widgetWidth, + (object.y+spacer+(spacer*object._gap))*event.widgetHeight, + object.width*event.widgetWidth, object.height*event.widgetHeight, dir(newWidget))) + newWidget.SetScrollbars (event.widgetHeight, event.widgetWidth, object.vwidth, object.vheight) + + return newWidget # # UIBox @@ -1276,6 +1323,9 @@ 'GFEntry' : UIEntry, 'GFButton' : UIButton, 'GFScrollBar' : UIScrollBar, + 'GFMainToolBar': UIMainToolBar, + 'GFMainMenuBar': UIMainMenuBar, + 'GFScrollBox' : UIScrollBox, }