Started keyboard handling
authorEnrico Zini <enrico@enricozini.org>
Wed, 22 Jul 2009 17:19:10 +0000 (19:19 +0200)
committerEnrico Zini <enrico@enricozini.org>
Wed, 22 Jul 2009 17:19:10 +0000 (19:19 +0200)
src/Makefile.am
src/app_keyboard.vala [new file with mode: 0644]
src/zavai.vala

index f3bb2ef9a3eacdd7f4578471820ba23083ec19b8..bd22906f28a697d795dd30116d097e08126dcd83 100644 (file)
@@ -30,6 +30,7 @@ zavai_VALASOURCES = \
        registry.vala \
        gps.vala \
        app.vala \
+       app_keyboard.vala \
        app_gps.vala \
        app_debug.vala \
        zavai.vala
diff --git a/src/app_keyboard.vala b/src/app_keyboard.vala
new file mode 100644 (file)
index 0000000..a518c22
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * app_keyboard - zavai keyboard show/hide functions
+ *
+ * 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
+ */
+
+namespace zavai {
+namespace ui {
+namespace kbd {
+
+/*
+class GPSOn(gtk.ToggleAction):
+    states = [_("GPS always on"), _("GPS on when needed")]
+
+    def __init__(self, registry, **kw):
+        self.state = 0
+        super(GPSOn, self).__init__("menu.main.gps.alwayson", self.states[self.state], None, None)
+
+        self.registry = registry
+        self.set_active(False)
+
+        self.connect("toggled", self.on_toggle)
+
+    def on_toggle(self, *args):
+        self.state = (self.state + 1) % len(self.states)
+        self.set_property("label", self.states[self.state])
+        if self.get_active():
+            self.start()
+        else:
+            self.stop()
+
+    def start(self):
+        self.registry.resource("gps").connect("gps", self)
+
+    def stop(self):
+        self.registry.resource("gps").disconnect("gps", self)
+
+class GPXTracer(gtk.ToggleAction):
+    states = [_("Start GPX trace"), _("Stop GPX trace")]
+
+    def __init__(self, registry, **kw):
+        self.state = 0
+        super(GPXTracer, self).__init__("menu.main.gps.gpx", self.states[self.state], None, None)
+
+        self.registry = registry
+        self.set_active(False)
+
+        self.connect("toggled", self.on_toggle)
+
+    def on_toggle(self, *args):
+        self.state = (self.state + 1) % len(self.states)
+        self.set_property("label", self.states[self.state])
+        if self.get_active():
+            self.start()
+        else:
+            self.stop()
+
+    def start(self):
+        zavai.info("GPX trace started")
+        self.registry.resource("gpx").connect("gpx", self)
+
+    def stop(self):
+        zavai.info("GPX trace ended")
+        self.registry.resource("gpx").disconnect("gpx", self)
+
+public class Waypoint : BigButton
+{
+    public Waypoint()
+    {
+        set_label("Take waypoint");
+        zavai.gps.gpx.tracking_changed += on_gpx_tracking_changed;
+        clicked += on_clicked;
+        set_sensitive(zavai.gps.gpx.tracking);
+    }
+
+    protected void on_gpx_tracking_changed(zavai.gps.GPX gpx, bool new_state)
+    {
+stderr.printf("Toggled %d\n", (int)new_state);
+        set_sensitive(new_state);
+    }
+
+    protected void on_clicked()
+    {
+stderr.printf("Activate\n");
+        zavai.gps.gpx.waypoint();
+    }
+}
+
+class GPXAudioTracer(gtk.ToggleAction):
+    states = [_("Start GPX and audio trace"), _("Stop GPX and audio trace")]
+
+    def __init__(self, registry, **kw):
+        self.state = 0
+        super(GPXAudioTracer, self).__init__("menu.main.gps.gpxaudio", self.states[self.state], None, None)
+
+        self.registry = registry
+        self.recorder = zavai.Recorder(registry)
+        self.set_active(False)
+
+        self.connect("toggled", self.on_toggle)
+
+    def shutdown(self):
+        self.recorder.stop()
+        super(GPXAudioTracer, self).shutdown()
+
+    def on_toggle(self, *args):
+        self.state = (self.state + 1) % len(self.states)
+        self.set_property("label", self.states[self.state])
+        if self.get_active():
+            self.start()
+        else:
+            self.stop()
+
+    def start(self):
+        zavai.info("GPX trace started")
+        gpx = self.registry.resource("gpx")
+        gpx.connect("gpx", self)
+        gpx.add_activity_monitor(self.on_gpx_activity_changed)
+
+    def stop(self):
+        zavai.info("GPX trace ended")
+        gpx = self.registry.resource("gpx")
+        gpx.disconnect("gpx", self)
+        self.recorder.stop()
+        gpx.del_activity_monitor(self.on_gpx_activity_changed)
+
+    def on_gpx_activity_changed(self, gpx, state):
+        if state:
+            self.recorder.start(gpx.basename + ".wav")
+        else:
+            self.recorder.stop()
+*/
+
+/*
+public class GPSRequestLink : Gtk.ToggleButton
+{
+       protected string service_name;
+       protected string label_start;
+       protected string label_stop;
+    protected Gtk.StatusIcon status_icon;
+    protected int fix_status = 0;
+
+       public GPSRequestLink()
+       {
+        service_name = "gps";
+        label_start = "Keep GPS on";
+        label_stop = "Stop keeping GPS on";
+               set_size_request(0, zavai.config.min_button_height);
+               toggled += on_toggled;
+
+               set_label(get_active() ? label_stop : label_start);
+
+        //tooltip = "GPS status";
+        try {
+            fix_status = zavai.gps.gps.device.GetFixStatus();
+        } catch (Error e) {
+            fix_status = 0;
+        }
+        zavai.gps.gps.device.FixStatusChanged += on_fix_status_changed;
+
+        // GPS status icon
+        status_icon = new Gtk.StatusIcon();
+        status_icon.set_visible(true);
+        status_icon.activate += on_status_activate;
+        update_icon();
+       }
+
+    protected void update_icon()
+    {
+        string name;
+        if (fix_status == 2 || fix_status == 3)
+            name = zavai.config.icondir + "/" + (get_active() ? "gps_fix_on.png" : "gps_fix_off.png");
+        else
+            name = zavai.config.icondir + "/" + (get_active() ? "gps_nofix_on.png" : "gps_nofix_off.png");
+stderr.printf("load icon from %s\n", name);
+        status_icon.set_from_file(name);
+    }
+
+    private void on_fix_status_changed(dynamic DBus.Object pos, int fix_status)
+    {
+        this.fix_status = fix_status;
+        update_icon();
+    }
+
+       private void on_toggled(Gtk.Button src)
+       {
+               Service s = zavai.registry.gets(service_name);
+               if (get_active())
+                       s.request("servicerequestlink");
+               else
+                       s.release("servicerequestlink");
+               set_label(get_active() ? label_stop : label_start);
+        update_icon();
+       }
+
+    private void on_status_activate()
+    {
+        set_active(!get_active());
+    }
+}
+*/
+
+public void init()
+{
+    /*
+    registry.register(GPXAudioTracer(registry))
+    registry.register(GPXWaypoint(registry))
+
+    // Apps
+    var useless = new Useless();
+    zavai.registry.register_applet("app.debug.useless", useless);
+    */
+
+    /*
+    var menu_waypoint = new Waypoint();
+    var menu_gpsrequest = new GPSRequestLink();
+               //label_on = "Stop GPX trace";
+               //label_off = "Start GPX trace";
+               //label_on = "Stop GPS monitor";
+               //label_off = "Start GPS monitor";
+               //label_on = "Stop GPS position tracking";
+               //label_off = "Start GPS position tracking";
+               //label_on = "Stop keeping GPS on";
+               //label_off = "Keep GPS on";
+
+    // Menus
+    var menu_gps = new zavai.Menu("GPS");
+    //menu_gps.add_applet("app.debug.useless");
+    menu_gps.add_service_toggle("gps.gpx", "Start GPX trace", "Stop GPX trace");
+    menu_gps.add_widget(menu_waypoint);
+    menu_gps.add_widget(menu_gpsrequest);
+
+    zavai.registry.register_menu("menu.gps", menu_gps);
+    zavai.registry.getmenu("menu.main").add_applet("menu.gps");
+    */
+}
+
+}
+}
+}
index f4f09b2c9906476d3146b655d606213988dedd9e..69585b9f6c401fd3b2882f5a6b6ee4d1d5af4c6b 100644 (file)
@@ -56,6 +56,7 @@ static int main (string[] args) {
 
        // TODO: register the rest of menus here
        zavai.ui.gps.init();
+       zavai.ui.kbd.init();
        zavai.ui.debug.init();
 
        zavai.app.show_applet("menu.main");