From 30e1567e23ae8fd167585af9a1747691903fe310 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 17 Nov 2025 23:25:37 +0100 Subject: [PATCH] Add ComboBox like `active` API to ArdourDropdown --- libs/widgets/ardour_dropdown.cc | 31 ++++++++++++++++++++++++++ libs/widgets/widgets/ardour_dropdown.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/libs/widgets/ardour_dropdown.cc b/libs/widgets/ardour_dropdown.cc index e7763db0ce..b5ff9ec6cc 100644 --- a/libs/widgets/ardour_dropdown.cc +++ b/libs/widgets/ardour_dropdown.cc @@ -79,6 +79,37 @@ ArdourDropdown::on_button_press_event (GdkEventButton* ev) return true; } +void +ArdourDropdown::set_active (int c) +{ + for (auto& i : _menu.items()) { + if (0 == c--) { + _menu.set_active (c); + _menu.activate_item (i); + break; + } + } +} + +int +ArdourDropdown::get_active_row_number () const +{ + const MenuItem* current_active = _menu.get_active(); + + if (!current_active) { + return -1; + } + + int c = 0; + for (auto const& i : _menu.items ()) { + if (&i == current_active) { + return c; + } + ++c; + } + return -1; +} + void ArdourDropdown::set_active (std::string const& text) { diff --git a/libs/widgets/widgets/ardour_dropdown.h b/libs/widgets/widgets/ardour_dropdown.h index 6c9abbe0bd..4a6a6ca5b5 100644 --- a/libs/widgets/widgets/ardour_dropdown.h +++ b/libs/widgets/widgets/ardour_dropdown.h @@ -57,6 +57,9 @@ public: void set_active (std::string const& text); + void set_active (int); + int get_active_row_number () const; + protected: void default_text_handler (std::string const&);