diff options
author | Alan McGovern <alan.mcgovern@gmail.com> | 2012-03-26 19:52:11 +0400 |
---|---|---|
committer | Alan McGovern <alan.mcgovern@gmail.com> | 2012-03-29 22:03:54 +0400 |
commit | 8a073ae5547a70b97a550763fe4578ac0bf2904a (patch) | |
tree | cf4c5a37c8e7ac5ea5cd9415961f9c42dba1478b | |
parent | 889a954308ea5fbc88d528ae15db8dc1692e5100 (diff) |
[MacDev] Harmonise the context menu with the regular 'add' button.
The same code is executed by both paths now. This removes a bunch of duplication
and will make it easier to add fancy features later on.
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs | 111 |
1 files changed, 40 insertions, 71 deletions
diff --git a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs index 4bd4dbdd61..ee69955817 100644 --- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs +++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs @@ -99,55 +99,20 @@ namespace MonoDevelop.MacDev.PlistEditor void ShowPopup (Gdk.EventButton evnt) { Gtk.TreeIter iter; - bool hasSelection = Selection.GetSelected (out iter); - PObject obj = null; - if (hasSelection) { - obj = (PObject)widget.treeStore.GetValue (iter, 1); - } else { + if (!Selection.GetSelected (out iter)) return; - } - + + PObject obj = (PObject)widget.treeStore.GetValue (iter, 1);; var menu = new Gtk.Menu (); var newKey = new Gtk.MenuItem (GettextCatalog.GetString ("New key")); menu.Append (newKey); - newKey.Activated += delegate(object sender, EventArgs e) { - var newObj = new PString (""); - - PObject parent; - if (obj != null) { - parent = obj.Parent; - } else { - Gtk.TreeIter parentIter; - if (widget.treeStore.IterParent (out parentIter, iter)) - parent = (PObject)widget.treeStore.GetValue (parentIter, 1); - else - parent = widget.RootPObject; - } - - if (parent is PArray) { - var arr = (PArray)parent; - arr.Add (newObj); - return; - } - - var dict = parent as PDictionary; - if (dict == null) - return; - - string name = "newNode"; - while (dict.ContainsKey (name)) - name += "_"; - dict[name] = newObj; - }; + newKey.Activated += widget.AddElement; - if (hasSelection && obj != null) { + if (obj != null) { var removeKey = new Gtk.MenuItem (GettextCatalog.GetString ("Remove key")); menu.Append (removeKey); - removeKey.Activated += delegate(object sender, EventArgs e) { - //the change event handler removes it from the store - obj.Remove (); - }; + removeKey.Activated += widget.RemoveElement; } if (widget.Scheme != null) { @@ -284,42 +249,14 @@ namespace MonoDevelop.MacDev.PlistEditor col = new TreeViewColumn { MinWidth = 25, Resizable = false, Sizing = Gtk.TreeViewColumnSizing.Fixed }; var removeRenderer = new CellRendererButton (ImageService.GetPixbuf ("gtk-remove", IconSize.Menu)); - removeRenderer.Clicked += delegate { - TreeIter iter; - bool hasSelection = treeview.Selection.GetSelected (out iter); - PObject obj = null; - if (hasSelection) { - obj = (PObject)treeStore.GetValue (iter, 1); - obj.Remove (); - } - }; + removeRenderer.Clicked += RemoveElement; col.PackEnd (removeRenderer, false); col.SetCellDataFunc (removeRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { removeRenderer.Visible = treeview.Selection.IterIsSelected (iter) && !AddKeyNode.Equals (treeStore.GetValue (iter, 0)); }); var addRenderer = new CellRendererButton (ImageService.GetPixbuf ("gtk-add", IconSize.Menu)); - addRenderer.Clicked += delegate { - // By default we assume we are adding something to the root dictionary/array - var iter = TreeIter.Zero; - var parent = RootPObject; - var parentKey = ""; - - // Grab the selected row and find out what the parent is. If there is a parent, then we - // will need it correlate against the schema to figure out what values are allowed to be - // entered here - if (treeview.Selection.GetSelected (out iter)) { - if (treeStore.IterParent (out iter, iter)) { - parentKey = (string) treeStore.GetValue (iter, 0); - parent = (PObject) treeStore.GetValue (iter, 1); - } - - if (parent is PArray) - AddNewArrayElement ((PArray) parent, Scheme.GetKey (parentKey)); - else if (parent is PDictionary) - AddNewDictionaryElement ((PDictionary) parent, Scheme.GetKey (parentKey)); - } - }; + addRenderer.Clicked += AddElement; col.PackEnd (addRenderer, false); col.SetCellDataFunc (addRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { @@ -422,6 +359,38 @@ namespace MonoDevelop.MacDev.PlistEditor treeview.Model = treeStore; } + public void AddElement (object o, EventArgs e) + { + // By default we assume we are adding something to the root dictionary/array + TreeIter iter; + var parent = RootPObject; + var parentKey = ""; + + // Grab the selected row and find out what the parent is. If there is a parent, then we + // will need it correlate against the schema to figure out what values are allowed to be + // entered here + if (treeview.Selection.GetSelected (out iter)) { + if (treeStore.IterParent (out iter, iter)) { + parentKey = (string) treeStore.GetValue (iter, 0); + parent = (PObject) treeStore.GetValue (iter, 1); + } + + if (parent is PArray) + AddNewArrayElement ((PArray) parent, Scheme.GetKey (parentKey)); + else if (parent is PDictionary) + AddNewDictionaryElement ((PDictionary) parent, Scheme.GetKey (parentKey)); + } + } + + public void RemoveElement (object o, EventArgs e) + { + TreeIter iter; + if (treeview.Selection.GetSelected (out iter)) { + var obj = (PObject)treeStore.GetValue (iter, 1); + obj.Remove (); + } + } + void AddNewArrayElement (PArray array, PListScheme.Key key) { if (key == null) { |