| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268 |
- #nullable enable
- using System.Collections.ObjectModel;
- namespace UICatalog.Scenarios;
- [ScenarioMetadata (
- "Collection Navigator",
- "Demonstrates keyboard navigation in ListView & TreeView (CollectionNavigator)."
- )]
- [ScenarioCategory ("Controls")]
- [ScenarioCategory ("ListView")]
- [ScenarioCategory ("TreeView")]
- [ScenarioCategory ("Text and Formatting")]
- [ScenarioCategory ("Mouse and Keyboard")]
- public class CollectionNavigatorTester : Scenario
- {
- private ObservableCollection<string> _items = new (
- [
- "a",
- "b",
- "bb",
- "c",
- "ccc",
- "ccc",
- "cccc",
- "ddd",
- "dddd",
- "dddd",
- "ddddd",
- "dddddd",
- "ddddddd",
- "this",
- "this is a test",
- "this was a test",
- "this and",
- "that and that",
- "the",
- "think",
- "thunk",
- "thunks",
- "zip",
- "zap",
- "zoo",
- "@jack",
- "@sign",
- "@at",
- "@ateme",
- "n@",
- "n@brown",
- ".net",
- "$100.00",
- "$101.00",
- "$101.10",
- "$101.11",
- "$200.00",
- "$210.99",
- "$$",
- "apricot",
- "arm",
- "丗丙业丞",
- "丗丙丛",
- "text",
- "egg",
- "candle",
- " <- space",
- "\t<- tab",
- "\n<- newline",
- "\r<- formfeed",
- "q",
- "quit",
- "quitter"
- ]
- );
- private Window? _top;
- private ListView? _listView;
- private TreeView? _treeView;
- private CheckBox? _allowMarkingCheckBox;
- private CheckBox? _allowMultiSelectionCheckBox;
- public override void Main ()
- {
- Application.Init ();
- Window top = new ()
- {
- SchemeName = "Base"
- };
- _top = top;
- // MenuBar
- MenuBar menu = new ();
- _allowMarkingCheckBox = new ()
- {
- Title = "Allow _Marking"
- };
- _allowMarkingCheckBox.CheckedStateChanged += (s, e) =>
- {
- if (_listView is { })
- {
- _listView.AllowsMarking = _allowMarkingCheckBox.CheckedState == CheckState.Checked;
- }
- if (_allowMultiSelectionCheckBox is { })
- {
- _allowMultiSelectionCheckBox.Enabled = _allowMarkingCheckBox.CheckedState == CheckState.Checked;
- }
- };
- _allowMultiSelectionCheckBox = new ()
- {
- Title = "Allow Multi _Selection",
- Enabled = false
- };
- _allowMultiSelectionCheckBox.CheckedStateChanged += (s, e) =>
- {
- if (_listView is { })
- {
- _listView.AllowsMultipleSelection =
- _allowMultiSelectionCheckBox.CheckedState == CheckState.Checked;
- }
- };
- menu.Add (
- new MenuBarItem (
- "_Configure",
- [
- new MenuItem
- {
- CommandView = _allowMarkingCheckBox
- },
- new MenuItem
- {
- CommandView = _allowMultiSelectionCheckBox
- },
- new MenuItem
- {
- Title = "_Quit",
- Key = Application.QuitKey,
- Action = Quit
- }
- ]
- )
- );
- menu.Add (
- new MenuBarItem (
- "_Quit",
- [
- new MenuItem
- {
- Title = "_Quit",
- Key = Application.QuitKey,
- Action = Quit
- }
- ]
- )
- );
- top.Add (menu);
- _items = new (_items.OrderBy (i => i, StringComparer.OrdinalIgnoreCase));
- CreateListView ();
- Line vsep = new ()
- {
- Orientation = Orientation.Vertical,
- X = Pos.Right (_listView!),
- Y = 1,
- Height = Dim.Fill ()
- };
- top.Add (vsep);
- CreateTreeView ();
- Application.Run (top);
- top.Dispose ();
- Application.Shutdown ();
- }
- private void CreateListView ()
- {
- if (_top is null)
- {
- return;
- }
- Label label = new ()
- {
- Text = "ListView",
- TextAlignment = Alignment.Center,
- X = 0,
- Y = 1, // for menu
- Width = Dim.Percent (50),
- Height = 1
- };
- _top.Add (label);
- _listView = new ()
- {
- X = 0,
- Y = Pos.Bottom (label),
- Width = Dim.Percent (50) - 1,
- Height = Dim.Fill (),
- AllowsMarking = false,
- AllowsMultipleSelection = false
- };
- _top.Add (_listView);
- _listView.SetSource (_items);
- _listView.KeystrokeNavigator.SearchStringChanged += (s, e) => { label.Text = $"ListView: {e.SearchString}"; };
- }
- private void CreateTreeView ()
- {
- if (_top is null || _listView is null)
- {
- return;
- }
- Label label = new ()
- {
- Text = "TreeView",
- TextAlignment = Alignment.Center,
- X = Pos.Right (_listView) + 2,
- Y = 1, // for menu
- Width = Dim.Percent (50),
- Height = 1
- };
- _top.Add (label);
- _treeView = new ()
- {
- X = Pos.Right (_listView) + 1,
- Y = Pos.Bottom (label),
- Width = Dim.Fill (),
- Height = Dim.Fill ()
- };
- _treeView.Style.HighlightModelTextOnly = true;
- _top.Add (_treeView);
- TreeNode root = new ("IsLetterOrDigit examples");
- root.Children = _items.Where (i => char.IsLetterOrDigit (i [0]))
- .Select (i => new TreeNode (i))
- .Cast<ITreeNode> ()
- .ToList ();
- _treeView.AddObject (root);
- root = new ("Non-IsLetterOrDigit examples");
- root.Children = _items.Where (i => !char.IsLetterOrDigit (i [0]))
- .Select (i => new TreeNode (i))
- .Cast<ITreeNode> ()
- .ToList ();
- _treeView.AddObject (root);
- _treeView.ExpandAll ();
- _treeView.GoToFirst ();
- _treeView.KeystrokeNavigator.SearchStringChanged += (s, e) => { label.Text = $"TreeView: {e.SearchString}"; };
- }
- private void Quit () { Application.RequestStop (); }
- }
|