Code

trivial: ui/widget/*, ui/dialog/*: svn propset svn:eol-style native *.h *.cpp.
[inkscape.git] / src / ui / widget / combo-enums.h
index 75cdddf1b9c2c42bc771da40e3504ad3e4bc8a29..405e82e04d7ef468cbd2079bcfebeb5f62bfa534 100644 (file)
@@ -17,6 +17,7 @@
 #include <gtkmm/liststore.h>
 #include "attr-widget.h"
 #include "util/enums.h"
+#include "ui/widget/labelled.h"
 
 namespace Inkscape {
 namespace UI {
@@ -26,8 +27,10 @@ template<typename E> class ComboBoxEnum : public Gtk::ComboBox, public AttrWidge
 {
 public:
     ComboBoxEnum(const Util::EnumDataConverter<E>& c, const SPAttributeEnum a = SP_ATTR_INVALID)
-        : AttrWidget(a), _converter(c)
+        : AttrWidget(a), setProgrammatically(false), _converter(c)
     {
+        signal_changed().connect(signal_attr_changed().make_slot());
+
         _model = Gtk::ListStore::create(_columns);
         set_model(_model);
 
@@ -38,7 +41,7 @@ public:
             Gtk::TreeModel::Row row = *_model->append();
             const Util::EnumData<E>* data = &_converter.data(i);
             row[_columns.data] = data;
-            row[_columns.label] = _converter.get_label(data->id);
+            row[_columns.label] = _( _converter.get_label(data->id).c_str() );
         }
 
         set_active(0);
@@ -51,6 +54,7 @@ public:
 
     virtual void set_from_attribute(SPObject* o)
     {
+        setProgrammatically = true;
         const gchar* val = attribute_value(o);
         if(val)
             set_active(_converter.get_id_from_key(val));
@@ -72,6 +76,27 @@ public:
         row[_columns.data] = 0;
         row[_columns.label] = s;
     }
+
+    void set_active_by_id(E id) {
+        setProgrammatically = true;
+        for(Gtk::TreeModel::iterator i = _model->children().begin();
+            i != _model->children().end(); ++i) 
+        {
+            const Util::EnumData<E>* data = (*i)[_columns.data];
+            if(data->id == id) {
+                set_active(i);
+                break;
+            }
+        }
+    };
+
+    void set_active_by_key(const Glib::ustring& key) {
+        setProgrammatically = true;
+        set_active_by_id( _converter.get_id_from_key(key) );
+    };
+
+    bool setProgrammatically;
+
 private:
     class Columns : public Gtk::TreeModel::ColumnRecord
     {
@@ -91,6 +116,24 @@ private:
     const Util::EnumDataConverter<E>& _converter;
 };
 
+
+template<typename E> class LabelledComboBoxEnum : public Labelled
+{
+public:
+    LabelledComboBoxEnum( Glib::ustring const &label,
+                          Glib::ustring const &tooltip,
+                          const Util::EnumDataConverter<E>& c,
+                          Glib::ustring const &suffix = "",
+                          Glib::ustring const &icon = "",
+                          bool mnemonic = true)
+        : Labelled(label, tooltip, new ComboBoxEnum<E>(c), suffix, icon, mnemonic)
+    { }
+
+    ComboBoxEnum<E>* getCombobox() {
+        return static_cast< ComboBoxEnum<E>* > (_widget);
+    }
+};
+
 }
 }
 }