void RefreshKeyStore() { TreeIter iter; 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); keys = PListScheme.AvailableKeys(obj, CurrentTree); } } keyStore.Clear(); if (keys != null) { var sortedKeys = new List <PListScheme.SchemaItem> (keys); if (ShowDescriptions) { sortedKeys.Sort((x, y) => StringComparer.CurrentCulture.Compare(x.Description, y.Description)); } else { sortedKeys.Sort((x, y) => StringComparer.CurrentCulture.Compare(x.Identifier, y.Identifier)); } foreach (var key in sortedKeys) { keyStore.AppendValues(ShowDescriptions ? key.Description : key.Identifier, key); } } }
void AddNewArrayElement(PArray array) { var values = PListScheme.AvailableKeys(array, CurrentTree); if (values == null) { array.Add(PObject.Create(DefaultNewObjectType)); } else if (values.Any()) { array.Add(values.First().Create()); } }
void AddNewDictionaryElement(PDictionary dict) { var values = PListScheme.AvailableKeys(dict, CurrentTree); if (values == null) { string name = "newProperty"; while (dict.ContainsKey(name)) { name += "_"; } dict.Add(name, PObject.Create(DefaultNewObjectType)); } else if (values.Any()) { var value = values.FirstOrDefault(); dict.Add(value.Identifier, value.Create()); } }