summaryrefslogtreecommitdiffstats
path: root/src/ui
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2008-02-19 20:57:06 +0000
committerjucablues <jucablues@users.sourceforge.net>2008-02-19 20:57:06 +0000
commit3a44b1daa97af92fa1be4f7199641ae003065532 (patch)
tree15518ba471a241da224fbe45189626630c0ec5e9 /src/ui
parentr18035@shi: ted | 2008-02-19 12:54:20 -0800 (diff)
downloadinkscape-3a44b1daa97af92fa1be4f7199641ae003065532.tar.gz
inkscape-3a44b1daa97af92fa1be4f7199641ae003065532.zip
* use enums to deal with displacementmap channel selectors
* set default values explicitly for all combobox filter settings at the filters dialog. (bzr r4781)
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/dialog/filter-effects-dialog.cpp26
-rw-r--r--src/ui/dialog/filter-effects-dialog.h1
-rw-r--r--src/ui/widget/attr-widget.h19
-rw-r--r--src/ui/widget/combo-enums.h23
4 files changed, 53 insertions, 16 deletions
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index a97654b75..c78c3a7ee 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -871,11 +871,11 @@ public:
}
// ComboBoxEnum
- template<typename T> ComboBoxEnum<T>* add_combo(const SPAttributeEnum attr,
+ template<typename T> ComboBoxEnum<T>* add_combo(T default_value, const SPAttributeEnum attr,
const Glib::ustring& label,
const Util::EnumDataConverter<T>& conv)
{
- ComboBoxEnum<T>* combo = new ComboBoxEnum<T>(conv, attr);
+ ComboBoxEnum<T>* combo = new ComboBoxEnum<T>(default_value, conv, attr);
add_widget(combo, label);
add_attr_widget(combo);
return combo;
@@ -2043,9 +2043,9 @@ FilterEffectsDialog::FilterEffectsDialog()
_add_primitive(_("Add Effect:")),
_empty_settings(_("No effect selected"), Gtk::ALIGN_LEFT),
_no_filter_selected(_("No filter selected"), Gtk::ALIGN_LEFT),
+ _settings_initialized(false),
_locked(false),
- _attr_lock(false),
- _settings_initialized(false)
+ _attr_lock(false)
{
_settings = new Settings(*this, _settings_tab1, sigc::mem_fun(*this, &FilterEffectsDialog::set_attr_direct),
NR_FILTER_ENDPRIMITIVETYPE);
@@ -2138,16 +2138,16 @@ void FilterEffectsDialog::init_settings_widgets()
_filter_general_settings->add_multispinbutton(/*default width:*/ (double) 1.2, /*default height:*/ (double) 1.2, SP_ATTR_WIDTH, SP_ATTR_HEIGHT, _("Dimensions"), 0, 1000, 0.01, 0.1, 2);
_settings->type(NR_FILTER_BLEND);
- _settings->add_combo(SP_ATTR_MODE, _("Mode"), BlendModeConverter);
+ _settings->add_combo(BLEND_NORMAL, SP_ATTR_MODE, _("Mode"), BlendModeConverter);
_settings->type(NR_FILTER_COLORMATRIX);
- ComboBoxEnum<FilterColorMatrixType>* colmat = _settings->add_combo(SP_ATTR_TYPE, _("Type"), ColorMatrixTypeConverter);
+ ComboBoxEnum<FilterColorMatrixType>* colmat = _settings->add_combo(COLORMATRIX_MATRIX, SP_ATTR_TYPE, _("Type"), ColorMatrixTypeConverter);
_color_matrix_values = _settings->add_colormatrixvalues(_("Value(s)"));
colmat->signal_attr_changed().connect(sigc::mem_fun(*this, &FilterEffectsDialog::update_color_matrix));
_settings->type(NR_FILTER_COMPONENTTRANSFER);
_settings->add_notimplemented();
- /*_settings->add_combo(SP_ATTR_TYPE, _("Type"), ComponentTransferTypeConverter);
+ /*_settings->add_combo(COMPONENTTRANSFER_TYPE_IDENTITY, SP_ATTR_TYPE, _("Type"), ComponentTransferTypeConverter);
_ct_slope = _settings->add_spinslider(SP_ATTR_SLOPE, _("Slope"), -100, 100, 1, 0.01, 1);
_ct_intercept = _settings->add_spinslider(SP_ATTR_INTERCEPT, _("Intercept"), -100, 100, 1, 0.01, 1);
_ct_amplitude = _settings->add_spinslider(SP_ATTR_AMPLITUDE, _("Amplitude"), 0, 100, 1, 0.01, 1);
@@ -2155,7 +2155,7 @@ void FilterEffectsDialog::init_settings_widgets()
_ct_offset = _settings->add_spinslider(SP_ATTR_OFFSET, _("Offset"), -100, 100, 1, 0.01, 1);*/
_settings->type(NR_FILTER_COMPOSITE);
- _settings->add_combo(SP_ATTR_OPERATOR, _("Operator"), CompositeOperatorConverter);
+ _settings->add_combo(COMPOSITE_OVER, SP_ATTR_OPERATOR, _("Operator"), CompositeOperatorConverter);
_k1 = _settings->add_spinslider(SP_ATTR_K1, _("K1"), -10, 10, 0.1, 0.01, 2);
_k2 = _settings->add_spinslider(SP_ATTR_K2, _("K2"), -10, 10, 0.1, 0.01, 2);
_k3 = _settings->add_spinslider(SP_ATTR_K3, _("K3"), -10, 10, 0.1, 0.01, 2);
@@ -2168,7 +2168,7 @@ void FilterEffectsDialog::init_settings_widgets()
_convolve_order->signal_attr_changed().connect(sigc::mem_fun(*this, &FilterEffectsDialog::convolve_order_changed));
_settings->add_spinslider(SP_ATTR_DIVISOR, _("Divisor"), 1, 20, 1, 0.1, 2);
_settings->add_spinslider(SP_ATTR_BIAS, _("Bias"), -10, 10, 1, 0.01, 1);
- _settings->add_combo(SP_ATTR_EDGEMODE, _("Edge Mode"), ConvolveMatrixEdgeModeConverter);
+ _settings->add_combo(CONVOLVEMATRIX_EDGEMODE_DUPLICATE, SP_ATTR_EDGEMODE, _("Edge Mode"), ConvolveMatrixEdgeModeConverter);
_settings->add_checkbutton(SP_ATTR_PRESERVEALPHA, _("Preserve Alpha"), "true", "false");
_settings->type(NR_FILTER_DIFFUSELIGHTING);
@@ -2180,8 +2180,8 @@ void FilterEffectsDialog::init_settings_widgets()
_settings->type(NR_FILTER_DISPLACEMENTMAP);
_settings->add_spinslider(SP_ATTR_SCALE, _("Scale"), 0, 100, 1, 0.01, 1);
- _settings->add_combo(SP_ATTR_XCHANNELSELECTOR, _("X Channel"), DisplacementMapChannelConverter);
- _settings->add_combo(SP_ATTR_YCHANNELSELECTOR, _("Y Channel"), DisplacementMapChannelConverter);
+ _settings->add_combo(DISPLACEMENTMAP_CHANNEL_ALPHA, SP_ATTR_XCHANNELSELECTOR, _("X Channel"), DisplacementMapChannelConverter);
+ _settings->add_combo(DISPLACEMENTMAP_CHANNEL_ALPHA, SP_ATTR_YCHANNELSELECTOR, _("Y Channel"), DisplacementMapChannelConverter);
_settings->type(NR_FILTER_FLOOD);
_settings->add_color(SP_PROP_FLOOD_COLOR, _("Flood Color"));
@@ -2191,7 +2191,7 @@ void FilterEffectsDialog::init_settings_widgets()
_settings->add_dualspinslider(SP_ATTR_STDDEVIATION, _("Standard Deviation"), 0.01, 100, 1, 0.01, 1);
_settings->type(NR_FILTER_MORPHOLOGY);
- _settings->add_combo(SP_ATTR_OPERATOR, _("Operator"), MorphologyOperatorConverter);
+ _settings->add_combo(MORPHOLOGY_OPERATOR_ERODE, SP_ATTR_OPERATOR, _("Operator"), MorphologyOperatorConverter);
_settings->add_dualspinslider(SP_ATTR_RADIUS, _("Radius"), 0, 100, 1, 0.01, 1);
_settings->type(NR_FILTER_IMAGE);
@@ -2214,7 +2214,7 @@ void FilterEffectsDialog::init_settings_widgets()
_settings->type(NR_FILTER_TURBULENCE);
_settings->add_checkbutton(SP_ATTR_STITCHTILES, _("Stitch Tiles"), "stitch", "noStitch");
- _settings->add_combo(SP_ATTR_TYPE, _("Type"), TurbulenceTypeConverter);
+ _settings->add_combo(TURBULENCE_TURBULENCE, SP_ATTR_TYPE, _("Type"), TurbulenceTypeConverter);
_settings->add_dualspinslider(SP_ATTR_BASEFREQUENCY, _("Base Frequency"), 0, 1, 0.001, 0.01, 3);
_settings->add_spinslider(SP_ATTR_NUMOCTAVES, _("Octaves"), 1, 10, 1, 1, 0);
_settings->add_spinslider(SP_ATTR_SEED, _("Seed"), 0, 1000, 1, 1, 0);
diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h
index 0bd47b52f..16d684dd4 100644
--- a/src/ui/dialog/filter-effects-dialog.h
+++ b/src/ui/dialog/filter-effects-dialog.h
@@ -243,6 +243,7 @@ private:
Gtk::Label _empty_settings;
Gtk::Label _no_filter_selected;
bool _settings_initialized;
+
class Settings;
class MatrixAttr;
class ColorMatrixValues;
diff --git a/src/ui/widget/attr-widget.h b/src/ui/widget/attr-widget.h
index c87e860d5..34aae7db9 100644
--- a/src/ui/widget/attr-widget.h
+++ b/src/ui/widget/attr-widget.h
@@ -26,7 +26,8 @@ enum DefaultValueType
T_NONE,
T_DOUBLE,
T_VECT_DOUBLE,
- T_BOOL
+ T_BOOL,
+ T_UINT
};
class DefaultValueHolder
@@ -36,6 +37,7 @@ class DefaultValueHolder
double d_val;
std::vector<double>* vt_val;
bool b_val;
+ unsigned int uint_val;
} value;
//FIXME remove copy ctor and assignment operator as private to avoid double free of the vector
@@ -59,11 +61,21 @@ public:
value.b_val = d;
}
+ DefaultValueHolder (unsigned int ui) {
+ type = T_UINT;
+ value.uint_val = ui;
+ }
+
~DefaultValueHolder() {
if (type == T_VECT_DOUBLE)
delete value.vt_val;
}
+ unsigned int as_uint() {
+ g_assert (type == T_UINT);
+ return value.uint_val;
+ }
+
bool as_bool() {
g_assert (type == T_BOOL);
return value.b_val;
@@ -83,6 +95,11 @@ public:
class AttrWidget
{
public:
+ AttrWidget(const SPAttributeEnum a, unsigned int value)
+ : _attr(a),
+ _default(value)
+ {}
+
AttrWidget(const SPAttributeEnum a, double value)
: _attr(a),
_default(value)
diff --git a/src/ui/widget/combo-enums.h b/src/ui/widget/combo-enums.h
index c77c2f5a8..75760ab12 100644
--- a/src/ui/widget/combo-enums.h
+++ b/src/ui/widget/combo-enums.h
@@ -26,6 +26,26 @@ namespace Widget {
template<typename E> class ComboBoxEnum : public Gtk::ComboBox, public AttrWidget
{
public:
+ ComboBoxEnum(E default_value, const Util::EnumDataConverter<E>& c, const SPAttributeEnum a = SP_ATTR_INVALID)
+ : AttrWidget(a, (unsigned int)default_value), setProgrammatically(false), _converter(c)
+ {
+ signal_changed().connect(signal_attr_changed().make_slot());
+
+ _model = Gtk::ListStore::create(_columns);
+ set_model(_model);
+
+ pack_start(_columns.label);
+
+ // Initialize list
+ for(int i = 0; i < _converter.end; ++i) {
+ 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).c_str() );
+ }
+ set_active_by_id(default_value);
+ }
+
ComboBoxEnum(const Util::EnumDataConverter<E>& c, const SPAttributeEnum a = SP_ATTR_INVALID)
: AttrWidget(a), setProgrammatically(false), _converter(c)
{
@@ -43,7 +63,6 @@ public:
row[_columns.data] = data;
row[_columns.label] = _( _converter.get_label(data->id).c_str() );
}
-
set_active(0);
}
@@ -59,7 +78,7 @@ public:
if(val)
set_active(_converter.get_id_from_key(val));
else
- set_active(0);
+ set_active(get_default()->as_uint());
}
const Util::EnumData<E>* get_active_data() const