From e3e2e86ea6c74d5fd8e942a5df27909b0ca04ef4 Mon Sep 17 00:00:00 2001 From: Pawel Baran Date: Wed, 15 Feb 2023 22:26:23 +0100 Subject: [PATCH] search in dropdowns unlocked --- BHoM_UI/CallerTemplates/MultiChoiceCaller.cs | 51 ++++++++++++++++++++ BHoM_UI/Menus/ItemSelectorMenu_WinForm.cs | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/BHoM_UI/CallerTemplates/MultiChoiceCaller.cs b/BHoM_UI/CallerTemplates/MultiChoiceCaller.cs index 7f0127b..afa8d7b 100644 --- a/BHoM_UI/CallerTemplates/MultiChoiceCaller.cs +++ b/BHoM_UI/CallerTemplates/MultiChoiceCaller.cs @@ -31,11 +31,20 @@ using System.Windows.Forms; using BH.oM.Base; using System.Collections; +using BH.UI.Base.Menus; +using BH.Engine.Base; namespace BH.UI.Base { public abstract class MultiChoiceCaller : Caller { + /*************************************/ + /**** Public Events ****/ + /*************************************/ + + public event EventHandler ValueSelected; + + /*************************************/ /**** Properties ****/ /*************************************/ @@ -84,6 +93,48 @@ public override object Run(List inputs) public abstract List GetChoiceNames(); /*************************************/ + + public override void AddToMenu(object menu) + { + base.AddToMenu(menu); + + if (SelectedItem != null) + { + if (m_EnumSearchMenu == null) + SetEnumSearchMenu(); + + m_EnumSearchMenu.FillMenu(menu); + } + } + + + /*************************************/ + /**** Private Methods ****/ + /*************************************/ + + private void SetEnumSearchMenu() + { + List items = Choices.Zip(GetChoiceNames(), (x, y) => new SearchItem { Item = x, Text = y }).ToList(); + ItemSelectorMenu_WinForm enumSearchMenu = new ItemSelectorMenu_WinForm(items, null); + enumSearchMenu.ItemSelected += EnumValueSelected; + m_EnumSearchMenu = enumSearchMenu; + } + + /*************************************/ + + private void EnumValueSelected(object sender, object e) + { + ValueSelected?.Invoke(this, Choices.IndexOf(e)); + } + + + /*************************************/ + /**** Private Fields ****/ + /*************************************/ + + private IItemSelectorMenu m_EnumSearchMenu = null; + + /*************************************/ } } diff --git a/BHoM_UI/Menus/ItemSelectorMenu_WinForm.cs b/BHoM_UI/Menus/ItemSelectorMenu_WinForm.cs index 95ad986..0b4bad2 100644 --- a/BHoM_UI/Menus/ItemSelectorMenu_WinForm.cs +++ b/BHoM_UI/Menus/ItemSelectorMenu_WinForm.cs @@ -49,7 +49,8 @@ public ItemSelectorMenu_WinForm(List itemList, Tree itemTree protected override void AddTree(ToolStripDropDown menu, Tree itemTree) { - AppendMenuTree(itemTree, menu); + if (itemTree != null) + AppendMenuTree(itemTree, menu); } /*************************************/