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; }
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; } }
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; }