X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fdialog%2Ffilter-effects-dialog.h;h=d1a5039e3ed708a7cb8703279a7af2962e5497fe;hb=e7333a0a54c8d33b7397406dd76938aa430836d5;hp=b98d47d1a761ef80a721184aa3b980eaca49f764;hpb=04d2e120ddfbd611206889d33696c7a1cf103e14;p=inkscape.git diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index b98d47d1a..d1a5039e3 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -27,8 +27,7 @@ #include "attributes.h" #include "dialog.h" #include "sp-filter.h" -#include "ui/widget/filter-effect-chooser.h" -#include "ui/widget/notebook-page.h" +#include "ui/widget/combo-enums.h" #include "ui/widget/spin-slider.h" using namespace Inkscape::UI::Widget; @@ -37,31 +36,83 @@ namespace Inkscape { namespace UI { namespace Dialog { +class DualSpinButton; +class MultiSpinButton; class FilterEffectsDialog : public Dialog { public: - FilterEffectsDialog(); - virtual ~FilterEffectsDialog(); - static FilterEffectsDialog *create() { return new FilterEffectsDialog(); } + FilterEffectsDialog(Behavior::BehaviorFactory behavior_factory); + ~FilterEffectsDialog(); + + static FilterEffectsDialog *create(Behavior::BehaviorFactory behavior_factory) + { return new FilterEffectsDialog(behavior_factory); } + + void set_attrs_locked(const bool); private: - class FilterModifier : public Gtk::VBox, public FilterEffectChooser + class SignalObserver; + + class FilterModifier : public Gtk::VBox { public: - FilterModifier(); + FilterModifier(FilterEffectsDialog&); + ~FilterModifier(); + + SPFilter* get_selected_filter(); + void select_filter(const SPFilter*); - virtual SPFilter* get_selected_filter(); - virtual void select_filter(const SPFilter*); - virtual Glib::SignalProxy0 signal_selection_changed(); + sigc::signal& signal_filter_changed() + { + return _signal_filter_changed; + } private: + class Columns : public Gtk::TreeModel::ColumnRecord + { + public: + Columns() + { + add(filter); + add(label); + add(sel); + } + + Gtk::TreeModelColumn filter; + Gtk::TreeModelColumn label; + Gtk::TreeModelColumn sel; + }; + + static void on_activate_desktop(Application*, SPDesktop*, FilterModifier*); + void on_document_replaced(SPDesktop*, SPDocument*) + { + update_filters(); + } + + static void on_inkscape_change_selection(Application *, Selection *, FilterModifier*); + + void update_selection(Selection *); + void on_filter_selection_changed(); + + void on_name_edited(const Glib::ustring&, const Glib::ustring&); + void on_selection_toggled(const Glib::ustring&); + + void update_filters(); void filter_list_button_release(GdkEventButton*); void add_filter(); void remove_filter(); void duplicate_filter(); - void filter_name_edited(const Glib::ustring& path, const Glib::ustring& text); + void rename_filter(); + + sigc::connection _doc_replaced; + sigc::connection _resource_changed; + FilterEffectsDialog& _dialog; Gtk::TreeView _list; + Glib::RefPtr _model; + Columns _columns; + Gtk::CellRendererToggle _cell_toggle; Gtk::Button _add; Glib::RefPtr _menu; + sigc::signal _signal_filter_changed; + std::auto_ptr _observer; }; class PrimitiveColumns : public Gtk::TreeModel::ColumnRecord @@ -86,15 +137,18 @@ private: public: CellRendererConnection(); Glib::PropertyProxy property_primitive(); - static int input_count(const SPFilterPrimitive* prim); static const int size = 24; + + void set_text_width(const int w); + int get_text_width() const; protected: virtual void get_size_vfunc(Gtk::Widget& widget, const Gdk::Rectangle* cell_area, int* x_offset, int* y_offset, int* width, int* height) const; private: // void* should be SPFilterPrimitive*, some weirdness with properties prevents this Glib::Property _primitive; + int _text_width; }; class PrimitiveList : public Gtk::TreeView @@ -102,7 +156,7 @@ private: public: PrimitiveList(FilterEffectsDialog&); - Glib::SignalProxy0 signal_selection_changed(); + sigc::signal& signal_primitive_changed(); void update(); void set_menu(Glib::RefPtr); @@ -111,67 +165,54 @@ private: void select(SPFilterPrimitive *prim); int primitive_count() const; - bool is_first(const SPFilterPrimitive*) const; protected: - bool on_expose_event(GdkEventExpose*); + bool on_expose_signal(GdkEventExpose*); bool on_button_press_event(GdkEventButton*); bool on_motion_notify_event(GdkEventMotion*); bool on_button_release_event(GdkEventButton*); void on_drag_end(const Glib::RefPtr&); private: + int init_text(); + bool do_connection_node(const Gtk::TreeIter& row, const int input, std::vector& points, const int ix, const int iy); - const Gtk::TreeIter find_result(const Gtk::TreeIter& start, const SPAttributeEnum attr); + const Gtk::TreeIter find_result(const Gtk::TreeIter& start, const int attr, int& src_id); int find_index(const Gtk::TreeIter& target); - void draw_connection(const Gtk::TreeIter&, const int x1, const int y1, const int row_count); + void draw_connection(const Gtk::TreeIter&, const int attr, const int text_start_x, + const int x1, const int y1, const int row_count); void sanitize_connections(const Gtk::TreeIter& prim_iter); + void on_primitive_selection_changed(); + bool on_scroll_timeout(); FilterEffectsDialog& _dialog; Glib::RefPtr _model; PrimitiveColumns _columns; + CellRendererConnection _connection_cell; Glib::RefPtr _primitive_menu; + Glib::RefPtr _vertical_layout; int _in_drag; SPFilterPrimitive* _drag_prim; + sigc::signal _signal_primitive_changed; + sigc::connection _scroll_connection; + int _autoscroll; + std::auto_ptr _observer; }; - class SettingsGroup : public Gtk::VBox - { - public: - SettingsGroup(); - void init(FilterEffectsDialog* dlg, Glib::RefPtr sg); - - void add_setting_generic(Gtk::Widget& w, const Glib::ustring& label); - void add_setting(SpinSlider& ss, const SPAttributeEnum attr, const Glib::ustring& label); - template void add_setting(ComboBoxEnum& combo, const SPAttributeEnum attr, - const Glib::ustring& label) - { - add_setting_generic(combo, label); - combo.signal_changed().connect( - sigc::bind(sigc::mem_fun(_dialog, &FilterEffectsDialog::set_attr_comboboxenum), attr, &combo)); - } - void add_setting(std::vector& w, const Glib::ustring& label = ""); - private: - Glib::RefPtr _sizegroup; - FilterEffectsDialog* _dialog; - }; - + FilterEffectsDialog(); void init_settings_widgets(); // Handlers void add_primitive(); void remove_primitive(); void duplicate_primitive(); + void convolve_order_changed(); - void set_attr_spinslider(const SPAttributeEnum attr, const SpinSlider*); - template void set_attr_comboboxenum(const SPAttributeEnum attr, ComboBoxEnum* input) - { - if(input->is_sensitive()) - set_attr(attr, input->get_active_data()->key.c_str()); - } - void set_attr_special(const SPAttributeEnum); - void set_attr(const SPAttributeEnum, const gchar* val); + void set_attr_direct(const AttrWidget*); + void set_child_attr_direct(const AttrWidget*); + void set_attr(SPObject*, const SPAttributeEnum, const gchar* val); void update_settings_view(); void update_settings_sensitivity(); + void update_color_matrix(); // Filter effect selection FilterModifier _filter_modifier; @@ -182,66 +223,32 @@ private: UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; - // Right pane (filter effect primitive settings) - Gtk::VBox _settings; - Glib::RefPtr _settings_labels; + // Bottom pane (filter effect primitive settings) + Gtk::VBox _settings_box; Gtk::Label _empty_settings; - // Generic settings - SettingsGroup _generic_settings; - UI::Widget::ComboBoxEnum _primitive_input1; - UI::Widget::ComboBoxEnum _primitive_input2; - - SettingsGroup _blend; - UI::Widget::ComboBoxEnum _blend_mode; - - SettingsGroup _colormatrix; - Gtk::ComboBoxText _colormatrix_type; - - SettingsGroup _componenttransfer; - - SettingsGroup _composite; - UI::Widget::ComboBoxEnum _composite_operator; - SpinSlider _composite_k1; - SpinSlider _composite_k2; - SpinSlider _composite_k3; - SpinSlider _composite_k4; - - SettingsGroup _convolvematrix; - - SettingsGroup _diffuselighting; - - SettingsGroup _displacementmap; - - SettingsGroup _flood; - - SettingsGroup _gaussianblur; - SpinSlider _gaussianblur_stddeviation; - - SettingsGroup _image; - - SettingsGroup _merge; - - SettingsGroup _morphology; - Gtk::ComboBoxText _morphology_operator; - SpinSlider _morphology_radius; + class Settings; + class MatrixAttr; + class ColorMatrixValues; + class LightSourceControl; + Settings* _settings; + Glib::RefPtr _sizegroup; - SettingsGroup _offset; - SpinSlider _offset_dx; - SpinSlider _offset_dy; + // Color Matrix + ColorMatrixValues* _color_matrix_values; - SettingsGroup _specularlighting; + // Convolve Matrix + MatrixAttr* _convolve_matrix; + DualSpinButton* _convolve_order; + MultiSpinButton* _convolve_target; - SettingsGroup _tile; + // For controlling setting sensitivity + Gtk::Widget* _k1, *_k2, *_k3, *_k4; + Gtk::Widget* _ct_table, *_ct_slope, *_ct_intercept, *_ct_amplitude, *_ct_exponent, *_ct_offset; - SettingsGroup _turbulence; - SpinSlider _turbulence_basefrequency; - SpinSlider _turbulence_numoctaves; - SpinSlider _turbulence_seed; - Gtk::CheckButton _turbulence_stitchtiles; - Gtk::RadioButton::Group _turbulence_type; - Gtk::RadioButton _turbulence_fractalnoise; - Gtk::RadioButton _turbulence_turbulence; + // To prevent unwanted signals + bool _locked; + bool _attr_lock; FilterEffectsDialog(FilterEffectsDialog const &d); FilterEffectsDialog& operator=(FilterEffectsDialog const &d);