ComboSelectionChangedHandler GetOnChangedListener(int index) { return((object sender, ComboSelectionChangedArgs args) => { Gtk.TreeIter iter; if (store.GetIter(out iter, new Gtk.TreePath(args.Path))) { ComboChoice mt = (ComboChoice)store.GetValue(iter, index); if (args.Active != -1) { mt.Text = args.ActiveText; } } }); }
void LoadConfig() { var config = AddInPreferences.ProjectTestMap; if (config == null) { return; } foreach (var tuple in config) { var project = new ComboChoice { Text = tuple.Project }; var test = new ComboChoice { Text = tuple.Test }; rows.Add(Tuple.Create(project, test)); store.AppendValues(project, test); } }
public override Control CreatePanelWidget() { var solution = DataObject as Solution; Gtk.VBox box = new Gtk.VBox(); if (solution == null) { return(box); // something went very wrong } var scrollArea = new ScrolledWindow(); store = new Gtk.ListStore(typeof(ComboChoice), typeof(ComboChoice)); list = new Gtk.TreeView(); list.Model = store; LoadConfig(); var crt = new CellRendererComboBox(); crt.Changed += GetOnChangedListener(0); var projectsColumn = list.AppendColumn("Project", crt, new TreeCellDataFunc(GetOnSetDataFunc(0, GetProjectNames))); projectsColumn.Expand = true; var testRenderer = new CellRendererComboBox(); testRenderer.Changed += GetOnChangedListener(1); var testsColumn = list.AppendColumn("Tests to run", testRenderer, new TreeCellDataFunc(GetOnSetDataFunc(1, GetTestNames))); testsColumn.Expand = true; list.Selection.Changed += delegate { Gtk.TreeIter it; list.Selection.GetSelected(out it); Gtk.TreeViewColumn ccol; Gtk.TreePath path; list.GetCursor(out path, out ccol); list.SetCursor(path, ccol, true); }; Button b = new Button(); b.Label = "Add row"; b.Clicked += (o, e) => { var project = new ComboChoice { Text = GetProjectNames()[0] }; var test = new ComboChoice { Text = EmptyChoice }; rows.Add(Tuple.Create(project, test)); store.AppendValues(project, test); }; box.Spacing = 6; scrollArea.Add(list); box.PackStart(scrollArea); box.PackStart(b, false, false, 5); box.ShowAll(); return(box); }