/*
* 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
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();
+ }
}
/*
public class GPSRequestLink : Gtk.ToggleButton
{
- protected string service_name;
- protected string label_start;
- protected string label_stop;
- protected zavai.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 zavai.StatusIcon();
- status_icon.install();
- 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());
}
}