Notify trackdir creation
[gregoa/zavai.git] / zavai / app.py
index 21612b7f84a4703df2525965c8a45fa76be8e12d..22be04e3cfafc85d002e75d0f660c6bde20d995e 100644 (file)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 import sys
-import gtk
+from gettext import gettext as _
+import gtk, gobject
+import zavai
 
-class Zavai(gtk.Window):
+class Zavai(gtk.Window, zavai.Resource):
     def __init__(self, registry, name):
         super(Zavai, self).__init__()
         self.registry = registry
-        self.add(registry.menu("main"))
+        self.current = None
+        self.activate_resource("menu.main")
 
-    def show_widget(self, name):
-        widget = self.registry.get_existing(name)
+    def activate_resource(self, name):
+        widget = self.registry.resource(name)
         if widget is None:
-            widget = self.registry.menu("main")
-        self.remove(self.get_child())
+            widget = self.registry.resource("menu.main")
+        if isinstance(widget, gtk.Action):
+            widget.activate()
+        else:
+            self.show_widget(name, widget)
+
+    def show_widget(self, name, widget):
+        # Remove the current widget.
+        # If it is an Applet, stop it
+        if self.current is not None:
+            cur = self.registry.resource(self.current)
+            if isinstance(cur, zavai.Applet):
+                cur.stop()
+            self.remove(self.get_child())
+            self.current = None
+
+        # Add the new widget. If it is an applet, start it
         self.add(widget)
+        self.current = name
+        if isinstance(widget, zavai.Applet):
+            widget.start()
         widget.show_all()
 
     def run(self):
@@ -38,3 +59,32 @@ class Zavai(gtk.Window):
         self.show_all()
         gtk.main()
 
+class Applet(gtk.VBox):
+    name = gobject.property(type=str)
+    label = gobject.property(type=str)
+
+    def __init__(self, registry, name, label = None):
+        super(Applet, self).__init__()
+
+        self.zavai_registry = registry
+
+        self.props.name = name
+        if label is None:
+            self.props.label = zavai.default_label(name)
+        else:
+            self.props.label = label
+
+        self.back_link = zavai.LinkButton(registry, zavai.get_parent(name), _("Back"))
+        self.pack_end(self.back_link, False, False)
+
+    def add(self, widget):
+        self.pack_start(widget, True, True)
+
+    def shutdown(self):
+        self.stop()
+
+    def start(self, *args):
+        pass
+
+    def stop(self, *args):
+        pass