123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using Terminal.Gui;
- using Terminal.Gui.Trees;
- namespace UICatalog.Scenarios {
- [ScenarioMetadata (Name: "Tree View", Description: "Simple tree view examples.")]
- [ScenarioCategory ("Controls"), ScenarioCategory ("TreeView")]
- public class TreeUseCases : Scenario {
- View currentTree;
- public override void Setup ()
- {
- Win.Title = this.GetName ();
- Win.Y = 1; // menu
- Win.Height = Dim.Fill (1); // status bar
- Application.Top.LayoutSubviews ();
- var menu = new MenuBar (new MenuBarItem [] {
- new MenuBarItem ("_File", new MenuItem [] {
- new MenuItem ("_Quit", "", () => Quit()),
- }),
- new MenuBarItem ("_Scenarios", new MenuItem [] {
- new MenuItem ("_Simple Nodes", "", () => LoadSimpleNodes()),
- new MenuItem ("_Rooms", "", () => LoadRooms()),
- new MenuItem ("_Armies With Builder", "", () => LoadArmies(false)),
- new MenuItem ("_Armies With Delegate", "", () => LoadArmies(true)),
- }),
- });
- Application.Top.Add (menu);
- var statusBar = new StatusBar (new StatusItem [] {
- new StatusItem(Key.CtrlMask | Key.Q, "~^Q~ Quit", () => Quit()),
- });
- Application.Top.Add (statusBar);
- // Start with the most basic use case
- LoadSimpleNodes ();
- }
- // Your data class
- private class House : TreeNode {
- // Your properties
- public string Address { get; set; }
- public List<Room> Rooms { get; set; }
- // ITreeNode member:
- public override IList<ITreeNode> Children => Rooms.Cast<ITreeNode> ().ToList ();
- public override string Text { get => Address; set => Address = value; }
- }
- private class Room : TreeNode {
- public string Name { get; set; }
- public override string Text { get => Name; set { Name = value; } }
- }
- private void LoadRooms ()
- {
- var myHouse = new House () {
- Address = "23 Nowhere Street",
- Rooms = new List<Room>{
- new Room(){Name = "Ballroom"},
- new Room(){Name = "Bedroom 1"},
- new Room(){Name = "Bedroom 2"}
- }
- };
- if (currentTree != null) {
- Win.Remove (currentTree);
- currentTree.Dispose ();
- }
- var tree = new TreeView () {
- X = 0,
- Y = 0,
- Width = 40,
- Height = 20
- };
- Win.Add (tree);
- tree.AddObject (myHouse);
- currentTree = tree;
- }
- private abstract class GameObject {
- }
- private class Army : GameObject {
- public string Designation { get; set; }
- public List<Unit> Units { get; set; }
- public override string ToString ()
- {
- return Designation;
- }
- }
- private class Unit : GameObject {
- public string Name { get; set; }
- public override string ToString ()
- {
- return Name;
- }
- }
- private class GameObjectTreeBuilder : ITreeBuilder<GameObject> {
- public bool SupportsCanExpand => true;
- public bool CanExpand (GameObject model)
- {
- return model is Army;
- }
- public IEnumerable<GameObject> GetChildren (GameObject model)
- {
- if (model is Army a) {
- return a.Units;
- }
- return Enumerable.Empty<GameObject> ();
- }
- }
- private void LoadArmies (bool useDelegate)
- {
- var army1 = new Army () {
- Designation = "3rd Infantry",
- Units = new List<Unit>{
- new Unit(){Name = "Orc"},
- new Unit(){Name = "Troll"},
- new Unit(){Name = "Goblin"},
- }
- };
- if (currentTree != null) {
- Win.Remove (currentTree);
- currentTree.Dispose ();
- }
- var tree = new TreeView<GameObject> () {
- X = 0,
- Y = 0,
- Width = 40,
- Height = 20
- };
- if (useDelegate) {
- tree.TreeBuilder = new DelegateTreeBuilder<GameObject> ((o) => o is Army a ? a.Units : Enumerable.Empty<GameObject> ());
- } else {
- tree.TreeBuilder = new GameObjectTreeBuilder ();
- }
- Win.Add (tree);
- tree.AddObject (army1);
- currentTree = tree;
- }
- private void Quit ()
- {
- Application.RequestStop ();
- }
- private void LoadSimpleNodes ()
- {
- if (currentTree != null) {
- Win.Remove (currentTree);
- currentTree.Dispose ();
- }
- var tree = new TreeView () {
- X = 0,
- Y = 0,
- Width = 40,
- Height = 20
- };
- Win.Add (tree);
- var root1 = new TreeNode ("Root1");
- root1.Children.Add (new TreeNode ("Child1.1"));
- root1.Children.Add (new TreeNode ("Child1.2"));
- var root2 = new TreeNode ("Root2");
- root2.Children.Add (new TreeNode ("Child2.1"));
- root2.Children.Add (new TreeNode ("Child2.2"));
- tree.AddObject (root1);
- tree.AddObject (root2);
- currentTree = tree;
- }
- }
- }
|