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>2012-03-28 20:41:34 +0400
committerAlan McGovern <alan.mcgovern@gmail.com>2012-03-29 22:04:50 +0400
commit9aa562bb96bfd61b7fef4da1181e1c365dbabdf2 (patch)
tree8fd10c8dfa69093ae1ebe0bd56cf9f71e54aa3ae
parente8d4d05f3664a24f3963dfb5c89a53fc66f3da36 (diff)
[MacDev] Handle the difference between 'no values left to add' and 'no idea what to add'
If we have no idea what to add (i.e. the key is not part of the schema), then we should just add a regular PString/whatever and let the user change it as required. If the key is part of the schema, but we have used all the allowed values, just do nothing.
-rw-r--r--main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs59
-rw-r--r--main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListScheme.cs6
2 files changed, 38 insertions, 27 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 c932025984..59986751df 100644
--- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs
+++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/CustomPropertiesWidget.cs
@@ -320,18 +320,23 @@ namespace MonoDevelop.MacDev.PlistEditor
if (!treeStore.GetIterFromString (out iter, args.Path))
return;
- var obj = treeStore.GetValue (iter, 1);
- if (obj is PBoolean) {
- valueStore.AppendValues (PBoolean.Yes);
- valueStore.AppendValues (PBoolean.No);
- } else {
- var key = (PListScheme.SchemaItem)treeStore.GetValue (iter, 2);
- if (key != null) {
- var descr = new List<string> (key.Values.Select (v => ShowDescriptions ? v.Description : v.Identifier));
- descr.Sort ();
- foreach (var val in descr) {
- valueStore.AppendValues (val);
- }
+ var actualObj = (PObject) treeStore.GetValue (iter, 1);
+
+ if (actualObj.Parent is PArray || actualObj.Parent is PDictionary)
+ treeStore.IterParent (out iter, iter);
+
+ var obj = (PObject) treeStore.GetValue (iter, 1);
+ var key = (PListScheme.SchemaItem)treeStore.GetValue (iter, 2);
+ var values = PListScheme.AvailableValues (obj, key, CurrentTree);
+ if (values != null) {
+ // Always include the current item in the dropdown so the user can select
+ // the value that's already there.
+ values.Add (CurrentTree [actualObj]);
+
+ var descr = new List<string> (values.Select (v => ShowDescriptions ? v.Description : v.Identifier));
+ descr.Sort ();
+ foreach (var val in descr) {
+ valueStore.AppendValues (val);
}
}
};
@@ -434,23 +439,24 @@ namespace MonoDevelop.MacDev.PlistEditor
void AddNewArrayElement (PArray array, PListScheme.SchemaItem key)
{
- var value = PListScheme.AvailableValues (array, key, CurrentTree).FirstOrDefault ();
- if (value == null) {
+ var values = PListScheme.AvailableValues (array, key, CurrentTree);
+ if (values == null) {
array.Add (PObject.Create (DefaultNewObjectType));
- } else {
- array.Add (value.Create ());
+ } else if (values.Any ()) {
+ array.Add (values.First ().Create ());
}
}
void AddNewDictionaryElement (PDictionary dict, PListScheme.SchemaItem key)
{
- var value = PListScheme.AvailableValues (dict, key, CurrentTree).FirstOrDefault ();
- if (value == null) {
+ var values = PListScheme.AvailableValues (dict, key, CurrentTree);
+ if (values == null) {
string name = "newNode";
while (dict.ContainsKey (name))
name += "_";
dict.Add (name, PObject.Create (DefaultNewObjectType));
- } else {
+ } else if (values.Any ()) {
+ var value = values.FirstOrDefault ();
dict.Add (value.Identifier, value.Create ());
}
}
@@ -515,11 +521,16 @@ namespace MonoDevelop.MacDev.PlistEditor
void RefreshKeyStore ()
{
TreeIter iter;
- IEnumerable<PListScheme.SchemaItem> keys = Scheme.Keys.Cast <PListScheme.SchemaItem> ();;
-
- if (treeview.Selection.GetSelected (out iter) && treeStore.IterParent (out iter, iter)) {
- var selectedKey = iter.Equals (TreeIter.Zero) ? null : (PListScheme.SchemaItem) treeStore.GetValue (iter, 2);
- keys = (selectedKey ?? PListScheme.Key.Empty).Values;
+ var keys = Scheme.Keys.Cast <PListScheme.SchemaItem> ();
+ if (treeview.Selection.GetSelected (out iter)) {
+ var currentObj = (PObject) treeStore.GetValue (iter, 1);
+ if (treeStore.IterParent (out iter, iter)) {
+ var obj = (PObject) treeStore.GetValue (iter, 1);
+ var key = (PListScheme.SchemaItem) treeStore.GetValue (iter, 2);
+ var k = PListScheme.AvailableValues (obj, key, CurrentTree);
+ k.Add (CurrentTree [currentObj]);
+ keys = k;
+ }
}
keyStore.Clear ();
diff --git a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListScheme.cs b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListScheme.cs
index f99b35e28f..17c6c2f12f 100644
--- a/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListScheme.cs
+++ b/main/src/addins/MonoDevelop.MacDev/MonoDevelop.MacDev.PlistEditor/PListScheme.cs
@@ -127,13 +127,13 @@ namespace MonoDevelop.MacDev.PlistEditor
return keys.FirstOrDefault (k => k.Identifier == id);
}
- public static IList<SchemaItem> AvailableValues (PObject obj, SchemaItem key, Dictionary<PObject, SchemaItem> tree)
+ public static List<SchemaItem> AvailableValues (PObject obj, SchemaItem key, Dictionary<PObject, SchemaItem> tree)
{
if (obj is PBoolean)
- return new [] { BooleanYes, BooleanNo };
+ return new List<SchemaItem> { BooleanYes, BooleanNo };
if (key == null)
- return new SchemaItem [0];
+ return null;
var values = key.Values.Cast<PListScheme.SchemaItem> ().ToList ();