- add progress to Euclid
[FaRetSys.git] / PluginToolbox.cs
blob236f597ff57ab288c126bd27f8199dcc282351f7
1 using System;
2 using System.Collections;
3 using Gtk;
4 using Mono.Unix;
6 namespace Eithne
8 class PluginToolbox : TreeView
10 private Statusbar status;
11 private Schematic schematic;
13 private void Populate(TreeStore store, TreeIter parent, ArrayList plugins)
15 foreach(IFactory p in plugins)
16 store.AppendValues(parent, p.Info.Name, p);
19 private bool HasParent(TreeModel model, TreeIter iter)
21 TreeIter ti;
23 return model.IterParent(out ti, iter);
26 private bool HasParent(TreePath path)
28 return path.Depth > 1;
31 private void RenderCell(TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
33 if(HasParent(model, iter))
34 (cell as CellRendererText).Font = "Normal";
35 else
36 (cell as CellRendererText).Font = "Bold";
38 (cell as CellRendererText).Markup = (string)model.GetValue(iter, 0);
41 protected override void OnRowActivated(TreePath path, TreeViewColumn column)
43 if(HasParent(path))
45 TreeIter iter;
46 Selection.GetSelected(out iter);
47 IFactory f = Model.GetValue(iter, 1) as IFactory;
48 IPlugin p = f.Create();
49 p.Source = PluginDB.Origin[f];
50 schematic.Add(p);
54 protected override bool OnButtonPressEvent(Gdk.EventButton ev)
56 base.OnButtonPressEvent(ev);
58 status.Pop(1);
60 TreeIter iter;
61 Selection.GetSelected(out iter);
62 if(HasParent(Model, iter))
64 IFactory f = Model.GetValue(iter, 1) as IFactory;
66 status.Push(1, String.Format(Catalog.GetString("{0} plugin selected"), f.Info.Name));
68 if(ev.Button == 3)
70 Menu m = new Menu();
71 ImageMenuItem m1 = new ImageMenuItem(Catalog.GetString("A_dd"));
72 m1.Image = new Image(null, "list-add.png");
73 m1.Activated += delegate(object sender, EventArgs e)
75 IPlugin p = f.Create();
76 p.Source = PluginDB.Origin[f];
77 schematic.Add(p);
79 m.Append(m1);
81 SeparatorMenuItem s = new SeparatorMenuItem();
82 m.Append(s);
84 ImageMenuItem m2 = new ImageMenuItem(Catalog.GetString("_About"));
85 m2.Image = new Image(null, "help-browser.png");
86 m2.Activated += delegate(object sender, EventArgs e) { new PluginAbout(f); };
87 m.Append(m2);
89 m.ShowAll();
90 m.Popup();
94 return true;
97 public PluginToolbox(Statusbar status, Schematic schematic) : base()
99 this.status = status;
100 this.schematic = schematic;
102 TreeStore store = new TreeStore(typeof(string), typeof(IFactory));
104 TreeIter iter = store.AppendValues(Catalog.GetString("Input"));
105 Populate(store, iter, PluginDB.In);
107 iter = store.AppendValues(Catalog.GetString("Image processing"));
108 Populate(store, iter, PluginDB.ImgProc);
110 iter = store.AppendValues(Catalog.GetString("Comparator"));
111 Populate(store, iter, PluginDB.Comparator);
113 iter = store.AppendValues(Catalog.GetString("Result processing"));
114 Populate(store, iter, PluginDB.ResProc);
116 iter = store.AppendValues(Catalog.GetString("Output"));
117 Populate(store, iter, PluginDB.Out);
119 iter = store.AppendValues(Catalog.GetString("Other"));
120 Populate(store, iter, PluginDB.Other);
122 Model = store;
123 HeadersVisible = false;
125 CellRendererText cr = new CellRendererText();
126 AppendColumn("Name", cr, "text", 0);
127 Columns[0].SetCellDataFunc(cr, RenderCell);
129 ExpandAll();