[Top][All Lists]
[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
# -----------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r6783 - in trunk/gnue-forms/src/uidrivers/gtk2: . widgets,
johannes <=