// ItemsControl = TreeView 와 MyTreeViewItem 의 상위 클래스 ItemsControl.Items 요소만 쓴다. public JsonTreeViewItem() { this.Header = new JsonTreeViewItemHeader(); this.Name = "tvi_" + count_tvi++; this.AllowDrop = true; this.IsExpanded = true; }
// ItemsControl = TreeView 와 MyTreeViewItem 의 상위 클래스 ItemsControl.Items 요소만 쓴다. public JsonTreeViewItem() { this.Style = (Style)(App.Current.Resources["MetroTreeViewItem"]); this.Header = new JsonTreeViewItemHeader(); this.Name = "tvi_" + count_tvi++; this.AllowDrop = true; this.IsExpanded = true; }
// Json 버튼은 JsonTreeViewItem.Header.children 에 존재 protected override void OnClick() { base.OnClick(); JsonTreeViewItemHeader jtvih = this.Parent as JsonTreeViewItemHeader; if (jtvih == null) { return; } JsonTreeViewItem jtvi = jtvih.Parent as JsonTreeViewItem; if (jtvi == null) { return; } jtvi.Remove(); //FileContoller.write(JsonInfo.current.filename, JsonInfo.current.jtok_root.ToString()); }
public JsonAddButton() { this.Content = '+'; this.Background = Brushes.LightGreen; // Json 버튼은 JsonTreeViewItem.Header.children 에 존재 this.Click += delegate(object sender, RoutedEventArgs e) { JsonTreeViewItemHeader jtvih = this.Parent as JsonTreeViewItemHeader; if (jtvih == null) { return; } JsonTreeViewItem jtvi = jtvih.Parent as JsonTreeViewItem; if (jtvi == null) { return; } JsonButton button = sender as JsonButton; //tvi.Add(sender as JsonButton, convertToTreeView_recursive); //FileContoller.write(JSonInfo.current.filename, JSonInfo.current.jtok_root.ToString()); }; }
// Json 버튼은 JsonTreeViewItem.Header.children 에 존재 protected override void OnClick() { base.OnClick(); JsonTreeViewItemHeader jtvih = this.Parent as JsonTreeViewItemHeader; if (jtvih == null) { return; } JsonTreeViewItem jtvi = jtvih.Parent as JsonTreeViewItem; if (jtvi == null) { return; } if (jtvi.type == JsonTreeViewItem.JsonType.JArray) { JsonTreeViewItem child_tvi = new JsonTreeViewItem(); KeyTextBox tb_key = new KeyTextBox(jtvi.getCountChildProperty().ToString(), false); child_tvi.Header.AddItem(tb_key); KeyTextBox tb_type = new KeyTextBox("object", false); child_tvi.Header.AddItem(tb_type); child_tvi.type = JsonTreeViewItem.JsonType.JObject; jtvi.AddItem(child_tvi); } else { // window_addJson showdialog() Window_AddJsonItem popup = new Window_AddJsonItem(); Point pt = this.PointToScreen(new Point(0, 0)); popup.Left = pt.X; popup.Top = pt.Y; // cancel return if (popup.ShowDialog() != true) { return; } JsonTreeViewItem.convertToTreeView_recursive(jtvi, new JProperty(popup.key, popup.value)); } //JToken tmp = jtvi.Parent; //// tmp == root 일때 //if(tmp is JObject) // ; //else //{ // JProperty jprop = tmp as JProperty; // tmp = jprop.Value; //} //JToken add_jtok = null; //if(tmp is JArray) //{ // JArray jarr = tmp as JArray; // // add Jtok_root // add_jtok = new JObject(); // jarr.Add(add_jtok); //} //else if(tmp is JObject) //{ // JObject jobj = tmp as JObject; // // window_addJson showdialog() // popup_AddJsonItem popup = new popup_AddJsonItem(); // Point pt = sender.PointToScreen(new Point(0, 0)); // popup.Left = pt.X; // popup.Top = pt.Y; // // cancel return // if(popup.ShowDialog() != true) // return; // foreach(JProperty v in jobj.Properties()) // { // // 키 중복 // if(v.Name == popup.key) // return; // } // // ok return & add Jtok_root // add_jtok = new JProperty(popup.key, popup.value); // jobj.Add(add_jtok); //} //// add to jtree_root //if(add_jtok != null) // makeTree(this, add_jtok); ////tvi.Add(sender as JsonButton, convertToTreeView_recursive); ////FileContoller.write(JSonInfo.current.filename, JSonInfo.current.jtok_root.ToString()); }
static void convertToJToken_recursive(JsonTreeViewItem tvi_cur, JObject jobj_cur) { if (tvi_cur == null || jobj_cur == null) { return; } JToken cur_jtok = jobj_cur; // 여기서부터는 property 로 시작 foreach (var v in tvi_cur.Items) { JsonTreeViewItem tvi_child = v as JsonTreeViewItem; if (tvi_child == null) { continue; } JsonTreeViewItemHeader pan = tvi_child.Header as JsonTreeViewItemHeader; if (pan == null) { continue; } // pan(MyTreeViewItem.Header) = key, val or val.type, button JsonTextBox tb_key = pan.Children[0] as JsonTextBox; JsonTextBox tb_val = pan.Children[1] as JsonTextBox; if (tb_val is KeyTextBox) { KeyTextBox tb_type = tb_val as KeyTextBox; switch (tvi_child.type) { case JsonTreeViewItem.JsonType.JObject: { JObject jobj = new JObject(); JProperty jprop = new JProperty(tb_key.Text, jobj); (cur_jtok as JObject).Add(jprop); convertToJToken_recursive(tvi_child, jobj); } break; case JsonTreeViewItem.JsonType.JArray: { JArray jarr = new JArray(); JProperty jprop = new JProperty(tb_key.Text, jarr); (cur_jtok as JObject).Add(jprop); for (int i = 0; i < tvi_child.Items.Count; i++) { JObject jobj = new JObject(); jarr.Add(jobj); convertToJToken_recursive(tvi_child.Items[i] as JsonTreeViewItem, jobj); } } break; } } else { JProperty jprop = new JProperty(tb_key.Text, tb_val.Text); (cur_jtok as JObject).Add(jprop); } } }