public StringListWidget() { treeview = new Gtk.TreeView(); treeview.HeadersVisible = false; PackStart(treeview, true, true, 0); ShowAll(); var col = new TreeViewColumn { MinWidth = CellRendererAddRemove.MinWidth, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize }; var addRemoveRenderer = new CellRendererAddRemove(); col.PackStart(addRemoveRenderer, false); col.SetCellDataFunc(addRemoveRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { if (treeStore.GetValue(iter, (int)ListColumn.Object) != null) { addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Remove; } else { addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Add; } }); addRemoveRenderer.RemoveClicked += delegate { TreeIter iter; bool hasSelection = treeview.Selection.GetSelected(out iter); PObject obj = null; if (hasSelection) { obj = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object); treeStore.Remove(ref iter); editing = true; obj.Remove(); editing = false; } }; addRemoveRenderer.AddClicked += delegate { PObject obj = new PString(string.Empty); TreeIter iter; bool hasSelection = treeview.Selection.GetSelected(out iter); if (hasSelection) { treeStore.SetValues(iter, string.Empty, obj); AppendCreateNewEntry(); editing = true; array.Add(obj); editing = false; } }; treeview.AppendColumn(col); var valueRenderer = new CellRendererCombo(); valueRenderer.Mode = CellRendererMode.Editable; valueRenderer.TextColumn = (int)ListColumn.DisplayValue; valueRenderer.Edited += delegate(object o, EditedArgs args) { TreeIter iter; if (!treeStore.GetIterFromString(out iter, args.Path)) { return; } var pObject = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object); if (pObject == null) { return; } string newValue = !string.IsNullOrEmpty(ValuePrefix) ? ValuePrefix + args.NewText : args.NewText; pObject.SetValue(newValue); }; treeview.AppendColumn(GettextCatalog.GetString("Value"), valueRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { var text = (string)tree_model.GetValue(iter, (int)ListColumn.DisplayValue); var obj = (PObject)tree_model.GetValue(iter, (int)ListColumn.Object); var renderer = (CellRendererCombo)cell; renderer.Sensitive = obj != null; renderer.Editable = obj != null; renderer.Text = text; }); treeview.EnableGridLines = TreeViewGridLines.Horizontal; treeview.Model = treeStore; }
public StringListWidget () { treeview = new Gtk.TreeView (); treeview.HeadersVisible = false; PackStart (treeview, true, true, 0); ShowAll (); var col = new TreeViewColumn { MinWidth = CellRendererAddRemove.MinWidth, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize }; var addRemoveRenderer = new CellRendererAddRemove (); col.PackStart (addRemoveRenderer, false); col.SetCellDataFunc (addRemoveRenderer, delegate (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { if (treeStore.GetValue (iter, (int) ListColumn.Object) != null) addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Remove; else addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Add; }); addRemoveRenderer.RemoveClicked += delegate { TreeIter iter; bool hasSelection = treeview.Selection.GetSelected (out iter); PObject obj = null; if (hasSelection) { obj = (PObject) treeStore.GetValue (iter, (int) ListColumn.Object); treeStore.Remove (ref iter); editing = true; obj.Remove (); editing = false; } }; addRemoveRenderer.AddClicked += delegate { PObject obj = new PString (string.Empty); TreeIter iter; bool hasSelection = treeview.Selection.GetSelected (out iter); if (hasSelection) { treeStore.SetValues (iter, string.Empty, obj); AppendCreateNewEntry (); editing = true; array.Add (obj); editing = false; } }; treeview.AppendColumn (col); var valueRenderer = new CellRendererCombo (); valueRenderer.Mode = CellRendererMode.Editable; valueRenderer.TextColumn = (int) ListColumn.DisplayValue; valueRenderer.Edited += delegate (object o, EditedArgs args) { TreeIter iter; if (!treeStore.GetIterFromString (out iter, args.Path)) return; var pObject = (PObject) treeStore.GetValue (iter, (int) ListColumn.Object); if (pObject == null) return; string newValue = !string.IsNullOrEmpty (ValuePrefix) ? ValuePrefix + args.NewText : args.NewText; pObject.SetValue (newValue); }; treeview.AppendColumn (GettextCatalog.GetString ("Value"), valueRenderer, delegate (TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { var text = (string) tree_model.GetValue (iter, (int) ListColumn.DisplayValue); var obj = (PObject) tree_model.GetValue (iter, (int) ListColumn.Object); var renderer = (CellRendererCombo) cell; renderer.Sensitive = obj != null; renderer.Editable = obj != null; renderer.Text = text; }); treeview.EnableGridLines = TreeViewGridLines.Horizontal; treeview.Model = treeStore; }