diff options
author | Alan McGovern <alan.mcgovern@gmail.com> | 2011-11-07 20:25:28 +0400 |
---|---|---|
committer | Alan McGovern <alan.mcgovern@gmail.com> | 2011-11-10 19:01:08 +0400 |
commit | 22dac72b5d4f15c6d6c361c53bc0ab59f8e20ecd (patch) | |
tree | 4a2512c6778ebb3d16126387c60811c7e4966d0f /main/src/addins/MonoDevelop.MacDev | |
parent | d44d6cfed21cecd5aa392e71293f9116e5fbe96d (diff) |
[MacDev] Refactor the add/remove buttons used in the plist editor
It is currently a little confusing as to where exactly a new item will
appear when using the + and - buttons to add remove keys. For example
if I click on a key which is an array type and then click +, i'd expect
a new item to be added to the array. Instead, we get a new item added
at the same level as the key I have selected.
To attempt to make this more intuitive we now render a - button on items
which can be removed and we have a special placeholder which is added to
the end of each array/dictionary which is used to add a new item to the
array/dictionary. Fix for #1858.
Diffstat (limited to 'main/src/addins/MonoDevelop.MacDev')
-rw-r--r-- | main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs | 73 |
1 files changed, 32 insertions, 41 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 c55e3c3de5..bb1bf8e910 100644 --- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs +++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs @@ -37,6 +37,8 @@ namespace MonoDevelop.MacDev.PlistEditor [System.ComponentModel.ToolboxItem(true)] public partial class CustomPropertiesWidget : Gtk.Bin, IPListDisplayWidget { + const string AddKeyNode = "Add new entry"; + TreeStore treeStore = new TreeStore (typeof(string), typeof (PObject)); Gtk.ListStore keyStore = new ListStore (typeof (string), typeof (PListScheme.Key)); Gtk.ListStore valueStore = new ListStore (typeof (string), typeof (string)); @@ -201,12 +203,7 @@ namespace MonoDevelop.MacDev.PlistEditor class CellRendererButton : CellRenderer { Gdk.Pixbuf pixbuf; - - public bool Collapsed { - get; - set; - } - + public CellRendererButton (Gdk.Pixbuf pixbuf) { this.pixbuf = pixbuf; @@ -240,7 +237,7 @@ namespace MonoDevelop.MacDev.PlistEditor protected override void Render (Gdk.Drawable window, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags) { - if (Collapsed) + if (!Visible) return; int x = cell_area.X + 1; int y = cell_area.Y + 1; @@ -300,6 +297,10 @@ namespace MonoDevelop.MacDev.PlistEditor renderer.Sensitive = true; renderer.Text = key != null && ShowDescriptions ? GettextCatalog.GetString (key.Description) : id; }); + treeview1.AppendColumn (col); + + var iconSize = IconSize.Menu; + col = new TreeViewColumn { MinWidth = 25, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize }; var removeRenderer = new CellRendererButton (ImageService.GetPixbuf ("gtk-remove", IconSize.Menu)); removeRenderer.Clicked += delegate { @@ -313,47 +314,39 @@ namespace MonoDevelop.MacDev.PlistEditor }; col.PackEnd (removeRenderer, false); col.SetCellDataFunc (removeRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { - removeRenderer.Collapsed = !treeview1.Selection.IterIsSelected (iter); + removeRenderer.Visible = treeview1.Selection.IterIsSelected (iter) && !AddKeyNode.Equals (treeStore.GetValue (iter, 0)); }); var addRenderer = new CellRendererButton (ImageService.GetPixbuf ("gtk-add", IconSize.Menu)); addRenderer.Clicked += delegate { - Gtk.TreeIter iter; - bool hasSelection = treeview1.Selection.GetSelected (out iter); - PObject obj = null; - if (hasSelection) - obj = (PObject)treeStore.GetValue (iter, 1); - if (obj == null) + Gtk.TreeIter iter = Gtk.TreeIter.Zero; + if (!treeview1.Selection.GetSelected (out iter)) return; - var newObj = new PString (""); - PObject parent = obj.Parent; - if (parent is PArray) { - var arr = (PArray)parent; + PObject obj; + if (treeStore.IterParent (out iter, iter)) + obj = (PObject) treeStore.GetValue (iter, 1); + obj = obj ?? nsDictionary; + + var newObj = new PString (""); + if (obj is PArray) { + var arr = (PArray) obj; arr.Add (newObj); - return; - } - - var dict = parent as PDictionary; - if (dict == null) - return; - - string name = "newNode"; - while (dict.ContainsKey (name)) - name += "_"; - if (obj == null) { + } else if (obj is PDictionary) { + string name = "newNode"; + var dict = (PDictionary) obj; + while (dict.ContainsKey (name)) + name += "_"; dict.Add (name ,newObj); } else { - dict.InsertAfter (obj.Key, name, newObj); + return; } }; col.PackEnd (addRenderer, false); col.SetCellDataFunc (addRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { - addRenderer.Collapsed = !treeview1.Selection.IterIsSelected (iter); + addRenderer.Visible = treeview1.Selection.IterIsSelected (iter) && AddKeyNode.Equals (treeStore.GetValue (iter, 0)); }); - - treeview1.AppendColumn (col); treeview1.RowExpanded += delegate(object o, RowExpandedArgs args) { @@ -485,13 +478,13 @@ namespace MonoDevelop.MacDev.PlistEditor Dictionary<PObject, Gtk.TreeIter> iterTable = new Dictionary<PObject, Gtk.TreeIter> (); - void SetNoEntries (Gtk.TreeIter iter) + void AddCreateNewEntry (Gtk.TreeIter iter) { if (iter.Equals (TreeIter.Zero)) { - treeStore.AppendValues (GettextCatalog.GetString ("No entries"), null); + treeStore.AppendValues (GettextCatalog.GetString (AddKeyNode), null); return; } - treeStore.AppendValues (iter, GettextCatalog.GetString ("No entries"), null); + treeStore.AppendValues (iter, GettextCatalog.GetString (AddKeyNode), null); } void AddToTree (Gtk.TreeStore treeStore, Gtk.TreeIter iter, PDictionary dict) @@ -507,8 +500,7 @@ namespace MonoDevelop.MacDev.PlistEditor if (expandedObjects.Contains (item.Value)) treeview1.ExpandRow (treeStore.GetPath (subIter), true); } - if (dict.Count == 0) - SetNoEntries (iter); + AddCreateNewEntry (iter); if (!rebuildArrays.Contains (dict)) { rebuildArrays.Add (dict); @@ -546,9 +538,8 @@ namespace MonoDevelop.MacDev.PlistEditor if (expandedObjects.Contains (item)) treeview1.ExpandRow (treeStore.GetPath (subIter), true); } - - if (arr.Count == 0) - SetNoEntries (iter); + + AddCreateNewEntry (iter); if (!rebuildArrays.Contains (arr)) { rebuildArrays.Add (arr); |