jdahlin - in flumotion/trunk: . flumotion/ui
flumotion-commit at lists.fluendo.com
flumotion-commit at lists.fluendo.com
Tue Dec 4 12:35:12 CET 2007
Author: jdahlin
Date: Tue Dec 4 12:35:00 2007
New Revision: 5957
Modified:
flumotion/trunk/ChangeLog
flumotion/trunk/flumotion/ui/glade.py
Log:
2007-12-04 Johan Dahlin <johan at gnome.org>
* flumotion/ui/glade.py (FluLibgladeWidgetTree.get_sizegroups): Add a
kiwi monkey patch for the libglade loader
Modified: flumotion/trunk/ChangeLog
==============================================================================
--- flumotion/trunk/ChangeLog (original)
+++ flumotion/trunk/ChangeLog Tue Dec 4 12:35:00 2007
@@ -1,5 +1,8 @@
2007-12-04 Johan Dahlin <johan at gnome.org>
+ * flumotion/ui/glade.py (FluLibgladeWidgetTree.get_sizegroups): Add a
+ kiwi monkey patch for the libglade loader
+
* data/glade/connection-dialog.glade: Rename the dialog to window1 too,
for consistency
Modified: flumotion/trunk/flumotion/ui/glade.py
==============================================================================
--- flumotion/trunk/flumotion/ui/glade.py (original)
+++ flumotion/trunk/flumotion/ui/glade.py Tue Dec 4 12:35:00 2007
@@ -25,11 +25,16 @@
import gtk
from gtk import glade
import gobject
+from kiwi.environ import environ
+from kiwi.ui import libgladeloader
+from kiwi.ui.delegates import GladeDelegate
from twisted.python.reflect import namedAny
from flumotion.configure import configure
from flumotion.common import log, pygobject
+# FIXME: Move to kiwi initialization
+environ.add_resource('glade', configure.gladedir)
def _unbrokenNamedAny(qual):
# ihooks breaks namedAny, so split up by module, attribute
@@ -58,13 +63,38 @@
glade.set_custom_handler(_flumotion_glade_custom_handler)
-class GladeBacked:
+# Kiwi monkey patch, allows us to specify a
+# glade_typedict on the View.
+class FluLibgladeWidgetTree(glade.XML):
+ def __init__(self, view, gladefile, domain=None):
+ self._view = view
+ glade.XML.__init__(self, gladefile, domain,
+ typedict=view.glade_typedict or {})
+
+ for widget in self.get_widget_prefix(''):
+ setattr(self._view, widget.get_name(), widget)
+
+ def get_widget(self, name):
+ name = name.replace('.', '_')
+ widget = glade.XML.get_widget(self, name)
+ if widget is None:
+ raise AttributeError(
+ "Widget %s not found in view %s" % (name, self._view))
+ return widget
+
+ def get_widgets(self):
+ return self.get_widget_prefix('')
+
+ def get_sizegroups(self):
+ return []
+libgladeloader.LibgladeWidgetTree = FluLibgladeWidgetTree
+
+
+class GladeBacked(GladeDelegate):
"""
Base class for objects backed by glade interface definitions.
The glade file should have exactly one Window.
- @ivar glade_dir: directory where the glade file is stored
- @type glade_dir: str
@ivar glade_file: filename of glade file containing the interface
@type glade_file: str
@ivar glade_typedict: GTK widget class name -> replacement widget class
@@ -73,47 +103,22 @@
@ivar widgets: widget name -> Widget
@type widgets: str -> gtk.Widget
"""
- glade_dir = configure.gladedir
glade_file = None
glade_typedict = None
- widgets = None
+ toplevel_name = "window1"
_window = None # the gtk.Window of the glade file
def __init__(self):
- self.widgets = {}
- try:
- assert self.glade_file, "%s.glade_file should be set" % \
- self.__class__
- file_path = os.path.join(self.glade_dir, self.glade_file)
- if self.glade_typedict:
- wtree = glade.XML(file_path, typedict=self.glade_typedict)
- else:
- # pygtk 2.4 doesn't like typedict={} ?
- wtree = glade.XML(file_path)
- except RuntimeError, e:
- msg = log.getExceptionMessage(e)
- raise RuntimeError('Failed to load file %s from directory %s: %s'
- % (self.glade_file, self.glade_dir, msg))
-
- for widget in wtree.get_widget_prefix(''):
- wname = widget.get_name()
- if isinstance(widget, gtk.Window):
- assert self._window == None, \
- "glade file %s has more than one Window" % self.glade_file
- self._window = widget
- continue
-
- assert not self.widgets.has_key(wname), \
- "There is already a widget called %s" % wname
-
- self.widgets[wname] = widget
+ GladeDelegate.__init__(self, gladefile=self.glade_file)
- assert self._window != None, \
- "glade file %s has no Window" % self.glade_file
-
- # connect all signals
+ wtree = self.get_glade_adaptor()
wtree.signal_autoconnect(self)
+ self.widgets = {}
+ for widget in wtree.get_widgets():
+ self.widgets[widget.get_name()] = widget
+ self._window = self.widgets[self.toplevel_name]
+
class GladeWidget(gtk.VBox, GladeBacked):
'''
@@ -148,9 +153,9 @@
self.add(w)
self._window.destroy()
self._window = None
-pygobject.type_register(GladeWidget)
+gobject.type_register(GladeWidget)
-class GladeWindow(gobject.GObject, GladeBacked):
+class GladeWindow(GladeBacked):
"""
Base class for dialogs or windows backed by glade interface definitions.
@@ -170,7 +175,6 @@
window = None
def __init__(self, parent=None):
- gobject.GObject.__init__(self)
GladeBacked.__init__(self)
# make public
More information about the flumotion-commit
mailing list