import sys try: from gtk import glade as gtkglade __glade_is_available__ = True except ImportError: __glade_is_available__ = False try: from gtk import Builder __builder_is_available__ = True except ImportError: __builder_is_available__ = False # verbose message if not __glade_is_available__ or not __builder_is_available__: logger.warn({(False, False) : "both glade and gtk.Builder are not available: relying only on manual widgets in views", (False, True) : "gtk.Builder is not available, relying on manual and glade based views only", (True, False) : "glade is not available, relying on manual and gtk.Builder based views only", }[(__builder_is_available__, __glade_is_available__)]) pass import types # ---------------------------------------------------------------------- class View (object): glade = None top=None builder=None def __init__(self, glade=None, top=None, parent=None, builder=None): """
def adapt(self, *args): """ There are four ways to call this: .. method:: adapt() :noindex: Take properties from the model for which ``adapt`` has not yet been called, match them to the view by name, and create adapters fitting for the respective widget type. That information comes from :mod:`gtkmvc.adapters.default`. See :meth:`_find_widget_match` for name patterns. .. versionchanged:: 1.99.1 Allow incomplete auto-adaption, meaning properties for which no widget is found. .. method:: adapt(ad) :noindex: Keep track of manually created adapters for future ``adapt()`` calls. *ad* is an adapter instance already connected to a widget. .. method:: adapt(prop_name) :noindex: Like ``adapt()`` for a single property. *prop_name* is a string. .. method:: adapt(prop_name, wid_name) :noindex: Like ``adapt(prop_name)`` but without widget name matching. *wid_name* has to exist in the view. """ # checks arguments n = len(args) if n not in range(3): raise TypeError("adapt() takes 0, 1 or 2 arguments (%d given)" % n) if n==0: adapters = [] props = self.model.get_properties() # matches all properties not previoulsy adapter by the user: for prop_name in filter(lambda p: p not in self.__user_props, props): try: wid_name = self._find_widget_match(prop_name) except TooManyCandidatesError, e: # multiple candidates, gives up raise e except ValueError, e: # no widgets found for given property, continue after emitting a warning if e.args: logger.warn(e[0]) else: logger.warn("No widget candidates match property '%s'" % prop_name) else: logger.debug("Auto-adapting property %s and widget %s" % \ (prop_name, wid_name)) adapters += self.__create_adapters__(prop_name, wid_name) pass pass