Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan McGovern <alan.mcgovern@gmail.com>2011-11-07 20:25:28 +0400
committerMike Krüger <mkrueger@xamarin.com>2011-11-10 19:28:28 +0400
commit97609679240b6e46515401b96b5a1ed97ec5c375 (patch)
tree5c84def5cf12ee9e6b1849dfe15b01be5fd74840 /main/src/addins/MonoDevelop.MacDev
parent76933c970226159596c0792a5429b8969ab19b63 (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.cs73
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);