[POS-commit] r1878 - in kiwi/trunk: . kiwi/ui
Johan Dahlin
jdahlin at async.com.br
Wed Dec 14 12:08:59 BRST 2005
Author: jdahlin
Date: Wed Dec 14 12:08:59 2005
New Revision: 1878
Modified:
kiwi/trunk/ChangeLog
kiwi/trunk/kiwi/ui/delegates.py
kiwi/trunk/kiwi/ui/views.py
Log:
* kiwi/ui/delegates.py (SlaveDelegate.__init__)
(Delegate.__init__): API Change,
move keyactions to the end of the list, to be as compatible
as possible with the parent klasses.
* kiwi/ui/delegates.py:
* kiwi/ui/views.py:
Cleanups:
- Make a few variables private, remove duplicated code.
- Reorganize variables
- Refactor functionallity to methods
Modified: kiwi/trunk/ChangeLog
==============================================================================
--- kiwi/trunk/ChangeLog (original)
+++ kiwi/trunk/ChangeLog Wed Dec 14 12:08:59 2005
@@ -1,3 +1,17 @@
+2005-12-14 Johan Dahlin <jdahlin at async.com.br>
+
+ * kiwi/ui/delegates.py (SlaveDelegate.__init__)
+ (Delegate.__init__): API Change,
+ move keyactions to the end of the list, to be as compatible
+ as possible with the parent klasses.
+
+ * kiwi/ui/delegates.py:
+ * kiwi/ui/views.py:
+ Cleanups:
+ - Make a few variables private, remove duplicated code.
+ - Reorganize variables
+ - Refactor functionallity to methods
+
2005-12-13 Johan Dahlin <jdahlin at async.com.br>
* kiwi/ui/widgets/list.py: Add support for check buttons
Modified: kiwi/trunk/kiwi/ui/delegates.py
==============================================================================
--- kiwi/trunk/kiwi/ui/delegates.py (original)
+++ kiwi/trunk/kiwi/ui/delegates.py Wed Dec 14 12:08:59 2005
@@ -36,9 +36,9 @@
def __init__(self, toplevel=None, widgets=[], gladefile=None,
gladename=None, toplevel_name=None, domain=None,
keyactions=None):
- """Create new SlaveDelegate. toplevel is the toplevel widget,
- defaults to the value of the class' toplevel attribute, and if not
- present, raises AttributeError.
+ """
+ The keyactions parameter is sent to L{kiwi.controllers.BaseController},
+ the rest are sent to L{kiwi.ui.views.SlaveView}
"""
SlaveView.__init__(self, toplevel, widgets, gladefile, gladename,
toplevel_name, domain)
@@ -48,11 +48,16 @@
"""A class that combines view and controller functionality into a
single package. The Delegate class possesses a top-level window.
"""
- def __init__(self, toplevel=None, delete_handler=None, widgets=[],
- gladefile=None, gladename=None, toplevel_name=None,
- domain=None, keyactions=None):
- """Creates a new Delegate. For parameters , see BaseView.__init__"""
- BaseView.__init__(self, toplevel, delete_handler, widgets,
- gladefile, gladename, toplevel_name, domain)
+ def __init__(self, toplevel=None, widgets=[], gladefile=None,
+ gladename=None, toplevel_name=None, domain=None,
+ delete_handler=None, keyactions=None):
+ """Creates a new Delegate.
+ The keyactions parameter is sent to L{kiwi.controllers.BaseController},
+ the rest are sent to L{kiwi.ui.views.BaseView}
+ """
+
+ BaseView.__init__(self, toplevel, widgets, gladefile,
+ gladename, toplevel_name, domain,
+ delete_handler)
BaseController.__init__(self, view=self, keyactions=keyactions)
Modified: kiwi/trunk/kiwi/ui/views.py
==============================================================================
--- kiwi/trunk/kiwi/ui/views.py (original)
+++ kiwi/trunk/kiwi/ui/views.py Wed Dec 14 12:08:59 2005
@@ -190,7 +190,7 @@
for name, method in methods.items():
if callable(method):
dict[name] = method
- view.glade_adaptor.signal_autoconnect(dict)
+ view._glade_adaptor.signal_autoconnect(dict)
class SlaveView(gobject.GObject):
@@ -228,6 +228,18 @@
"""
gobject.GObject.__init__(self)
+ self._broker = None
+ self.slaves = {}
+ self._proxies = []
+ self._valid = True
+
+ # slave/widget name -> validation status
+ self._validation = {}
+
+ # stores the function that will be called when widgets
+ # validity is checked
+ self._validate_function = None
+
# setup the initial state with the value of the arguments or the
# class variables
klass = type(self)
@@ -235,78 +247,75 @@
self.widgets = widgets or klass.widgets
self.gladefile = gladefile or klass.gladefile
self.gladename = gladename or klass.gladename
- self.toplevel_name = toplevel_name or klass.toplevel_name
+ self.toplevel_name = (toplevel_name or
+ klass.toplevel_name or
+ self.gladefile or
+ self.gladename)
self.domain = domain or klass.domain
- self.__broker = None
+ self._check_reserved()
+ self._glade_adaptor = self.get_glade_adaptor()
+ self.toplevel = self._get_toplevel()
+ # grab the accel groups
+ self._accel_groups = gtk.accel_groups_from_object(self.toplevel)
+
+ def _check_reserved(self):
for reserved in ["widgets", "toplevel", "gladefile",
"gladename", "tree", "model", "controller"]:
# XXX: take into account widget constructor?
if reserved in self.widgets:
- raise AttributeError("The widgets list for %s contains "
- "a widget named `%s', which is "
- "a reserved. name""" % (self, reserved))
-
-
- self.glade_adaptor = None
- if self.gladefile is not None:
- self._init_glade_adaptor()
-
- # Validation status
- self._valid = True
-
- # Dictionary slave/widget name -> validation status
- self._validation = {}
-
- # stores the function that will be called when widgets
- # validity is checked
- self._validate_function = None
-
- if self.toplevel_name is not None and self.toplevel is None:
- self.toplevel = getattr(self, self.toplevel_name, None)
-
- if not self.toplevel:
+ raise AttributeError(
+ "The widgets list for %s contains a widget named `%s', "
+ "which is a reserved. name""" % (self, reserved))
+
+ def _get_toplevel(self):
+ toplevel = self.toplevel
+ if not toplevel and self.toplevel_name:
+ toplevel = self._glade_adaptor.get_widget(self.toplevel_name)
+
+ if not toplevel:
raise TypeError("A View requires an instance variable "
"called toplevel that specifies the "
"toplevel widget in it")
- self._proxies = []
-
- # grab the accel groups
- self._accel_groups = gtk.accel_groups_from_object(self.toplevel)
- self.slaves = {}
+ if isinstance(toplevel, gtk.Window):
+ if toplevel.flags() & gtk.VISIBLE:
+ _warn("Toplevel widget %s (%s) is visible; that's probably "
+ "wrong" % (toplevel, toplevel.get_name()))
- def _init_glade_adaptor(self):
+ return toplevel
+
+ def get_glade_adaptor(self):
"""Special init code that subclasses may want to override."""
- self.glade_adaptor = WidgetTree(self, self.gladefile,
- self.widgets, self.gladename,
- self.domain)
-
- container_name = self.toplevel_name or self.gladename or self.gladefile
+ if not self.gladefile:
+ return
- if container_name is None:
- msg = ("You provided a gladefile %s to grab the widgets from "
- "but you didn't give me a toplevel/container name!")
- raise ValueError(msg % self.gladefile)
+ glade_adaptor = WidgetTree(self, self.gladefile,
+ self.widgets, self.gladename,
+ self.domain)
+
+ container_name = self.toplevel_name
+ if not container_name:
+ raise ValueError(
+ "You provided a gladefile %s to grab the widgets from "
+ "but you didn't give me a toplevel/container name!" %
+ self.gladefile)
# a SlaveView inside a glade file needs to come inside a toplevel
# window, so we pull our slave out from it, grab its groups and
# muerder it later
- shell = self.glade_adaptor.get_widget(container_name)
+ shell = glade_adaptor.get_widget(container_name)
if not isinstance(shell, gtk.Window):
- msg = "Container %s should be a Window, found %s"
- raise TypeError(msg % (container_name, type(shell)))
+ raise TypeError("Container %s should be a Window, found %s" % (
+ container_name, type(shell)))
- if shell.get_property('visible'):
- _warn('Toplevel window %s in %s should not be visible' % (
- container_name, self.gladefile))
- # XXX grab the accel groups
-
self.toplevel = shell.get_child()
shell.remove(self.toplevel)
shell.destroy()
+ return glade_adaptor
+
#
# Hooks
#
@@ -365,7 +374,7 @@
def show_all(self, *args):
"""Shows all widgets attached to the toplevel widget"""
- if self.glade_adaptor is not None:
+ if self._glade_adaptor is not None:
raise AssertionError("You don't want to call show_all on a "
"SlaveView. Use show() instead.")
self.toplevel.show_all()
@@ -449,12 +458,12 @@
#
def _attach_callbacks(self, controller):
- if self.glade_adaptor is None:
+ if self._glade_adaptor is None:
brokerclass = SignalBroker
else:
brokerclass = GladeSignalBroker
- self.__broker = brokerclass(self, controller)
+ self._broker = brokerclass(self, controller)
# def _setup_keypress_handler(self, keypress_handler):
# # Only useful in BaseView and derived classes
@@ -510,8 +519,8 @@
# if our widgets are in a glade file get the placeholder from them
# or take it from the view itself otherwise
- if self.glade_adaptor:
- placeholder = self.glade_adaptor.get_widget(name)
+ if self._glade_adaptor:
+ placeholder = self._glade_adaptor.get_widget(name)
else:
placeholder = getattr(self, name, None)
@@ -629,18 +638,18 @@
"""
Disconnect handlers previously connected with
autoconnect_signals()"""
- self.__broker.disconnect_autoconnected()
+ self._broker.disconnect_autoconnected()
def handler_block(self, widget, signal_name=None):
# XXX: Warning, or bail out?
- if not self.__broker:
+ if not self._broker:
return
- self.__broker.handler_block(widget, signal_name)
+ self._broker.handler_block(widget, signal_name)
def handler_unblock(self, widget, signal_name=None):
- if not self.__broker:
+ if not self._broker:
return
- self.__broker.handler_unblock(widget, signal_name)
+ self._broker.handler_unblock(widget, signal_name)
#
# Proxies
@@ -738,44 +747,30 @@
class BaseView(SlaveView):
"""A view with a toplevel window."""
- def __init__(self, toplevel=None, delete_handler=None, widgets=None,
- gladefile=None, gladename=None, toplevel_name=None,
- domain=None):
- """ toplevel is the widget to be set as `toplevel' (and which will
- be aliased as `win'); delete_handler allows setting a function
- to be called when this view's window is deleted."""
- try:
- SlaveView.__init__(self, toplevel, widgets, gladefile, gladename,
- toplevel_name, domain)
- except KeyError:
- raise KeyError("Some widgets were defined in self.widgets "
- "but not found in the glade tree (see previous "
- "messages to see which ones).")
-
+ def __init__(self, toplevel=None, widgets=None, gladefile=None,
+ gladename=None, toplevel_name=None, domain=None,
+ delete_handler=None):
+ SlaveView.__init__(self, toplevel, widgets, gladefile, gladename,
+ toplevel_name, domain)
if not isinstance(self.toplevel, gtk.Window):
raise TypeError("toplevel widget must be a Window "
"(or inherit from it),\nfound `%s' %s"
% (toplevel, self.toplevel))
-
self.toplevel.set_name(self.__class__.__name__)
if delete_handler:
- id = self.toplevel.connect("delete_event", delete_handler)
+ id = self.toplevel.connect("delete-event", delete_handler)
if not id:
raise ValueError(
"Invalid delete handler provided: %s" % delete_handler)
- def _init_glade_adaptor(self):
- self.glade_adaptor = WidgetTree(self, self.gladefile,
- self.widgets, self.gladename)
- name = self.toplevel_name or self.glade_adaptor.gladename
- self.toplevel = self.glade_adaptor.get_widget(name)
-
- if self.toplevel.flags() & gtk.VISIBLE:
- _warn("Toplevel widget %s (%s) is visible; that's probably "
- "wrong" % (self.toplevel, name))
-
+ def get_glade_adaptor(self):
+ if not self.gladefile:
+ return
+
+ return WidgetTree(self, self.gladefile, self.widgets,
+ self.gladename)
#
# Hook for keypress handling
More information about the POS-commit
mailing list