]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - src/app.vala
butcher butcher butcher
[gregoa/zavai.git] / src / app.vala
index 12f41dd0608c813570c4789a7b9e329668f04362..9725d2baafe1b05ecafbf82aef333a4c7b72fb25 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * app - zavai main window
  *
- * Copyright (C) 2009  Enrico Zini <enrico@enricozini.org>
+ * Copyright (C) 2009-2010  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
@@ -28,19 +28,20 @@ public class Zavai : Gtk.Window, zavai.Resource
     public signal void visibility_changed(bool visible);
 
     zavai.Applet current;
-    string current_name;
 
     public Zavai()
     {
         title = "Zavai";
         current = null;
-        current_name = null;
         destroy += Gtk.main_quit;
         set_events(get_events() | Gdk.EventMask.VISIBILITY_NOTIFY_MASK);
+        set_position(Gtk.WindowPosition.MOUSE);
         visibility_notify_event += on_visibility;
         set_skip_pager_hint(true);
         set_skip_taskbar_hint(true);
         //set_type_hint(Gdk.WindowTypeHint.DESKTOP);
+
+        zavai.registry.register(this);
     }
 
     private bool on_visibility(Gdk.Event event)
@@ -88,51 +89,42 @@ public class Zavai : Gtk.Window, zavai.Resource
         }
     }
 
-    public void show_applet(string name)
+    public void show_applet(Applet applet)
     {
-        zavai.Applet applet = zavai.registry.geta(name);
-
         // Remove the current applet
         if (current != null)
         {
             current.stop();
             remove(current);
             current = null;
-            current_name = null;
         }
 
         // Add the new applet
         current = applet;
-        current_name = name;
         add(current);
         current.start();
         current.show_all();
     }
 
