[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5993 - in trunk/gnue-forms/src: . uidrivers/_base uidrivers/_base/widge
From: |
johannes |
Subject: |
r5993 - in trunk/gnue-forms/src: . uidrivers/_base uidrivers/_base/widgets uidrivers/gtk2 uidrivers/gtk2/widgets uidrivers/gtk2/widgets/form |
Date: |
Tue, 20 Jul 2004 08:58:55 -0500 (CDT) |
Author: johannes
Date: 2004-07-20 08:58:53 -0500 (Tue, 20 Jul 2004)
New Revision: 5993
Added:
trunk/gnue-forms/src/uidrivers/gtk2/about.py
Modified:
trunk/gnue-forms/src/GFDisplayHandler.py
trunk/gnue-forms/src/GFForm.py
trunk/gnue-forms/src/GFInstance.py
trunk/gnue-forms/src/uidrivers/_base/UIdriver.py
trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py
trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py
trunk/gnue-forms/src/uidrivers/gtk2/UIdriver.py
trunk/gnue-forms/src/uidrivers/gtk2/common.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/__init__.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/box.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/button.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/component.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/wrappers.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/label.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/page.py
trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py
Log:
Started work on GTK2 driver for forms. Basic things should work.
Modified: trunk/gnue-forms/src/GFDisplayHandler.py
===================================================================
--- trunk/gnue-forms/src/GFDisplayHandler.py 2004-07-20 13:52:09 UTC (rev
5992)
+++ trunk/gnue-forms/src/GFDisplayHandler.py 2004-07-20 13:58:53 UTC (rev
5993)
@@ -89,6 +89,8 @@
def generateRefreshEvent(self):
+ GDebug.printMesg (2, "generateRefreshEvent on %s '%s' %s" % \
+ (self, self.display, self.entry))
# TODO: this should probably actually happen in UIwxpython!
if (self.handleCR and type(self.display)=='str'):
self.dispatchEvent(events.Event('updateEntryEditor',
@@ -261,8 +263,8 @@
self.selection1 = event.start_pos
self.selection2 = event.end_pos
- self.cursor = event.position
- self.delete(event)
+ self.cursor = event.position
+ self.delete (event)
# Delete backwards one character
def backspace(self, event):
@@ -822,13 +824,13 @@
self.display = self._buildDisplayHelper(self.value, False)
- def replaceText(self, event):
+ def replaceText (self, event):
if not self.editing:
return
self.selection1 = 0
- self.selection2 = len(self.display)
- self.addText(event)
+ self.selection2 = len (self.display)
+ self.addText (event)
# TODO: Kills dropdown handling with keyboard on win32
# TODO: needs more work :(
Modified: trunk/gnue-forms/src/GFForm.py
===================================================================
--- trunk/gnue-forms/src/GFForm.py 2004-07-20 13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/GFForm.py 2004-07-20 13:58:53 UTC (rev 5993)
@@ -42,6 +42,7 @@
from gnue.common.datasources import ConnectionTriggerObj
from gnue.forms.GFObjects import *
from gnue.forms import GFParser
+from gnue.forms.uidrivers._base import UIdriver as BaseDriver
# Defines which objects are "Tab Stops"
@@ -91,7 +92,7 @@
#
# Trigger support
#
- self._triggerns={}
+ self._triggerns = {}
self._triggerGlobal = True # Put this object into the global namespace by
it's name
self._validTriggers = { 'ON-STARTUP': 'On-Startup',
@@ -131,6 +132,9 @@
'showMessage':{'function':self.triggerShowMessageBox,
'global': True,
},
+ 'messageBox': {
+ 'function': self.triggerMessageBox,
+ 'global': True},
'commit':{'function':self.commit,
'global': True,
},
@@ -165,6 +169,7 @@
'GUI:STATUSBAR:SUPPRESS': False,
}
+ self.__updateTriggerNs ()
self._in_trigger_lock = False
#
@@ -310,8 +315,14 @@
# cannot change focus to same entry
if widget == self._currentEntry:
+ GDebug.printMesg (1, "Widget is current entry %s" % widget)
return
+ cen = self._currentEntry is not None and self._currentEntry.name or '-'
+ win = widget is not None and widget.name or '-'
+ GDebug.printMesg (1, "Changing focus from %s (%s) to %s (%s)" % \
+ (self._currentEntry, cen, widget, win))
+
try:
if self._currentEntry:
@@ -321,7 +332,7 @@
if len(str(val)) < self._currentEntry._field.minLength:
message = _("Minimum required length %d" %
self._currentEntry._field.minLength )
# Piggybacking off the triggers message box code
- self.triggerShowMessageBox(message)
+ self.triggerShowMessageBox (message)
return
event = events.Event('endEDITMODE',_form=self)
@@ -375,6 +386,9 @@
if blockChange:
self.refreshDisplay(self._currentBlock)
+ GDebug.printMesg (1, "Updating entries old: %s, new: %s" % \
+ (oldEntry, self._currentEntry))
+
self.dispatchEvent('updateENTRY', oldEntry, _form=self)
self.dispatchEvent('updateENTRY', self._currentEntry, _form=self)
@@ -395,7 +409,9 @@
if pageChange:
self._currentPage.processTrigger('Post-FocusIn', ignoreAbort=False)
+ GDebug.printMesg (1, "calling refreshUIEvents ()")
self.refreshUIEvents()
+ GDebug.printMesg (1, "CurrentEntry is %s" % self._currentEntry)
except AbortRequest, t:
GDebug.printMesg(1, "Trigger Error!")
@@ -556,6 +572,7 @@
if block.autoClear:
block.processClear()
else:
+ GDebug.printMesg (1, "switchRecord (0) from commit")
block.switchRecord(0)
self.dispatchEvent('cannotCOMMIT')
@@ -897,9 +914,29 @@
#
# display a standard message box
#
- def triggerShowMessageBox(self, msgtxt, caption='GNUe Message',
title='Information'):
- self._instance.displayMessageBox(msgtxt,caption,title)
+ def triggerShowMessageBox (self, msgtxt, caption='GNUe Message',
+ title='Information', kind = None, cancel = False):
+ return self._instance.displayMessageBox (msgtxt, kind, cancel, caption,
+ title)
+
+ # ---------------------------------------------------------------------------
+ # Show a message box using the given message
+ # ---------------------------------------------------------------------------
+
+ def triggerMessageBox (self, message, kind = None, title = None,
+ cancel = False):
+ """
+ This function brings up a message box of a given kind.
+ @param message: text to be displayed
+ @param kind: one of the MBOX_* constants defining the type of message box.
+ These constants are defined in uidrivers._base.UIdriver
+ @param cancel: Boolean flag indicating wether a cancel button will be
+ included or not.
+ @return: one of the RESPONSE_* constans from the base-UIdriver
+ """
+ return self._instance.displayMessageBox (message, kind, cancel, '', title)
+
#
# triggerSetFocus
#
@@ -1059,3 +1096,17 @@
self.processTrigger(name)
+ # ---------------------------------------------------------------------------
+ # Update the trigger namespace with some UI-driver constants
+ # ---------------------------------------------------------------------------
+
+ def __updateTriggerNs (self):
+ """
+ This function adds message-box-constants to the trigger namespace. Use the
+ MBOX_* constants to define the type of message box to be displayed. All
+ RESPONSE_* constants are the return values.
+ """
+ for k in ['MBOX_INFO', 'MBOX_WARNING', 'MBOX_ERROR', 'MBOX_QUESTION',
+ 'RESPONSE_OK', 'RESPONSE_CLOSE', 'RESPONSE_CANCEL',
+ 'RESPONSE_YES', 'RESPONSE_NO']:
+ self._triggerns [k] = getattr (BaseDriver, k)
Modified: trunk/gnue-forms/src/GFInstance.py
===================================================================
--- trunk/gnue-forms/src/GFInstance.py 2004-07-20 13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/GFInstance.py 2004-07-20 13:58:53 UTC (rev 5993)
@@ -40,6 +40,7 @@
from gnue.forms.GFParser import loadFile
from gnue.forms import VERSION
from gnue.forms import GFKeyMapper
+from gnue.forms.uidrivers._base import UIdriver as BaseDriver
from gnue.common.apps import GDebug
from gnue.common.datasources import GDataObjects, GConnections
from gnue.common import events
@@ -163,6 +164,8 @@
GFKeyMapper.KeyMapper.loadUserKeyMap(mapping)
+
+
def addDialogs(self):
"""
Loads the base dialogs into memory.
@@ -321,7 +324,7 @@
# Builds a UI based upon a specific form and
# sets that form to active status
#
- def activateForm(self,formName='__main__',parameters={}, modal=0):
+ def activateForm (self, formName = '__main__', parameters = {}, modal = 0):
form = self._formsDictionary[formName]
if parameters != {}:
@@ -332,13 +335,12 @@
form.processTrigger('On-Activation')
- self._uiinstance.activateForm(formName,modal)
+ self._uiinstance.activateForm (formName, modal)
- self.dispatchEvent('gotoENTRY',object=form._currentEntry,
- _form=form)
+ self.dispatchEvent ('gotoENTRY', object = form._currentEntry, _form = form)
- form.refreshDisplay(form)
- self.updateStatus(form)
+ form.refreshDisplay (form)
+ self.updateStatus (form)
#
# buildForm
@@ -477,7 +479,7 @@
# then the proxied event should set this to the
# message text
if event.__errortext__:
- self.displayMessageBox(event.__errortext__)
+ self.displayMessageBox (event.__errortext__, BaseDriver.MBOX_ERROR)
def nextEntry(self, event):
"""
@@ -494,7 +496,7 @@
if origEntry == event._form._currentEntry:
message = event._form.nextEntry()
if message:
- self.displayMessageBox( message)
+ self.displayMessageBox (message)
return
self.dispatchEvent('gotoENTRY',object=event._form._currentEntry,
_form=event._form)
self.updateRecordStatus(event._form)
@@ -602,7 +604,7 @@
return
message = event._form.prevRecord()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
self._entryUpdated(event._form)
@@ -618,7 +620,7 @@
return
message = event._form.nextRecord()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
self._entryUpdated(event._form)
@@ -634,7 +636,7 @@
return
message = event._form.firstRecord()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
self._entryUpdated(event._form)
@@ -650,7 +652,7 @@
return
message = event._form.lastRecord()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
self._entryUpdated(event._form)
@@ -677,7 +679,7 @@
message = event._form.jumpRecord(count)
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message, BaseDriver.MBOX_ERROR)
return
@@ -763,7 +765,8 @@
if not event._form.isSaved():
- self.displayMessageBox( _('Data not saved. Save changes or clear the
form to proceed.'))
+ self.displayMessageBox (_("Data not saved. Save changes or clear "
+ "the form to proceed."), BaseDriver.MBOX_ERROR)
event._form.refreshUIEvents()
else:
event._form.processTrigger('On-Exit')
@@ -771,7 +774,7 @@
_('Current data is saved'),
_formName=event._form.name)
except AbortRequest, t:
- self.displayMessageBox(t)
+ self.displayMessageBox (t, BaseDriver.MBOX_WARNING)
event._form.refreshUIEvents()
#
@@ -809,30 +812,39 @@
#
# Displays the about dialog
#
- def executeAbout(self,event):
+ def executeAbout (self, event):
parameters = {
'appversion' : VERSION,
- 'ui_driver' : self._uiinstance.name,
+ 'ui_driver' : self._uiinstance.name,
'name' : event._form.title or "Unknown",
- 'formversion' : event._form.getOption('version') or "Unknown",
- 'author' : event._form.getOption('author') or "Unknown",
- 'description' : event._form.getOption('description') or "Unknown",
- }
- self.activateForm('_about', parameters, modal=1)
+ 'formversion' : event._form.getOption ('version') or "Unknown",
+ 'author' : event._form.getOption ('author') or "Unknown",
+ 'description' : event._form.getOption ('description') or "Unknown",
+ }
+ if hasattr (self._uiinstance, 'aboutBox'):
+ self._uiinstance.aboutBox (parameters, event._form)
+ else:
+ self.activateForm('_about', parameters, modal=1)
+
#
# displayMessageBox
#
# Displays a generic message box
#
- def displayMessageBox(self, message='', caption='GNUe Message',
title='Information'):
+ def displayMessageBox (self, message = '', kind = None, cancel = False,
+ caption = 'GNUe Message', title = 'Information'):
parameters = {
- 'caption':caption,
- 'message':message,
- 'title':title
+ 'caption': caption,
+ 'message': message,
+ 'title' : title
}
- self.activateForm('_messageBox', parameters, modal=1)
+ if hasattr (self._uiinstance, 'messageBox'):
+ res = self._uiinstance.messageBox (message, kind, title, cancel)
+ return res
+ else:
+ self.activateForm ('_messageBox', parameters, modal = 1)
#
@@ -845,7 +857,7 @@
parameters = {
'recordnumber': ''
}
- self.activateForm('_jumpto', parameters, modal=1)
+ self.activateForm ('_jumpto', parameters, modal = True)
if not parameters.has_key('cancel'):
if not event._form.endEditing():
@@ -858,7 +870,7 @@
message = event._form.jumpRecord(count)
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
@@ -911,6 +923,8 @@
# an event source
#
def changeFocus(self, event):
+ GDebug.printMesg (2, "GFInstance.ChangeFocus: %s" % event.data.name)
+
if not event._form.endEditing():
return False
if event.data._type=='GFEntry' or event.data._type=='GFImage':
@@ -918,15 +932,18 @@
return False
newEntry = event.data
+ GDebug.printMesg (2, "Calling _form.changeFocus () on %s" % event._form)
message = event._form.changeFocus(newEntry)
if message:
- self.displayMessageBox( message)
+ self.displayMessageBox (message)
return False
self.dispatchEvent('gotoENTRY',object=event._form._currentEntry,
_form=event._form)
self.updateRecordStatus(event._form)
self.updateTip(event._form)
+ GDebug.printMesg (2, "Leaving GFInstance.ChangeFocus: %s" % \
+ event._form._currentEntry)
return True
#
@@ -939,7 +956,7 @@
message = event._form.initQuery()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
@@ -957,7 +974,7 @@
message = event._form.cancelQuery()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
@@ -975,7 +992,7 @@
message = event._form.copyQuery()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
@@ -991,7 +1008,7 @@
return
message = event._form.executeQuery()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
self.dispatchEvent('gotoENTRY',object=event._form._currentEntry,
_form=event._form)
event._form.refreshDisplay(event._form._currentBlock)
@@ -1005,7 +1022,7 @@
return
message = event._form.commit()
if message:
- self.displayMessageBox(message)
+ self.displayMessageBox (message)
return
self._entryUpdated(event._form)
Modified: trunk/gnue-forms/src/uidrivers/_base/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/_base/UIdriver.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -63,7 +63,17 @@
except ImportError:
return 'default'
+MBOX_INFO = 0
+MBOX_WARNING = 1
+MBOX_QUESTION = 2
+MBOX_ERROR = 3
+RESPONSE_OK = 0
+RESPONSE_CLOSE = 1
+RESPONSE_CANCEL = 2
+RESPONSE_YES = 3
+RESPONSE_NO = 4
+
#
# GFUserInterfaceBase
#
@@ -233,7 +243,7 @@
# Add to the cross refernce
#
self._gfObjToUIWidget[object]=uiWidget
- GDebug.printMesg(0, "OBJECT%s "% object)
+ GDebug.printMesg(0, "OBJECT %s: %s " % (object.name, object))
GDebug.printMesg(0, "WIDGET %s " % uiWidget)
#
@@ -345,10 +355,14 @@
value =
handler.getDisplayFiller(block._resultSet.getRecord(currentRecord- \
(index-count)).getField(field.field))
+ GDebug.printMesg (2, "UPD-ENTRY %s prior: '%s' (%s)" % \
+ (entry, value, count))
self._gfObjToUIWidget[entry].setValue(value,count)
# Fill current spot
value = handler.getDisplayFiller(entry.getValue())
+ GDebug.printMesg (2, "UPD-ENTRY %s current: '%s' (%s)" % \
+ (entry, value, index))
self._gfObjToUIWidget[entry].setValue(value, index)
# Fill trailing spots
@@ -372,6 +386,8 @@
else:
value = handler.getDisplayFiller(rec.getField(field.field))
+ GDebug.printMesg (2, "UPD-ENTRY %s trail: '%s' (%s)" % \
+ (entry, value, count))
self._gfObjToUIWidget[entry].setValue(value, count, cr <= lastRow)
count += 1
@@ -386,6 +402,8 @@
def updateEntryEditor(self, event):
index = event.object._visibleIndex
widget = self._gfObjToUIWidget[event.object]
+ GDebug.printMesg (2, "UPD-ENTRY-EDIT %s '%s' %s" % \
+ (event.object, event.display, index))
widget.setValue(event.display, index)
widget.setCursorPosition(event.cursor, index)
Modified: trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/_base/widgets/_base.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -102,7 +102,10 @@
newWidget = self.createWidget(self._creationEvent, spacer)
self.widgets.append(newWidget)
+ GDebug.printMesg (1, "WIDGETS.APPEND: %s, %s (%s)" % \
+ (self._gfObject.name, self, self.widgets))
+
#
# The following functions should be overridden by the widgets
# in the ui driver.
Modified: trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/MenuBar.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -35,13 +35,14 @@
# Create the menu
def init(self):
- self.menu = menu = gtk.MenuBar()
- self.container.content_table.attach(menu,
+ self.menu = gtk.MenuBar()
+ self.container.content_table.attach(self.menu,
# X direction Y direction
0, 1, 0, 1,
gtk.EXPAND | gtk.FILL, 0,
0, 0)
- return menu
+ self.menu.show ()
+ return self.menu
def correctLabel(self,label):
# TODO: remove decode step, when gettext translations are send
Modified: trunk/gnue-forms/src/uidrivers/gtk2/UIdriver.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/UIdriver.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/UIdriver.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -47,92 +47,97 @@
raise ImportError
except ImportError:
- raise Exceptions.DriverNotSupported, _("The GNUe-Forms GTK driver requires
PyGTK and GTK 2.x.")
+ raise Exceptions.DriverNotSupported, \
+ _("The GNUe-Forms GTK driver requires PyGTK and GTK 2.x.")
from gnue.common import events
from gnue.common.apps import GDebug
from gnue.common.apps import GConfig
-from gnue.common.utils.TextUtils import lineWrap
from gnue.forms.GFForm import *
+from gnue.forms.uidrivers._base import UIdriver as BaseDriver
from gnue.forms.uidrivers._commonGuiToolkit import UIdriver as commonToolkit
from gnue.forms.uidrivers.gtk2.GFApp import *
from gnue.forms.uidrivers.gtk2.SplashScreen import *
from gnue.forms.uidrivers.gtk2.widgets._base import *
-from gnue.forms.uidrivers.gtk2.common import PANGO_SCALE
+from gnue.forms.uidrivers.gtk2 import about
-#
-# GFUserInterface
-#
-# The public interface to the User Interface
-# All UIs must provide this class
-#
-class GFUserInterface(commonToolkit.GFUserInterface):
+# =============================================================================
+# This class implements a User Interface for GTK2
+# =============================================================================
+class GFUserInterface (commonToolkit.GFUserInterface):
+
_WidgetToGFObj = {}
_WidgetToUIObj = {}
- def initialize(self):
+ _MBOX_KIND = {BaseDriver.MBOX_INFO : {'type' : gtk.MESSAGE_INFO,
+ 'buttons': gtk.BUTTONS_CLOSE},
+ BaseDriver.MBOX_WARNING : {'type' : gtk.MESSAGE_WARNING,
+ 'buttons': gtk.BUTTONS_CLOSE},
+ BaseDriver.MBOX_QUESTION: {'type' : gtk.MESSAGE_QUESTION,
+ 'buttons': gtk.BUTTONS_YES_NO},
+ BaseDriver.MBOX_ERROR : {'type' : gtk.MESSAGE_ERROR,
+ 'buttons': gtk.BUTTONS_CLOSE}}
- # self._disabledColour = gtk.gdk.color_parse("light_grey")
+ _RESPONSE = {gtk.RESPONSE_OK : BaseDriver.RESPONSE_OK,
+ gtk.RESPONSE_CLOSE : BaseDriver.RESPONSE_CLOSE,
+ gtk.RESPONSE_CANCEL: BaseDriver.RESPONSE_CANCEL,
+ gtk.RESPONSE_YES : BaseDriver.RESPONSE_YES,
+ gtk.RESPONSE_NO : BaseDriver.RESPONSE_NO}
- ################################################################
- # GTK Specifics
- ################################################################
+ # ---------------------------------------------------------------------------
+ # Initialize user interface
+ # ---------------------------------------------------------------------------
- self.app = getApp()
+ def initialize (self):
- #
- # SplashScreen
- #
+ self.app = getApp ()
+
if not self._disableSplash:
- self.splash = UISplashScreen()
- self.splash.Show()
- gtk.timeout_add(1500,lambda splash: splash.destroy(),self.splash)
+ self.splash = UISplashScreen ()
+ self.splash.Show ()
+ gtk.timeout_add (1500, lambda splash: splash.destroy (), self.splash)
#
# Set default form font
#
- if gConfigForms('fixedWidthFont'):
- fontname = 'monospace %s' % gConfigForms('pointSize')
+ if gConfigForms ('fixedWidthFont'):
+ fontname = 'monospace %s' % gConfigForms ('pointSize')
else:
- fontname = 'bitstream vera %s' % gConfigForms('pointSize')
+ fontname = 'bitstream vera %s' % gConfigForms ('pointSize')
- self.mono_font = pango.FontDescription(fontname)
+ self.mono_font = pango.FontDescription (fontname)
#
# Create a dummy window used to compute sizes
#
- dummyWindow = gtk.Window()
- dummyWindow.modify_font(self.mono_font)
+ l = gtk.Label ('')
+ try:
+ l.modify_font (self.mono_font)
+ c = l.get_pango_context ()
+ m = c.get_metrics (self.mono_font, \
+ pango.pango_language_from_string ('english'))
- p_c=dummyWindow.get_pango_context()
- p_m=p_c.get_metrics(self.mono_font,
- pango.pango_language_from_string('english'))
+ self.textWidth = pango.PIXELS (m.get_approximate_char_width ())
+ self.textHeight = pango.PIXELS (m.get_ascent () + m.get_descent ())
+ self.textHeight = int (self.textHeight * 1.3)
- # The pixel width of text inside a widget
- self.textWidth = int (p_m.get_approximate_char_width() / PANGO_SCALE)
+ GDebug.printMesg (1, "%s x %s" % (self.textWidth, self.textHeight))
- # The pixel height of text inside a widget
- self.textHeight = int (( p_m.get_ascent() + p_m.get_descent()) \
- / PANGO_SCALE * 1.3)
+ finally:
+ l.destroy ()
- # The pixel width of a 1 char widget (for things like buttons)
+
self.widgetWidth = self.textWidth
-
- # The pixel height of a 1 char widget (for things like buttons)
self.widgetHeight = self.textHeight + 3
- #
- # Close dummy window so app doesn't hang when all other windows closed
- #
- dummyWindow.destroy()
#############################################################################
@@ -143,24 +148,24 @@
# widget set.
#
- #
- # _exit
- #
+ # ---------------------------------------------------------------------------
# Tells the application to close it's main window
- #
- def _exit(self,formName):
- exitApp = 1
+ # ---------------------------------------------------------------------------
+
+ def _exit (self, formName):
+
+ exitApp = True
for child in self._children:
if child._form.name == formName:
- child.mainWindow.hide()
- child._visible=0
+ child.mainWindow.hide ()
+ child._visible = False
exitApp = exitApp and not child._visible
if exitApp:
for child in self._children:
- child.mainWindow.destroy()
- self.app.quit()
+ child.mainWindow.destroy ()
+ self.app.quit ()
def _beep(self):
pass
@@ -192,69 +197,106 @@
ui = self._gfObjToUIWidget[event._form]
ui.statusBar1.push(ui.statusBar1.get_context_id("tip"),unicode(event.data))
- #
- # Called whenever forms goes into a "wait" state in which user cannot
- # interact with interface (e.g., while waiting for a query or a commit)
- #
+
+ # ---------------------------------------------------------------------------
+ # Change the cursor into the watch
+ # ---------------------------------------------------------------------------
+
def beginWait (self, event):
- # TODO: get _form.mainwindow from event
- #cursor = gtk.cursor_new(GDK.WATCH)
- #gdkwin = b.get_window()
- #gdkwin.set_cursor(watch)
- GDebug.printMesg(2, "i am in beginWait")
+ ui = self._gfObjToUIWidget [event._form]
+ if ui.mainWindow.window is not None:
+ ui.mainWindow.window.set_cursor (gtk.gdk.Cursor (gtk.gdk.WATCH))
- #
+
+ # ---------------------------------------------------------------------------
# Called whenever forms leaves a "wait" state
- #
+ # ---------------------------------------------------------------------------
+
def endWait (self, event):
- # self.cursor= gtk.gdk.Cursor(gtk.gdk.MOUSE)
- GDebug.printMesg(2, "i am in endWait")
+ ui = self._gfObjToUIWidget [event._form]
+ if ui.mainWindow.window is not None:
+ ui.mainWindow.window.set_cursor (gtk.gdk.Cursor (gtk.gdk.LEFT_PTR))
- #
- # Clipboard routines
- #
- # If a particular UI has a system-wide clipboard,
- # these methods should be overridden to use that
- # clipboard.
- #
+ # ---------------------------------------------------------------------------
+ # Get some text from the clipboard
+ # ---------------------------------------------------------------------------
+
def getClipboardContents(self, event):
- return
- if wxTheClipboard.Open():
- data = wxTextDataObject()
- success = wxTheClipboard.GetData(data)
- wxTheClipboard.Close()
- else:
- success = 0
- GDebug.printMesg(5,'Unable to open clipboard for read')
+ print "retrieving from clip"
+ try:
+ ui = self._gfObjToUIWidget [event._form]
+ disp = ui.mainWindow.get_screen ().get_display ()
+ clip = gtk.Clipboard (disp, 'CLIPBOARD')
- if success:
- value = data.GetText()
- else:
- GDebug.printMesg(5,'Unable to obtain clipboard contents. Defaulting to
Empty.')
- value = None
+ data = clip.wait_for_text ()
+ print "data:", data
- GDebug.printMesg(5, "Getting clipboard value '%s'" % value)
- event.__result__ = value
+ except:
+ print "sorry ..."
+ data = None
+ event.__result__ = data
+
+ # ---------------------------------------------------------------------------
+ # Set some text into the clipboard
+ # ---------------------------------------------------------------------------
+
def setClipboardContents(self, event):
- return
- GDebug.printMesg(5,"Setting clipboard '%s'" % event.text)
+ print "Set to clip:", event.text
+ ui = self._gfObjToUIWidget [event._form]
+ if ui.mainWindow.get_screen () is not None:
+ text = "%s" % event.text
+ disp = ui.mainWindow.get_screen ().get_display ()
+ clip = gtk.Clipboard (disp, 'CLIPBOARD')
+ clip.set_text (text.encode ('utf-8'), -1)
+ print "... text sent"
- if wxTheClipboard.Open():
- value = wxTheClipboard.SetData(wxTextDataObject(event.text))
- GDebug.printMesg(10,"Set Clipboard Status: %s" % value)
- wxTheClipboard.Close()
- else:
- GDebug.printMesg(5,'Unable to open clipboard for write')
- def setTitle(self, event):
- ui = self._gfObjToUIWidget[event._form]
+ # ---------------------------------------------------------------------------
+ # Set the forms title
+ # ---------------------------------------------------------------------------
+
+ def setTitle (self, event):
+ ui = self._gfObjToUIWidget [event._form]
+
try:
- ui.mainWindow.set_title(event.title)
+ ui.mainWindow.set_title (event.title)
except AttributeError:
pass
-
-
+
+ # ---------------------------------------------------------------------------
+ # create a modal message box
+ # ---------------------------------------------------------------------------
+
+ def messageBox (self, message, kind, title = None, cancel = False):
+ """
+ """
+ mbRec = self._MBOX_KIND.get (kind, self._MBOX_KIND [BaseDriver.MBOX_INFO])
+
+ dialog = gtk.MessageDialog (parent = None, flags = gtk.DIALOG_MODAL,
+ type = mbRec ['type'], buttons = mbRec ['buttons'],
+ message_format = message)
+
+ if title is not None and len (title):
+ dialog.set_title (title.encode ('utf-8'))
+ cButtons = [gtk.BUTTONS_CANCEL, gtk.BUTTONS_OK_CANCEL]
+ if cancel and not mbRec ['buttons'] in cButtons:
+ dialog.add_button (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
+
+ res = dialog.run ()
+ dialog.destroy ()
+
+ return self._RESPONSE [res]
+
+
+ # ---------------------------------------------------------------------------
+ # Display an about box
+ # ---------------------------------------------------------------------------
+
+ def aboutBox (self, params, form):
+ dialog = about.AboutBox (params, form)
+ dialog.run ()
+ dialog.destroy ()
Added: trunk/gnue-forms/src/uidrivers/gtk2/about.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/about.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/about.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -0,0 +1,108 @@
+#
+# This file is part of GNU Enterprise CD Database.
+#
+# 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
+# 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 2001-2004 Free Software Foundation
+#
+# $Id: $
+
+import gtk
+
+from gnue.common.apps import GDebug
+
+# =============================================================================
+# Class implementing an about box for GTK2
+# =============================================================================
+
+class AboutBox (gtk.Dialog):
+
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+
+ def __init__ (self, params, form):
+ title = params.get ('name', 'Unknown')
+ gtk.Dialog.__init__ (self, title, None, gtk.DIALOG_MODAL,
+ (gtk.STOCK_OK, gtk.RESPONSE_OK))
+ self.set_border_width (5)
+ self.vbox.set_spacing (8)
+
+ box = gtk.Frame (" GNUe Forms ")
+ tbl = gtk.Table (2, 2)
+ tbl.set_border_width (8)
+ tbl.set_col_spacings (8)
+
+ self._newLabel (_("Version:"), tbl, 0, 1, 0, 1)
+ self._newLabel (_("Driver:"), tbl, 0, 1, 1, 2)
+ self._newLabel (params ['appversion'], tbl, 1, 2, 0, 1)
+ self._newLabel (params ['ui_driver'], tbl, 1, 2, 1, 2)
+
+ box.add (tbl)
+ tbl.show ()
+
+ self.vbox.pack_start (box)
+ box.show ()
+
+ box = gtk.Frame (_(" Form Information "))
+ tbl = gtk.Table (4, 2)
+ tbl.set_border_width (8)
+ tbl.set_col_spacings (8)
+
+ self._newLabel (_("Name:"), tbl, 0, 1, 0, 1)
+ self._newLabel (_("Version:"), tbl, 0, 1, 1, 2)
+ self._newLabel (_("Author:"), tbl, 0, 1, 2, 3)
+ self._newLabel (_("Description:"), tbl, 0, 1, 3, 4)
+
+ self._newLabel (params ['name'], tbl, 1, 2, 0, 1)
+ self._newLabel (params ['formversion'], tbl, 1, 2, 1, 2)
+ self._newLabel (params ['author'], tbl, 1, 2, 2, 3)
+ l = self._newLabel (params ['description'], tbl, 1, 2, 3, 4)
+ l.set_line_wrap (True)
+
+ box.add (tbl)
+ tbl.show ()
+
+ self.vbox.pack_start (box)
+ box.show ()
+
+
+ # ---------------------------------------------------------------------------
+ # Create a new left- and top-aligned label and attach it to a given table
+ # ---------------------------------------------------------------------------
+
+ def _newLabel (self, text, table, left, right, top, bottom):
+ result = gtk.Label (text.encode ('utf-8'))
+ result.set_alignment (0, 0)
+ table.attach (result, left, right, top, bottom)
+ result.show ()
+ return result
+
+if __name__ == '__main__':
+ parameters = {
+ 'appversion' : 'app-version',
+ 'ui_driver' : 'ui-driver-name',
+ 'name' : "form-name",
+ 'formversion' : "form-version",
+ 'author' : "form-author",
+ 'description' : "this is a description to the form. it "
+ "could be a much "
+ "longer text than one would excpet."
+ }
+
+ x = AboutBox (parameters, None)
+ x.run ()
+ x.destroy ()
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/about.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/common.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/common.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/common.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -18,194 +18,98 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/common.py
-#
-# DESCRIPTION:
-# A part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
-# TODO:
-# * add global accelerator maps
-# * cleanup event stuff
+# $Id: $
+import gtk
-import string
-import gtk,pango
from gnue.common import events
+from gnue.common.apps import GDebug
-PANGO_SCALE = 1024 # where can I get that definition from?
-#####################################################################
-##
-## Basic Event Processing
-##
-#####################################################################
+# -----------------------------------------------------------------------------
+# Set all default event handlers for GTK widgets
+# -----------------------------------------------------------------------------
-def _setDefaultEventHandlers(newWidget, eventHandler, initialize, uiDriver):
- if initialize:
- # Just care for keypresses which get not handled
- newWidget.connect_after("key-press-event", _keyPressHandler,\
- uiDriver, eventHandler)
+def _setDefaultEventHandlers (newWidget, eventHandler, initialize, uiDriver):
+ if initialize:
+ newWidget.connect ("key-press-event", _keyPressHandler, uiDriver,
+ eventHandler)
+ GDebug.printMesg (1, "Added key-press-event to %s" % newWidget)
- #OLD: Mouse event stuff
- #newWidget.connect("button-press-event", _buttonPressHandler,\
- # uiDriver, eventHandler)
- return
+# -----------------------------------------------------------------------------
+# Key press handler
+# -----------------------------------------------------------------------------
+def _keyPressHandler (widget, event, uiDriver, eventHandler):
+ GDebug.printMesg (2, "Common-keypress: %s %s" % (event.type, event.keyval))
-#
-# keyboardEvtHandler
-#
-# Traps most keypress events and translates them into
-# GNUe events passed back to the form
-#
+ if event.type != gtk.gdk.KEY_PRESS:
+ return False
-# should be replaced by accelerators ONLY
+ action = None
+ keycode = event.keyval
-def _keyPressHandler(widget, event, uiDriver, eventHandler):
- # just care for keypresses
- if event.type!=gtk.gdk.KEY_PRESS:
- return
- action = None
- keycode = event.keyval
+ isShift = event.state & gtk.gdk.SHIFT_MASK > 0
+ isLock = event.state & gtk.gdk.LOCK_MASK > 0
+ isCtrl = event.state & gtk.gdk.CONTROL_MASK > 0
+ isMod1 = event.state & gtk.gdk.MOD1_MASK > 0
- isShift = event.state and gtk.gdk.SHIFT_MASK
- isLock = event.state and gtk.gdk.LOCK_MASK
- isCtrl = event.state and gtk.gdk.CONTROL_MASK
- isMod1 = event.state and gtk.gdk.MOD1_MASK
+ if keycode == gtk.keysyms.ISO_Left_Tab:
+ GDebug.printMesg (3, "Mapping Shit-Tab to Tab")
+ keycode = gtk.keysyms.Tab
- try:
- object = uiDriver._WidgetToGFObj[widget]
- except:
- return
+ if not uiDriver._WidgetToGFObj.has_key (widget):
+ return False
- #
- # Sigh... a hack for using <enter> in multiline entries
- #
- if keycode == gtk.keysyms.Return and \
- not event.state and \
- not isinstance(widget,gtk.TextView) and \
- int (gConfigForms('enterIsNewLine')) and \
- (hasattr(object,'Char__height') and object.Char__height) > 1:
+ gfObject = uiDriver._WidgetToGFObj [widget]
- command = 'NEWLINE'
+ #
+ # Sigh... a hack for using <enter> in multiline entries
+ #
+ if keycode == gtk.keysyms.Return and \
+ not event.state and \
+ not isinstance (widget, gtk.TextView) and \
+ int (gConfigForms ('enterIsNewLine')) and \
+ (hasattr (gfObject, 'Char__height') and gfObject.Char__height) > 1:
- else:
+ command = 'NEWLINE'
+ else:
+ # Get the event to process from the KeyMapper
+ command = GFKeyMapper.KeyMapper.getEvent (keycode, isShift, isCtrl, isMod1)
- #
- # Get the event to process from the KeyMapper
- #
- command = GFKeyMapper.KeyMapper.getEvent(
- keycode,
- isShift,
- isCtrl,
- isMod1)
- if command == 'JUMPRECORD':
- global _PROMPTFORRECORD
- action = _PROMPTFORRECORD()
+ if command == 'JUMPRECORD':
+ global _PROMPTFORRECORD
+ action = _PROMPTFORRECORD ()
- elif command == 'NEWLINE':
- action = events.Event('requestKEYPRESS', '\n',
- text='\n',
- code=10)
+ elif command == 'NEWLINE':
+ action = events.Event ('requestKEYPRESS', '\n', text='\n', code=10)
- elif command:
- action = events.Event('request%s' % command)
+ elif command:
+ action = events.Event ('request%s' % command)
- elif object._type == 'GFButton':
- action = events.Event('buttonActivated',object)
+ elif gfObject._type == 'GFButton':
+ action = events.Event ('buttonActivated', gfObject)
- elif object.style == 'checkbox' and object._type == 'GFEntry':
- # <space> <=> <click>
- if keycode == gtk.keysyms.Space:
- action = events.Event('requestTOGGLECHKBOX')
- else:
- # maybe some background error message here
- pass
-## elif not event.state: # no special modifier keys pressed
-## try:
-## char = chr(keycode)
-## if char in string.printable or char == "\n" or \
-## 128 <= keycode <= 255:
-## action = events.Event('requestKEYPRESS', char,
-## text=char,
-## code=keycode)
-## except ValueError:
-## pass
-
+ elif gfObject.style == 'checkbox' and gfObject._type == 'GFEntry':
+ # <space> <=> <click>
+ if keycode == gtk.keysyms.Space:
+ action = events.Event ('requestTOGGLECHKBOX')
+ else:
+ pass
-# print "'%s'" % command
-## if command in ('CURSORLEFT', 'CURSORRIGHT','NEXTRECORD', 'PREVRECORD',
-## 'BACKSPACE','DELETE','SELECTLEFT','SELECTRIGHT') and \
-## isinstance(widget,gtk.Entry):
-## print 'stopped'
-## action=0
+ if action is not None:
+ # Add the gfObject's _form to the outgoing event
+ # rather than every event in the function
+ GDebug.printMesg (3, "Calling %s" % action.__event__)
+ action.__dict__.update ({'_form': gfObject._form})
+ eventHandler (action)
+ return True
- if action:
- # Add the object's _form to the outgoing event
- # rather than every event in the function
- action.__dict__.update({'_form':object._form})
- eventHandler(action)
- return gtk.TRUE
-
-#
-# mouseEvtHandler
-#
-# Traps most mouse events and translates them into
-# GNUe events passed back to the form
-#
-
-def _buttonPressHandler(widget, event, uiDriver, eventHandler):
- if (event.type!=gtk.gdk.BUTTON_PRESS and \
- event.type!=gtk.gdk._2BUTTON_PRESS):
- return
- action = None
- isShift = event.state and gtk.gdk.SHIFT_MASK
- isLock = event.state and gtk.gdk.LOCK_MASK
- isCtrl = event.state and gtk.gdk.CONTROL_MASK
- isMod1 = event.state and gtk.gdk.MOD1_MASK
- try:
- object = uiDriver._WidgetToGFObj[widget]
- except:
- object = uiDriver._WidgetToGFObj[widget._parent]
-
- #
- # Focus
- #
- if event.button==1:
- if isinstance(widget,gtk.Entry):
- pangoLayout = widget.get_layout()
- (offset_x,offset_y) = widget.get_layout_offsets()
- (cursor_x,cursor_y) = pangoLayout.xy_to_index((event.x-offset_x) \
- *PANGO_SCALE,
- (event.y-offset_y)\
- *PANGO_SCALE)
- # print '%s,%s -> %s' % (event.x,event.y,cursor_x)
- eventHandler('requestFOCUS',object,_form=object._form)
- eventHandler('requestCURSORMOVE',position=cursor_x+1,\
- _form=object._form)
- return gtk.TRUE
-
- if isinstance(widget,gtk.TextView):
- (cursor_x,cursor_y) =
widget.window_to_buffer_coords(gtk.TEXT_WINDOW_WIDGET,
- event.x,
- event.y)
- iter = widget.get_iter_at_location(cursor_x,cursor_y)
- cursor_ofs = iter.get_offset()
- # print '%s,%s -> %s' % (event.x,event.y,cursor_ofs)
- eventHandler('requestFOCUS',object,_form=object._form)
- eventHandler('requestCURSORMOVE',position=cursor_ofs, \
- _form=object._form)
- return gtk.TRUE
-
-
#####################################################################
##
## Keymapper Support
@@ -219,21 +123,18 @@
# Translate from wx keystrokes to our virtual keystrokes
gtkKeyTranslations = {
- vk.F1 :gtk.keysyms.F1, vk.F2 :gtk.keysyms.F2,
- vk.F3 :gtk.keysyms.F3, vk.F4 :gtk.keysyms.F4,
- vk.F5 :gtk.keysyms.F5, vk.F6 :gtk.keysyms.F6,
- vk.F7 :gtk.keysyms.F7, vk.F8 :gtk.keysyms.F8,
- vk.F9 :gtk.keysyms.F9, vk.F10 :gtk.keysyms.F10,
- vk.F11 :gtk.keysyms.F11, vk.F12 :gtk.keysyms.F12,
- vk.INSERT :gtk.keysyms.Insert, vk.DELETE :gtk.keysyms.Delete,
- vk.HOME :gtk.keysyms.Home, vk.END :gtk.keysyms.End,
- vk.PAGEUP :gtk.keysyms.Prior, vk.PAGEDOWN :gtk.keysyms.Next,
- vk.UP :gtk.keysyms.Up, vk.DOWN :gtk.keysyms.Down,
- vk.LEFT :gtk.keysyms.Left, vk.RIGHT :gtk.keysyms.Right,
- vk.TAB :gtk.keysyms.Tab,
- vk.ENTER :gtk.keysyms.Return, vk.BACKSPACE :gtk.keysyms.BackSpace }
+ vk.F1 : gtk.keysyms.F1, vk.F2 : gtk.keysyms.F2,
+ vk.F3 : gtk.keysyms.F3, vk.F4 : gtk.keysyms.F4,
+ vk.F5 : gtk.keysyms.F5, vk.F6 : gtk.keysyms.F6,
+ vk.F7 : gtk.keysyms.F7, vk.F8 : gtk.keysyms.F8,
+ vk.F9 : gtk.keysyms.F9, vk.F10 : gtk.keysyms.F10,
+ vk.F11 : gtk.keysyms.F11, vk.F12 : gtk.keysyms.F12,
+ vk.INSERT : gtk.keysyms.Insert, vk.DELETE : gtk.keysyms.Delete,
+ vk.HOME : gtk.keysyms.Home, vk.END : gtk.keysyms.End,
+ vk.PAGEUP : gtk.keysyms.Prior, vk.PAGEDOWN : gtk.keysyms.Next,
+ vk.UP : gtk.keysyms.Up, vk.DOWN : gtk.keysyms.Down,
+ vk.LEFT : gtk.keysyms.Left, vk.RIGHT : gtk.keysyms.Right,
+ vk.TAB : gtk.keysyms.Tab,
+ vk.ENTER : gtk.keysyms.Return, vk.BACKSPACE : gtk.keysyms.BackSpace }
-GFKeyMapper.KeyMapper.setUIKeyMap(gtkKeyTranslations)
-
-
-
+GFKeyMapper.KeyMapper.setUIKeyMap (gtkKeyTranslations)
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/__init__.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -18,14 +18,7 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/_base.py
-#
-# DESCRIPTION:
-# Part of a gtk2 based user interface driver for GNUe forms: Base Widget
-#
-# NOTES:
-#
+# $Id: $
import gtk
@@ -34,6 +27,7 @@
from gnue.forms.GFForm import *
from gnue.forms.uidrivers._base.widgets._base import UIWidget
from gnue.forms.uidrivers.gtk2.common import _setDefaultEventHandlers
+from gnue.common.apps import GDebug
#############################################################################
@@ -54,188 +48,259 @@
# Provides a UI widget set of std functions to reduce the number of functions
# require in each UIclass listed below.
#
-class UIHelper(UIWidget):
- #
- # Functions limited to the gtk2 driver
- #
- def _addToCrossRef(self, widget,gfobject, uiobject):
- self._uiDriver._WidgetToGFObj[widget]=gfobject
- self._uiDriver._WidgetToUIObj[widget]=uiobject
- def _deleteFromCrossRef(self, widget, object):
+
+# =============================================================================
+# This class implements the common behaviour of GTK2 widgets
+# =============================================================================
+
+class UIHelper (UIWidget):
+
+ # ---------------------------------------------------------------------------
+ # Create a new GTK widget
+ # ---------------------------------------------------------------------------
+
+ def createWidget (self, event, spacer):
+ """
+ This function creates a new GTK widget and adds it to the cross reference
+ table.
+ """
+ gfObject = event.object
+ self._eventHandler = event.eventHandler
+
+ if hasattr (gfObject, 'Char__y'):
+ posY = gfObject.Char__y
+ gap = hasattr (gfObject._gap, '_gap') and gfObject._gap + 1 or 1
+ self.itemY = (posY + spacer * gap) * event.widgetHeight
+
+ newWidget = self._createWidget (event, spacer)
+ if event.initialize:
+ self._addToCrossRef (newWidget, gfObject, self)
+
+ return newWidget
+
+
+ # ---------------------------------------------------------------------------
+ # Add a widget to the cross reference tables
+ # ---------------------------------------------------------------------------
+
+ def _addToCrossRef (self, widget, gfobject, uiobject):
+ self._uiDriver._WidgetToGFObj [widget] = gfobject
+ self._uiDriver._WidgetToUIObj [widget] = uiobject
+
+
+ # ---------------------------------------------------------------------------
+ # Remove a widget from the cross reference tables
+ # ---------------------------------------------------------------------------
+
+ def _deleteFromCrossRef (self, widget, object):
try:
- del self._uiDriver._WidgetToGFObj[widget]
- del self._uiDriver._WidgetToUIObj[widget]
+ del self._uiDriver._WidgetToGFObj [widget]
+ del self._uiDriver._WidgetToUIObj [widget]
+
except:
pass
- def _addDefaultEventHandler(self,widget,eventHandler,uiDriver):
- widget._focus_sig_handler = widget.connect("focus-in-event",
- self._focusInHandler,\
- uiDriver,
- eventHandler)
- # add key press handlers from ../common.py
- _setDefaultEventHandlers(widget, eventHandler, 1, uiDriver)
+ # ---------------------------------------------------------------------------
+ # Add all default event handler to the widget
+ # ---------------------------------------------------------------------------
- #
- # Override the base UIWidget functions
- #
- def show(self):
+ def _addDefaultEventHandler (self, widget):
+ _setDefaultEventHandlers (widget, self._eventHandler, True, self._uiDriver)
+
+
+
+ # ---------------------------------------------------------------------------
+ # Add a focus-in handler to a widget
+ # ---------------------------------------------------------------------------
+
+ def _addFocusHandler (self, widget, lookupWidget = None):
+ """
+ This function connects a handler to the widget's focus-in-event signal
+ passing an optional lookup widget to it. A lookup widget will be used for
+ retrieving the GFObject from the lookup table. If no lookup widget is given
+ the mandatory widget will be used for lookups.
+ """
+
+ if lookupWidget is None:
+ lookupWidget = widget
+ GDebug.printMesg (2, "ADD FOCUSHANDLER %s (%s)" % (widget, lookupWidget))
+ widget._focusHandler = widget.connect ('focus-in-event',
+ self.__focusInHandler, lookupWidget)
+
+
+
+ # ---------------------------------------------------------------------------
+ # Handle focus signals from widgets
+ # ---------------------------------------------------------------------------
+
+ def __focusInHandler (self, widget, event, lookupWidget):
+ """
+ This function handles 'focus-in-event' signals by creating an immediate
+ call to 'requestFOCUS'. If the focused widget needs a jump to another
+ record an additional 'requestJUMPRECORD' event will be fired.
+ """
+
+ GDebug.printMesg (2, "FOCUS-IN-EVENT: %s for %s" % (widget, lookupWidget))
+
+ gfObject = self._uiDriver._WidgetToGFObj [lookupWidget]
+ _formRef = gfObject._form
+
+ action = events.Event ('requestFOCUS', gfObject, _form = _formRef)
+ self._eventHandler (action)
+
+ adjust = self.widgets.index (lookupWidget) - gfObject._visibleIndex
+ if adjust:
+ GDebug.printMesg (1, "Adjusting record to %s" % adjust)
+ action = events.Event ('requestJUMPRECORD', adjust, _form = _formRef)
+ self._eventHandler (action)
+
+ return gtk.FALSE
+
+
+ # ---------------------------------------------------------------------------
+ # Show all ui-widgets managed by this object
+ # ---------------------------------------------------------------------------
+
+ def show (self):
+ """
+ This function calls the show () on all gtk-widgets managed by this
+ instance. This is needed if a row-count greater than 0 is given.
+ """
for widget in self.widgets:
- widget.show()
+ widget.show ()
- def hide(self):
+
+ # ---------------------------------------------------------------------------
+ # Hide all ui-widgets managed by this object
+ # ---------------------------------------------------------------------------
+
+ def hide (self):
+ """
+ This function calls the show () on all gtk-widgets managed by this
+ instance. This is needed if a row-count greater than 0 is given.
+ """
for widget in self.widgets:
- widget.hide()
+ widget.hide ()
- def showModal(self):
- print "showModal not implemented for gtk2 driver"
- for widget in self.widgets:
- pass
- def destroy(self):
- print "destroy not implemented for gtk2 driver"
- for widget in self.widgets:
- pass
+ def showModal (self):
+ GDebug.printMesg (1, "showModal not implemented for gtk2 driver")
+
+ def destroy (self):
+ GDebug.printMesg (1, "destroy not implemented for gtk2 driver")
- def indexedFocus(self, index):
- widget = self.widgets[index]
- if widget.get_name()=='GtkCombo':
- widget=widget.entry
+ # ---------------------------------------------------------------------------
+ # Set the focus to a given widget
+ # ---------------------------------------------------------------------------
- # Block focus events
- try:
- widget.handler_block(widget._focus_sig_handler)
- except:
- pass
-
- #focus
- widget.grab_focus()
+ def indexedFocus (self, index):
+ """
+ This function set's the focus to the gtk-widget specified by index. If the
+ widget has a focusHandler it will be blocked and unblocked to prevent a
+ recursion.
+ """
+ widget = self.widgets [index]
+ GDebug.printMesg (1, "indexedFocus: %s [%s]" % (widget, index))
- # unblock focus events
- try:
- widget.handler_unblock(widget._focus_sig_handler)
- except:
- pass
+ item = isinstance (widget, gtk.Combo) and widget.entry or widget
+ handler = hasattr (item, '_focusHandler') and item._focusHandler or None
+ self.__blockHandler (item, '_focusHandler')
- def setValue(self, value, index=0, enabled=1):
- widget = self.widgets[index]
+ GDebug.printMesg (3, "Grab focus to %s for %s" % (item, widget))
+ item.grab_focus ()
+
+ self.__blockHandler (item, '_focusHandler', True)
+
+
+
+ # ---------------------------------------------------------------------------
+ # Set the value of a widget
+ # ---------------------------------------------------------------------------
+
+ def setValue (self, value, index = 0, enabled = True):
+ """
+ This function sets the value of a widget and optionally enables or disables
+ the widget.
+ """
+ widget = self.widgets [index]
+ GDebug.printMesg (1, "setValue %s [%s] %s" % (repr (value), index, widget))
# fix for 0.5.1 (Unicode is not internal encoding)
- if widget.get_name()!='GtkCheckButton' and type(value)!=UnicodeType:
- value = unicode(value, gConfigForms('textEncoding'))
+ if not isinstance (widget, gtk.CheckButton) and type (value) !=
UnicodeType:
+ GDebug.printMesg (3, "converting %s to unicode using %s" % \
+ (repr (value), gConfigForms ('textEncoding')))
+ value = unicode (value, gConfigForms ('textEncoding'))
+
- if widget.get_name()=='GtkCombo':
-
- object = self._uiDriver._WidgetToGFObj[widget]
+ if isinstance (widget, gtk.Combo):
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
- # Check if list of allowed value (~= foreign keys, ~= dropdown content)
changed
- if object.style == "dropdown" and \
- not object._field._allowedValues == widget._origAllowedValues:
+ # Check if list of allowed value (~= foreign keys, ~= dropdown content)
+ # changed
+ if gfObject.style == "dropdown" and \
+ not gfObject._field._allowedValues == widget._origAllowedValues:
+ widget._origAllowedValues = gfObject._field._allowedValues
+ widget.set_popdown_strings (gfObject._field._allowedValuesDescr)
- widget._origAllowedValues = object._field._allowedValues
- widget.set_popdown_strings(object._field._allowedValuesDescr)
-
- # set the value
- widget.entry.set_text(value)
+ widget.entry.set_text (value)
- elif widget.get_name()=='GtkCheckButton':
- try:
- widget.handler_block(widget._clicked_handler)
- except:
- pass
- widget.set_active(value)
- try:
- widget.handler_unblock(widget._clicked_handler)
- except:
- pass
-
- elif widget.get_name()=='MultiLineEdit':
- widget.set_text(value)
-
+ elif isinstance (widget, gtk.CheckButton):
+ self.__blockHandler (widget, '_clickedHandler')
+ widget.set_active (value)
+ self.__blockHandler (widget, '_clickedHandler', True)
+
else:
- try:
- widget.handler_block(widget._insert_handler)
- widget.handler_block(widget._delete_handler)
- except:
- pass
- # print "set to '%s'" % value
- widget.set_text(value)
- try:
- widget.handler_unblock(widget._insert_handler)
- widget.handler_unblock(widget._delete_handler)
- except:
- pass
+ item = isinstance (widget, gtk.TextView) and widget.get_buffer () or \
+ widget
+ self.__blockHandler (item, '_insert_handler')
+ self.__blockHandler (item, '_delete_handler')
+
+ item.set_text (value)
+
+ self.__blockHandler (item, '_insert_handler', True)
+ self.__blockHandler (item, '_delete_handler', True)
+
+
if enabled:
- widget.set_sensitive(1)
+ widget.set_sensitive (1)
else:
- widget.set_sensitive(0)
+ widget.set_sensitive (0)
- def setCursorPosition(self, position, index=0):
- try:
- self.widgets[index].set_position(position)
- except AttributeError:
- pass # For label-style entries
+
+ def setCursorPosition (self, position, index = 0):
+ if hasattr (self.widgets [index], 'set_position'):
+ self.widgets [index].set_position (position)
+
+
+
+
def setSelectedArea(self, selection1, selection2, index=0):
try:
- self.widgets[index].select_region(selection1, selection2)
+ self.widgets[index].select_region(selection1, selection2)
except (AttributeError, TypeError):
pass # For label-style & dropdown entries
- def createWidget(self, event, spacer):
- newWidget = self._createWidget(event, spacer)
- try:
- newWidget.modify_font(self._uiDriver.mono_font)
- except:
- pass
- if event.initialize:
- self._addToCrossRef(newWidget,event.object,self)
-
- return newWidget
- def cleanup(self, object):
- for widget in self.widgets[:]:
- try:
- del self._uiDriver._WidgetToGFObj[widget]
- del self._uiDriver._WidgetToUIObj[widget]
- except KeyError:
- pass
- self.widgets.pop(0)
- self._deleteFromCrossRef(widget, object)
+ # ---------------------------------------------------------------------------
+ # Block or unblock a given event handler of a widget
+ # ---------------------------------------------------------------------------
+ def __blockHandler (self, widget, handlerName, unblock = False):
+ """
+ This function blocks or unblocks an event handler of a widget it is
+ assigned.
+ """
+ method = unblock and widget.handler_unblock or widget.handler_block
+ if hasattr (widget, handlerName):
+ handler = getattr (widget, handlerName)
+ GDebug.printMesg (2, "%s '%s' (%s) for %s" % \
+ (['Block', 'Unblock'] [unblock], handlerName, handler, widget))
+ method (handler)
- ###########################################################
- #
- # Internal Event Handler
- #
- #
-
- def _focusInHandler(self, widget, event, uiDriver, eventHandler):
- #print "focus in: widget",widget
- try:
- object = uiDriver._WidgetToGFObj[widget]
- except:
- try:
- # for the entry in a dropdown widget
- object = uiDriver._WidgetToGFObj[widget.get_parent()]
- except:
- # for the gtk.TextView widget in a MultiLineEdit Object
- object = uiDriver._WidgetToGFObj[widget._parent]
-
-
- action = events.Event('requestFOCUS',object,_form=object._form)
- # TODO: fix VETO
- # widget.emit_stop_by_name('focus-in-event')
- gtk.idle_add(eventHandler,action)
- # return gtk.TRUE
-
-
- def _focusOutHandler(self,widget, event, uiDriver, eventHandler):
- print "focus out: widget",widget
- # return gtk.TRUE # can make gtk.application segfault
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/box.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/box.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/box.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -18,45 +18,45 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/box.py
-#
-# DESCRIPTION:
-# A wxPython based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id: $
+
import gtk
+
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-#
-# UIBox
-#
-# Widget set specific function that creates a single instance of a border box
-#
-class UIBox(UIHelper):
+# =============================================================================
+# Create a border box widget
+# =============================================================================
+
+class UIBox (UIHelper):
- def _createWidget(self, event, spacer):
- object = event.object
+ # ---------------------------------------------------------------------------
+ # Create the GTK widget
+ # ---------------------------------------------------------------------------
+
+ def _createWidget (self, event, spacer):
+ gfObject = event.object
+ text = None
+ if hasattr (gfObject, 'label') and len (gfObject.label):
+ text = " %s " % gfObject.label.encode ('utf-8')
- newWidget = gtk.Frame()
- newWidget.set_size_request(int(self.itemWidth - (1 * event.widgetWidth)),
- int(self.itemHeight - (0.5 *
event.widgetHeight)))
-
- newWidget.set_label(object.label)
- newWidget.get_label_widget().modify_font(self._uiDriver.mono_font)
+ half = int (event.widgetHeight / 2)
- event.container.put(newWidget,
- int((object.Char__x+0.5) * event.widgetWidth),
- int((object.Char__y + spacer + 0.5) *
event.widgetHeight))
+ newWidget = gtk.Frame (text)
+ newWidget.set_size_request (self.itemWidth, self.itemHeight - half)
+ event.container.put (newWidget, self.itemX, self.itemY + half)
+ newWidget.show ()
+
return newWidget
-#
+
+# -----------------------------------------------------------------------------
# Configuration data
-#
+# -----------------------------------------------------------------------------
+
configuration = {
- 'baseClass' : UIBox,
- 'provides' : 'GFBox',
- 'container' : 0,
- }
+ 'baseClass' : UIBox,
+ 'provides' : 'GFBox',
+ 'container' : 0,
+}
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/box.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/button.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/button.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/button.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -18,53 +18,61 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/button.py
-#
-# DESCRIPTION:
-# A part of a gtk2 based user interface driver for GNUe forms: Button Widget
-#
-# NOTES:
-#
+# $Id: $
+
import gtk
from gnue.common import events
+from gnue.common.apps import GDebug
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-#
-# UIButton
-#
-# Widget set specific function that creates a single instance of a button
-#
-class UIButton(UIHelper):
- def _createWidget(self, event, spacer):
+# =============================================================================
+# This class wraps an UI layer around a gtk.Button widget
+# =============================================================================
+
+class UIButton (UIHelper):
+
+ # ---------------------------------------------------------------------------
+ # Create a gtk widget
+ # ---------------------------------------------------------------------------
+
+ def _createWidget (self, event, spacer):
object = event.object
- newWidget = gtk.Button(str(object.label))
- newWidget.set_size_request(self.itemWidth, self.itemHeight)
- newWidget.get_child().modify_font(self._uiDriver.mono_font)
+ text = "%s" % object.label
+ newWidget = gtk.Button (text.encode ('utf-8'))
+ newWidget.modify_font (self._uiDriver.mono_font)
+ newWidget.set_size_request (self.itemWidth, self.itemHeight)
- event.container.put(newWidget, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer) * event.widgetHeight)
-
if event.initialize:
- self._eventHandler = event.eventHandler
- newWidget.connect('clicked', self.buttonHandler, newWidget)
- self._addDefaultEventHandler(newWidget, event.eventHandler, \
- self._uiDriver)
+ newWidget.connect ('clicked', self.buttonHandler)
+ self._addDefaultEventHandler (newWidget)
+ self._addFocusHandler (newWidget)
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
+
return newWidget
- def buttonHandler(self,event,widget):
- action = None
- gfObject = self._uiDriver._WidgetToGFObj[widget]
- action = events.Event('buttonActivated',gfObject)
- self._eventHandler(action)
- return gtk.TRUE
+ # ---------------------------------------------------------------------------
+ # Handle button click signals
+ # ---------------------------------------------------------------------------
+ def buttonHandler (self, widget):
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+
+ GDebug.printMesg (1, "buttonActivated on %s" % gfObject)
+ action = events.Event ('buttonActivated', gfObject)
+ self._eventHandler (action)
+
+
+# -----------------------------------------------------------------------------
+# Configuration data
+# -----------------------------------------------------------------------------
+
configuration = {
- 'baseClass' : UIButton,
- 'provides' : 'GFButton',
- 'container' : 0,
- }
+ 'baseClass' : UIButton,
+ 'provides' : 'GFButton',
+ 'container' : 0,
+}
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/button.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/component.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -18,358 +18,425 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/entry.py
-#
-# DESCRIPTION:
-# A part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
-# TODO:
-# * fix "selection" for gtk.entry
-# * fix position to byteindex conversion (UTF-8)
-# Update: working for Unicode Strings, i.e. when using Unicode as
-# internal data representation has to be unicode, which is
-# postponed for > ver. 0.5.1
-#
+# $Id: $
import gtk
+
from gnue.common import events
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
from gnue.common.apps import GDebug
-#
-# UIEntry
-#
-# Widget set specific function that creates a single instance of a data entry
widget
-#
-class UIEntry(UIHelper):
- def _createWidget(self, event, spacer):
+
+# =============================================================================
+# This class implements the UI layer for entry widgets
+# =============================================================================
+
+class UIEntry (UIHelper):
+
+ def _createWidget (self, event, spacer):
object = event.object
- style = object.style
+ style = object.style
if style == 'dropdown':
- if event.initialize:
- self.choices = object._field.allowedValues()[1]
+ newWidget = self.__createDropDown (object, event)
+
+ elif style == 'label':
+ newWidget = self.__createLabel (object, event)
+
+ elif style == 'checkbox':
+ newWidget = self.__createCheckbox (object, event)
+
+ else:
+ if hasattr (object, 'Char__height') and object.Char__height > 1:
+ newWidget = self.__createTextView (object, event)
+
else:
- self.choices = [""]
+ newWidget = self.__createEntry (object, event)
- # should we add this to the wx driver as well?
- self.choices.sort()
+ event.container.show_all()
+ return newWidget
- newWidget = gtk.Combo()
- newWidget.set_popdown_strings(self.choices)
- newWidget.set_size_request(self.itemWidth, self.itemHeight)
- event.container.put(newWidget, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer + (object._gap * spacer)) \
- * event.widgetHeight)
+ # ---------------------------------------------------------------------------
+ # Create a dropdown widget
+ # ---------------------------------------------------------------------------
- newWidget.list.connect('select-child', self.comboHandler, newWidget)
+ def __createDropDown (self, gfObject, event):
+ if event.initialize:
+ (self.reverse, self.choices) = gfObject._field.allowedValues ()
+ else:
+ (self.reverse, self.choices) = ({}, [""])
- if event.initialize:
- newWidget._origAllowedValues = object._field._allowedValues
- self._addDefaultEventHandler(newWidget.entry, event.eventHandler, \
- self._uiDriver)
- self._addDefaultEventHandler(newWidget.list, event.eventHandler, \
- self._uiDriver)
+ self.choices.sort ()
+ newWidget = gtk.Combo ()
+ newWidget.entry.modify_font (self._uiDriver.mono_font)
+ newWidget.set_popdown_strings (self.choices)
- elif style == 'label':
- newWidget = gtk.Label("")
- newWidget.set_size_request(self.itemWidth, self.itemHeight + 1)
- event.container.put(newWidget, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer + (object._gap * spacer))\
- * event.widgetHeight)
+ # values must match an entry in the list, but empty values are ok too
+ newWidget.set_value_in_list (True, True)
+ # Enter does NOT open the popup list
+ newWidget.disable_activate ()
- elif style == 'checkbox':
- newWidget = gtk.CheckButton(object.label)
- newWidget.set_size_request(self.itemWidth, event.textHeight)
- event.container.put(newWidget, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer + (object._gap * spacer)) *
event.widgetHeight)
- newWidget._clicked_handler = newWidget.connect('clicked',
self.checkboxHandler, newWidget)
- if event.initialize:
- self._addDefaultEventHandler(newWidget, event.eventHandler,\
- self._uiDriver)
+ newWidget.set_size_request (self.itemWidth, self.itemHeight + 1)
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
- else:
- value=""
- if hasattr(object,'Char__height') and object.Char__height>1:
- newWidget = MultiLineEdit(value, event.eventHandler,self._uiDriver)
- viewport = newWidget.viewport
- else:
- newWidget=viewport=gtk.Entry()
- newWidget._insert_handler = newWidget.connect('insert-text', \
- self.insertTextHandler,\
- event.eventHandler, \
- self._uiDriver)
+ if event.initialize:
+ newWidget._origAllowedValues = gfObject._field._allowedValues
+ self._addDefaultEventHandler (newWidget)
+ self._addFocusHandler (newWidget.entry, newWidget)
+ newWidget.list.connect ('select-child', self.comboHandler, newWidget)
+ newWidget._keypressHandler = newWidget.entry.connect ('key-press-event',
+ self.comboEntryKeyPress)
- newWidget._delete_handler = newWidget.connect('delete-text',\
- self.deleteTextHandler,\
- event.eventHandler,\
- self._uiDriver)
+ return newWidget
- viewport.set_size_request(self.itemWidth, self.itemHeight+1)
- event.container.put(viewport, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer + (object._gap * spacer))\
- * event.widgetHeight)
- if event.initialize:
- self._addDefaultEventHandler(newWidget, event.eventHandler,\
- self._uiDriver)
- self._eventHandler = event.eventHandler
- event.container.show_all()
+ # ---------------------------------------------------------------------------
+ # Create a label widget
+ # ---------------------------------------------------------------------------
+
+ def __createLabel (self, gfObject, event):
+ newWidget = gtk.Label ("")
+ newWidget.modify_font (self._uiDriver.mono_font)
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
+
return newWidget
- def setCursorPosition(self, position, index=0):
- widget=self.widgets[index]
- if isinstance(widget,gtk.Entry) or isinstance(widget,MultiLineEdit):
- widget.set_position(position)
- else:
- print _("Wrong Place to execute set CursorPosition (%s,%s), widget is a
%s") % (position,index,widget)
+ # ---------------------------------------------------------------------------
+ # Create a checkbox widget
+ # ---------------------------------------------------------------------------
- def setSelectedArea(self, selection1, selection2, index=0):
- widget=self.widgets[index]
- if isinstance(widget,gtk.Entry):
- widget.select_region(selection1, selection2)
- elif isinstance(widget,gtk.TextView):
- widget.get_buffer().select_region(position)
+ def __createCheckbox (self, gfObject, event):
+ label = len (gfObject.label) and gfObject.label or None
+ newWidget = gtk.CheckButton (label)
+ newWidget.modify_font (self._uiDriver.mono_font)
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
- ###########################################################
- #
- # Internal Event Handler
- #
- #
+ newWidget._clickedHandler = newWidget.connect ('toggled',
+ self.checkboxHandler)
+ if event.initialize:
+ self._addDefaultEventHandler (newWidget)
+ self._addFocusHandler (newWidget)
- #
- # eventHandler for gtk.Entry, interrupts default insertText procedure and
- # passes the text to the normal displayhandler
- #
+ return newWidget
- def
insertTextHandler(self,widget,newtext,length,position,eventHandler,uiDriver):
- #print "insert '%s' at %s" % (newtext,widget.get_position())
- if isinstance(widget,gtk.TextBuffer):
- object=uiDriver._WidgetToGFObj[widget._textview]
- object._displayHandler.cursor = widget.get_insert()
- else:
- object=uiDriver._WidgetToGFObj[widget]
- object._displayHandler.cursor = widget.get_position()
- # HACK: set the cursor position for display handler
- # this should be passed with the event
+ # ---------------------------------------------------------------------------
+ # Create a text view widget
+ # ---------------------------------------------------------------------------
- # Compatibility layer for 0.5.1
- #text = unicode(newtext,'utf-8')
- text = unicode(newtext,'utf-8').encode(gConfigForms('textEncoding'))
+ def __createTextView (self, gfObject, event):
- action = events.Event('requestKEYPRESS', text, text=text,
- code=0, _form=object._form)
+ newWidget = gtk.TextView ()
+ newWidget.modify_font (self._uiDriver.mono_font)
+ newWidget.set_wrap_mode (gtk.WRAP_CHAR)
- # don't process event further
- widget.emit_stop_by_name('insert-text')
+ if gfObject.readonly:
+ newWidget.set_editable (False)
- gtk.idle_add(eventHandler,action) # our eventHandler will be called later
+ viewport = gtk.ScrolledWindow ()
+ viewport.add_with_viewport (newWidget)
+ viewport.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ viewport.set_size_request (self.itemWidth, self.itemHeight + 1)
- #
- # eventHandler for gtk.Entry, interrupts default deleteText procedure,
- # passes event to displayhandler in two parts (1. selection, 2. delete)
- #
+ tBuffer = newWidget.get_buffer ()
+ tBuffer._insert_handler = tBuffer.connect ('insert-text',
+ self.insertBufferHandler,
+ newWidget)
- def deleteTextHandler(self,widget,start_pos,end_pos,eventHandler,uiDriver):
- #print "delete (%s..%s)" % (start_pos,end_pos)
- object=uiDriver._WidgetToGFObj[widget]
+ tBuffer._delete_handler = tBuffer.connect ('delete-range',
+ self.deleteBufferHandler,
+ newWidget)
- # HACK:
- # it should be possible to possible to pass the area to be deleted
- # with the gnue internal event.
- #object._displayHandler.selection1=start_pos
- #object._displayHandler.selection2=end_pos
- #object._displayHandler.cursor = widget.get_position()
- #action = events.Event('requestDELETE',
- try:
- CursorPos = widget.get_position()
- except:
- CursorPos = widget.get_insert()
+ newWidget._keypressHandler = newWidget.connect ('key-press-event',
+ self.textViewKeyPress)
- action = events.Event('requestDELETERANGE',
- start_pos=start_pos,
- end_pos=end_pos,
- position=CursorPos,
- _form=object._form)
+ if event.initialize:
+ self._addFocusHandler (newWidget)
+ self._addDefaultEventHandler (newWidget)
- widget.emit_stop_by_name('delete-text')
- gtk.idle_add(eventHandler,action)
+ event.container.put (viewport, self.itemX, self.itemY)
+ newWidget.show ()
- #
- # eventHandler for gtk.Combo, no interruption, etc.
- #
+ return newWidget
- def comboHandler(self, combo_list, list_child, combo):
- selection = combo_list.child_position(list_child)
- selected_text = self.choices[selection]
- gfObject = self._uiDriver._WidgetToGFObj[combo]
- eventdata = [gfObject, selected_text]
- action = events.Event('requestREPLACEVALUE',object=gfObject,
- index=selection, text=selected_text,
- _form=gfObject._form)
- # TODO: allow veto
- self._eventHandler(action)
+ # ---------------------------------------------------------------------------
+ # Create a new text entry widget
+ # ---------------------------------------------------------------------------
- return gtk.TRUE
+ def __createEntry (self, gfObject, event):
- #
- # eventHandler for gtk.CheckBox, no interruption, etc.
- #
+ maxLen = hasattr (gfObject, 'maxLength') and gfObject.maxLength or 0
- def checkboxHandler(self,event,widget):
- buttonStatus=widget.get_active()
- GDebug.printMesg(1, "buttonStatus: " + str(buttonStatus))
- gfObject = self._uiDriver._WidgetToGFObj[widget]
- eventdata = [gfObject, buttonStatus]
- action = events.Event('requestTOGGLECHKBOX', _form=gfObject._form)
- # don't process event further
- widget.emit_stop_by_name('clicked') # FIXME: won't accept veto
- widget.emit_stop_by_name('released') # FIXME: won't accept veto
+ newWidget = gtk.Entry (maxLen)
+ newWidget.modify_font (self._uiDriver.mono_font)
+ newWidget.set_size_request (self.itemWidth, self.itemHeight + 1)
- #gtk.idle_add(self._eventHandler,action) # our eventHandler will be
called later
- return gtk.TRUE
+ newWidget._insert_handler = newWidget.connect ('insert-text',
+ self.insertTextHandler)
+ newWidget._delete_handler = newWidget.connect ('delete-text',
+ self.deleteTextHandler)
+ if event.initialize:
+ self._addFocusHandler (newWidget)
+ self._addDefaultEventHandler (newWidget)
-# TODO: Add support for READONLY edits with: set_editable
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
-class MultiLineEdit:
- def __init__(self,value,eventHandler,uiDriver):
- self.textTagTable=gtk.TextTagTable()
- self.textBuffer=gtk.TextBuffer(self.textTagTable)
- self.baseWidget=gtk.TextView()
- self.baseWidget.set_buffer(self.textBuffer)
- self.baseWidget.set_wrap_mode(gtk.WRAP_CHAR)
- self.baseWidget._parent=self
- self.textBuffer.set_text(value)
- self.viewport=gtk.ScrolledWindow()
- self.viewport.add_with_viewport(self.baseWidget)
- self.viewport.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ return newWidget
- self.insert_handler = self.textBuffer.connect('insert-text', \
- self.insertTextHandler,\
- eventHandler, \
- uiDriver)
- self.delete_handler = self.textBuffer.connect('delete-range',\
- self.deleteTextHandler,\
- eventHandler,\
- uiDriver)
+ # ---------------------------------------------------------------------------
+ # Set the cursor position in a widget to position
+ # -------------------------------------------------------------------------
- self.mv_cur_handler = self.baseWidget.connect('move-cursor',\
- self.moveCursorHandler,\
- eventHandler,\
- uiDriver)
+ def setCursorPosition (self, position, index = 0):
+ widget = self.widgets [index]
+ GDebug.printMesg (1, "setCursorPosition to %s in %s [%s]" % \
+ (position, self, index))
- # Return own name to let other objects identify this obj.
- def get_name(self):
- return 'MultiLineEdit'
+ if isinstance (widget, gtk.Entry):
+ if len (widget.get_text ()):
+ widget.set_position (position)
- def set_position(self,position):
- try:
- self.baseWidget.handler_block(self.mv_cur_handler)
- except:
- pass
- pos_iter = self.textBuffer.get_iter_at_offset(position)
- self.textBuffer.place_cursor(pos_iter)
- print position
- # take care that the cursor is visible
- cur_mark = self.textBuffer.get_insert()
- self.baseWidget.scroll_mark_onscreen(cur_mark)
- #print "SCROLLED TO ", cur_mark
- try:
- self.baseWidget.handler_unblock(self.mv_cur_handler)
- except:
- pass
+ elif isinstance (widget, gtk.TextView):
+ tBuffer = widget.get_buffer ()
+ tBuffer.place_cursor (tBuffer.get_iter_at_offset (position))
+ widget.set_cursor_visible (True)
+ widget.scroll_mark_onscreen (tBuffer.get_insert ())
- def set_text(self,value):
- try:
- self.textBuffer.handler_block(self.insert_handler)
- self.textBuffer.handler_block(self.delete_handler)
- except:
- pass
- self.textBuffer.set_text(value)
- #print "settext"
- try:
- self.textBuffer.handler_unblock(self.insert_handler)
- self.textBuffer.handler_unblock(self.delete_handler)
- except:
- pass
- # pass through function calls
- def __getattr__(self, attr):
- #print "doing %s" % attr
- if self.baseWidget and attr[1] != '_' and hasattr(self.baseWidget,attr):
- return getattr(self.baseWidget,attr)
- else:
- raise AttributeError, attr
+ # ---------------------------------------------------------------------------
+ # set the selected area
+ # ---------------------------------------------------------------------------
+ def setSelectedArea (self, selection1, selection2, index = 0):
+ GDebug.printMesg (1, "Set Selected Area %s/%s in %s [%s]" % \
+ (selection1, selection2, self, index))
- def
insertTextHandler(self,widget,textiter,newtext,position,eventHandler,uiDriver):
- #print "insertText %s " % newtext
- object=uiDriver._WidgetToGFObj[self]
-# object._displayHandler.cursor = widget.get_insert()
- object._displayHandler.cursor = textiter.get_offset()
+ widget = self.widgets [index]
+ if isinstance (widget, gtk.Entry):
+ widget.select_region (selection1, selection2)
+
+ elif isinstance (widget, gtk.TextView):
+ tBuffer = widget.get_buffer ()
+ selbound = tBuffer.get_selection_bound ()
+ insert = tBuffer.get_insert ()
+ left = min (selection1, selection2)
+ right = max (selection1, selection2)
+
+ tBuffer.move_mark (insert, tBuffer.get_iter_at_offset (left))
+ tBuffer.move_mark (selbound, tBuffer.get_iter_at_offset (right))
+
+
+ # ---------------------------------------------------------------------------
+ # insert text into gtk.Entry widgets
+ # ---------------------------------------------------------------------------
+
+ def insertTextHandler (self, widget, newtext, length, pos):
+
+ GDebug.printMesg (1, "insert gtk.Entry () '%s' at %d (%s) into %s" % \
+ (newtext, widget.get_position (), pos, widget))
+
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+
# Compatibility layer for 0.5.1
- #text = unicode(newtext,'utf-8')
- text = unicode(newtext,'utf-8').encode(gConfigForms('textEncoding'))
+ text = unicode (newtext, 'utf-8').encode (gConfigForms ('textEncoding'))
- action = events.Event('requestKEYPRESS', text, text=text,
- code=0, _form=object._form)
+ action = events.Event ('requestINSERTAT', text, text = text,
+ position = widget.get_position (),
+ _form = gfObject._form)
- # don't process event further
- widget.emit_stop_by_name('insert-text')
+ widget.stop_emission ('insert-text')
+ gtk.idle_add (self._eventHandler, action)
- gtk.idle_add(eventHandler,action) # our eventHandler will be called later
+ # ---------------------------------------------------------------------------
+ # delete a portion of text from a gtk.Entry () widget
+ # ---------------------------------------------------------------------------
- def deleteTextHandler(self,widget,start_pos,end_pos,eventHandler,uiDriver):
- #print "delete (%s..%s)" % (start_pos.get_offset(),end_pos.get_offset())
+ def deleteTextHandler (self, widget, start_pos, end_pos):
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+ GDebug.printMesg (1, "Delete %s to %s in %s" % (start_pos, end_pos,
widget))
- object=uiDriver._WidgetToGFObj[self]
+ action = events.Event ('requestDELETERANGE',
+ start_pos = start_pos,
+ end_pos = end_pos,
+ position = widget.get_position (),
+ _form = gfObject._form)
- cursor_iter = widget.get_iter_at_mark(widget.get_insert())
+ widget.stop_emission ('delete-text')
+ self._eventHandler (action)
- action = events.Event('requestDELETERANGE',
- start_pos=start_pos.get_offset(),
- end_pos=end_pos.get_offset(),
- position=cursor_iter.get_offset(),
- _form=object._form)
+ # ---------------------------------------------------------------------------
+ # Handle text inserts in a text view widget (textBuffer)
+ # ---------------------------------------------------------------------------
- widget.emit_stop_by_name('delete-range')
- gtk.idle_add(eventHandler,action)
+ def insertBufferHandler (self, tBuffer, iterator, newtext, length, widget):
- def moveCursorHandler(self,widget,arg1,arg2,arg3,eventHandler,uiDriver):
- print "move Cursor (%s,%s,%s)" % (arg1,arg2,arg3)
- #arg1: movement type (1 = horizontal, 3 = vertikal)
- #arg2: offset: +/- relative movement
- object=uiDriver._WidgetToGFObj[self]
+ GDebug.printMesg (1, "gtk.TextBuffer insert '%s' at %s" % \
+ (newtext, iterator.get_offset ()))
- return
- cursor_iter = widget.get_iter_at_mark(widget.get_insert())
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+ text = unicode (newtext, 'utf-8').encode (gConfigForms ('textEncoding'))
+ action = events.Event ('requestINSERTAT', text, text = text,
+ position = iterator.get_offset (),
+ _form = gfObject._form)
- action = events.Event('requestDELETERANGE',
- start_pos=start_pos.get_offset(),
- end_pos=end_pos.get_offset(),
- position=cursor_iter.get_offset(),
- _form=object._form)
+ tBuffer.stop_emission ('insert-text')
+ self._eventHandler (action)
- widget.emit_stop_by_name('delete-range')
- gtk.idle_add(eventHandler,action)
+ # ---------------------------------------------------------------------------
+ # Handle deletes in a textView widget
+ # ---------------------------------------------------------------------------
+ def deleteBufferHandler (self, tBuffer, start, end, widget):
+ GDebug.printMesg (1, "gtk.TextBuffer delete %s to %s in %s" \
+ % (start.get_offset (), end.get_offset (), widget))
+
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+
+ action = events.Event ('requestDELETERANGE',
+ start_pos = start.get_offset (),
+ end_pos = end.get_offset (),
+ position = tBuffer.get_iter_at_mark ( \
+ tBuffer.get_insert ()).get_offset (),
+ _form = gfObject._form)
+
+ tBuffer.stop_emission ('delete-range')
+ self._eventHandler (action)
+
+
+ # ---------------------------------------------------------------------------
+ # Handle the tab-key in a textView widget to move the focus
+ # ---------------------------------------------------------------------------
+
+ def textViewKeyPress (self, widget, event):
+ """
+ This handler reacts on up and down keys. While not in the first or last row
+ both keys move the cursor in the text view widget. Up- and down-keys in the
+ first or last row moves the focus out of the widget.
+ """
+ if event.keyval == gtk.keysyms.Down:
+ tBuffer = widget.get_buffer ()
+
+ currLine = tBuffer.get_iter_at_mark (tBuffer.get_insert ()).get_line ()
+ lastLine = tBuffer.get_end_iter ().get_line ()
+
+ if currLine != lastLine:
+ tBuffer.place_cursor (tBuffer.get_iter_at_line (currLine + 1))
+ else:
+ widget.get_toplevel ().child_focus (gtk.DIR_TAB_FORWARD)
+
+ return gtk.TRUE
+
+ elif event.keyval == gtk.keysyms.Up:
+ tBuffer = widget.get_buffer ()
+ currLine = tBuffer.get_iter_at_mark (tBuffer.get_insert ()).get_line ()
+
+ if currLine > 0:
+ tBuffer.place_cursor (tBuffer.get_iter_at_line (currLine - 1))
+
+ else:
+ widget.get_toplevel ().child_focus (gtk.DIR_TAB_BACKWARD)
+
+ return gtk.TRUE
+
+ # Key not handled, leave it up to the common handler
+ return gtk.FALSE
+
+
+ # ---------------------------------------------------------------------------
+ # Handle selection event in combo boxes
+ # ---------------------------------------------------------------------------
+
+ def comboHandler (self, comboList, listChild, combo):
+ """
+ This function handles a 'select-child' signal of a combo box list. If the
+ newly selected item differs from the corresponding GFObject's value a
+ 'requestREPLACEVALUE' will be fired.
+ """
+ GDebug.printMesg (2, "Selected %s in %s" % (listChild, combo))
+
+ selection = comboList.child_position (listChild)
+ selected_text = self.choices [selection]
+
+ gfObject = self._uiDriver._WidgetToGFObj [combo]
+ compare = self.reverse.get (gfObject.getValue (), None)
+
+ GDebug.printMesg (1, "Selection is %s in %s" % (selected_text, gfObject))
+ GDebug.printMesg (1, "Old %s vs %s" % (repr (compare), selected_text))
+
+ comboList.stop_emission ('select-child')
+
+ if compare is None or compare != selected_text:
+ action = events.Event ('requestREPLACEVALUE', object = gfObject,
+ index = selection, text = selected_text,
+ _form = gfObject._form)
+
+ self._eventHandler (action)
+
+ return gtk.TRUE
+
+
+ # ---------------------------------------------------------------------------
+ # Handle special keypress signals in gtk.Combo.Entry widgets
+ # ---------------------------------------------------------------------------
+
+ def comboEntryKeyPress (self, widget, event):
+ """
+ This handler traps the enter key in the entry widget of a combo box and
+ fires a 'requestNEXTENTRY' event. All other keys are passed through.
+ """
+ gfObject = self._uiDriver._WidgetToGFObj [widget.get_parent ()]
+
+ if event.keyval == gtk.keysyms.Return:
+ action = events.Event ('requestNEXTENTRY', _form = gfObject._form)
+ self._eventHandler (action)
+ return gtk.TRUE
+
+ return gtk.FALSE
+
+
+ # ---------------------------------------------------------------------------
+ # Handle the toggled event on a checkbox
+ # ---------------------------------------------------------------------------
+
+ def checkboxHandler (self, widget):
+ """
+ This function fires a 'requestTOGGLECHECKBOX' event if the state of a
+ checkbutton widget changes.
+ """
+ buttonStatus = widget.get_active ()
+
+ gfObject = self._uiDriver._WidgetToGFObj [widget]
+ eventdata = [gfObject, buttonStatus]
+ action = events.Event ('requestTOGGLECHKBOX', data = eventdata,
+ _form = gfObject._form)
+
+ widget.stop_emission ('toggled')
+
+ self._eventHandler (action)
+ return gtk.TRUE
+
+
+# -----------------------------------------------------------------------------
+# Base configuration data
+# -----------------------------------------------------------------------------
+
configuration = {
'baseClass' : UIEntry,
'provides' : 'GFEntry',
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -18,153 +18,144 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/form/widget.py
-#
-# DESCRIPTION:
-# A part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id: $
+
+import gtk
import string
+import wrappers
-import gtk
from gnue.common import events
-from gnue.forms.uidrivers.gtk2.common import *
+from gnue.common.apps import GDebug
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-
-import wrappers
-
from gnue.forms.uidrivers.gtk2.MenuBar import MenuBar
from gnue.forms.uidrivers.gtk2.ToolBar import ToolBar
-#
-# UIForm
-#
-# Widget set specific function that creates a single instance of a Form widget
-#
-class UIForm(UIHelper):
+
+# =============================================================================
+# This class creates a single instance of a form widget
+# =============================================================================
+
+class UIForm (UIHelper):
- def __init__(self, event):
- self._uiPageList=[]
- self.statusBar = None
- UIHelper.__init__(self, event)
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+ def __init__ (self, event):
+ self._uiPageList = []
+ self.statusBar = None
+
+ UIHelper.__init__ (self, event)
+
- def _createWidget(self, event, spacer):
+ # ---------------------------------------------------------------------------
+ # GTK-Widget creation
+ # ---------------------------------------------------------------------------
- object = event.object
+ def _createWidget (self, event, spacer):
- #
- # Size based upon the form definition
- #
+ gfObject = event.object
+
self.menu_sb_space = 0
- formWidth = int(self._form._layout.Char__width)
- formHeight = int(self._form._layout.Char__height)
- self._visibleSize = (formWidth*self._uiDriver.widgetWidth,
- formHeight*self._uiDriver.widgetHeight)
+ formWidth = int (self._form._layout.Char__width)
+ formHeight = int (self._form._layout.Char__height)
+
+ self._visibleSize = (formWidth * self._uiDriver.widgetWidth,
+ formHeight * self._uiDriver.widgetHeight)
- self._formSize = formSize = (formWidth*self._uiDriver.widgetWidth,
- (formHeight+self.menu_sb_space)\
- *self._uiDriver.widgetHeight)
+ self._formSize = formSize = (formWidth * self._uiDriver.widgetWidth,
+ (formHeight + self.menu_sb_space) * self._uiDriver.widgetHeight)
-
# The main frame of this form
if self._form.style != 'dialog':
- self.mainWindow = gtk.Window()
- self.mainWindow.set_resizable(gtk.TRUE)
- self.content_table = gtk.Table(4, 1, gtk.FALSE)
- self.mainWindow.add(self.content_table)
+ self.mainWindow = gtk.Window ()
+ self.mainWindow.set_resizable (gtk.TRUE)
+ self.content_table = gtk.Table (4, 1, gtk.FALSE)
+ self.mainWindow.add (self.content_table)
- self.containerFrame = gtk.Frame()
- self.content_table.attach(self.containerFrame,
+ self.containerFrame = gtk.Frame ()
+ self.content_table.attach (self.containerFrame,
# X direction Y direction
0, 1, 2, 3,
gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL,
0, 0)
- self.createStatusBar()
+ self.containerFrame.show ()
+ self.createStatusBar ()
- else:
- self.mainWindow = gtk.Window()
- self.mainWindow.set_resizable(gtk.TRUE)
- self.containerFrame = gtk.Frame()
- self.mainWindow.add(self.containerFrame)
- borderwidth=15
- # use e.get_allocation() to compute default window sizes
- self.mainWindow.set_default_size(formWidth*self._uiDriver.widgetWidth +\
- borderwidth,\
- formHeight*self._uiDriver.widgetHeight+\
- borderwidth)
-
+ else:
+ self.mainWindow = gtk.Dialog (flags = gtk.DIALOG_NO_SEPARATOR |
+ gtk.DIALOG_DESTROY_WITH_PARENT)
+ self.mainWindow.set_resizable (gtk.TRUE)
+ self.mainWindow.action_area.set_size_request (-1, 0)
+ self.containerFrame = gtk.Frame ()
+
+ wx = (formWidth + 1) * self._uiDriver.widgetWidth
+ wy = (formHeight + 1) * self._uiDriver.widgetHeight
+
+ self.containerFrame.set_size_request (wx, wy)
+
+ self.mainWindow.vbox.pack_start (self.containerFrame)
+ self.containerFrame.show ()
+
- self.mainWindow.connect('delete_event', self.windowExitEvent)
- self.mainWindow.set_title(str(self._form.title))
- # TODO: add icon for window
- # self.mainWindow.set_icon(...)
+ self.mainWindow.connect ('delete_event', self.windowExitEvent)
- # The window in which pages will be rendered
- if object._layout.tabbed != 'none':
- self._wrapper = wrappers.TabbedWrapper(self)
+ title = "%s" % self._form.title
+ self.mainWindow.set_title (title.encode ('utf-8'))
+
+ if gfObject._layout.tabbed != 'none':
+ self._wrapper = wrappers.TabbedWrapper (self)
else:
- self._wrapper = wrappers.PlainWrapper(self)
+ self._wrapper = wrappers.PlainWrapper (self)
newWidget = self._wrapper.pane
self._containerToolkitWidget = newWidget
# Add the menu
- if not self._form._features['GUI:MENUBAR:SUPPRESS']:
- MenuBar(self._uiDriver, self, self._form)
+ if not self._form._features ['GUI:MENUBAR:SUPPRESS']:
+ MenuBar (self._uiDriver, self, self._form)
# and the Toolbar
if not self._form._features['GUI:TOOLBAR:SUPPRESS']:
- ToolBar(self._uiDriver, self, self._form)
+ ToolBar (self._uiDriver, self, self._form)
- # compute default window size
- #
- #paneSize=self.containerFrame.get_allocation()
- #winSize=self.mainWindow.get_allocation()
- #offsetX=winSize.width-paneSize.width
- #offsetY=winSize.height-paneSize.height
- #print "Size %s,%s" % (offsetX,offsetY)
- #(w,h)=self.containerFrame.get_size_request()
- #print 'size: %s,%s' %(w,h)
- #(w,h)=self.mainWindow.get_size_request()
- #print 'size: %s,%s' %(w,h)
-
self._eventHandler = event.eventHandler
- self._wrapper.finalize()
+ self._wrapper.finalize ()
self._visible = 0
return newWidget
- def createStatusBar(self):
- self.statusBar1 = gtk.Statusbar()
- self.statusBar2 = gtk.Statusbar()
- self.statusBar3 = gtk.Statusbar()
- self.statusBar4 = gtk.Statusbar()
- self.statusBar5 = gtk.Statusbar()
+ # ---------------------------------------------------------------------------
+ # Create the status bar
+ # ---------------------------------------------------------------------------
- self.statusBar1.set_has_resize_grip(gtk.FALSE)
- self.statusBar2.set_has_resize_grip(gtk.FALSE)
- self.statusBar3.set_has_resize_grip(gtk.FALSE)
- self.statusBar4.set_has_resize_grip(gtk.FALSE)
- self.statusBar5.set_has_resize_grip(gtk.TRUE)
+ def createStatusBar (self):
+ self.statusBar1 = gtk.Statusbar ()
+ self.statusBar2 = gtk.Statusbar ()
+ self.statusBar3 = gtk.Statusbar ()
+ self.statusBar4 = gtk.Statusbar ()
+ self.statusBar5 = gtk.Statusbar ()
- status_bar_table=gtk.HBox(2)
- status_bar_table.set_homogeneous(gtk.FALSE)
- status_bar_table.pack_start(self.statusBar1,gtk.TRUE,gtk.TRUE,0)
+ self.statusBar1.set_has_resize_grip (False)
+ self.statusBar2.set_has_resize_grip (False)
+ self.statusBar3.set_has_resize_grip (False)
+ self.statusBar4.set_has_resize_grip (False)
+ self.statusBar5.set_has_resize_grip (False)
+
+ status_bar_table = gtk.HBox (False)
+ status_bar_table.pack_start (self.statusBar1)
- status_bar_table2=gtk.HBox(4)
- status_bar_table2.pack_start(self.statusBar2,gtk.TRUE,gtk.TRUE,0)
- status_bar_table2.pack_start(self.statusBar3,gtk.TRUE,gtk.TRUE,0)
- status_bar_table2.pack_start(self.statusBar4,gtk.TRUE,gtk.TRUE,0)
- status_bar_table2.pack_start(self.statusBar5,gtk.TRUE,gtk.TRUE,0)
+ status_bar_table2 = gtk.HBox(False)
+ status_bar_table2.pack_start (self.statusBar2)
+ status_bar_table2.pack_start (self.statusBar3)
+ status_bar_table2.pack_start (self.statusBar4)
+ status_bar_table2.pack_start (self.statusBar5)
- status_bar_table.pack_start(status_bar_table2,gtk.TRUE,gtk.TRUE,0)
+ status_bar_table.pack_start (status_bar_table2)
self.content_table.attach(status_bar_table,
# X direction Y direction
@@ -172,75 +163,89 @@
gtk.EXPAND | gtk.FILL, 0,
0, 0)
- #
- # gotoPage
- #
+ # ---------------------------------------------------------------------------
# Makes the requested page visible while hiding the others
- #
- def gotoPage(self,event):
-
self._wrapper.setPage(self._uiDriver._gfObjToUIWidget[event.data].widgets[0])
+ # ---------------------------------------------------------------------------
+
+ def gotoPage (self, event):
+ pageObj = self._uiDriver._gfObjToUIWidget [event.data].widgets [0]
+ GDebug.printMesg (1, "gotoPAGE: %s %s" % (event.data, pageObj))
+ self._wrapper.setPage (pageObj)
- #
- # _setStatusBar
- #
- def _setStatusBar(self,tip, statusValue, insertValue, currentRecord,\
+ # ---------------------------------------------------------------------------
+ # set values in the corresponding status bars
+ # ---------------------------------------------------------------------------
+
+ def _setStatusBar (self, tip, statusValue, insertValue, currentRecord,
maxRecord, currentPage, maxPage):
- if not hasattr(self,'statusBar1'):
+ if not hasattr (self, 'statusBar1'):
return
- if tip != None:
- self.statusBar1.push(self.statusBar1.get_context_id("tip"),str(tip))
+ if tip is not None:
+ text = "%s" % tip
+ context = self.statusBar1.get_context_id ('tip')
+ self.statusBar1.push (context, text.encode ('utf-8'))
if statusValue:
- context_id=self.statusBar2.get_context_id("statusValue")
- self.statusBar2.push(context_id,statusValue)
+ context = self.statusBar2.get_context_id ('statusValue')
+ self.statusBar2.push (context, statusValue.encode ('utf-8'))
if insertValue:
- context_id=self.statusBar3.get_context_id("insertValue")
- self.statusBar3.push(context_id,insertValue)
+ context = self.statusBar3.get_context_id ('insertValue')
+ self.statusBar3.push (context, insertValue.encode ('utf-8'))
- if currentRecord and maxRecord:
- context_id=self.statusBar4.get_context_id("currentRecord_and_maxRecord")
- messg=string.strip("%s/%s" %(currentRecord,maxRecord))
- self.statusBar4.push(context_id,messg)
+ if currentRecord and maxRecord:
+ context = self.statusBar4.get_context_id ('currentRecord_and_maxRecord')
+ text = string.strip ("%s/%s" % (currentRecord, maxRecord))
+ self.statusBar4.push (context, text)
- if currentPage and maxPage:
- context_id=self.statusBar5.get_context_id("currentPage_and_maxPage")
- messg=string.strip("%s/%s"%(currentPage,maxPage))
- self.statusBar5.push(context_id,messg)
+ if currentPage and maxPage:
+ context = self.statusBar5.get_context_id ('currentPage_and_maxPage')
+ text = string.strip ("%s/%s" % (currentPage, maxPage))
+ self.statusBar5.push (context, text)
- def show(self):
- self.containerFrame.show()
- self.mainWindow.show_all()
+ # ---------------------------------------------------------------------------
+ # show the current form non-modal
+ # ---------------------------------------------------------------------------
+
+ def show (self):
+ self.containerFrame.show ()
+ self.mainWindow.show_all ()
self._visible = 1
+ if self._form.style == 'dialog':
+ self.mainWindow.run ()
- def hide(self):
- self.containerFrame.hide()
- self.mainWindow.hide()
- self.mainWindow.set_modal(gtk.FALSE)
+
+ # ---------------------------------------------------------------------------
+ # Hide the current form
+ # ---------------------------------------------------------------------------
+
+ def hide (self):
+ self.containerFrame.hide ()
+ self.mainWindow.hide ()
+ self.mainWindow.set_modal (False)
self._visible = 0
- def showModal(self):
- self.mainWindow.show_all()
- self.mainWindow.set_modal(gtk.TRUE)
+
+ # ---------------------------------------------------------------------------
+ # Show the current form modal
+ # ---------------------------------------------------------------------------
+
+ def showModal (self):
+ self.mainWindow.show_all ()
+ self.mainWindow.set_modal (True)
self._visible = 1
+ if self._form.style == 'dialog':
+ self.mainWindow.run ()
- #############################################################################
- #
- # Internal Event Processors
- #
- # Processes the events from the widget set
- #
- #
- # windowExitEvent
- #
- # Catches the Exit event from the menu and request exit (similar to the
closeTrap method of wx uidrv.)
- #
- def windowExitEvent(self,*args):
- self._uiDriver.dispatchEvent('requestEXIT',_form=self._form)
- return gtk.TRUE
+ # ---------------------------------------------------------------------------
+ # Catch the exit event from the menu and request exit
+ # ---------------------------------------------------------------------------
+ def windowExitEvent (self, widget, event):
+ self._uiDriver.dispatchEvent ('requestEXIT', _form = self._form)
+ return True
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/widget.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/wrappers.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/wrappers.py
2004-07-20 13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/wrappers.py
2004-07-20 13:58:53 UTC (rev 5993)
@@ -18,149 +18,207 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/forms/wrappers.py
-#
-# DESCRIPTION:
-# A part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
-import string, sys
+# $Id: $
+
import gtk
+
from gnue.common import events
from gnue.common.apps import GDebug
-from gnue.forms.uidrivers.gtk2.common import *
+# =============================================================================
+# Constants
+# =============================================================================
-class ScrollableWrapper(gtk.ScrolledWindow):
+_tabStyles = {'left' : gtk.POS_LEFT,
+ 'right' : gtk.POS_RIGHT,
+ 'bottom': gtk.POS_BOTTOM,
+ 'top' : gtk.POS_TOP}
+
+# =============================================================================
+# Base class for scrollable pages
+# =============================================================================
+
+class ScrollableWrapper (gtk.ScrolledWindow):
+
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+
def __init__(self, uiform):
-
self.uiform = uiform
- self.frame = frame = uiform.containerFrame
- self.form = form = uiform._form
+ self.form = uiform._form
+ self.frame = uiform.containerFrame
self.margin = 2
- gtk.ScrolledWindow.__init__(self)
- self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- #self.set_border_width(self.margin)
- self.frame.add(self)
+ gtk.ScrolledWindow.__init__ (self)
+ self.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.frame.add (self)
- formWidth = int(form._layout.Char__width)
- formHeight = int(form._layout.Char__height)
- self.layoutXSize = formWidth*uiform._uiDriver.widgetWidth
- self.layoutYSize = formHeight*uiform._uiDriver.widgetHeight
+ formWidth = int (self.form._layout.Char__width)
+ formHeight = int (self.form._layout.Char__height)
+
+ self.layoutXSize = formWidth * uiform._uiDriver.widgetWidth
+ self.layoutYSize = formHeight * uiform._uiDriver.widgetHeight
- self._fitted = 0
+ self._fitted = 0
self._pageList = []
- def finalize(self):
+ # ---------------------------------------------------------------------------
+ # Final actions on a wrapper
+ # ---------------------------------------------------------------------------
+
+ def finalize (self):
pass
-#
-# Notebook pages
-#
-class TabbedWrapper(gtk.Notebook):
- def __init__(self, uiform):
-# ScrollableWrapper.__init__(self, *args, **parms)
+# =============================================================================
+# Single page forms
+# =============================================================================
+
+class PlainWrapper (ScrollableWrapper):
+
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+
+ def __init__ (self, *args, **parms):
+ ScrollableWrapper.__init__ (self, *args, **parms)
+ self.pane = gtk.Fixed ()
+ self.add_with_viewport (self.pane)
+ self.set_size_request (self.layoutXSize, self.layoutYSize)
+
+ # ---------------------------------------------------------------------------
+ # Finalize the wrapper
+ # ---------------------------------------------------------------------------
+
+ def finalize (self):
+ self.pane.set_size_request (self.layoutXSize, self.layoutYSize)
+
+
+ # ---------------------------------------------------------------------------
+ # Create a new page
+ # ---------------------------------------------------------------------------
+
+ def createPage (self, gfObject):
+ newWidget = gtk.Fixed ()
+ self.pane.add (newWidget)
+
+ # Only show first page
+ if len (self._pageList) < 1:
+ newWidget.show_all ()
+
+ self._pageList.append (newWidget)
+ return newWidget
+
+
+ # ---------------------------------------------------------------------------
+ # Activate a given page
+ # ---------------------------------------------------------------------------
+
+ def setPage (self, page):
+ for p in self._pageList:
+ if p != page:
+ p.show_all ()
+ else:
+ p.hide ()
+
+
+# =============================================================================
+# This class implements paged forms using a gtk.Notebook as baseclass
+# =============================================================================
+
+class TabbedWrapper (gtk.Notebook):
+
+ # ---------------------------------------------------------------------------
+ # Constructor
+ # ---------------------------------------------------------------------------
+
+ def __init__ (self, uiform):
self.uiform = uiform
- self.frame = frame = uiform.containerFrame
- self.pane = self
+ self.frame = frame = uiform.containerFrame
+ self.pane = self
self.margin = 2
- gtk.Notebook.__init__(self)
+ gtk.Notebook.__init__ (self)
+
try:
- tabstyle = _tabStyles[self.form._layout.tabbed]
- self.set_tab_pos(tabstyle)
+ tabstyle = _tabStyles [self.form._layout.tabbed]
+ self.set_tab_pos (tabstyle)
+
except:
pass
- self.set_scrollable(gtk.TRUE)
- # The signal "select-page" doesn't work with
- # self.connect('select-page', self.notebookTabHandler)
- self.connect('switch-page', self.notebookTabHandler)
- self.frame.add(self)
+ self.set_scrollable (True)
+ self._switchHandler = self.connect ('switch-page', self.notebookTabHandler)
- self.form = form = uiform._form
- formWidth = int(form._layout.Char__width)
- formHeight = int(form._layout.Char__height)
- self.layoutXSize = formWidth*uiform._uiDriver.widgetWidth
- self.layoutYSize = formHeight*uiform._uiDriver.widgetHeight
+ self.frame.add (self)
- self._oldpage=0
+ self.form = form = uiform._form
+ formWidth = int (form._layout.Char__width)
+ formHeight = int (form._layout.Char__height)
+
+ # Since we have additional tabs, we stretch the formheight
+ self.layoutXSize = formWidth * uiform._uiDriver.widgetWidth
+ self.layoutYSize = int ((formHeight + 1.5) * uiform._uiDriver.widgetHeight)
+
+ self._oldpage = 0
self._pageList = []
self.__notebookLoopTrap = 0
- def createPage(self, object):
- swin = gtk.ScrolledWindow()
- newWidget = gtk.Fixed()
- tab_label=gtk.Label(object.name)
+ # ---------------------------------------------------------------------------
+ # Create a new page and append it to the notebook
+ # ---------------------------------------------------------------------------
- swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- swin.add_with_viewport(newWidget)
- self.append_page(swin, tab_label)
+ def createPage (self, gfObject):
- self._pageList.append(newWidget)
- # newWidget.set_size_request(self.layoutXSize,self.layoutYSize)
+ GDebug.printMesg (3, "createPage %s for %s" % (self, gfObject))
+ newWidget = gtk.Fixed ()
+ swin = gtk.ScrolledWindow ()
+ swin.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ swin.add_with_viewport (newWidget)
+ if hasattr (gfObject, 'caption'):
+ text = "%s" % gfObject.caption
+ else:
+ text = "%s" % gfObject.name
+ self.append_page (swin, gtk.Label (text.encode ('utf-8')))
+
+ self._pageList.append (newWidget)
+ newWidget.show ()
+
return newWidget
- def finalize(self):
- self.pane.set_size_request(self.layoutXSize,self.layoutYSize)
-
- def notebookTabHandler(self,notebook,notebookpage,page_number):
- if self._oldpage!=page_number:
-
- action = events.Event('requestPAGE',page_number, _form=self.form)
- self.uiform._eventHandler(action)
+ # ---------------------------------------------------------------------------
+ # Finalize the widget
+ # ---------------------------------------------------------------------------
- notebook.emit_stop_by_name('switch-page')
+ def finalize (self):
+ self.pane.set_size_request (self.layoutXSize, self.layoutYSize)
+
- def setPage(self, page):
- # get Scroll Window for page
- swin=page.get_parent().get_parent()
- page_number=self.page_num(swin)
- self._oldpage=page_number
- self.set_current_page(page_number)
+ # ---------------------------------------------------------------------------
+ # Transform a switch-page signal into a requestPAGE event
+ # ---------------------------------------------------------------------------
+ def notebookTabHandler (self, notebook, notebookpage, pageNr):
+ GDebug.printMesg (3, "switch-page %s %s %s" % \
+ (pageNr, self._oldpage, notebook))
+ if self._oldpage != pageNr:
+ action = events.Event ('requestPAGE', pageNr, _form = self.form)
+ self.uiform._eventHandler (action)
+ notebook.stop_emission ('switch-page')
-#
-# Single pages
-#
-class PlainWrapper(ScrollableWrapper):
- def __init__(self, *args, **parms):
- ScrollableWrapper.__init__(self, *args, **parms)
- self.pane = gtk.Fixed()
- self.add_with_viewport(self.pane)
- self.set_size_request(self.layoutXSize,self.layoutYSize)
-
- def finalize(self):
- self.pane.set_size_request(self.layoutXSize,self.layoutYSize)
- def createPage(self, object):
- newWidget = gtk.Fixed()
- self.pane.add(newWidget)
+ # ---------------------------------------------------------------------------
+ # Activate a given page in the notebook
+ # ---------------------------------------------------------------------------
- # Only show first page
- if len(self._pageList)<1:
- newWidget.show_all()
-
- self._pageList.append(newWidget)
- return newWidget
-
- def setPage(self, page):
- for p in self._pageList:
- if p != page:
- p.show_all()
- else:
- p.hide()
+ def setPage (self, page):
+ GDebug.printMesg (3, "SET-PAGE %s to %s" % (self, page))
-
-_tabStyles = {'left':gtk.POS_LEFT,
- 'right':gtk.POS_RIGHT,
- 'bottom':gtk.POS_BOTTOM,
- 'top':gtk.POS_TOP,
- }
+ swin = page.get_parent ().get_parent ()
+ pageNum = self.page_num (swin)
+ self._oldpage = pageNum
+ self.set_current_page (pageNum)
Property changes on:
trunk/gnue-forms/src/uidrivers/gtk2/widgets/form/wrappers.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/image.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/label.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/label.py 2004-07-20
13:52:09 UTC (rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/label.py 2004-07-20
13:58:53 UTC (rev 5993)
@@ -18,44 +18,56 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# UIwxpython.py
-#
-# DESCRIPTION:
-# A wxPython based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id: $
+
import gtk
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-_alignmentStyle = { 'left' : gtk.JUSTIFY_LEFT,
- 'center': gtk.JUSTIFY_CENTER,
- 'right' : gtk.JUSTIFY_RIGHT,
- 'fill' : gtk.JUSTIFY_FILL
- }
+# TODO: fix proper alignment. Aligment doesn't work at the moment, because the
+# label haven't a width set (using set_size_request ()). Calling this function
+# results in a strange positioning behaviour of the label ??? Currently all
+# labels are 'left-aligned'
+_alignmentStyle = {
+ 'left' : gtk.JUSTIFY_LEFT,
+ 'center': gtk.JUSTIFY_CENTER,
+ 'right' : gtk.JUSTIFY_RIGHT,
+ 'fill' : gtk.JUSTIFY_FILL
+}
-#
-# UILabel
-#
-# Widget set specific function that creates a single instance of a label
-#
-class UILabel(UIHelper):
+# =============================================================================
+# This class provides GTK widgets for labels
+# =============================================================================
- def _createWidget(self, event, spacer):
- object = event.object
- newWidget = gtk.Label(str(object.text))
- newWidget.set_size_request(self.itemWidth, self.itemHeight)
- event.container.put(newWidget, object.Char__x * event.widgetWidth,
- (object.Char__y + spacer + (spacer * object._gap))\
- * event.widgetHeight)
- newWidget.set_justify(_alignmentStyle[object.alignment])
+class UILabel (UIHelper):
+
+ # ---------------------------------------------------------------------------
+ # Create a GTK widget
+ # ---------------------------------------------------------------------------
+
+ def _createWidget (self, event, spacer):
+ gfObject = event.object
+
+ text = "%s" % gfObject.text
+
+ newWidget = gtk.Label (text.encode ('utf-8'))
+ newWidget.modify_font (self._uiDriver.mono_font)
+
+ newWidget.set_justify (_alignmentStyle [gfObject.alignment])
+
+ event.container.put (newWidget, self.itemX, self.itemY)
+ newWidget.show ()
+
return newWidget
+
+# -----------------------------------------------------------------------------
+# Configuration data
+# -----------------------------------------------------------------------------
+
configuration = {
- 'baseClass' : UILabel,
- 'provides' : 'GFLabel',
- 'container' : 0,
- }
+ 'baseClass' : UILabel,
+ 'provides' : 'GFLabel',
+ 'container' : 0,
+}
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/label.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/page.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/page.py 2004-07-20 13:52:09 UTC
(rev 5992)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/page.py 2004-07-20 13:58:53 UTC
(rev 5993)
@@ -18,40 +18,34 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/widgets/page.py
-#
-# DESCRIPTION:
-# A part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id: $
+
import gtk
-from gnue.forms.uidrivers.gtk2.common import _setDefaultEventHandlers
-
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-#
-# UIPage
-#
-# Widget set specific function that creates a single instance of a page
-#
-# Note: The event trap for changing notebook pages is attached to the UIForm
-#
-class UIPage(UIHelper):
- def _createWidget(self, event, spacer):
- object = event.object
- newWidget = self._uiForm._wrapper.createPage(object)
+# =============================================================================
+# This class implements notebook pages
+# =============================================================================
- # _setDefaultEventHandlers(newWidget, event.eventHandler,
event.initialize, self._uiDriver)
+class UIPage (UIHelper):
- # event.interface._pageList.append(newWidget)
+ # ---------------------------------------------------------------------------
+ # create a new page
+ # ---------------------------------------------------------------------------
+
+ def _createWidget (self, event, spacer):
+ gfObject = event.object
+ newWidget = self._uiForm._wrapper.createPage (gfObject)
self._containerToolkitWidget = newWidget
return newWidget
+# -----------------------------------------------------------------------------
+# Base configuration
+# -----------------------------------------------------------------------------
+
configuration = {
'baseClass' : UIPage,
'provides' : 'GFPage',
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/page.py
___________________________________________________________________
Name: svn:keywords
+ +Id
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/widgets/scrollbar.py
___________________________________________________________________
Name: svn:keywords
+ +Id
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5993 - in trunk/gnue-forms/src: . uidrivers/_base uidrivers/_base/widgets uidrivers/gtk2 uidrivers/gtk2/widgets uidrivers/gtk2/widgets/form,
johannes <=