private void RebuildTree() { UpdateConfOptionsVars(); var temp = OptionsTreeView.SelectedItem as MyTreeViewItem; if (temp != null) { if (temp.Page != PageTypes.CurrentConfiguration && temp.Page != PageTypes.Unit) { temp.Page = PageTypes.TMUnits; } if (this.applySaveFlag) { temp.Page = PageTypes.Configuration; this.applySaveFlag = false; } } OptionsTreeView.Items.Clear(); this.treeBuilderUnitCount = 0; this.treeControllerCount = 0; this.tm1640UnitsTree = new List <bool>(); this.configurationOptions.NumberDisplays = this.configurationOptions.DisplayUnitConfigurations.Count - 1; BuildTreeViewNodes(0, OptionsTreeView.Items); if (temp == null) { return; } var queue = new Queue <MyTreeViewItem>(); queue.Enqueue(OptionsTreeView.Items[0] as MyTreeViewItem); while (queue.Count > 0) { // Take the next node from the front of the queue MyTreeViewItem node = queue.Dequeue(); if (node.Page == PageTypes.TMUnits && temp.Page == PageTypes.Unit) { node.IsExpanded = true; } if (node.Page == temp.Page && node.UnitNumber == temp.UnitNumber) { node.IsSelected = true; node.IsExpanded = true; continue; } // Add the node’s children to the back of the queue foreach (object child in node.Items) { queue.Enqueue(child as MyTreeViewItem); } } }
private static MyTreeViewItem GetMyTreeView(string text, string imagePath, PageTypes page, int unitNumber = -1, int screenNumber = -1) { var item = new MyTreeViewItem { Page = page, UnitNumber = unitNumber, ScreenNumber = screenNumber, IsExpanded = false }; // create stack panel var stack = new StackPanel { Orientation = Orientation.Horizontal }; // create Image var image = new Image { Source = new BitmapImage(new Uri("/iRduino;component/Resources/" + imagePath, UriKind.Relative)) }; // Label var lbl = new Label { Content = text }; image.Margin = new Thickness(4, 0, 0, 0); lbl.Margin = new Thickness(0); lbl.VerticalAlignment = VerticalAlignment.Center; stack.Margin = new Thickness(0); // Add into stack stack.Children.Add(image); stack.Children.Add(lbl); // assign stack to header item.Header = stack; if (page != PageTypes.Configuration) { item.Margin = new Thickness(-10, 0, 0, 0); } return(item); }
private static MyTreeViewItem GetMyTreeView(string text, string imagePath, PageTypes page, int unitNumber = -1, int screenNumber = -1) { var item = new MyTreeViewItem { Page = page, UnitNumber = unitNumber, ScreenNumber = screenNumber, IsExpanded = false }; // create stack panel var stack = new StackPanel { Orientation = Orientation.Horizontal }; // create Image var image = new Image { Source = new BitmapImage(new Uri("/iRduino;component/Resources/" + imagePath, UriKind.Relative)) }; // Label var lbl = new Label { Content = text }; image.Margin = new Thickness(4,0,0,0); lbl.Margin = new Thickness(0); lbl.VerticalAlignment = VerticalAlignment.Center; stack.Margin = new Thickness(0); // Add into stack stack.Children.Add(image); stack.Children.Add(lbl); // assign stack to header item.Header = stack; if (page != PageTypes.Configuration) { item.Margin = new Thickness(-10, 0, 0, 0); } return item; }
//Clear Tree before calling from external code. make sure to update _confOptions before!! private void BuildTreeViewNodes(int level, IList itemCollection) { if (this.configurationOptions == null) { MyTreeViewItem item0 = GetMyTreeView("Configurations", "wrench_orange.png", PageTypes.Configuration); item0.Selected += MyTreeItemSelected; itemCollection.Add(item0); } else { if (level == 6) { return; } switch (level) { case 0: MyTreeViewItem item0 = GetMyTreeView("Configurations", "wrench_orange.png", PageTypes.Configuration); item0.Selected += MyTreeItemSelected; item0.IsExpanded = true; BuildTreeViewNodes(level + 1, item0.Items); itemCollection.Add(item0); break; case 1: MyTreeViewItem item1 = GetMyTreeView(this.configurationOptions.Name, "script_gear.png", PageTypes.CurrentConfiguration); item1.Selected += MyTreeItemSelected; item1.IsExpanded = true; BuildTreeViewNodes(level + 1, item1.Items); itemCollection.Add(item1); break; case 2: if (this.configurationOptions.DisplayUnitConfigurations != null && this.configurationOptions.DisplayUnitConfigurations.Count > 0) { MyTreeViewItem itemTMUnits = GetMyTreeView("TM Display Units", "bricks.png", PageTypes.TMUnits); currentBranch = "TMUnits"; itemTMUnits.Selected += MyTreeItemSelected; BuildTreeViewNodes(level + 1, itemTMUnits.Items); itemCollection.Add(itemTMUnits); } if (this.configurationOptions.ControllerConfigurations != null && this.configurationOptions.ControllerConfigurations.Count > 0) { MyTreeViewItem itemControllers = GetMyTreeView("Controllers", "controller.png", PageTypes.None); currentBranch = "Controllers"; itemControllers.Focusable = false; itemControllers.Selected += MyTreeItemSelected; BuildTreeViewNodes(level + 1, itemControllers.Items); itemCollection.Add(itemControllers); } MyTreeViewItem itemAdOpts = GetMyTreeView("Advanced Options", "page_gear.png", PageTypes.AdvancedOptions); itemAdOpts.Selected += MyTreeItemSelected; itemCollection.Add(itemAdOpts); break; case 3: if (currentBranch == "TMUnits") { if (this.configurationOptions.DisplayUnitConfigurations != null && this.configurationOptions.DisplayUnitConfigurations.Count > 0) { for (int i = 0; i < this.configurationOptions.DisplayUnitConfigurations.Count; i++) { this.treeBuilderUnitCount = i; MyTreeViewItem item2; if (this.configurationOptions.DisplayUnitConfigurations[i].IsTM1640) { item2 = GetMyTreeView( String.Format("Unit {0} (TM1640)", i + 1), "brickBlue.png", PageTypes.Unit, i); this.tm1640UnitsTree.Add(true); } else { item2 = GetMyTreeView( String.Format("Unit {0}", i + 1), "brick.png", PageTypes.Unit, i); this.tm1640UnitsTree.Add(false); } item2.Selected += MyTreeItemSelected; BuildTreeViewNodes(level + 1, item2.Items); int count = this.tm1640UnitsTree.Count(flag => flag); if (count > Constants.MaxNumberTm1640Units) { MessageBox.Show( "Only Three or less TM1640 display units is supported currently"); } itemCollection.Add(item2); } } } if (currentBranch == "Controllers") { if (this.configurationOptions.ControllerConfigurations != null) { if (this.configurationOptions.ControllerConfigurations.Count > 0) { for (int i = 0; i < this.configurationOptions.ControllerConfigurations.Count; i++) { MyTreeViewItem itemJoy = GetMyTreeView( String.Format("Controller {0}", i + 1), "controller.png", PageTypes.JoystickButtons, i); itemJoy.Selected += MyTreeItemSelected; itemCollection.Add(itemJoy); this.treeControllerCount = i + 1; } } } } break; case 4: if (currentBranch == "TMUnits") { if (!this.configurationOptions.DisplayUnitConfigurations[this.treeBuilderUnitCount].IsTM1640) //not TM1640 { MyTreeViewItem item3 = GetMyTreeView( "Buttons", "joystick.png", PageTypes.Buttons, this.treeBuilderUnitCount); item3.Selected += MyTreeItemSelected; itemCollection.Add(item3); MyTreeViewItem item4 = GetMyTreeView( "LEDs", "lightbulb.png", PageTypes.LEDs, this.treeBuilderUnitCount); item4.Selected += MyTreeItemSelected; itemCollection.Add(item4); } MyTreeViewItem item5 = GetMyTreeView( "Screens", "layers.png", PageTypes.None, this.treeBuilderUnitCount); item5.Focusable = false; BuildTreeViewNodes(level + 1, item5.Items); itemCollection.Add(item5); } break; case 5: if (currentBranch == "TMUnits") { for (int j = 0; j < this.configurationOptions.DisplayUnitConfigurations[this.treeBuilderUnitCount] .Screens.Count; j++) { MyTreeViewItem item6 = GetMyTreeView( string.Format("Screen {0}", j + 1), "picture_empty.png", this.configurationOptions.DisplayUnitConfigurations[this.treeBuilderUnitCount] .IsTM1640 ? PageTypes.TM1640Screen : PageTypes.Screen, this.treeBuilderUnitCount, j); item6.Selected += MyTreeItemSelected; BuildTreeViewNodes(level + 1, item6.Items); itemCollection.Add(item6); } } break; } } }