No need to fullscreen: matchbox does it for us
[gregoa/zavai.git] / zavai / app.py
index c0161b731ee5e3685bc4bb3646fd4df33c81318e..2d8020e245f041eab9d466ea2264e105c0590fb8 100644 (file)
@@ -1,22 +1,90 @@
+# app - zavai main window
+#
+# Copyright (C) 2009  Enrico Zini <enrico@enricozini.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# 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):
-        self.fullscreen()
+        #self.fullscreen()
         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