/*
* 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
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)
}
}
- 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();
public void back_to_main()
{
- show_applet("zavai.status");
+ show_applet(zavai.ui.main.status);
}
public void shutdown()
{
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();
}
}
}
// '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);
this.spacing = 0;
pack_end(button_box, false, true, 0);
_back_link = new AppletStraightLink();
+ zavai.registry.register(this);
}
public virtual void back()
_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)
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();
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;
}
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);
}
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);
+}
+
+}
}