diff options
author | Robin Gareus <robin@gareus.org> | 2015-03-16 14:37:06 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-03-16 14:38:21 +0100 |
commit | 4c2ea510e3e69197715ae3f7ca3bea7bc97084c0 (patch) | |
tree | f7b9a26996196f15653ceb1ca08ae8d8ec1a59ff /libs | |
parent | 26ba494083c5a7417177733fa049ca1830271dc7 (diff) |
add API to query Gtk::ComboBoxText entries
..the overly complex C++ style variant.
iterate twice.. hell yeah.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/utils.h | 9 | ||||
-rw-r--r-- | libs/gtkmm2ext/utils.cc | 34 |
2 files changed, 43 insertions, 0 deletions
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<std::string>&); + + LIBGTKMM2EXT_API void get_popdown_strings (Gtk::ComboBoxText&, + std::vector<std::string>&); + + LIBGTKMM2EXT_API bool contains_value (Gtk::ComboBoxText&, + const std::string); + + LIBGTKMM2EXT_API bool set_active_text_if_present (Gtk::ComboBoxText&, + const std::string); template<class T> /*LIBGTKMM2EXT_API*/ void deferred_delete (void *ptr) { delete static_cast<T *> (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 <map> +#include <algorithm> #include <gtk/gtkpaned.h> #include <gtk/gtk.h> @@ -306,6 +307,39 @@ Gtkmm2ext::set_popdown_strings (Gtk::ComboBoxText& cr, const vector<string>& str } } +void +Gtkmm2ext::get_popdown_strings (Gtk::ComboBoxText& cr, std::vector<std::string>& strings) +{ + strings.clear (); + Glib::RefPtr<const Gtk::TreeModel> 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<std::string> 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) { |