X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Ffilter-effects-dialog.h;h=ccffb2a67d78be6356540bf913328b11d05dcca2;hb=9acbda558d50be3b21e4b384be758bc12a461072;hp=3438348d56ced06b7ab04abb18bd6f2ac90f76ee;hpb=6e369d7e74c36e07f5fb1e27d37923fbed7dd89c;p=inkscape.git diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 3438348d5..ccffb2a67 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -1,8 +1,9 @@ -/** - * \brief Filter Effects dialog - * - * Authors: +/** @file + * @brief Filter Effects dialog + */ +/* Authors: * Nicholas Bishop + * Rodrigo Kumpera * * Copyright (C) 2007 Authors * @@ -12,6 +13,8 @@ #ifndef INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H #define INKSCAPE_UI_DIALOG_FILTER_EFFECTS_H +#include + #include #include #include @@ -21,13 +24,14 @@ #include #include #include +#include +#include #include #include "attributes.h" -#include "dialog.h" +#include "ui/widget/panel.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; @@ -36,31 +40,86 @@ namespace Inkscape { namespace UI { namespace Dialog { -class FilterEffectsDialog : public Dialog { +class DualSpinButton; +class MultiSpinButton; +class FilterEffectsDialog : public UI::Widget::Panel { public: + FilterEffectsDialog(); - virtual ~FilterEffectsDialog(); + ~FilterEffectsDialog(); + + static FilterEffectsDialog &getInstance() + { return *new FilterEffectsDialog(); } - static FilterEffectsDialog *create() { return new FilterEffectsDialog(); } + void set_attrs_locked(const bool); +protected: + virtual void show_all_vfunc(); private: - class FilterModifier : public Gtk::VBox, public FilterEffectChooser + class SignalObserver; + + class FilterModifier : public Gtk::VBox { public: - FilterModifier(); + FilterModifier(FilterEffectsDialog&); + ~FilterModifier(); - virtual SPFilter* get_selected_filter(); - virtual void select_filter(const SPFilter*); - virtual Glib::SignalProxy0 signal_selection_changed(); + SPFilter* get_selected_filter(); + void select_filter(const SPFilter*); + + sigc::signal& signal_filter_changed() + { + return _signal_filter_changed; + } private: - void filter_list_button_press(GdkEventButton*); + 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*); + static void on_deactivate_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 @@ -80,17 +139,71 @@ private: Gtk::TreeModelColumn id; }; - class SettingsFrame : public Gtk::Table + class CellRendererConnection : public Gtk::CellRenderer { public: - SettingsFrame(); + CellRendererConnection(); + Glib::PropertyProxy property_primitive(); + + 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 + { + public: + PrimitiveList(FilterEffectsDialog&); + + sigc::signal& signal_primitive_changed(); + + void update(); + void set_menu(Glib::RefPtr); - void init(Gtk::VBox& box); - void add_setting(Gtk::Widget& w, const Glib::ustring& label); + SPFilterPrimitive* get_selected(); + void select(SPFilterPrimitive *prim); + void remove_selected(); + + int primitive_count() const; + protected: + 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: - Gtk::Alignment _alignment; - Gtk::Table _table; - int _where; + 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 int attr, int& src_id); + int find_index(const Gtk::TreeIter& target); + 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; }; void init_settings_widgets(); @@ -99,77 +212,63 @@ private: void add_primitive(); void remove_primitive(); void duplicate_primitive(); - void primitive_name_edited(const Glib::ustring& path, const Glib::ustring& text); - void primitive_list_button_press(GdkEventButton* event); - void primitive_list_drag_end(const Glib::RefPtr&); + void convolve_order_changed(); - void set_attr(const SPAttributeEnum); + void set_attr_direct(const AttrWidget*); + void set_child_attr_direct(const AttrWidget*); + void set_filternode_attr(const AttrWidget*); + void set_attr(SPObject*, const SPAttributeEnum, const gchar* val); void update_settings_view(); - void update_primitive_list(); - - SPFilterPrimitive* get_selected_primitive(); - void select_primitive(SPFilterPrimitive *prim); + void update_filter_general_settings_view(); + void update_settings_sensitivity(); + void update_color_matrix(); + void update_primitive_infobox(); - // Filter effect selection - FilterModifier _filter_modifier; + // Primitives Info Box + Gtk::Label _infobox_desc; + Gtk::Image _infobox_icon; // View/add primitives Gtk::VBox _primitive_box; - Gtk::TreeView _primitive_list; - Glib::RefPtr _primitive_model; - PrimitiveColumns _primitive_columns; - Glib::RefPtr _primitive_menu; UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; - // Right pane (filter effect primitive settings) - Gtk::VBox _settings; + // Bottom pane (filter effect primitive settings) + Gtk::Notebook _settings_tabs; + Gtk::VBox _settings_tab2; + Gtk::VBox _settings_tab1; Gtk::Label _empty_settings; - - SettingsFrame _blend; - UI::Widget::ComboBoxEnum _blend_mode; - - SettingsFrame _colormatrix; - Gtk::ComboBoxText _colormatrix_type; - - SettingsFrame _componenttransfer; - - SettingsFrame _composite; - - SettingsFrame _convolvematrix; - - SettingsFrame _diffuselighting; - - SettingsFrame _displacementmap; - - SettingsFrame _flood; - - SettingsFrame _gaussianblur; - SpinSlider _gaussianblur_stddeviation; - - SettingsFrame _image; - - SettingsFrame _merge; - - SettingsFrame _morphology; - Gtk::ComboBoxText _morphology_operator; - SpinSlider _morphology_radius; - - SettingsFrame _offset; - SpinSlider _offset_dx; - SpinSlider _offset_dy; - - SettingsFrame _specularlighting; - - SettingsFrame _tile; - - SettingsFrame _turbulence; - SpinSlider _turbulence_basefrequency; - SpinSlider _turbulence_numoctaves; - SpinSlider _turbulence_seed; - Gtk::ComboBoxText _turbulence_stitchtiles; - Gtk::ComboBoxText _turbulence_type; - + Gtk::Label _no_filter_selected; + bool _settings_initialized; + + class Settings; + class MatrixAttr; + class ColorMatrixValues; + class LightSourceControl; + Settings* _settings; + Settings* _filter_general_settings; + Glib::RefPtr _sizegroup; + + // Color Matrix + ColorMatrixValues* _color_matrix_values; + + // Convolve Matrix + MatrixAttr* _convolve_matrix; + DualSpinButton* _convolve_order; + MultiSpinButton* _convolve_target; + + // For controlling setting sensitivity + Gtk::Widget* _k1, *_k2, *_k3, *_k4; + Gtk::Widget* _ct_table, *_ct_slope, *_ct_intercept, *_ct_amplitude, *_ct_exponent, *_ct_offset; + + // To prevent unwanted signals + bool _locked; + bool _attr_lock; + + // These go last since they depend on the prior initialization of + // other FilterEffectsDialog members + FilterModifier _filter_modifier; + PrimitiveList _primitive_list; FilterEffectsDialog(FilterEffectsDialog const &d); FilterEffectsDialog& operator=(FilterEffectsDialog const &d);