add API to query Gtk::ComboBoxText entries
authorRobin Gareus <robin@gareus.org>
Mon, 16 Mar 2015 13:37:06 +0000 (14:37 +0100)
committerRobin Gareus <robin@gareus.org>
Mon, 16 Mar 2015 13:38:21 +0000 (14:38 +0100)
..the overly complex C++ style variant.
iterate twice..  hell yeah.

libs/gtkmm2ext/gtkmm2ext/utils.h
libs/gtkmm2ext/utils.cc

index 53c8ea2fdf87cb0a983b42aff543b39309cc2a00..5832c914f600977a618637411805b814a35e9842 100644 (file)
@@ -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);
index f7e96f09c8a0ba8b67d33b0beb8bcf067607b354..03396a4af921e773862f9d503b0a291a6eba7d2a 100644 (file)
@@ -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)
 {