diff --git a/SmartThingsTerminal/Scenario.cs b/SmartThingsTerminal/Scenario.cs index 069d638..2773d80 100644 --- a/SmartThingsTerminal/Scenario.cs +++ b/SmartThingsTerminal/Scenario.cs @@ -1,9 +1,9 @@ using Newtonsoft.Json; using NStack; using SmartThingsNet.Model; -using SmartThingsTerminal.Scenarios; using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using Terminal.Gui; @@ -44,6 +44,10 @@ public class Scenario : IDisposable public MenuBar MenuBar { get; set; } + public string SearchText { get; set; } + + public System.Timers.Timer SearchTimer { get; set; } + public string FormatJson(string json) { return json?.Replace("\r", ""); @@ -226,18 +230,19 @@ public ListView GetClassListView(Dictionary displayItemList) classListView.KeyDown += (args) => { - var s = displayItemList.Values.ToList() - .FindIndex(0, displayItemList.Values.Count(), d => d.StartsWith(args.KeyEvent.ToString(), StringComparison.InvariantCultureIgnoreCase)); + if (!char.IsControl((char)args.KeyEvent.Key)) + { + SearchText += args.KeyEvent.ToString(); + } - if (s >= 0) + if (SearchTimer == null) { - ClassListView.SelectedItem = s; - classListView.SelectedItem = s; - SelectedItemIndex = ClassListView.SelectedItem; - SelectedItem = _dataItemList.Values.ToArray()[SelectedItemIndex]; - UpdateJsonView(SelectedItem.ToJson()); - HostPane.Title = displayItemList.Keys.ToArray()[classListView.SelectedItem]; - UpdateSettings(SelectedItem); + SearchTimer = new System.Timers.Timer(500); + SearchTimer.Elapsed += SearchTimer_Elapsed; + } + if (!SearchTimer.Enabled) + { + SearchTimer.Start(); } }; } @@ -245,6 +250,22 @@ public ListView GetClassListView(Dictionary displayItemList) return classListView; } + private void SearchTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + SearchTimer.Stop(); + + if (!string.IsNullOrEmpty(SearchText)) + { + var s = (List)(ClassListView.Source.ToList()); + var i = s.FindIndex(0, s.Count, d => d.StartsWith(SearchText, StringComparison.InvariantCultureIgnoreCase)); + if (i >= 0) + { + Application.MainLoop.Invoke(() => { ClassListView.SelectedItem = i; }); + } + SearchText = null; + } + } + public virtual void ExportItem() { if (SelectedItem != null)