commit-gnue
[Top][All Lists]
Advanced

[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 ----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]