-    public void push_applet(string name)
+    public void push_applet(Applet applet)
     {
         // Make the function idempotent
-        if (current_name == name)
+        if (current == applet)
             return;
 
-//stderr.printf("push applet %s -> %s\n", current_name, name);
-        zavai.Applet applet = zavai.registry.geta(name);
-
         // Remove the current applet
         if (current != null)
         {
 //stderr.printf("push applet remove %s\n", current_name);
-            applet.back_link = current_name;
+            applet.back_link = current;
             current.stop();
             remove(current);
             current = null;
-            current_name = null;
         }
 
 //stderr.printf("push applet add %s\n", name);
         // Add the new applet
         current = applet;
-        current_name = name;
         add(current);
         current.start();
         current.show_all();
@@ -146,7 +138,7 @@ public class Zavai : Gtk.Window, zavai.Resource
 
     public void back_to_main()
     {
-        show_applet("zavai.status");
+        show_applet(zavai.ui.main.status);
     }
 
     public void shutdown()
@@ -157,24 +149,13 @@ public class Zavai : Gtk.Window, zavai.Resource
     {
         set_size_request(300, 500);
         //fullscreen();
-        show_all();
-    }
-
-    public void run_script(string command)
-    {
-        zavai.log.info("Run program: " + command);
-        string[] args = command.split(" ");
-        Pid pid;
-        try {
-            Process.spawn_async(
-                Environment.get_home_dir(),
-                args,
-                null,
-                SpawnFlags.SEARCH_PATH,
-                null,
-                out pid);
-        } catch (SpawnError e) {
-            zavai.log.error("Running " + command + ": " + e.message);
+        if (zavai.config.profile == "laptop")
+        {
+            visibility = false;
+            zavai.app.ensure_hidden();
+            zavai.ui.wm.raise_icon.update_icon();
+        } else {
+            show_all();
         }
     }
 }
@@ -200,7 +181,7 @@ public abstract class Applet : Gtk.VBox, Resource
     // 'back_link' property: link to use to "go back". If null, do not show
     // a way to go back.
     protected AppletLink _back_link = null;
-    public string back_link {
+    public Applet back_link {
         get { return _back_link.target; }
         set {
 //stderr.printf("Set back link of %s to %s\n", _label, value);
@@ -227,6 +208,7 @@ public abstract class Applet : Gtk.VBox, Resource
         this.spacing = 0;
         pack_end(button_box, false, true, 0);
         _back_link = new AppletStraightLink();
+        zavai.registry.register(this);
     }
 
     public virtual void back()
@@ -255,14 +237,14 @@ public class Menu : Applet
         _label = label;
     }
 
-    public void add_applet(string target)
+    public void add_applet(Applet target)
     {
         pack_start(new AppletPushLink(target), false, false, 0);
     }
 
-    public void add_service_toggle(string service_name, string label_start, string label_stop)
+    public void add_service_toggle(Service service, string label_start, string label_stop)
     {
-        pack_start(new ServiceRequestLink(service_name, label_start, label_stop), false, false, 0);
+        pack_start(new ServiceRequestLink(service, label_start, label_stop), false, false, 0);
     }
 
     public void add_widget(Gtk.Widget w)
@@ -281,23 +263,21 @@ public class BigButton : Gtk.Button
 
 public abstract class AppletLink : BigButton
 {
-    protected string _target;
-    public string target {
+    protected Applet _target;
+    public Applet target {
         get { return _target; }
         set
         {
             if (_target != null)
             {
-                Applet a = zavai.registry.geta(_target);
-                a.label_changed -= on_label_changed;
+                _target.label_changed -= on_label_changed;
             }
             bool was_shown = _target != null;
             _target = value;
             if (_target != null)
             {
-                Applet a = zavai.registry.geta(_target);
-                set_label(a.label);
-                a.label_changed += on_label_changed;
+                set_label(_target.label);
+                _target.label_changed += on_label_changed;
                 if (!was_shown) show();
             } else {
                 if (was_shown) hide();
@@ -310,12 +290,12 @@ public abstract class AppletLink : BigButton
         set_label(a.label);
     }
 
-    private abstract void on_clicked(Gtk.Button src);
+    public abstract void on_clicked(Gtk.Button src);
 
-    public AppletLink(string? name = null)
+    public AppletLink(Applet? applet = null)
     {
         _target = null;
-        target = name;
+        target = applet;
 
         clicked += on_clicked;
     }
@@ -328,57 +308,64 @@ public abstract class AppletLink : BigButton
 
 public class AppletStraightLink : AppletLink
 {
-    private override void on_clicked(Gtk.Button src)
+    public override void on_clicked(Gtk.Button src)
     {
 //stderr.printf("straight link: %s\n", _target);
         if (_target != null)
             zavai.app.show_applet(_target);
     }
 
-    public AppletStraightLink(string? name = null)
+    public AppletStraightLink(Applet? applet = null)
     {
-        base(name);
+        base(applet);
     }
 }
 
 public class AppletPushLink : AppletLink
 {
-    private override void on_clicked(Gtk.Button src)
+    public override void on_clicked(Gtk.Button src)
     {
 //stderr.printf("push link: %s\n", _target);
         if (_target != null)
             zavai.app.push_applet(_target);
     }
 
-    public AppletPushLink(string? name = null)
+    public AppletPushLink(Applet? applet = null)
     {
-        base(name);
+        base(applet);
     }
 }
 
 public class ServiceRequestLink : Gtk.ToggleButton
 {
-    protected string service_name;
+    protected Service service;
     protected string label_start;
     protected string label_stop;
 
     private void on_toggled(Gtk.Button src)
     {
-        Service s = zavai.registry.gets(service_name);
         if (get_active())
-            s.request("servicerequestlink");
+            service.request("servicerequestlink");
         else
-            s.release("servicerequestlink");
+            service.release("servicerequestlink");
         set_label(get_active() ? label_stop : label_start);
     }
 
-    public ServiceRequestLink(string service_name, string label_start, string label_stop)
+    private void on_service_toggled(bool val)
+    {
+        set_active(val);
+        //set_label(val ? label_stop : label_start);
+    }
+
+    public ServiceRequestLink(Service service, string label_start, string label_stop)
     {
-        this.service_name = service_name;
+        this.service = service;
         this.label_start = label_start;
         this.label_stop = label_stop;
         set_size_request(0, zavai.config.min_button_height);
+        set_active(service.started);
         toggled += on_toggled;
+        service.toggled += on_service_toggled;
 
         set_label(get_active() ? label_stop : label_start);
     }
@@ -408,5 +395,29 @@ public class StatusIcon : Gtk.Button
 
 
 public zavai.Zavai app;
+public zavai.Menu menu_main;
+public zavai.Menu menu_gps;
+public zavai.Menu menu_gsm;
+public zavai.Menu menu_misc;
+
+namespace main {
+
+public void init()
+{
+    zavai.app = new zavai.Zavai();
+    menu_main = new zavai.Menu("Main menu");
+
+    // Create menus
+    menu_gps = new zavai.Menu("GPS");
+    menu_main.add_applet(menu_gps);
+
+    menu_gsm = new zavai.Menu("GSM");
+    menu_main.add_applet(menu_gsm);
+
+    menu_misc = new zavai.Menu("Misc");
+    menu_main.add_applet(menu_misc);
+}
+
+}
 
 }