index 75cdddf1b9c2c42bc771da40e3504ad3e4bc8a29..405e82e04d7ef468cbd2079bcfebeb5f62bfa534 100644 (file)
#include <gtkmm/liststore.h>
#include "attr-widget.h"
#include "util/enums.h"
+#include "ui/widget/labelled.h"
namespace Inkscape {
namespace UI {
{
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);
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);
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));
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
{
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);
+ }
+};
+
}
}
}