Пример #1
0
        private void Delete()
        {
            if (treeView.SelectedNode == null)
            {
                Message("Nothing selected." + Environment.NewLine);
                return;
            }

            TreeNode parent = treeView.SelectedNode.Parent;

            if ((parent == null) || !(parent.Tag is ValueInfo))
            {
                Message("Cannot remove this node." + Environment.NewLine);
                return;
            }

            ValueInfo valueInfo = (ValueInfo)parent.Tag;

            DatatreeDotNet.dt_type_t t = DatatreeDotNet.dt_value_type(valueInfo.Value);
            if (t == DatatreeDotNet.dt_type_t.DT_ARRAY)
            {
                uint   w = (uint)parent.Nodes.IndexOf(treeView.SelectedNode);
                IntPtr o = IntPtr.Zero;
                DatatreeDotNet.dt_create_value(datatree, ref o, OnError, null, DatatreeDotNet.dt_type_t.DT_NULL);
                DatatreeDotNet.dt_remove_array_elem_at
                (
                    datatree,
                    DatatreeDotNet.dt_value_data(valueInfo.Value),
                    w,
                    o
                );
                DatatreeDotNet.dt_destroy_value(datatree, o);
            }
            else if (t == DatatreeDotNet.dt_type_t.DT_OBJECT)
            {
                uint   w = (uint)parent.Nodes.IndexOf(treeView.SelectedNode);
                IntPtr k = IntPtr.Zero;
                IntPtr v = IntPtr.Zero;
                DatatreeDotNet.dt_create_value(datatree, ref k, OnError, null, DatatreeDotNet.dt_type_t.DT_NULL);
                DatatreeDotNet.dt_create_value(datatree, ref v, OnError, null, DatatreeDotNet.dt_type_t.DT_NULL);
                DatatreeDotNet.dt_remove_object_member_at
                (
                    datatree,
                    DatatreeDotNet.dt_value_data(valueInfo.Value),
                    w,
                    k,
                    v
                );
                DatatreeDotNet.dt_destroy_value(datatree, k);
                DatatreeDotNet.dt_destroy_value(datatree, v);
            }
            else
            {
                Debug.Fail("Impossible");
            }

            parent.Nodes.Remove(treeView.SelectedNode);

            EditState = EditStates.OpenedNotSaved;
        }
Пример #2
0
        private void WalkValue(TreeNode node, IntPtr v, bool readOnly)
        {
            DatatreeDotNet.dt_type_t t = DatatreeDotNet.dt_value_type(v);
            switch (t)
            {
            case DatatreeDotNet.dt_type_t.DT_NULL:
            case DatatreeDotNet.dt_type_t.DT_BOOL:
            case DatatreeDotNet.dt_type_t.DT_LONG:
            case DatatreeDotNet.dt_type_t.DT_DOUBLE:
            case DatatreeDotNet.dt_type_t.DT_STRING:
                node.Tag = new ValueInfo(v, readOnly, false);

                string str = Util.FormatValue(datatree, v, false);
                node.Text = str;
                if (node.Nodes.Count != 0)
                {
                    node.Nodes.Clear();
                }
                break;

            case DatatreeDotNet.dt_type_t.DT_OBJECT:
                node.Tag = new ValueInfo(v, readOnly, true);

                node.Text = "{ ... }";
                WalkObject(node, DatatreeDotNet.dt_value_data(v));
                break;

            case DatatreeDotNet.dt_type_t.DT_ARRAY:
                node.Tag = new ValueInfo(v, readOnly, true);

                node.Text = "[ ... ]";
                WalkArray(node, DatatreeDotNet.dt_value_data(v));
                break;
            }
        }
Пример #3
0
        private void Add(Func <string> source)
        {
            if (treeView.SelectedNode == null)
            {
                Message("Nothing selected." + Environment.NewLine);
                return;
            }

            if (!(treeView.SelectedNode.Tag is ValueInfo))
            {
                Message("Cannot add to this node." + Environment.NewLine);
                return;
            }

            ValueInfo valueInfo = (ValueInfo)treeView.SelectedNode.Tag;

            DatatreeDotNet.dt_type_t t = DatatreeDotNet.dt_value_type(valueInfo.Value);
            if (t == DatatreeDotNet.dt_type_t.DT_ARRAY)
            {
                string ipt = source();

                IntPtr o = IntPtr.Zero;
                DatatreeDotNet.dt_create_value(datatree, ref o, OnError, ipt);
                uint idx = 0;
                DatatreeDotNet.dt_add_array_elem
                (
                    datatree,
                    DatatreeDotNet.dt_value_data(valueInfo.Value),
                    o,
                    ref idx
                );
            }
            else if (t == DatatreeDotNet.dt_type_t.DT_OBJECT)
            {
                string ipt = source();

                IntPtr k = IntPtr.Zero;
                IntPtr v = IntPtr.Zero;
                DatatreeDotNet.dt_create_value(datatree, ref k, OnError, ipt);
                DatatreeDotNet.dt_create_value(datatree, ref v, OnError, "null");
                uint idx = 0;
                DatatreeDotNet.dt_status_t status = DatatreeDotNet.dt_add_object_member
                                                    (
                    datatree,
                    DatatreeDotNet.dt_value_data(valueInfo.Value),
                    k,
                    v,
                    ref idx
                                                    );
                if (status == DatatreeDotNet.dt_status_t.DT_KEY_EXISTS)
                {
                    Message("A key-value pair with the same key already exists." + Environment.NewLine);
                    return;
                }
            }
            else
            {
                Message("Cannot add to this node." + Environment.NewLine);
                return;
            }

            treeView.SelectedNode.Nodes.Add(new TreeNode());

            UpdateNodes();

            EditState = EditStates.OpenedNotSaved;
        }