123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- using System;
- using System.Collections.ObjectModel;
- using System.IO;
- using System.Linq;
- using Terminal.Gui;
- namespace UICatalog.Scenarios;
- [ScenarioMetadata ("ListView & ComboBox", "Demonstrates a ListView populating a ComboBox that acts as a filter.")]
- [ScenarioCategory ("Controls")]
- [ScenarioCategory ("ListView")]
- [ScenarioCategory ("ComboBox")]
- public class ListsAndCombos : Scenario
- {
- public override void Main ()
- {
- Application.Init ();
- //TODO: Duplicated code in Demo.cs Consider moving to shared assembly
- ObservableCollection<string> items = [];
- foreach (string dir in new [] { "/etc", @$"{Environment.GetEnvironmentVariable ("SystemRoot")}\System32" })
- {
- if (Directory.Exists (dir))
- {
- items = new (Directory.GetFiles (dir)
- .Union (Directory.GetDirectories (dir))
- .Select (Path.GetFileName)
- .Where (x => char.IsLetterOrDigit (x [0]))
- .OrderBy (x => x)
- .Select (x => x)
- .ToList ());
- }
- }
- var win = new Window { Title = GetQuitKeyAndName () };
- // ListView
- var lbListView = new Label
- {
- ColorScheme = Colors.ColorSchemes ["TopLevel"],
- X = 0,
- Width = Dim.Percent (40),
- Text = "Listview"
- };
- var listview = new ListView
- {
- X = 0,
- Y = Pos.Bottom (lbListView) + 1,
- Height = Dim.Fill (2),
- Width = Dim.Percent (40),
- Source = new ListWrapper<string> (items)
- };
- listview.SelectedItemChanged += (s, e) => lbListView.Text = items [listview.SelectedItem];
- win.Add (lbListView, listview);
- var scrollBar = new ScrollBarView (listview, true);
- scrollBar.ChangedPosition += (s, e) =>
- {
- listview.TopItem = scrollBar.Position;
- if (listview.TopItem != scrollBar.Position)
- {
- scrollBar.Position = listview.TopItem;
- }
- listview.SetNeedsDisplay ();
- };
- scrollBar.OtherScrollBarView.ChangedPosition += (s, e) =>
- {
- listview.LeftItem = scrollBar.OtherScrollBarView.Position;
- if (listview.LeftItem != scrollBar.OtherScrollBarView.Position)
- {
- scrollBar.OtherScrollBarView.Position = listview.LeftItem;
- }
- listview.SetNeedsDisplay ();
- };
- listview.DrawContent += (s, e) =>
- {
- scrollBar.Size = listview.Source.Count - 1;
- scrollBar.Position = listview.TopItem;
- scrollBar.OtherScrollBarView.Size = listview.MaxLength - 1;
- scrollBar.OtherScrollBarView.Position = listview.LeftItem;
- scrollBar.Refresh ();
- };
- // ComboBox
- var lbComboBox = new Label
- {
- ColorScheme = Colors.ColorSchemes ["TopLevel"],
- X = Pos.Right (lbListView) + 1,
- Width = Dim.Percent (40),
- Text = "ComboBox"
- };
- var comboBox = new ComboBox
- {
- X = Pos.Right (listview) + 1,
- Y = Pos.Bottom (lbListView) + 1,
- Height = Dim.Fill (2),
- Width = Dim.Percent (40)
- };
- comboBox.SetSource (items);
- comboBox.SelectedItemChanged += (s, text) => lbComboBox.Text = text.Value.ToString ();
- win.Add (lbComboBox, comboBox);
- var scrollBarCbx = new ScrollBarView (comboBox.Subviews [1], true);
- scrollBarCbx.ChangedPosition += (s, e) =>
- {
- ((ListView)comboBox.Subviews [1]).TopItem = scrollBarCbx.Position;
- if (((ListView)comboBox.Subviews [1]).TopItem != scrollBarCbx.Position)
- {
- scrollBarCbx.Position = ((ListView)comboBox.Subviews [1]).TopItem;
- }
- comboBox.SetNeedsDisplay ();
- };
- scrollBarCbx.OtherScrollBarView.ChangedPosition += (s, e) =>
- {
- ((ListView)comboBox.Subviews [1]).LeftItem = scrollBarCbx.OtherScrollBarView.Position;
- if (((ListView)comboBox.Subviews [1]).LeftItem != scrollBarCbx.OtherScrollBarView.Position)
- {
- scrollBarCbx.OtherScrollBarView.Position = ((ListView)comboBox.Subviews [1]).LeftItem;
- }
- comboBox.SetNeedsDisplay ();
- };
- comboBox.DrawContent += (s, e) =>
- {
- scrollBarCbx.Size = comboBox.Source.Count;
- scrollBarCbx.Position = ((ListView)comboBox.Subviews [1]).TopItem;
- scrollBarCbx.OtherScrollBarView.Size = ((ListView)comboBox.Subviews [1]).MaxLength - 1;
- scrollBarCbx.OtherScrollBarView.Position = ((ListView)comboBox.Subviews [1]).LeftItem;
- scrollBarCbx.Refresh ();
- };
- var btnMoveUp = new Button { X = 1, Y = Pos.Bottom (lbListView), Text = "Move _Up" };
- btnMoveUp.Accept += (s, e) => { listview.MoveUp (); };
- var btnMoveDown = new Button
- {
- X = Pos.Right (btnMoveUp) + 1, Y = Pos.Bottom (lbListView), Text = "Move _Down"
- };
- btnMoveDown.Accept += (s, e) => { listview.MoveDown (); };
- win.Add (btnMoveUp, btnMoveDown);
- Application.Run (win);
- win.Dispose ();
- Application.Shutdown ();
- }
- }
|