]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - src/app_gps.vala
butcher butcher butcher
[gregoa/zavai.git] / src / app_gps.vala
index 12c5f05d1f5ce69db0f0d579977f4f3d5c055c51..65aebb464bcef68fff24f93f7d6567cb85cb88b6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * gpx_trace - zavai GPX trace functions
  *
- * 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
@@ -24,83 +24,27 @@ namespace zavai {
 namespace ui {
 namespace gps {
 
-/*
-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();
-       }
+    public Waypoint()
+    {
+        set_label("Take waypoint");
+        zavai.gps.gpx.toggled += on_gpx_toggled;
+        clicked += on_clicked;
+        set_sensitive(zavai.gps.gpx.started);
+    }
+
+    protected void on_gpx_toggled(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();
+    }
 }
 
 /*
@@ -151,229 +95,81 @@ class GPXAudioTracer(gtk.ToggleAction):
 
 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());
-       }
+    protected string label_start;
+    protected string label_stop;
+    protected zavai.StatusIcon status_icon;
+    protected int fix_status = 0;
+
+    public GPSRequestLink()
+    {
+        label_start = "Keep GPS on";
+        label_stop = "Stop keeping GPS on";
+        set_size_request(0, zavai.config.min_button_height);
+        set_active(zavai.gps.gps.started);
+        toggled += on_toggled;
+
+        set_label(get_active() ? label_stop : label_start);
+
+        //tooltip = "GPS status";
+        fix_status = zavai.gps.gps.fix_status();
+        zavai.gps.gps.fix_status_changed += on_fix_status_changed;
+
+        // GPS status icon
+        status_icon = new zavai.StatusIcon();
+        status_icon.install();
+        status_icon.clicked += on_status_clicked;
+        update_icon();
+    }
+
+    protected void update_icon()
+    {
+        string name;
+        if (fix_status != libgps.STATUS_NO_FIX)
+            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(int fix_status)
+    {
+        this.fix_status = fix_status;
+        update_icon();
+    }
+
+    private void on_toggled(Gtk.Button src)
+    {
+        if (get_active())
+            zavai.gps.gps.request("servicerequestlink");
+        else
+            zavai.gps.gps.release("servicerequestlink");
+        set_label(get_active() ? label_stop : label_start);
+        update_icon();
+    }
+
+    private void on_status_clicked(Gtk.Button b)
+    {
+        set_active(!get_active());
+    }
 }
 
-static string[] SAT_QI_NAMES;
-
-public class SatelliteMonitor : Applet
-{
-       Gtk.ListStore store;
-       Gtk.TreeView view;
-
-       public SatelliteMonitor()
-       {
-               _label = "Satellite monitor";
-
-               store = new Gtk.ListStore(11, typeof(string), typeof(string), typeof(string),
-                             typeof(string), typeof(string), typeof(string), typeof(string),
-                             typeof(string), typeof(string), typeof(string), typeof(string));
-               view = new Gtk.TreeView();
-               view.set_model(store);
-
-               var renderer = new Gtk.CellRendererText();
-               view.insert_column_with_attributes(-1, "CH", renderer, "text", 0, null);
-               view.insert_column_with_attributes(-1, "ID", renderer, "text", 1, null);
-               view.insert_column_with_attributes(-1, "SN", renderer, "text", 2, null);
-               view.insert_column_with_attributes(-1, "ELE", renderer, "text", 3, null);
-               view.insert_column_with_attributes(-1, "AZI", renderer, "text", 4, null);
-               view.insert_column_with_attributes(-1, "Used", renderer, "text", 5, null);
-               view.insert_column_with_attributes(-1, "Diff", renderer, "text", 6, null);
-               view.insert_column_with_attributes(-1, "Alm", renderer, "text", 7, null);
-               view.insert_column_with_attributes(-1, "Eph", renderer, "text", 8, null);
-               view.insert_column_with_attributes(-1, "Bad", renderer, "text", 9, null);
-               view.insert_column_with_attributes(-1, "Status", renderer, "text", 10, null);
-               pack_start(view, true, true, 0);
-       }
-
-       public override void start()
-       {
-               zavai.gps.monitor.sat_info += on_sat_info;
-               zavai.gps.monitor.request("app.satmonitor");
-       }
-
-       public override void stop()
-       {
-               zavai.gps.monitor.release("app.satmonitor");
-               zavai.gps.monitor.sat_info -= on_sat_info;
-       }
-
-       public void on_sat_info(PtrArray< HashTable<string, Value?> > data)
-       {
-               store.clear();
-stderr.printf("CH ID SN ELE AZI Used Diff Alm Eph Bad Status\n");
-               for (int i = 0; i < data.len; ++i)
-               {
-                       HashTable<string, Value?> sv  = (HashTable<string, Value?>)data.pdata[i];
-
-                       Value v = sv.lookup("Flags");
-                       int flags = (int)v;
-
-                       v = sv.lookup("chn");
-                       int chn = (int)v;
-
-                       v = sv.lookup("SVID");
-                       int svid = (int)v;
-
-                       v = sv.lookup("CNO");
-                       int cno = (int)v;
-
-                       v = sv.lookup("Elev");
-                       int elev = (int)v;
-
-                       v = sv.lookup("Azim");
-                       int azim = (int)v;
-
-                       bool used = (flags & 0x01) != 0;
-                       bool diff = (flags & 0x02) != 0;
-                       bool almoreph = (flags & 0x04) != 0;
-                       bool eph = (flags & 0x08) != 0;
-                       bool bad = (flags & 0x10) != 0;
-                       v = sv.lookup("QI");
-                       string sqi = "Unknown";
-
-                       int qi = (int)v;
-                       if (qi < SAT_QI_NAMES.length)
-                               sqi = "%i: %s".printf(qi, SAT_QI_NAMES[qi]);
-
-                       Gtk.TreeIter iter;
-                       store.append(out iter);
-                       store.set(iter, "%2d".printf(chn),
-                                       "%2d".printf(svid),
-                                       "%2d".printf(cno),
-                                       "%3d".printf(elev),
-                                       "%3d".printf(azim),
-                                       used ? "used" : "",
-                                       diff ? "diff" : "",
-                                       almoreph ? "alm" : "",
-                                       eph ? "eph" : "",
-                                       bad ? "bad" : "", sqi);
-stderr.printf("%2d %2d %2d %3d %3d %d %d %d %d %d %s\n", chn, svid, cno, elev, azim, (int)used, (int)diff, (int)almoreph, (int)eph, (int)bad, sqi);
-               }
-    /*
-    def on_ubxdebug_packet(self, clid, length, data):
-        # In zhone it is cbUBXDebugPacket
-        #if clid == "NAV-STATUS" and data:
-        #    i = ["%s: %d" % (k, data[0][k]) for k in sorted(data[0].keys())]
-        #    zavai.info("Status:", " ".join(i))
-        ##    if data[0]['TTFF']:
-        ##        zavai.info("TTFF: %f", data[0]['TTFF']/1000.0)
-        if clid == "NAV-SVINFO":
-            self.handle_ubx_sat_data(data[1:])
-        #else:
-        #    zavai.info("gps got ubxdebug packet", clid)
-        #    zavai.info("DATA:", data)
-    */
-
-       }
-}
-
-
 public void init()
 {
-       SAT_QI_NAMES = new string[] {
-               "idle",
-               "searching",
-               "signal acquired",
-               "signal unusable",
-               "code lock",
-               "code&carrier lock",
-               "code&carrier lock",
-               "receiving data"
-       };
-
     /*
     registry.register(GPXAudioTracer(registry))
-    registry.register(GPXWaypoint(registry))
     */
 
     // Apps
-    var window_list = new SatelliteMonitor();
-    zavai.registry.register_applet("ui.gps.monitor", window_list);
-
     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_applet("ui.gps.monitor");
-    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");
+    zavai.menu_gps.add_service_toggle(zavai.gps.gpx, "Start GPX trace", "Stop GPX trace");
+    //zavai.menu_gps.add_applet("ui.gps.monitor");
+    zavai.menu_gps.add_widget(menu_waypoint);
+    zavai.menu_gps.add_widget(menu_gpsrequest);
+    //zavai.menu_gps.add_widget(new GPSStuck());
 }
 
 }