[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue/forms/src/uidrivers/gtk2 MenuBar.py Splash...
From: |
Jan Ischebeck |
Subject: |
gnue/forms/src/uidrivers/gtk2 MenuBar.py Splash... |
Date: |
Mon, 19 May 2003 20:06:35 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue
Changes by: Jan Ischebeck <address@hidden> 03/05/19 20:06:35
Modified files:
forms/src/uidrivers/gtk2: MenuBar.py SplashScreen.py ToolBar.py
UIdriver.py common.py ErrorHandler.py
forms/src/uidrivers/gtk2/widgets: _base.py button.py entry.py
image.py label.py scrollbar.py
forms/src/uidrivers/gtk2/widgets/form: widget.py wrappers.py
Log message:
gtk2 uidriver update (part 2)
+ menubar, toolbar now working incl. enable/disable/toggle
+ key and mouse events are passed through gnue framework
+ font metrics are used to get widget height
- XIM not working because of gnue event framework hook (needs special
IMContext implementation)
- Some strange bugs (go to page dialog)
- Image support not working
- Page tab click can't be vetoed by gnue framework
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/MenuBar.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/SplashScreen.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/ToolBar.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/UIdriver.py.diff?tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/common.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/ErrorHandler.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/_base.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/button.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/entry.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/image.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/label.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnue/forms/src/uidrivers/gtk2/ErrorHandler.py
diff -c gnue/forms/src/uidrivers/gtk2/ErrorHandler.py:1.1
gnue/forms/src/uidrivers/gtk2/ErrorHandler.py:1.2
*** gnue/forms/src/uidrivers/gtk2/ErrorHandler.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/ErrorHandler.py Mon May 19 20:06:35 2003
***************
*** 74,80 ****
# response: self.destroy())
response: gtk.mainquit())
- print dir(gtk) #._root_window
gtk.main()
--- 74,79 ----
Index: gnue/forms/src/uidrivers/gtk2/MenuBar.py
diff -c gnue/forms/src/uidrivers/gtk2/MenuBar.py:1.1
gnue/forms/src/uidrivers/gtk2/MenuBar.py:1.2
*** gnue/forms/src/uidrivers/gtk2/MenuBar.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/MenuBar.py Mon May 19 20:06:35 2003
***************
*** 41,47 ****
0, 1, 0, 1,
gtk.EXPAND | gtk.FILL, 0,
0, 0)
- # vbox.pack_start(menu, expand=gtk.FALSE)
return menu
def correctLabel(self,label):
--- 41,46 ----
***************
*** 84,94 ****
icon = gtk.Image()
icon.set_from_file(iconloc)
_cachedIcons[iconloc] = icon
! try:
! item.set_image(icon)
! except AttributeError:
! # Good ol' wx 2.2 address@hidden@#
! pass
return item
--- 83,89 ----
icon = gtk.Image()
icon.set_from_file(iconloc)
_cachedIcons[iconloc] = icon
! item.set_image(icon)
return item
***************
*** 99,118 ****
# Enable a menu item
def enableItem(self, item):
! pass
! #item.activate()
! # item.set_active(1)
# Disable a menu item
def disableItem(self, item):
! try:
! item.set_active(0)
! except:
! pass
! try:
! item.deactivate(0)
! except:
! pass
_cachedIcons = {}
--- 94,104 ----
# Enable a menu item
def enableItem(self, item):
! item.set_sensitive(1)
# Disable a menu item
def disableItem(self, item):
! item.set_sensitive(0)
_cachedIcons = {}
Index: gnue/forms/src/uidrivers/gtk2/SplashScreen.py
diff -c gnue/forms/src/uidrivers/gtk2/SplashScreen.py:1.1
gnue/forms/src/uidrivers/gtk2/SplashScreen.py:1.2
*** gnue/forms/src/uidrivers/gtk2/SplashScreen.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/SplashScreen.py Mon May 19 20:06:35 2003
***************
*** 47,63 ****
self.connect('destroy', lambda win: self.hide())
self.set_resizable(gtk.TRUE)
self.resize(525,200)
self.set_position(1) # for center
img = gtk.Image()
img.set_from_file(images_dir + gConfig('splashScreenPNG'))
! self.add(img)
!
! #SplashScreen.__init__(self,None,bitmapfile=bitmapFile,
! # duration = 3000, callback=self.onCloseSplash,
! #
style=wxCENTRE_ON_SCREEN|wxSIMPLE_BORDER|wxSTAY_ON_TOP
! # ) # TODO: A 2.4 thing? ->
wxSPLASH_TIMEOUT|wxFRAME_NO_TASKBAR)
! #swidth,sheight = self.GetSizeTuple()
!
# Make the splash text print white
#self.SetForegroundColour(wxColour(0xFF, 0xFF, 0xFF))
#self.SetFont(wxFont(20,wxSWISS,wxNORMAL,wxBOLD))
--- 47,63 ----
self.connect('destroy', lambda win: self.hide())
self.set_resizable(gtk.TRUE)
self.resize(525,200)
+ self.set_modal(1)
self.set_position(1) # for center
img = gtk.Image()
img.set_from_file(images_dir + gConfig('splashScreenPNG'))
! box=gtk.VBox()
! self.add(box)
! box.add(img)
! box.add(gtk.Label('GNU Enterprise'))
! box.add(gtk.Label("Protected by GNU General Public Licence 2.0"))
! # use drawingarea instead, see:
! #
http://www.moeraki.com/pygtktutorial/pygtk2tutorial/sec-DrawingMethods.html
# Make the splash text print white
#self.SetForegroundColour(wxColour(0xFF, 0xFF, 0xFF))
#self.SetFont(wxFont(20,wxSWISS,wxNORMAL,wxBOLD))
***************
*** 84,93 ****
#
wxPoint(1,sheight-(theight+10)),wxSize(swidth-5,theight),wxALIGN_RIGHT)
#self.CenterOnScreen()
- #self.Show(true)
def Show(self):
self.show_all()
def onCloseSplash(self):
pass
--- 84,94 ----
#
wxPoint(1,sheight-(theight+10)),wxSize(swidth-5,theight),wxALIGN_RIGHT)
#self.CenterOnScreen()
def Show(self):
+ gtk.timeout_add(1500,lambda splash: splash.destroy(),self)
self.show_all()
+ self.show_now()
def onCloseSplash(self):
pass
Index: gnue/forms/src/uidrivers/gtk2/ToolBar.py
diff -c gnue/forms/src/uidrivers/gtk2/ToolBar.py:1.1
gnue/forms/src/uidrivers/gtk2/ToolBar.py:1.2
*** gnue/forms/src/uidrivers/gtk2/ToolBar.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/ToolBar.py Mon May 19 20:06:35 2003
***************
*** 39,47 ****
toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL)
! # TODO: Should we use the default style instead?
! # toolbar.set_style(gtk.TOOLBAR_BOTH)
! toolbar.set_style(gtk.TOOLBAR_ICONS)
toolbar.set_tooltips(gtk.TRUE)
self.container.content_table.attach(toolbar,
--- 39,50 ----
toolbar.set_orientation(gtk.ORIENTATION_HORIZONTAL)
! # TODO:
! # - add user preference for toolbar
! # choices: (use global toolbar settings| just icon | just text |
both)
! #
! # (for now use ICONS only)
! toolbar.set_style(gtk.TOOLBAR_ICONS) # gtk.TOOLBAR_BOTH |
gtk.TOOLBAR_TEXT
toolbar.set_tooltips(gtk.TRUE)
self.container.content_table.attach(toolbar,
***************
*** 54,62 ****
# Add a menu item (action)
def addAction(self, name, userAction):
! ## TODO: try to use stock items for basic functions (load/save...)
! label = name.decode('iso8859-1')
iconloc = userAction.getIconLocation(size="24x24")
# Set the action icon if available
--- 57,65 ----
# Add a menu item (action)
def addAction(self, name, userAction):
! # TODO: try to use stock items for basic functions (load/save...)
! label = name.decode('iso8859-1') # FIXME: load encoding from some other
place
iconloc = userAction.getIconLocation(size="24x24")
# Set the action icon if available
***************
*** 99,127 ****
# Enable a menu item
def enableItem(self, item):
- # print "Enable %s" % item
- return
if item != None:
! self.toolbar.EnableTool(item, 1)
# Disable a menu item
def disableItem(self, item):
- # print "Disenable %s" % item
- return
if item != None:
! self.toolbar.EnableTool(item, 0)
def startingItem(self, item):
- # print "Starting %s" % item
- return
if item!=None:
! self.toolbar.ToggleTool(item,1)
def endingItem(self, item):
- # print "Ending %s" % item
- return
if item!=None:
! self.toolbar.ToggleTool(item,0)
_cachedIcons = {}
--- 102,122 ----
# Enable a menu item
def enableItem(self, item):
if item != None:
! item.set_sensitive(1)
# Disable a menu item
def disableItem(self, item):
if item != None:
! item.set_sensitive(0)
def startingItem(self, item):
if item!=None:
! item.set_active(1)
def endingItem(self, item):
if item!=None:
! item.set_active(0)
_cachedIcons = {}
Index: gnue/forms/src/uidrivers/gtk2/UIdriver.py
diff -c gnue/forms/src/uidrivers/gtk2/UIdriver.py:1.24
gnue/forms/src/uidrivers/gtk2/UIdriver.py:1.25
*** gnue/forms/src/uidrivers/gtk2/UIdriver.py:1.24 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/UIdriver.py Mon May 19 20:06:35 2003
***************
*** 50,55 ****
--- 50,56 ----
from gnue.common.apps import GConfig
from gnue.common.utils.TextUtils import lineWrap
+
from gnue.forms.GFForm import *
from gnue.forms.uidrivers._commonGuiToolkit import UIdriver as commonToolkit
***************
*** 57,68 ****
#from gnue.forms.uidrivers.gtk2.GFApp import *
from gnue.forms.uidrivers.gtk2.SplashScreen import *
from gnue.forms.uidrivers.gtk2.widgets._base import *
- def initFont(widget):
- font_desc = pango.FontDescription('monospace 12')
- widget.modify_font(font_desc)
-
#
# GFUserInterface
#
--- 58,66 ----
#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
#
# GFUserInterface
#
***************
*** 70,128 ****
# All UIs must provide this class
#
class GFUserInterface(commonToolkit.GFUserInterface):
def __init__(self, eventController, disableSplash = None):
commonToolkit.GFUserInterface.__init__(self,eventController,disableSplash)
! self._disabledColour = gtk.gdk.color_parse("light_grey")
def initialize(self):
################################################################
# GTK Specifics
################################################################
- #self._gtkapp = getGTKApp()
#
# SplashScreen
#
if not self._disableSplash:
! pass
! # self.splash = UISplashScreen()
! # self.splash.Show()
#
! # Create a dummy window used to compute sizes
#
- # dummyWindow = wxFrame(NULL, -1, "", wxDefaultPosition)
! # panel = wxPanel(dummyWindow, -1)
! self._disabledColour = 0 # panel.GetBackgroundColour()
- #self.mono_font = pango.FontDescription('monospace 12')
- #gtk.Window().
#
! # Find the max size of printable characters
! # used to setup the grid
! #
! maxWidth, maxHeight, maxDescent, maxLeading = [0,0,0,0]
! checkchars = string.printable
! for letter in checkchars:
! # width,height,descent,leading = dummyWindow.GetFullTextExtent(letter)
! # TODO: use gtk2 function instead
! width,height,descent,leading =9,15,3,0
! maxWidth = max(maxWidth,width)
! maxHeight = max(maxHeight,height)
! maxDescent = max(maxDescent,descent)
! maxLeading = max(maxLeading,leading)
!
! self.textWidth = int(maxWidth+maxLeading) # The pixel width of text
inside a widget
! self.textHeight = int(maxHeight+maxDescent) # The pixel height of text
inside a widget
! self.widgetWidth = self.textWidth # The pixel width of a 1
char widget (for things like buttons)
! self.widgetHeight = self.textHeight + 3 # The pixel height of a 1
char widget (for things like buttons)
#
# Close dummy window so app doesn't hang when all other windows closed
#
! #dummyWindow.Close()
#############################################################################
--- 68,133 ----
# All UIs must provide this class
#
class GFUserInterface(commonToolkit.GFUserInterface):
+
+ _WidgetToGFObj = {}
+ _WidgetToUIObj = {}
+
def __init__(self, eventController, disableSplash = None):
commonToolkit.GFUserInterface.__init__(self,eventController,disableSplash)
! # self._disabledColour = gtk.gdk.color_parse("light_grey")
def initialize(self):
################################################################
# GTK Specifics
################################################################
#
# SplashScreen
#
if not self._disableSplash:
! self.splash = UISplashScreen()
! self.splash.Show()
! gtk.timeout_add(1500,lambda splash: splash.destroy(),self.splash)
#
! # Set default form font
#
! if gConfig('fixedWidthFont'):
! fontname = 'monospace %s' % gConfig('pointSize')
! else:
! fontname = 'bitstream vera %s' % gConfig('pointSize')
!
! self.mono_font = pango.FontDescription(fontname)
#
! # Create a dummy window used to compute sizes
! #
! dummyWindow = gtk.Window()
! dummyWindow.modify_font(self.mono_font)
!
! p_c=dummyWindow.get_pango_context()
! p_m=p_c.get_metrics(self.mono_font,
! pango.pango_language_from_string('english'))
!
! # The pixel width of text inside a widget
! self.textWidth = int (p_m.get_approximate_char_width() / PANGO_SCALE)
!
! # The pixel height of text inside a widget
! self.textHeight = int (( p_m.get_ascent() + p_m.get_descent()) \
! / PANGO_SCALE * 1.3)
!
! # 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()
#############################################################################
***************
*** 139,150 ****
# Tells the application to close it's main window
#
def _exit(self,formName):
! exitApp = 1
for child in self._children:
if child._form.name == formName:
child.mainWindow.hide()
! #exitApp = exitApp and not child.mainWindow.visible
if exitApp:
for child in self._children:
--- 144,156 ----
# Tells the application to close it's main window
#
def _exit(self,formName):
! exitApp = 1
for child in self._children:
if child._form.name == formName:
child.mainWindow.hide()
+ child._visible=0
! exitApp = exitApp and not child._visible
if exitApp:
for child in self._children:
***************
*** 152,158 ****
gtk.main_quit()
def _beep(self):
- # wxBell()
pass
#############################################################################
--- 158,163 ----
***************
*** 170,181 ****
#
def mainLoop(self):
global __gtk_mainloop
try:
if __gtk_mainloop==None:
__gtk_mainloop= 1
gtk.main()
except:
! __gtk_mainloop= 1
gtk.main()
--- 175,187 ----
#
def mainLoop(self):
global __gtk_mainloop
+
try:
if __gtk_mainloop==None:
__gtk_mainloop= 1
gtk.main()
except:
! __gtk_mainloop = 1
gtk.main()
***************
*** 197,210 ****
# interact with interface (e.g., while waiting for a query or a commit)
#
def beginWait (self, event):
! self.cursor= gtk.gdk.Cursor(gtk.gdk.WATCH)
GDebug.printMesg(2, "i am in beginWait")
#
# Called whenever forms leaves a "wait" state
#
def endWait (self, event):
! self.cursor= gtk.gdk.Cursor(gtk.gdk.WATCH)
GDebug.printMesg(2, "i am in endWait")
--- 203,219 ----
# interact with interface (e.g., while waiting for a query or a commit)
#
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")
#
# 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")
***************
*** 216,222 ****
# clipboard.
#
def getClipboardContents(self, event):
!
if wxTheClipboard.Open():
data = wxTextDataObject()
success = wxTheClipboard.GetData(data)
--- 225,231 ----
# clipboard.
#
def getClipboardContents(self, event):
! return
if wxTheClipboard.Open():
data = wxTextDataObject()
success = wxTheClipboard.GetData(data)
***************
*** 236,242 ****
def setClipboardContents(self, event):
!
GDebug.printMesg(5,"Setting clipboard '%s'" % event.text)
if wxTheClipboard.Open():
--- 245,251 ----
def setClipboardContents(self, event):
! return
GDebug.printMesg(5,"Setting clipboard '%s'" % event.text)
if wxTheClipboard.Open():
***************
*** 269,272 ****
self.dispatchEvent('requestEXIT',_form=self._form)
else:
event.object.Destroy()
- # wxExit() TODO: Try and work this into navigator or here if it still
hangs
--- 278,280 ----
Index: gnue/forms/src/uidrivers/gtk2/common.py
diff -c gnue/forms/src/uidrivers/gtk2/common.py:1.1
gnue/forms/src/uidrivers/gtk2/common.py:1.2
*** gnue/forms/src/uidrivers/gtk2/common.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/common.py Mon May 19 20:06:35 2003
***************
*** 1,43 ****
- import string
- import gtk
- from gnue.common import events
-
- # Finishing creation of dictionary for language font encodings
- ## encodings = {
- ## 'iso8859-1': wxFONTENCODING_ISO8859_1,
- ## 'iso8859-2': wxFONTENCODING_ISO8859_2,
- ## 'iso8859-3': wxFONTENCODING_ISO8859_3,
- ## 'iso8859-4': wxFONTENCODING_ISO8859_4,
- ## 'iso8859-5': wxFONTENCODING_ISO8859_5,
- ## 'iso8859-6': wxFONTENCODING_ISO8859_6,
- ## 'iso8859-7': wxFONTENCODING_ISO8859_7,
- ## 'iso8859-8': wxFONTENCODING_ISO8859_8,
- ## 'iso8859-9': wxFONTENCODING_ISO8859_9,
- ## 'iso8859-10': wxFONTENCODING_ISO8859_10,
- ## 'iso8859-11': wxFONTENCODING_ISO8859_11,
- ## 'iso8859-12': wxFONTENCODING_ISO8859_12,
- ## 'iso8859-13': wxFONTENCODING_ISO8859_13,
- ## 'iso8859-14': wxFONTENCODING_ISO8859_14,
- ## 'iso8859-15': wxFONTENCODING_ISO8859_15,
- ## 'koi8': wxFONTENCODING_KOI8,
- ## 'koi8-r': wxFONTENCODING_KOI8,
- ## 'cp1250': wxFONTENCODING_CP1250,
- ## 'cp1251': wxFONTENCODING_CP1251,
- ## 'cp1252': wxFONTENCODING_CP1252
- ## }
-
! #
! # Little global helper routine to set font according to options
! #
! # TODO: Not completed
! #
! def initFont(widget, affectsLayout=1):
! if int(gConfigForms('fixedWidthFont')):
!
widget.SetFont(wxFont(int(gConfigForms('pointSize')),wxMODERN,wxNORMAL,\
!
wxNORMAL,FALSE,'',encodings[gConfig('textEncoding')]))
!
#####################################################################
##
--- 1,10 ----
! import string
! import gtk,pango
! from gnue.common import events
!
! PANGO_SCALE = 1024 # where can I get that definition from?
#####################################################################
##
***************
*** 46,117 ****
#####################################################################
def _setDefaultEventHandlers(newWidget, eventHandler, initialize, uiDriver):
- return
if initialize:
! # TODO: this should use one instance
! newWidget.PushEventHandler(mouseEvtHandler(eventHandler,uiDriver))
! newWidget.PushEventHandler(keyboardEvtHandler(eventHandler,uiDriver))
! #newWidget.add_events() or set_events()
! #or just connect()
! # or use an EventBox
!
!
!
! class uiBaseEvtHandler: # (wxEvtHandler):
! def __init__(self,eventList,eventProcessor, uiDriver):
! wxEvtHandler.__init__(self)
! self._eventProcessor = eventProcessor
! self._uiDriver = uiDriver
! for eventType in eventList:
! self.Connect(-1, -1, eventType,self._processEvent)
!
- def _processEvent(self,event):
- GDebug.printMesg(0,"uiBaseEvtHandler _processEvent was called?!?")
-
- #
- # mouseEvtHandler
- #
- # Traps most mouse events and translates them into
- # GNUe events passed back to the form
- #
- class mouseEvtHandler(uiBaseEvtHandler):
- def __init__(self,eventProcessor, uiDriver):
- eventList = [wxEVT_LEFT_DOWN]
- uiBaseEvtHandler.__init__(self, eventList, eventProcessor, uiDriver)
-
- #
- # The putzing about with the event timestamp is to
- # allow us to process mouse click events twice.
- # The mouse handler is called before the cursor
- # position is updated so GetInsertionPoint returns
- # the position from the widget losing focus.
- # setting the timestamp to zero is a flag to prevent
- # infinate loops and allow us to avoid process that does
- # not need done twice.
-
- def _processEvent(self,event):
- object = event.XXXX
-
- id = object.GetId()
- gfObject = self._uiDriver._IdToGFObj[id]
- screenWidget = self._uiDriver._IdToTkObj[id]
- count = self._uiDriver._IdToUIObj[id].widgets.index(screenWidget)
-
- if event.GetTimestamp():
- self._eventProcessor('requestFOCUS',gfObject,_form=gfObject._form)
- self._eventProcessor('requestJUMPRECORD',count -
gfObject._visibleIndex,_form=gfObject._form)
-
- if isinstance(screenWidget,wxTextCtrl):
- event.SetTimestamp(0)
- self.AddPendingEvent(event)
-
- else:
- textObject= wxPyTypeCast(object, 'wxTextCtrl')
- cursorPosition = textObject.GetInsertionPoint()
-
self._eventProcessor('requestCURSORMOVE',position=cursorPosition,_form=gfObject._form)
-
- event.Skip()
#
--- 13,34 ----
#####################################################################
def _setDefaultEventHandlers(newWidget, eventHandler, initialize, uiDriver):
if initialize:
! # care for focus-in-eventfocus-out-event etc.?
! # need to set event MASK with newWidget.add_events() ?
! newWidget.connect("key-press-event", _keyPressHandler,\
! uiDriver, eventHandler)
!
! # Just care for focus in events, because focus out events
! # (user switches to other applications are irrelevant for us
! ## newWidget.connect("focus-in-event", _focusInHandler,\
! ## uiDriver, eventHandler)
! ## newWidget.connect("focus-out-event", _focusOutHandler,\
! ## uiDriver, eventHandler)
! newWidget.connect("button-press-event", _buttonPressHandler,\
! uiDriver, eventHandler)
! return
#
***************
*** 120,150 ****
# Traps most keypress events and translates them into
# GNUe events passed back to the form
#
- # Note: wxEVT_KEY_DOWN event seems to only return uppercase chars so
- # i don't trap it.
- #
-
- class keyboardEvtHandler(uiBaseEvtHandler):
- def __init__(self, eventProcessor, uiDriver):
- eventList = [wxEVT_CHAR]
- uiBaseEvtHandler.__init__(self, eventList, eventProcessor, uiDriver)
-
- def _processEvent(self,event):
action = None
! # hack for swig shortcomming needed by wxPython 2.2.x (2.3 does not need
this)
! # compute the location of the character in the widget
! object = self._uiDriver._IdToGFObj[event.XXX.GetId()]
! keycode = event.KeyCode()
#
# Sigh... a hack for using <enter> in multiline entries
#
! if keycode == 13 and \
! not event.ShiftDown() and \
! not event.ControlDown() and \
! not event.AltDown() and \
int (gConfigForms('enterIsNewLine')) and \
(hasattr(object,'Char__height') and object.Char__height) > 1:
--- 37,63 ----
# Traps most keypress events and translates them into
# GNUe events passed back to the form
#
+ 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 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
! object = uiDriver._WidgetToGFObj[widget]
#
# 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:
***************
*** 158,166 ****
#
command = GFKeyMapper.KeyMapper.getEvent(
keycode,
! event.ShiftDown(),
! event.ControlDown(),
! event.AltDown())
if command == 'JUMPRECORD':
global _PROMPTFORRECORD
--- 71,79 ----
#
command = GFKeyMapper.KeyMapper.getEvent(
keycode,
! isShift,
! isCtrl,
! isMod1)
if command == 'JUMPRECORD':
global _PROMPTFORRECORD
***************
*** 179,190 ****
elif object.style == 'checkbox' and object._type == 'GFEntry':
# <space> <=> <click>
! if keycode == 32:
action = events.Event('requestTOGGLECHKBOX')
else:
# maybe some background error message here
pass
! else:
try:
char = chr(keycode)
if char in string.printable or char == "\n" or \
--- 92,103 ----
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 \
***************
*** 199,212 ****
# Add the object's _form to the outgoing event
# rather than every event in the function
action.__dict__.update({'_form':object._form})
! self._eventProcessor(action)
!
#####################################################################
##
## Keymapper Support
##
#####################################################################
from gnue.forms import GFKeyMapper
from gnue.forms.GFKeyMapper import vk
--- 112,189 ----
# 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
! #
! # TODO: fix focus change events raised by page change
! # through clicking on notebook tabs
! def _focusInHandler(widget, event, uiDriver, eventHandler):
! print "focus in: widget",widget
! object = uiDriver._WidgetToGFObj[widget]
! eventHandler('requestFOCUS',object,_form=object._form)
! # return gtk.TRUE
! def _focusOutHandler(widget, event, uiDriver, eventHandler):
! print "focus out: widget",widget
! # return gtk.TRUE # can make gtk.application segfault
!
! 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
!
! object = uiDriver._WidgetToGFObj[widget]
!
! #
! # 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
##
#####################################################################
+
+ # TODO: Check if we can/want to take over global key maps (like gnome keymap)
+
from gnue.forms import GFKeyMapper
from gnue.forms.GFKeyMapper import vk
Index: gnue/forms/src/uidrivers/gtk2/widgets/_base.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/_base.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/_base.py Mon May 19 20:06:35 2003
***************
*** 58,77 ****
# Functions limited to the gtk2 driver
#
def _addToCrossRef(self, widget,gfobject, uiobject):
! #id = widget.GetId()
! id=0
! self._uiDriver._IdToTkObj[id]=widget
! self._uiDriver._IdToGFObj[id]=gfobject
! self._uiDriver._IdToUIObj[id]=uiobject
#widget.__origBackgroundColor = widget.GetBackgroundColour()
def _deleteFromCrossRef(self, widget, object):
- #id = widget.GetId()
- id=0
try:
! del self._uiDriver._IdToTkObj[id]
! del self._uiDriver._IdToGFObj[id]
! del self._uiDriver._IdToUIObj[id]
except:
pass
--- 58,72 ----
# Functions limited to the gtk2 driver
#
def _addToCrossRef(self, widget,gfobject, uiobject):
! self._uiDriver._WidgetToGFObj[widget]=gfobject
! self._uiDriver._WidgetToUIObj[widget]=uiobject
#widget.__origBackgroundColor = widget.GetBackgroundColour()
def _deleteFromCrossRef(self, widget, object):
try:
! #del self._uiDriver._WidgetToTkObj[widget]
! del self._uiDriver._WidgetToGFObj[widget]
! del self._uiDriver._WidgetToUIObj[widget]
except:
pass
***************
*** 107,161 ****
def setValue(self, value, index=0, enabled=1):
! # These must be here or dropdown style controls
! # will get events they shouldn't and break.
! #$self.widgets[index].SetEvtHandlerEnabled(FALSE
! #$print self.widgets[index].get_name()
! #$print value
! ## widget = self.widgets[index]
! ## widget.SetEvtHandlerEnabled(FALSE)
! if self.widgets[index].get_name()=='GtkCombo':
! self.widgets[index].entry.set_text(value)
! elif self.widgets[index].get_name()=='GtkTextView':
! self.widgets[index].get_buffer().set_text(value)
! elif self.widgets[index].get_name()=='GtkCheckButton':
! self.widgets[index].set_active(value)
else:
! self.widgets[index].set_text(value)
!
! ## # Check if foreign key changed
! ## object = self._uiDriver._IdToGFObj[widget.GetId()]
! ## try:
! ## if object.style == "dropdown" and \
! ## not object._field._allowedValues == widget._origAllowedValues:
! ## try:
! ## # Not in gtk2 2.2.x
! ## widget.Freeze()
! ## except AttributeError:
! ## pass
! ## widget._origAllowedValues = object._field._allowedValues
! ## widget.Clear()
! ## for value in object._field._allowedValuesDescr:
! ## widget.Append(value)
! ## widget.SetValue("")
! ## try:
! ## # Not in wx 2.2.x
! ## widget.Thaw()
! ## except AttributeError:
! ## pass
! ## except AttributeError:
! ## pass
!
! ## widget.SetValue(value)
! ## widget.Enable(enabled)
! ## widget.SetEvtHandlerEnabled(TRUE)
! ## if enabled:
! ## widget.SetBackgroundColour(widget.__origBackgroundColor)
! ## else:
! ## widget.SetBackgroundColour(self._uiDriver._disabledColour)
! ## widget.Refresh()
def setCursorPosition(self, position, index=0):
try:
--- 102,152 ----
def setValue(self, value, index=0, enabled=1):
! widget = self.widgets[index]
!
! if widget.get_name()=='GtkCombo':
! # Check if foreign key changed
! object = self._uiDriver._WidgetToGFObj[widget]
! try:
! if object.style == "dropdown" and \
! not object._field._allowedValues == widget._origAllowedValues:
! # These must be here or dropdown style controls
! # will get events they shouldn't and break.
! ## widget.SetEvtHandlerEnabled(FALSE)
! try:
! # Not in gtk2 2.2.x
! widget.Freeze()
! except AttributeError:
! pass
! widget._origAllowedValues = object._field._allowedValues
! widget.Clear()
! for value in object._field._allowedValuesDescr:
! widget.Append(value)
! widget.SetValue("")
! try:
! # Not in wx 2.2.x
! widget.Thaw()
! except AttributeError:
! pass
! ## widget.SetEvtHandlerEnabled(TRUE)
!
! except AttributeError:
! pass
! except:
! pass
! widget.entry.set_text(value)
! elif widget.get_name()=='GtkTextView':
! widget.get_buffer().set_text(value)
! elif widget.get_name()=='GtkCheckButton':
! widget.set_active(value)
else:
! widget.set_text(value)
+ if enabled:
+ widget.set_sensitive(1)
+ else:
+ widget.set_sensitive(0)
def setCursorPosition(self, position, index=0):
try:
***************
*** 165,190 ****
def setSelectedArea(self, selection1, selection2, index=0):
try:
! # TODO: use gtk function
! self.widgets[index].SetSelection(selection1, selection2)
except (AttributeError, TypeError):
pass # For label-style & dropdown entries
def createWidget(self, event, spacer):
newWidget = self._createWidget(event, spacer)
! #initFont(newWidget) TODO: fix initFont
if event.initialize:
self._addToCrossRef(newWidget,event.object,self)
return newWidget
def cleanup(self, object):
for widget in self.widgets[:]:
- id = widget.GetId()
try:
! del self._uiDriver._IdToTkObj[id]
! del self._uiDriver._IdToGFObj[id]
! del self._uiDriver._IdToUIObj[id]
except KeyError:
pass
self.widgets.pop(0)
--- 156,181 ----
def setSelectedArea(self, selection1, selection2, index=0):
try:
! 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)
Index: gnue/forms/src/uidrivers/gtk2/widgets/button.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/button.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/button.py Mon May 19 20:06:35 2003
***************
*** 42,65 ****
object = event.object
newWidget = gtk.Button(str(object.label))
! newWidget.set_size_request(object.Char__x * event.widgetWidth,
! (object.Char__y + spacer) * event.widgetHeight)
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)
! # _setDefaultEventHandlers(newWidget, event.eventHandler,
event.initialize, self._uiDriver)
return newWidget
! def buttonHandler(self,event,newWidget):
action = None
! gfObject = self._uiDriver._WidgetToGFObj[newWidget]
! # id = object.GetId()
! # gfObject = self._uiDriver._IdToGFObj[id]
action = events.Event('buttonActivated',gfObject)
self._eventHandler(action)
configuration = {
'baseClass' : UIButton,
--- 42,67 ----
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)
!
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)
! _setDefaultEventHandlers(newWidget, event.eventHandler, \
! event.initialize, self._uiDriver)
return newWidget
! def buttonHandler(self,event,widget):
action = None
! gfObject = self._uiDriver._WidgetToGFObj[widget]
action = events.Event('buttonActivated',gfObject)
self._eventHandler(action)
+
configuration = {
'baseClass' : UIButton,
Index: gnue/forms/src/uidrivers/gtk2/widgets/entry.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/entry.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/entry.py Mon May 19 20:06:35 2003
***************
*** 19,28 ****
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # UIwxpython.py
#
# DESCRIPTION:
! # A wxPython based user interface driver for GNUe forms.
#
# NOTES:
#
--- 19,28 ----
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # gtk2/widgets/entry.py
#
# DESCRIPTION:
! # A part of the gtk2 based user interface driver for GNUe forms.
#
# NOTES:
#
***************
*** 79,84 ****
--- 79,85 ----
textBuffer=gtk.TextBuffer(textTagTable)
newWidget=gtk.TextView()
newWidget.set_buffer(textBuffer)
+ newWidget.set_wrap_mode(gtk.WRAP_CHAR)
textBuffer.set_text(value)
viewport=gtk.ScrolledWindow()
viewport.add_with_viewport(newWidget)
***************
*** 99,134 ****
event.container.show_all()
return newWidget
def comboHandler(self, combo_list, list_child, combo):
selection = combo_list.child_position(list_child)
selected_text = self.choices[selection]
! #object = _eventObjTowxWindow(event)
! #id = object.GetId()
! #selection = event.GetSelection()
! gfObject = self._uiDriver._IdToGFObj[id]
eventdata = [gfObject, selected_text]
action = events.Event('requestREPLACEVALUE',object=gfObject,
index=selection, text=selected_text,
_form=gfObject._form)
self._eventHandler(action)
! #$ to ensure default handler does not get called after this
! return 1
! def checkboxHandler(self,event,newWidget):
buttonStatus=newWidget.get_active()
- # if event.GetEventType() == wxEVT_COMMAND_CHECKBOX_CLICKED:
GDebug.printMesg(1, "buttonStatus: " + str(buttonStatus))
! # TODO get object/ ID etc. bzw. do we need the ID?
! id = object.GetId()
!
! gfObject = self._uiDriver._IdToGFObj[id]
eventdata = [gfObject, buttonStatus]
action = events.Event('requestTOGGLECHKBOX', _form=gfObject._form)
self._eventHandler(action)
return 1
configuration = {
'baseClass' : UIEntry,
--- 100,146 ----
event.container.show_all()
return newWidget
+ def setCursorPosition(self, position, index=0):
+ widget=self.widgets[index]
+ if isinstance(widget,gtk.Entry):
+ widget.set_position(position)
+ elif isinstance(widget,gtk.TextView):
+ buffer = widget.get_buffer()
+ iter = buffer.get_iter_at_offset(position)
+ buffer.place_cursor(iter)
+
+ 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 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)
self._eventHandler(action)
!
! return gtk.TRUE
! def checkboxHandler(self,event,widget):
buttonStatus=newWidget.get_active()
GDebug.printMesg(1, "buttonStatus: " + str(buttonStatus))
! gfObject = self._uiDriver._WidgetToGFObj[widget]
eventdata = [gfObject, buttonStatus]
action = events.Event('requestTOGGLECHKBOX', _form=gfObject._form)
self._eventHandler(action)
return 1
+
+
+
configuration = {
'baseClass' : UIEntry,
Index: gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py:1.1 Sat May 17
10:47:42 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/form/widget.py Mon May 19
20:06:35 2003
***************
*** 85,102 ****
0, 0)
self.createStatusBar()
! else:
! self.mainWindow = gtk.Dialog()
! self.containerFrame = self.mainWindow.get_child()
!
self.containerFrame.set_size_request(formWidth*self._uiDriver.widgetWidth,\
! formHeight*self._uiDriver.widgetHeight)
!
self.mainWindow.connect('delete_event', self.windowExitEvent)
- # self.mainWindow.set_default_size(800,800)
self.mainWindow.set_title(str(self._form.title))
! # initFont(self.mainWindow,1)
!
# The window in which pages will be rendered
if object._layout.tabbed:
--- 85,107 ----
0, 0)
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)
!
self.mainWindow.connect('delete_event', self.windowExitEvent)
self.mainWindow.set_title(str(self._form.title))
! # TODO: add icon for window
! # self.mainWindow.set_icon(...)
# The window in which pages will be rendered
if object._layout.tabbed:
***************
*** 118,123 ****
--- 123,129 ----
self._eventHandler = event.eventHandler
self._wrapper.finalize()
+ self._visible = 0
return newWidget
***************
*** 129,135 ****
self.statusBar4 = gtk.Statusbar()
self.statusBar5 = gtk.Statusbar()
- #$initFont(self.statusBar,0)
status_bar_table=gtk.Table(1,5)
status_bar_table.attach_defaults(self.statusBar1,0,1,0,1)
status_bar_table.attach_defaults(self.statusBar2,1,2,0,1)
--- 135,140 ----
***************
*** 159,165 ****
else:
object = _eventObjTowxWindow(event)
object.Destroy()
- # wxExit() TODO: Try and work this into navigator or here if it still
hangs
#
--- 164,169 ----
***************
*** 223,239 ****
def show(self):
- self.containerFrame.show()
self.mainWindow.show_all()
def hide(self):
self.containerFrame.hide()
self.mainWindow.hide()
def showModal(self):
! #self.containerFrame.ShowModal()
! self.show()
! # self.mainWindow.ShowModal()
#############################################################################
#
--- 227,244 ----
def show(self):
self.mainWindow.show_all()
+ self._visible = 1
def hide(self):
self.containerFrame.hide()
self.mainWindow.hide()
+ self._visible = 0
def showModal(self):
! self.mainWindow.show_all()
! self.mainWindow.set_modal(gtk.TRUE)
! self._visible = 1
#############################################################################
#
Index: gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py:1.1 Sat May 17
10:47:42 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/form/wrappers.py Mon May 19
20:06:35 2003
***************
*** 39,177 ****
self.uiform = uiform
self.frame = frame = uiform.containerFrame
self.form = form = uiform._form
! self.margin = 6
! ## if sys.platform == 'win32':
! ## pos = wxPoint(0,35)
! ## else:
! ## pos = wxDefaultPosition
gtk.ScrolledWindow.__init__(self)
self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
! self.set_border_width(self.margin)
self.frame.add(self)
- self.spacerpane = self
- # EVT_SIZE(self.frame, self.OnFrameSize)
formWidth = int(form._layout.Char__width)
formHeight = int(form._layout.Char__height)
! self.layoutSize = (formWidth*uiform._uiDriver.widgetWidth,
! formHeight*uiform._uiDriver.widgetHeight)
self._fitted = 0
self._pageList = []
def finalize(self):
! # This is the initial panel window setup during init
! # not a wxPanel set per page right after this
! # w,h = self.pane.GetSizeTuple()
! # self.spacerpane.SetSize(wxSize(w+self.margin*2, h+self.margin*2))
! # self.spacerpane.SetPosition(wxPoint(self.margin, self.margin))
! try:
! self.SetVirtualSize(self.spacerpane.GetSize())
! except AttributeError:
! pass # Yes, it is more wx2.2 goodness!!
! # self.Show(1)
! # self.fixScrollbars()
!
!
! def OnFrameSize(self, event):
! self.SetSize(self.frame.GetClientSize())
! self.fixScrollbars()
!
! def fixScrollbars(self):
! x1, y1 = self.frame.GetClientSizeTuple()
! x2, y2 = self.spacerpane.GetSizeTuple()
! if x1 < x2 or y1 < y2:
! self.SetScrollbars(5, 5, x2, y2)
! else:
! self.SetScrollbars(0, 0, 0, 0)
!
!
#
# Notebook pages
#
! class TabbedWrapper(ScrollableWrapper):
! def __init__(self, *args, **parms):
! ScrollableWrapper.__init__(self, *args, **parms)
! self.pane = notebook = gtk.Notebook()
! self.spacerpane.add_with_viewport(notebook)
try:
tabstyle = _tabStyles[self.form._layout.tabbed]
! notebook.set_tab_pos(tabstyle)
except:
pass
! notebook.connect('switch-page', self.notebookTabHandler, self.pane)
! notebook.show_all()
! #self.pane = notebook = wxNotebook(self.spacerpane,-1, #wxPoint(6,6),
! # style=tabstyle)
! #self.notebooksizer = sizer1 = wxNotebookSizer(notebook)
! #sizer2 = wxBoxSizer(wxVERTICAL)
! #sizer2.Add(self.notebooksizer)
! #self.frame.SetAutoLayout(1)
! #self.spacerpane.SetSizer(sizer2)
- #notebook.Show(1)
self.__notebookLoopTrap = 0
- #EVT_NOTEBOOK_PAGE_CHANGING(notebook, notebook.GetId(),
self.notebookTabHandler)
def createPage(self, object):
! #sizer = wxBoxSizer(wxVERTICAL)
!
! newWidget = gtk.Fixed() #wxPanel(self.pane, -1, size=self.layoutSize)
! #sizer.Add(newWidget, 0, wxCENTER)
! #newWidget.SetAutoLayout(1)
! #newWidget.SetSizer(sizer)
tab_label=gtk.Label(object.name)
- self.pane.append_page(newWidget, tab_label)
! self._pageList.append(newWidget)
! # TODO self.pane.AddPage(newWidget,hasattr(object,'caption') and
object.caption or object.name)
! #self.pane.SetClientSize(self.layoutSize)
! #self.fit()
! return newWidget
! def fit(self):
! if self._fitted: return
! self.notebooksizer.Layout()
! self.notebooksizer.SetSizeHints(self.pane)
! self.SetClientSize(self.layoutSize)
! if not USING_WX_22:
! w,h = self.pane.GetSizeTuple()
! w += self.margin*2
! h += self.margin*2
! self.spacerpane.SetSize(wxSize(w,h))
! self.SetSize(self.spacerpane.GetSize())
! else:
! # TODO: How fscking sad to have to do this.
! # TODO: but, I can't get wx 2.2 to cooperate
! w,h = self.GetClientSizeTuple()
! self.spacerpane.SetSize(wxSize(w+20, h+50))
! self.SetSize(wxSize(w+20, h+50))
! self.frame.SetClientSize(self.GetSize())
! self._fitted = 1
! def notebookTabHandler(self,notebook,notebookpage,pagenumber,userdata):
! action = None
! if self.__notebookLoopTrap == 0:
! action = events.Event('requestPAGE',pagenumber, _form=self.form)
! self.__notebookLoopTrap = 1
! else:
! self.__notebookLoopTrap = 0
! if action:
self.uiform._eventHandler(action)
def setPage(self, page):
! pageId = self._pageList.index(page)
! # self.pane.SetSelection(pageId)
!
! # self.visiblePage = self._formToUI[event.data][0]
! self.visiblePage.show_all()
--- 39,134 ----
self.uiform = uiform
self.frame = frame = uiform.containerFrame
self.form = form = uiform._form
! 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)
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._fitted = 0
self._pageList = []
def finalize(self):
! pass
#
# Notebook pages
#
! class TabbedWrapper(gtk.Notebook):
! def __init__(self, uiform):
! # ScrollableWrapper.__init__(self, *args, **parms)
! self.uiform = uiform
! self.frame = frame = uiform.containerFrame
! self.pane = self
! self.margin = 2
! gtk.Notebook.__init__(self)
! #self.set_border_width(self.margin)
try:
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.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._oldpage=0
! self._pageList = []
self.__notebookLoopTrap = 0
def createPage(self, object):
! swin = gtk.ScrolledWindow()
! newWidget = gtk.Fixed()
tab_label=gtk.Label(object.name)
! swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
! swin.add_with_viewport(newWidget)
! self.append_page(swin, tab_label)
! self._pageList.append(newWidget)
! # newWidget.set_size_request(self.layoutXSize,self.layoutYSize)
+ return newWidget
! def finalize(self):
! self.pane.set_size_request(self.layoutXSize,self.layoutYSize)
!
! def notebookTabHandler(self,notebook,notebookpage,page_number):
! # print "change %s (%s) to %s " % (self._oldpage,
! # self.get_current_page(),
! # page_number)
! if self._oldpage!=page_number:
! action = events.Event('requestPAGE',page_number, _form=self.form)
self.uiform._eventHandler(action)
+ # care for not 'vetoed' page changes
+ # TODO: check why vetoes don't work
+ if self._oldpage!=page_number:
+ self.set_current_page(self._oldpage)
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)
***************
*** 182,190 ****
def __init__(self, *args, **parms):
ScrollableWrapper.__init__(self, *args, **parms)
self.pane = gtk.Fixed()
! self.spacerpane.add_with_viewport(self.pane)
- # self.pane.set size=self.layoutSize
self.pane.show_all()
def createPage(self, object):
--- 139,146 ----
def __init__(self, *args, **parms):
ScrollableWrapper.__init__(self, *args, **parms)
self.pane = gtk.Fixed()
! self.add_with_viewport(self.pane)
self.pane.show_all()
def createPage(self, object):
***************
*** 199,216 ****
newWidget.show(0)
self._pageList.append(newWidget)
- #self.fit()
return newWidget
!
! def fit(self):
! if self._fitted: return
! self.pane.SetClientSize(self.layoutSize)
! self.pane.Fit()
! self.SetClientSize(self.pane.GetSize())
! self.SetSize(self.pane.GetSize())
! self.frame.Fit()
! self._fitted = 1
!
def setPage(self, page):
for p in self._pageList:
if p != page:
--- 155,162 ----
newWidget.show(0)
self._pageList.append(newWidget)
return newWidget
!
def setPage(self, page):
for p in self._pageList:
if p != page:
Index: gnue/forms/src/uidrivers/gtk2/widgets/image.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/image.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/image.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/image.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/image.py Mon May 19 20:06:35 2003
***************
*** 19,35 ****
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # UIwxpython.py
#
# DESCRIPTION:
! # A wxPython based user interface driver for GNUe forms.
#
# NOTES:
#
! from wxPython.wx import *
! from gnue.forms.uidrivers.wx.widgets._base import UIHelper
! import Image
#
# UIImage
--- 19,34 ----
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # gtk2/widgets/image.py
#
# DESCRIPTION:
! # A part of a gtk2 based user interface driver for GNUe forms.
#
# NOTES:
#
! import gtk
! from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
#
# UIImage
***************
*** 40,111 ****
def _createWidget(self, event, spacer):
object = event.object
! #im = Image.open("/home/jamest/cvs/ajrs/imaging/src/testfoo.png")
! #wxImg = wxEmptyImage(im.size[0],im.size[1])
! #wxImg.SetData(im.tostring())
! #png = wxImg.ConvertToBitmap()
png=wxEmptyBitmap(1,1)
! self.pane = wxScrolledWindow(event.container, -1,
! wxPoint(object.Char__x*event.widgetWidth,
!
(object.Char__y+spacer+(spacer*object._gap))*event.widgetHeight),
! wxSize(self.itemWidth,self.itemHeight))
! EVT_SIZE(self.pane,self.OnFrameSize)
! EVT_PAINT(self.pane, self.onPaint)
!
! imageWidth = png.GetWidth()
! imageHeight = png.GetHeight()
! self.imageWindow = wxStaticBitmap(self.pane, -1, png,
! wxPoint(0,0),
#object.Char__x*event.widgetWidth,
!
#(object.Char__y+spacer+(spacer*object._gap))*event.widgetHeight),
! wxSize(imageWidth,imageHeight))
! #self.imageWindow = wxStaticBitmap(self.pane, -1, png,
! # wxPoint(object.Char__x*event.widgetWidth,
! #
(object.Char__y+spacer+(spacer*object._gap))*event.widgetHeight),
! # wxSize(self.itemWidth,self.itemHeight))
! self.fixScrollbars()
!
! return self.imageWindow
!
! def OnFrameSize(self, event):
! pass
! #self.pane.SetSize(self.pane.GetClientSize())
! #self.fixScrollbars()
!
! def onPaint(self,event):
! self.imageWindow.Refresh()
!
! def fixScrollbars(self):
! x1, y1 = self.pane.GetClientSizeTuple()
! x2, y2 = self.imageWindow.GetSizeTuple()
! if x1 < x2 or y1 < y2:
! self.pane.SetScrollbars(5, 5, x2/5, y2/5)
! else:
! self.pane.SetScrollbars(0, 0, 0, 0)
def setValue(self, value, index=0, enabled=1):
widget = self.widgets[index]
! widget.SetEvtHandlerEnabled(FALSE)
# Convert the PIL Image to a wxBitmap
! wxImg = wxEmptyImage(value.size[0],value.size[1])
! wxImg.SetData(value.convert("RGB").tostring())
! image = wxImg.ConvertToBitmap()
!
! # Resize the bitmap holder to match the image size
! # and fix the scrollbars
! imageWidth = image.GetWidth()
! imageHeight = image.GetHeight()
! widget.SetSize(wxSize(imageWidth,imageHeight))
! self.fixScrollbars()
!
! # Load the new image
! widget.SetBitmap(image)
!
! widget.Enable(enabled)
! widget.SetEvtHandlerEnabled(TRUE)
! widget.Refresh()
configuration = {
'baseClass' : UIImage,
--- 39,73 ----
def _createWidget(self, event, spacer):
object = event.object
!
! image = gtk.Image()
! # image.set_from_file(
png=wxEmptyBitmap(1,1)
! self.pane = gtk.ScrolledWindow()
!
! pane.add_with_viewport(image)
!
! pane.set_size_request(self.itemWidth, self.itemHeight)
+ event.container.put(pane, object.Char__x * event.widgetWidth,
+ (object.Char__y + spacer) * event.widgetHeight)
+
+ return self.image
+
def setValue(self, value, index=0, enabled=1):
widget = self.widgets[index]
!
! # widget.SetEvtHandlerEnabled(FALSE)
# Convert the PIL Image to a wxBitmap
! #wxImg = wxEmptyImage(value.size[0],value.size[1])
! #wxImg.SetData(value.convert("RGB").tostring())
! #image = wxImg.ConvertToBitmap()
! print "Not Implemented Yet"
!
! # widget.SetEvtHandlerEnabled(TRUE)
configuration = {
'baseClass' : UIImage,
Index: gnue/forms/src/uidrivers/gtk2/widgets/label.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/label.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/label.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/label.py:1.1 Sat May 17 10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/label.py Mon May 19 20:06:35 2003
***************
*** 37,44 ****
'fill' : gtk.JUSTIFY_FILL
}
-
-
#
# UILabel
#
--- 37,42 ----
***************
*** 54,60 ****
(object.Char__y + spacer + (spacer * object._gap))\
* event.widgetHeight)
newWidget.set_justify(_alignmentStyle[object.alignment])
- event.container.show_all() # ??
return newWidget
configuration = {
--- 52,57 ----
Index: gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py
diff -c gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py:1.1
gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py:1.2
*** gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py:1.1 Sat May 17
10:46:04 2003
--- gnue/forms/src/uidrivers/gtk2/widgets/scrollbar.py Mon May 19 20:06:35 2003
***************
*** 19,28 ****
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # UIwxpython.py
#
# DESCRIPTION:
! # A wxPython based user interface driver for GNUe forms.
#
# NOTES:
#
--- 19,28 ----
# Copyright 2000-2003 Free Software Foundation
#
# FILE:
! # gtk2/widgets/scrollbar.py
#
# DESCRIPTION:
! # A part of the gtk2 based user interface driver for GNUe forms.
#
# NOTES:
#
***************
*** 30,37 ****
from gnue.forms.uidrivers.gtk2.widgets._base import UIHelper
-
-
#
# UIScrollBar
#
--- 30,35 ----
***************
*** 42,60 ****
def _createWidget(self, event, spacer):
object = event.object
! #$print
object.Char__height*widgetHeight,(object.Char__y+spacer)*widgetHeight
! GDebug.printMesg(2, "size #1: " + str(object.Char__height *
event.widgetHeight) +
! ", " +str((object.Char__y + spacer) * event.widgetHeight))
adjustment = gtk.Adjustment(70,500,80,2,3,80)
newWidget = gtk.VScrollbar(adjustment)
newWidget.set_size_request(object.Char__width * event.widgetWidth,
! object.Char__height * event.widgetHeight)
event.container.put(newWidget,600,60)
! #$print object.Char__x*widgetWidth,(object.Char__y+spacer)*widgetHeight
! GDebug.printMesg(2, "size #2: " + str(object.Char__x * event.widgetWidth)
+
! ", " + str((object.Char__y + spacer) * event.widgetHeight))
! event.container.show_all()
! #$print "i am in UIScrollBar"
GDebug.printMesg(1, "i am in UIScrollBar")
return newWidget
--- 40,63 ----
def _createWidget(self, event, spacer):
object = event.object
! GDebug.printMesg(2, "size #1: %s,%s " % (str(object.Char__height *\
! event.widgetHeight),
! str((object.Char__y + spacer)* \
! event.widgetHeight)))
!
adjustment = gtk.Adjustment(70,500,80,2,3,80)
+
newWidget = gtk.VScrollbar(adjustment)
newWidget.set_size_request(object.Char__width * event.widgetWidth,
! object.Char__height * event.widgetHeight)
!
event.container.put(newWidget,600,60)
!
! GDebug.printMesg(2, "size #2: %s,%s " % (str(object.Char__x * \
! event.widgetWidth),\
! str((object.Char__y + spacer) * \
! event.widgetHeight)))
! #event.container.show_all()
GDebug.printMesg(1, "i am in UIScrollBar")
return newWidget
***************
*** 63,69 ****
wxPoint(object.Char__x*event.widgetWidth,(object.Char__y+spacer)*event.widgetHeight),
wxSize(object.Char__width*event.widgetWidth,object.Char__height*event.widgetHeight),
wxSB_VERTICAL)
- return newWidget
configuration = {
--- 66,71 ----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- gnue/forms/src/uidrivers/gtk2 MenuBar.py Splash...,
Jan Ischebeck <=