commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

r6783 - in trunk/gnue-forms/src/uidrivers/gtk2: . widgets


From: johannes
Subject: r6783 - in trunk/gnue-forms/src/uidrivers/gtk2: . widgets
Date: Tue, 7 Dec 2004 02:54:21 -0600 (CST)

Author: johannes
Date: 2004-12-07 02:54:20 -0600 (Tue, 07 Dec 2004)
New Revision: 6783

Modified:
   trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py
   trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
   trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
Log:
Added support for PyGTK 2.4.+


Modified: trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py      2004-12-07 08:51:47 UTC 
(rev 6782)
+++ trunk/gnue-forms/src/uidrivers/gtk2/ToolBar.py      2004-12-07 08:54:20 UTC 
(rev 6783)
@@ -53,6 +53,13 @@
     self.toolbar.show ()
     handlebox.show ()
 
+    self._useNewGTKAPI = gtk.pygtk_version >= (2, 4, 0)
+    if self._useNewGTKAPI:
+      # If we're using the new Toolbar-API turn off 'Overflow menus' and create
+      # a new tootip group
+      self.toolbar.set_show_arrow (False)
+      self.tooltips = gtk.Tooltips ()
+
     return handlebox
 
 
@@ -77,12 +84,30 @@
     icon = gtk.Image ()
     icon.set_from_file (iconloc)
 
-    if userAction.canToggle:
-      button = self.toolbar.append_element (gtk.TOOLBAR_CHILD_TOGGLEBUTTON,
-          None, label, toolTip, None, icon, self._toggleEvent, userAction)
+    # Create PyGTK 2.4.* style buttons
+    if self._useNewGTKAPI:
+      if userAction.canToggle:
+        button = gtk.ToggleToolButton ()
+        button.connect ('toggled', self._toggleEvent, userAction)
+      else:
+        button = gtk.ToolButton ()
+        button.connect ('clicked', self._buttonPress, userAction)
+
+      button.set_icon_widget (icon)
+      button.set_label (label)
+      button.set_tooltip (self.tooltips, toolTip, None)
+
+      self.toolbar.insert (button, -1)
+      
+    # just stick with PyGTK 2.2.*
     else:
-      button = self.toolbar.append_item (label, toolTip, None, icon,
-                                         self._buttonPress, userAction)
+      if userAction.canToggle:
+        button = self.toolbar.append_element (gtk.TOOLBAR_CHILD_TOGGLEBUTTON,
+            None, label, toolTip, None, icon, self._toggleEvent, userAction)
+      else:
+        button = self.toolbar.append_item (label, toolTip, None, icon,
+                                           self._buttonPress, userAction)
+        
     return button
 
 
@@ -115,7 +140,12 @@
   # ---------------------------------------------------------------------------
 
   def addSeparator (self):
