self.objects = dict()
self.labels = dict()
- def register(self, name, obj, label = None):
+ def register(self, obj, name=None):
"""Register an object at the given path.
Name the path to this object, like "menu.gps.monitor".
"""
+ if name is None:
+ name = obj.props.name
+
if name in self.objects:
return KeyError("%s is already registered", name)
zavai.info("Registering", name)
self.objects[name] = obj
- if label is not None: self.labels[name] = label
if name.startswith("menu."):
self.add_to_menu(name)
- def register_factory(self, name, fac, label = None):
+ def register_factory(self, fac, name, label = None):
"""Register an object factory at the given path.
Name the path to this object, like "menu.gps.monitor".
self.factories[name] = fac
if label is not None: self.labels[name] = label
- def register_action(self, name, obj):
- """Register an object at the given path.
-
- Name the path to this object, like "menu.gps.monitor".
- """
- if name in self.objects:
- return KeyError("%s is already registered", name)
- zavai.info("Registering action", name)
- self.objects[name] = obj
-
- if name.startswith("menu."):
- parent = get_parent(name)
- if parent is not None:
- zavai.info("Add action to menu", name, parent)
- menu = self.menu(parent)
- if isinstance(obj, gtk.ToggleAction):
- menu.add_child(zavai.ToggleButton(self, name, action=obj))
- else:
- menu.add_child(zavai.LinkButton(self, name, action=obj))
-
def add_to_menu(self, name):
"Add the applet with the given name to the menu structure"
parent = get_parent(name)
if parent is not None:
zavai.info("Add to menu", name, parent)
menu = self.menu(parent)
- menu.add_child(zavai.LinkButton(self, name, self.label(name)))
+
+ obj = self.resource(name)
+ if isinstance(obj, gtk.ToggleAction):
+ menu.add_child(zavai.ToggleButton(self, name, action=obj))
+ elif isinstance(obj, gtk.Action):
+ menu.add_child(zavai.LinkButton(self, name, action=obj))
+ else:
+ menu.add_child(zavai.LinkButton(self, name, self.label(name)))
def label(self, name):
"Return the label for the object with the given name"
res = self.labels.get(name)
if res is not None:
return res
- return default_label(name)
+ try:
+ obj = self.resource(name)
+ return obj.props.label
+ except:
+ return default_label(name)
def resource(self, name):
"""Get a resource from the registry.
parent = get_parent(name)
res = zavai.Menu(self, name, parent)
- self.register(name, res)
+ self.register(res, name)
return res
def shutdown(self):