private void ctrlValue_ValueChanged(object sender, string text) { if (treeView.SelectedNode == null) { return; } if (!(treeView.SelectedNode.Tag is ValueInfo)) { return; } ValueInfo valueInfo = (ValueInfo)treeView.SelectedNode.Tag; if (valueInfo.Readonly) { return; } IntPtr v = IntPtr.Zero; int r = DatatreeDotNet.dt_create_value(datatree, ref v, OnError, text); if (r == 0) { ctrlValue.Revert(); return; } DatatreeDotNet.dt_value_mem_swap(valueInfo.Value, v); DatatreeDotNet.dt_destroy_value(datatree, v); EditState = EditStates.OpenedNotSaved; UpdateNodes(); }
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 txtCmd_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { if (string.IsNullOrEmpty(txtCmd.Text)) { return; } if (txtCmd.Text == "clear") { txtOutput.Clear(); if (!txtCmd.Items.Contains(txtCmd.Text)) { txtCmd.Items.Add(txtCmd.Text); } txtCmd.Text = string.Empty; return; } DatatreeDotNet.dt_clear_command(command); DatatreeDotNet.dt_parse_command(command, OnError, txtCmd.Text); IntPtr ret = IntPtr.Zero; DatatreeDotNet.dt_query_status_t status = DatatreeDotNet.dt_query(DatatreeDotNet.dt_root_value(datatree), command, ref ret); if (status == DatatreeDotNet.dt_query_status_t.DTQ_GOT_NOTHING) { } else if (status == DatatreeDotNet.dt_query_status_t.DTQ_GOT_REF || status == DatatreeDotNet.dt_query_status_t.DTQ_GOT_NOREF) { string str = Util.FormatValue(datatree, ret, false); Message("Queried:" + Environment.NewLine + str + Environment.NewLine); if (status == DatatreeDotNet.dt_query_status_t.DTQ_GOT_NOREF) { DatatreeDotNet.dt_destroy_value(datatree, ret); } if (!txtCmd.Items.Contains(txtCmd.Text)) { txtCmd.Items.Add(txtCmd.Text); } } txtCmd.Text = string.Empty; } }
static void Main(string[] args) { IntPtr data_tree = IntPtr.Zero; IntPtr v0 = IntPtr.Zero; IntPtr v1 = IntPtr.Zero; IntPtr iv = IntPtr.Zero; IntPtr a = IntPtr.Zero; uint idx = 0; IntPtr fmt = IntPtr.Zero; IntPtr bin = IntPtr.Zero; uint sz = 0; DatatreeDotNet.dt_create_datatree(ref data_tree, _on_parse_error); // common test DatatreeDotNet.dt_load_datatree_string(data_tree, "'dt test'\n{\n \"hello\" : \"world\",\n \"data_tree\" : \"test\"\n}"); // object key test DatatreeDotNet.dt_load_datatree_string(data_tree, "{ { \"hello\" : \"world\" } : 123 }"); // array test DatatreeDotNet.dt_load_datatree_string(data_tree, "{ [\"hello\", \"world\"] : [123, 3.14] }"); // multy types test DatatreeDotNet.dt_load_datatree_string(data_tree, "{ null : [2123, 3.1415926535897932384626, \"test\"], true : false, name : paladin_t }"); // search test DatatreeDotNet.dt_create_value(data_tree, ref v0, _on_parse_error, "a_%s_b", "and"); DatatreeDotNet.dt_destroy_value(data_tree, v0); DatatreeDotNet.dt_create_value(data_tree, ref v0, _on_parse_error, null, DatatreeDotNet.dt_type_t.DT_STRING, "name"); DatatreeDotNet.dt_find_object_member_by_key(data_tree, DatatreeDotNet.dt_root_as_object(data_tree), v0, ref iv, ref idx); DatatreeDotNet.dt_destroy_value(data_tree, v0); // insert test DatatreeDotNet.dt_create_value(data_tree, ref v0, _on_parse_error, null, DatatreeDotNet.dt_type_t.DT_LONG, 123456); DatatreeDotNet.dt_create_value(data_tree, ref v1, _on_parse_error, null, DatatreeDotNet.dt_type_t.DT_STRING, "value test"); DatatreeDotNet.dt_insert_object_member(data_tree, DatatreeDotNet.dt_root_as_object(data_tree), 1, v0, v1); DatatreeDotNet.dt_destroy_value(data_tree, v0); DatatreeDotNet.dt_destroy_value(data_tree, v1); DatatreeDotNet.dt_object_member_at(data_tree, DatatreeDotNet.dt_root_as_object(data_tree), 0, ref v0, ref v1); a = DatatreeDotNet.dt_value_data(v1); DatatreeDotNet.dt_create_value(data_tree, ref v0, _on_parse_error, null, DatatreeDotNet.dt_type_t.DT_STRING, "inserted"); DatatreeDotNet.dt_insert_array_elem(data_tree, a, 1, v0); DatatreeDotNet.dt_destroy_value(data_tree, v0); // delete test DatatreeDotNet.dt_delete_array_elem_at(data_tree, a, 1); DatatreeDotNet.dt_delete_object_member_at(data_tree, DatatreeDotNet.dt_root_as_object(data_tree), 2); // update test // foreach test DatatreeDotNet.dt_foreach_object_member(data_tree, DatatreeDotNet.dt_root_as_object(data_tree), _walk_object_members); DatatreeDotNet.dt_foreach_array_elem(data_tree, a, _walk_array_elements); // clone test DatatreeDotNet.dt_create_value(data_tree, ref v0, _on_parse_error, null, null); DatatreeDotNet.dt_clone_value(data_tree, DatatreeDotNet.dt_root_value(data_tree), v0); DatatreeDotNet.dt_format_value(data_tree, v0, ref fmt, DatatreeDotNet.dt_bool_t.DT_FALSE); string str = Marshal.PtrToStringAnsi(fmt); Debug.Print("cloned value:\n{0}\n", str); DatatreeDotNet.dt_free(ref fmt); DatatreeDotNet.dt_destroy_value(data_tree, v0); // serialize test DatatreeDotNet.dt_save_datatree_bin(data_tree, ref bin, ref sz); DatatreeDotNet.dt_load_datatree_bin(data_tree, bin); DatatreeDotNet.dt_free(ref bin); // format test DatatreeDotNet.dt_save_datatree_string(data_tree, ref fmt, DatatreeDotNet.dt_bool_t.DT_FALSE); str = Marshal.PtrToStringAnsi(fmt); Debug.Print("root value:\n{0}\n", str); DatatreeDotNet.dt_free(ref fmt); // cpp helper test //dt::Value vp0(data_tree, null, DT_SHORT, 123); //dt::Value vp1(vp0); //dt::Value vp2; //vp2.cloneFrom(vp1); //vp2.cloneFrom(data_tree, dt_root_value(data_tree)); //std::string vpstr = vp2.toString(); //int cmp = vp2.compare(vp1); //cmp = vp2.compare(dt_root_value(data_tree)); DatatreeDotNet.dt_unload_datatree(data_tree); DatatreeDotNet.dt_destroy_datatree(data_tree); }