Started polygen plugin
authorEnrico Zini <enrico@enricozini.org>
Thu, 13 Aug 2009 14:31:25 +0000 (15:31 +0100)
committerEnrico Zini <enrico@enricozini.org>
Thu, 13 Aug 2009 14:31:25 +0000 (15:31 +0100)
src/Makefile.am
src/app_polygen.vala [new file with mode: 0644]
src/zavai.vala

index 0e83d1da5447082b5075ce7dbd4319e3a3a264e4..f9ea17dcc0c75ebb9490a71dfed1781fc8cb77db 100644 (file)
@@ -39,6 +39,7 @@ zavai_VALASOURCES = \
        app_power.vala \
        app_wm.vala \
        app_gps.vala \
+       app_polygen.vala \
        app_debug.vala \
        zavai.vala
 
diff --git a/src/app_polygen.vala b/src/app_polygen.vala
new file mode 100644 (file)
index 0000000..af01b8f
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * 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 polygen {
+
+protected class PolygenPage : Object
+{
+    public string name { get; construct; }
+    public Gtk.ListStore model;
+    public Gtk.TreeView list;
+    public Gtk.ScrolledWindow scroll;
+    public signal void selected(string page, string name);
+
+    public PolygenPage(string name)
+    {
+        this.name = name;
+        model = new Gtk.ListStore(2, typeof(string), typeof(string));
+        list = new Gtk.TreeView.with_model(model);
+        list.insert_column_with_attributes (-1, "Name", new Gtk.CellRendererText(), "text", 0);
+        list.insert_column_with_attributes (-1, "Title", new Gtk.CellRendererText(), "text", 1);
+        scroll = new Gtk.ScrolledWindow (null, null);
+        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
+        scroll.add(list);
+
+        list.row_activated += on_row_activated;
+    }
+
+    private void on_row_activated(Gtk.TreeView tv, Gtk.TreePath path, Gtk.TreeViewColumn column)
+    {
+        Gtk.TreeIter iter;
+        if (!model.get_iter(out iter, path)) return;
+        Value grm_name;
+        model.get_value(iter, 0, out grm_name);
+        selected(name, (string)grm_name);
+    }
+}
+
+protected class PolygenRun : Gtk.VBox
+{
+    protected Gtk.Label text;
+    protected Gtk.Button text_button;
+
+    private string _grammar;
+    public string grammar {
+        get { return _grammar; }
+        set {
+            _grammar = value;
+            update();
+        }
+    }
+
+    public PolygenRun()
+    {
+        _grammar = "";
+        text = new Gtk.Label("");
+        text.use_markup = true;
+        text.wrap = true;
+        text_button = new Gtk.Button();
+        text_button.set_image(text);
+               pack_start(text_button, true, true, 0);
+        text_button.clicked += on_clicked;
+    }
+
+    public void on_clicked(Gtk.Button button) { update(); }
+
+    public void update()
+    {
+        text.label = "ciao " + _grammar;
+    }
+}
+
+public class Polygen : Applet
+{
+    protected Gee.ArrayList<PolygenPage> pages;
+    protected Gtk.Notebook notebook;
+    protected PolygenRun result;
+
+    private void add(string page, string name, string title)
+    {
+        PolygenPage pg = null;
+        foreach (PolygenPage p in pages)
+        {
+            if (p.name == page)
+            {
+                pg = p;
+                break;
+            }
+        }
+        if (pg == null)
+        {
+            pg = new PolygenPage(page);
+            pg.selected += on_selected;
+            pages.add(pg);
+        }
+
+        Gtk.TreeIter iter;
+        pg.model.append (out iter);
+        pg.model.set(iter, 0, name);
+        pg.model.set(iter, 1, title);
+    }
+
+    protected void on_selected(string page, string name)
+    {
+        result.grammar = page + "/" + name;
+        notebook.set_current_page(notebook.get_n_pages()-1);
+    }
+
+       public Polygen(string label, IOChannel data)
+       {
+               _label = label;
+        pages = new Gee.ArrayList<PolygenPage>();
+
+        while (true)
+        {
+            string line;
+            var res = data.read_line(out line, null, null);
+            if (res != IOStatus.NORMAL) break;
+            string[] vals = line.split(" ", 2);
+            if (vals == null) break;
+            string[] np = vals[0].split("/", 2);
+            if (np == null) break;
+            add(np[0], np[1], vals[1].strip());
+        }
+
+        notebook = new Gtk.Notebook();
+        foreach (PolygenPage p in pages)
+        {
+            notebook.append_page(p.scroll, new Gtk.Label(p.name));
+        }
+        result = new PolygenRun();
+        notebook.append_page(result, new Gtk.Label("Result"));
+
+               pack_start(notebook, true, true, 0);
+       }
+}
+
+Polygen polygen;
+
+public void init()
+{
+    try {
+        var data = new IOChannel.file(zavai.config.homedir + "/polygen-info", "r");
+        polygen = new Polygen("Polygen", data);
+        data.shutdown(false);
+
+        zavai.registry.register_applet("ui.polygen", polygen);
+        zavai.registry.getmenu("menu.main").add_applet("ui.polygen");
+    } catch (FileError e) {
+        polygen = null;
+        zavai.log.error("Skipping polygen plugin: " + e.message);
+    }
+
+    /*
+       window_list = new WindowList("Current apps");
+       zavai.registry.register_applet("wm.list", window_list);
+       zavai.registry.getmenu("menu.main").add_applet("wm.list");
+
+       try {
+               launcher = new Launcher("Run program");
+       } catch (Error e) {
+               zavai.log.error("Not running launcher: " + e.message);
+               launcher = null;
+       }
+
+       if (launcher != null)
+       {
+               zavai.registry.register_applet("wm.launcher", launcher);
+               zavai.registry.getmenu("menu.main").add_applet("wm.launcher");
+       }
+    */
+}
+
+}
+}
+}
index c11b2065214be7bb8cb091fe5ab4ae4af947c2b5..657665f674fa70619daabb9bce63520427461c14 100644 (file)
@@ -68,6 +68,7 @@ static int main (string[] args) {
        zavai.ui.kbd.init();
        zavai.ui.wm.init();
        zavai.ui.powerbutton.init();
+       zavai.ui.polygen.init();
        zavai.ui.debug.init();
 
        zavai.app.show_applet("menu.main");