-    self.toolbar.append_space ()
+
+    if self._useNewGTKAPI:
+      sep = gtk.SeparatorToolItem ()
+      self.toolbar.insert (sep, -1)
+    else:
+      self.toolbar.append_space ()
     
 
   # ---------------------------------------------------------------------------

Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py        2004-12-07 
08:51:47 UTC (rev 6782)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/_base.py        2004-12-07 
08:54:20 UTC (rev 6783)
@@ -41,6 +41,16 @@
   """
 
   # ---------------------------------------------------------------------------
+  # Create a new GTK2 widget
+  # ---------------------------------------------------------------------------
+
+  def __init__ (self, *args, **kwargs):
+
+    UIWidget.__init__ (self, *args, **kwargs)
+    self._useNewGTKAPI = gtk.pygtk_version >= (2, 4, 0)
+
+
+  # ---------------------------------------------------------------------------
   # Create a new GTK widget
   # ---------------------------------------------------------------------------
 
@@ -199,7 +209,13 @@
     widget = self.widgets [index]
     gDebug (1, "indexedFocus: %s [%s]" % (widget, index))
 
-    item    = isinstance (widget, gtk.Combo) and widget.entry or widget
+    isCombo = False
+    if self._useNewGTKAPI and isinstance (widget, gtk.ComboBoxEntry):
+      item = widget.child
+      isCombo = True
+    else:
+      isCombo = isinstance (widget, gtk.Combo)
+      item    = isCombo and widget.entry or widget
 
     self._blockHandler (item, '_focusHandler')
 
@@ -222,7 +238,7 @@
 
     # To avoid the automatic select-all in a combo box, we explicitly set the
     # selection to the current position only
-    if isinstance (widget, gtk.Combo):
+    if isCombo:
       pos = item.get_position ()
       item.select_region (pos, pos)
 
@@ -237,7 +253,10 @@
     for widget in self.widgets:
       gDebug (3, "Lose focus: %s" % widget)
 
-      item = isinstance (widget, gtk.Combo) and widget.entry or widget
+      if self._useNewGTKAPI and isinstance (widget, gtk.ComboBoxEntry):
+        item = widget.child
+      else:
+        item = isinstance (widget, gtk.Combo) and widget.entry or widget
 
       if hasattr (item, '_color'):
         item._setback (gtk.STATE_NORMAL, item._color)
@@ -245,6 +264,7 @@
       if isinstance (item, gtk.Entry):
         item.select_region (0,0)
 
+
   # ---------------------------------------------------------------------------
   # Set the value of a widget
   # ---------------------------------------------------------------------------
@@ -264,6 +284,7 @@
       value = unicode (value, gConfigForms ('textEncoding'))
 
 
+    # Once we change to PyGTK 2.4.* we can remove the gtk.Combo stuff
     if isinstance (widget, gtk.Combo):
       gfObject = self._uiDriver._WidgetToGFObj [widget]
 
@@ -280,8 +301,23 @@
       self._blockHandler (widget.entry, '_insert_handler', True)
       self._blockHandler (widget.entry, '_delete_handler', True)
 
+    elif self._useNewGTKAPI and isinstance (widget, gtk.ComboBoxEntry):
+      gfObject = self._uiDriver._WidgetToGFObj [widget]
 
+      # Check if list of allowed value (~= foreign keys, ~= dropdown content)
+      # changed
+      if gfObject.style == "dropdown":
+        self._updateChoices (widget, gfObject)
 
+      self._blockHandler (widget.child, '_insert_handler')
+      self._blockHandler (widget.child, '_delete_handler')
+
+      widget.child.set_text (value)
+
+      self._blockHandler (widget.child, '_insert_handler', True)
+      self._blockHandler (widget.child, '_delete_handler', True)
+
+
     elif isinstance (widget, gtk.CheckButton):
       self._blockHandler (widget, '_clickedHandler')
       widget.set_active (value)

Modified: trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py        2004-12-07 
08:51:47 UTC (rev 6782)
+++ trunk/gnue-forms/src/uidrivers/gtk2/widgets/entry.py        2004-12-07 
08:54:20 UTC (rev 6783)
@@ -39,7 +39,10 @@
     style    = gfObject.style
 
     if style == 'dropdown':
-      newWidget = self.__createDropDown (gfObject, event)
+      if self._useNewGTKAPI:
+        newWidget = self.__createDropDown (gfObject, event)
+      else:
+        newWidget = self.__createOldDropDown (gfObject, event)
 
     elif style == 'label':
       newWidget = self.__createLabel (gfObject, event)
@@ -65,7 +68,7 @@
   # Create a dropdown widget
   # ---------------------------------------------------------------------------
 
-  def __createDropDown (self, gfObject, event):
+  def __createOldDropDown (self, gfObject, event):
     newWidget = gtk.Combo ()
     maxLen = hasattr (gfObject, 'maxLength') and gfObject.maxLength or 0
     newWidget.entry.set_max_length (maxLen)
@@ -99,6 +102,47 @@
 
 
   # ---------------------------------------------------------------------------
+  #
+  # ---------------------------------------------------------------------------
+
+  def __createDropDown (self, gfObject, event):
+    """
+    """
+
+    # return self.__createOldDropDown (gfObject, event)
+    newWidget = gtk.combo_box_entry_new_text ()
+    maxLen = hasattr (gfObject, 'maxLength') and gfObject.maxLength or 0
+    newWidget.child.set_max_length (maxLen)
+    
+    newWidget._origAllowedValues = None
+    self._updateChoices (newWidget, gfObject)
+
+    # Enter does NOT open the popup list
+    # newWidget.set_activate (False)
+
+    newWidget.set_size_request (self.itemWidth, self.itemHeight)
+    event.container.put (newWidget, self.itemX, self.itemY)
+    newWidget.show ()
+
+    if event.initialize:
+      self._addDefaultEventHandler (newWidget)
+      self._addFocusHandler (newWidget.child, newWidget)
+      self._addDefaultEventHandler (newWidget.child, newWidget)
+
+      entry = newWidget.child
+      entry._insert_handler = entry.connect ('insert-text',
+                                             self.insertTextHandler,
+                                             gfObject)
+
+      entry._delete_handler = entry.connect ('delete-text',
+                                             self.deleteTextHandler,
+                                             gfObject)
+      entry.connect ('button-release-event', self._buttonRelease)
+
+    return newWidget
+
+
+  # ---------------------------------------------------------------------------
   # Create a label widget
   # ---------------------------------------------------------------------------
 
@@ -211,7 +255,10 @@
 
   def setCursorPosition (self, position, index = 0):
     widget = self.widgets [index]
-    entry  = isinstance (widget, gtk.Combo) and widget.entry or widget
+    if self.__isCombo (widget):
+      entry = isinstance (widget, gtk.Combo) and widget.entry or widget.child
+    else:
+      entry = widget
 
     gDebug (1, "setCursorPosition to %s in %s [%s] (%s)" % \
         (position, entry, index, widget))
@@ -249,10 +296,12 @@
       tBuffer.move_mark (insert, tBuffer.get_iter_at_offset (left))
       tBuffer.move_mark (selbound, tBuffer.get_iter_at_offset (right))
 
-    elif isinstance (widget, gtk.Combo):
-      widget.entry.select_region (selection1, selection2)
+    elif self.__isCombo (widget):
+      entry = isinstance (widget, gtk.Combo) and widget.entry or widget.child
+      entry.select_region (selection1, selection2)
 
 
+
   # ---------------------------------------------------------------------------
   # insert text into gtk.Entry widgets
   # ---------------------------------------------------------------------------
@@ -262,6 +311,11 @@
     gDebug (1, "insert gtk.Entry () '%s' at %d (%s) into %s" % \
                (newtext, widget.get_position (), pos, widget))
 
+    # Before we're going to change the field's value, make sure it has the
+    # focus on both sides (UI and GF)
+    if not widget.is_focus ():
+      self._request ('FOCUS', data = gfObject)
+
     text   = unicode (newtext, 'utf-8')
     action = events.Event ('requestKEYPRESS', text = text,
                            _form = gfObject._form)
@@ -278,6 +332,11 @@
 
     gDebug (1, "Delete %s to %s in %s" % (start_pos, end_pos, widget))
 
+    # Before we're going to change the field's value, make sure it has the
+    # focus on both sides (UI and GF)
+    if not widget.is_focus ():
+      self._request ('FOCUS', data = gfObject)
+
     action = events.Event ('requestDELETERANGE',
                             start_pos = start_pos,
                             end_pos   = end_pos,
@@ -397,14 +456,20 @@
   # ---------------------------------------------------------------------------
 
   def _updateChoices (self, widget, gfObject):
-    if isinstance (widget, gtk.Combo):
+
+    if self.__isCombo (widget):
       if widget._origAllowedValues != gfObject._field._allowedValues:
         (self.reverse, self.choices) = gfObject._field.allowedValues ()
         self.choices.sort ()
 
         widget._origAllowedValues = gfObject._field._allowedValues
-        widget.set_popdown_strings (self.choices)
 
+        if self._useNewGTKAPI:
+          widget.get_model ().clear ()
+          map (widget.append_text, self.choices)
+        else:
+          widget.set_popdown_strings (self.choices)
+
     elif isinstance (widget, gtk.TreeView):
       if widget._origAllowedValues != gfObject._field._allowedValues:
         self.listStore.clear ()
@@ -543,6 +608,16 @@
       self._request ('CURSORMOVE', position = cPos)
 
 
+  # ---------------------------------------------------------------------------
+  # Check if a widget is a drop down
+  # ---------------------------------------------------------------------------
+
+  def __isCombo (self, widget):
+
+    return isinstance (widget, gtk.Combo) or \
+        (self._useNewGTKAPI and isinstance (widget, gtk.ComboBox))
+
+
 # -----------------------------------------------------------------------------
 # Determine the minimum size of a button widget
 # -----------------------------------------------------------------------------
@@ -556,13 +631,17 @@
 
   e = gtk.Entry ()
   (w, eHeight) = e.size_request ()
-  c = gtk.Combo ()
+  if gtk.pygtk_version < (2, 4, 0):
+    c = gtk.Combo ()
+  else:
+    c = gtk.ComboBoxEntry ()
   (w, cHeight) = e.size_request ()
 
   return (None, max (eHeight, cHeight))
 
 
 
+
 # -----------------------------------------------------------------------------
 # Base configuration data
 # -----------------------------------------------------------------------------





reply via email to

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