Exemplo n.º 1
0
        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());
            }
        }
Exemplo n.º 2
0
        public override PObject Clone()
        {
            var array = new PArray();

            foreach (var item in this)
            {
                array.Add(item.Clone());
            }
            return(array);
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
            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);
                }
            }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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());
        }