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()); } }
public override PObject Clone() { var array = new PArray(); foreach (var item in this) { array.Add(item.Clone()); } return(array); }
public static PObject FromNSObject(NSObject val) { if (val == null) { return(null); } var dict = val as NSDictionary; if (dict != null) { var result = new PDictionary(); foreach (var pair in dict) { string k = pair.Key.ToString(); result[k] = FromNSObject(pair.Value); } return(result); } var arr = val as NSArray; if (arr != null) { var result = new PArray(); uint count = arr.Count; for (uint i = 0; i < count; i++) { var obj = MonoMac.ObjCRuntime.Runtime.GetNSObject(arr.ValueAt(i)); if (obj != null) { result.Add(FromNSObject(obj)); } } return(result); } var str = val as NSString; if (str != null) { return(str.ToString()); } var nr = val as NSNumber; if (nr != null) { char t; unsafe { t = (char)*((byte *)MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend(val.Handle, selObjCType)); } if (t == 'c' || t == 'C' || t == 'B') { return(nr.BoolValue); } return(nr.Int32Value); } var date = val as NSDate; if (date != null) { return((DateTime)date); } var data = val as NSData; if (data != null) { var bytes = new byte[data.Length]; Marshal.Copy(data.Bytes, bytes, 0, (int)data.Length); return(bytes); } throw new NotSupportedException(val.ToString()); }
public PObject Create() { if (Type == PDictionary.Type) { var dictionary = new PDictionary(); foreach (var v in Values) { if (v.Required) { dictionary.Add(v.Identifier, v.Create()); } } // If nothing was required, create an initial one anyway if (dictionary.Count == 0) { var first = Values.FirstOrDefault(); if (first == null) { dictionary.Add("newNode", PObject.Create(PString.Type)); } else { dictionary.Add(first.Identifier ?? "newNode", first.Create()); } } return(dictionary); } else if (Type == PArray.Type) { var array = new PArray(); foreach (var v in Values) { if (v.Required) { array.Add(v.Create()); } } // If nothing was required, create an initial one anyway if (array.Count == 0) { var first = Values.FirstOrDefault(); if (first == null) { array.Add(PObject.Create(ArrayType)); } else { array.Add(first.Create()); } } return(array); } else if (Values.Any()) { return(Values.First().Create()); } else { var obj = PObject.Create(Type); if (!string.IsNullOrEmpty(Identifier) && !(this is Key)) { obj.SetValue(Identifier); } return(obj); } }
public StringListWidget() { treeview = new Gtk.TreeView(); treeview.HeadersVisible = false; PackStart(treeview, true, true, 0); ShowAll(); var col = new TreeViewColumn { MinWidth = CellRendererAddRemove.MinWidth, Resizable = true, Sizing = Gtk.TreeViewColumnSizing.Autosize }; var addRemoveRenderer = new CellRendererAddRemove(); col.PackStart(addRemoveRenderer, false); col.SetCellDataFunc(addRemoveRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { if (treeStore.GetValue(iter, (int)ListColumn.Object) != null) { addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Remove; } else { addRemoveRenderer.Action = CellRendererAddRemove.AddRemoveAction.Add; } }); addRemoveRenderer.RemoveClicked += delegate { TreeIter iter; bool hasSelection = treeview.Selection.GetSelected(out iter); PObject obj = null; if (hasSelection) { obj = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object); treeStore.Remove(ref iter); editing = true; obj.Remove(); editing = false; } }; addRemoveRenderer.AddClicked += delegate { PObject obj = new PString(string.Empty); TreeIter iter; bool hasSelection = treeview.Selection.GetSelected(out iter); if (hasSelection) { treeStore.SetValues(iter, string.Empty, obj); AppendCreateNewEntry(); editing = true; array.Add(obj); editing = false; } }; treeview.AppendColumn(col); var valueRenderer = new CellRendererCombo(); valueRenderer.Mode = CellRendererMode.Editable; valueRenderer.TextColumn = (int)ListColumn.DisplayValue; valueRenderer.Edited += delegate(object o, EditedArgs args) { TreeIter iter; if (!treeStore.GetIterFromString(out iter, args.Path)) { return; } var pObject = (PObject)treeStore.GetValue(iter, (int)ListColumn.Object); if (pObject == null) { return; } string newValue = !string.IsNullOrEmpty(ValuePrefix) ? ValuePrefix + args.NewText : args.NewText; pObject.SetValue(newValue); }; treeview.AppendColumn(GettextCatalog.GetString("Value"), valueRenderer, delegate(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter) { var text = (string)tree_model.GetValue(iter, (int)ListColumn.DisplayValue); var obj = (PObject)tree_model.GetValue(iter, (int)ListColumn.Object); var renderer = (CellRendererCombo)cell; renderer.Sensitive = obj != null; renderer.Editable = obj != null; renderer.Text = text; }); treeview.EnableGridLines = TreeViewGridLines.Horizontal; treeview.Model = treeStore; }
internal static PObject Conv(NSObject val) { if (val == null) { return(null); } if (val is NSDictionary) { var result = new PDictionary(); foreach (var pair in (NSDictionary)val) { string k = pair.Key.ToString(); result[k] = Conv(pair.Value); } return(result); } if (val is NSArray) { var result = new PArray(); var arr = NSArray.ArrayFromHandle <NSObject> (((NSArray)val).Handle); if (arr == null) { return(null); } foreach (var f in arr) { if (f != null) { result.Add(Conv(f)); } } return(result); } if (val is NSString) { return(((NSString)val).ToString()); } if (val is NSNumber) { var nr = (NSNumber)val; var str = Marshal.PtrToStringAnsi(MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend(val.Handle, selObjCType)); if (str == "c" || str == "C" || str == "B") { return(nr.BoolValue); } return(nr.Int32Value); } if (val is NSDate) { return(PDate.referenceDate + TimeSpan.FromSeconds(((NSDate)val).SecondsSinceReferenceDate)); } if (val is NSData) { var data = (NSData)val; var bytes = new byte[data.Length]; Marshal.Copy(data.Bytes, bytes, 0, (int)data.Length); return(bytes); } throw new NotSupportedException(val.ToString()); }