--- /dev/null
+/*
+ * app_wm - zavai window management 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
+ */
+
+using GLib;
+
+namespace zavai {
+namespace ui {
+namespace wm {
+
+/*
+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)
+*/
+
+/*
+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()
+*/
+
+static void print_window_state(Gtk.Window w)
+{
+ Gdk.WindowState state = w.window.get_state();
+ int istate = (int) state;
+ bool is_icon = (state & Gdk.WindowState.ICONIFIED) != 0;
+ bool is_visible = w.visible;
+ bool is_focus = w.is_focus;
+ bool has_focus = ((Gtk.Widget)w).has_focus;
+ bool is_active = w.is_active;
+ bool is_toplevel = w.is_toplevel();
+ bool is_tfocus = w.has_toplevel_focus;
+
+ stderr.printf("istate: %d; is_icon: %s; is_visible: %s; is_focus: %s; has_focus: %s, is_active: %s; is_toplevel: %s; is_tfocus: %s\n",
+ istate,
+ is_icon ? "true" : "false",
+ is_visible ? "true" : "false",
+ is_focus ? "true" : "false",
+ has_focus ? "true" : "false",
+ is_active ? "true" : "false",
+ is_toplevel ? "true" : "false",
+ is_tfocus ? "true" : "false"
+ );
+}
+
+public class RaiseIcon : Gtk.StatusIcon
+{
+ /*
+ public bool on_focus_in (Gdk.EventFocus event)
+ {
+ stderr.printf("FOCUS IN %c %d\n", event.send_event, event.in);
+ //update_icon();
+ return true;
+ }
+ public bool on_focus_out (Gdk.EventFocus event)
+ {
+ stderr.printf("FOCUS OUT %c %d\n", event.send_event, event.in);
+ //update_icon();
+ return true;
+ }
+ */
+
+ public RaiseIcon()
+ {
+ activate += on_activate;
+ zavai.app.visibility_changed += on_visibility_changed;
+ /*
+ zavai.app.focus_in_event += on_focus_in;
+ zavai.app.focus_out_event += on_focus_out;
+ */
+
+ update_icon();
+ }
+
+ private void on_visibility_changed(bool visible)
+ {
+ update_icon();
+ }
+
+ private void on_activate()
+ {
+ zavai.app.toggle_visibility();
+ update_icon();
+
+ }
+
+ protected void update_icon()
+ {
+ string name = zavai.config.icondir + "/";
+ if (!zavai.app.visibility)
+ name += "kbd_on.png";
+ else
+ name += "kbd_off.png";
+ set_from_file(name);
+ }
+}
+
+public class Test : BigButton
+{
+ public Test()
+ {
+ set_label("Window state");
+ clicked += on_clicked;
+ }
+
+ protected void on_clicked()
+ {
+ print_window_state(zavai.app);
+ }
+}
+
+
+/*
+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 class GPSRequestLink : Gtk.ToggleButton
+{
+ public GPSRequestLink()
+ {
+ // GPS status icon
+ status_icon = new Gtk.StatusIcon();
+ status_icon.set_visible(true);
+ status_icon.activate += on_status_activate;
+ update_icon();
+ }
+
+ 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());
+ }
+}
+*/
+
+RaiseIcon raise_icon;
+
+public void init()
+{
+ raise_icon = new RaiseIcon();
+ raise_icon.set_visible(true);
+
+ var menu_test = new Test();
+ zavai.registry.getmenu("menu.main").add_widget(menu_test);
+}
+
+}
+}
+}