From 4c2ea510e3e69197715ae3f7ca3bea7bc97084c0 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 16 Mar 2015 14:37:06 +0100 Subject: [PATCH] add API to query Gtk::ComboBoxText entries ..the overly complex C++ style variant. iterate twice.. hell yeah. --- libs/gtkmm2ext/gtkmm2ext/utils.h | 9 +++++++++ libs/gtkmm2ext/utils.cc | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/libs/gtkmm2ext/gtkmm2ext/utils.h b/libs/gtkmm2ext/gtkmm2ext/utils.h index 53c8ea2fdf..5832c914f6 100644 --- a/libs/gtkmm2ext/gtkmm2ext/utils.h +++ b/libs/gtkmm2ext/gtkmm2ext/utils.h @@ -96,6 +96,15 @@ namespace Gtkmm2ext { LIBGTKMM2EXT_API void set_popdown_strings (Gtk::ComboBoxText&, const std::vector&); + + LIBGTKMM2EXT_API void get_popdown_strings (Gtk::ComboBoxText&, + std::vector&); + + LIBGTKMM2EXT_API bool contains_value (Gtk::ComboBoxText&, + const std::string); + + LIBGTKMM2EXT_API bool set_active_text_if_present (Gtk::ComboBoxText&, + const std::string); template /*LIBGTKMM2EXT_API*/ void deferred_delete (void *ptr) { delete static_cast (ptr); diff --git a/libs/gtkmm2ext/utils.cc b/libs/gtkmm2ext/utils.cc index f7e96f09c8..03396a4af9 100644 --- a/libs/gtkmm2ext/utils.cc +++ b/libs/gtkmm2ext/utils.cc @@ -19,6 +19,7 @@ */ #include +#include #include #include @@ -306,6 +307,39 @@ Gtkmm2ext::set_popdown_strings (Gtk::ComboBoxText& cr, const vector& str } } +void +Gtkmm2ext::get_popdown_strings (Gtk::ComboBoxText& cr, std::vector& strings) +{ + strings.clear (); + Glib::RefPtr m = cr.get_model(); + if (!m) { + return; + } + for(Gtk::TreeModel::iterator i = m->children().begin(); i != m->children().end(); ++i) { + Glib::ustring txt; + (*i)->get_value(0, txt); + strings.push_back (txt); + } +} + +bool +Gtkmm2ext::contains_value (Gtk::ComboBoxText& cr, const std::string text) +{ + std::vector s; + get_popdown_strings (cr, s); + return (std::find (s.begin(), s.end(), text) != s.end()); +} + +bool +Gtkmm2ext::set_active_text_if_present (Gtk::ComboBoxText& cr, const std::string text) +{ + if (contains_value(cr, text)) { + cr.set_active_text (text); + return true; + } + return false; +} + GdkWindow* Gtkmm2ext::get_paned_handle (Gtk::Paned& paned) { -- 2.30.2