X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fdialog%2Ffilter-effects-dialog.h;h=3fb9a46fb89568d19c140269cd5ae6a3a8b0f2c8;hb=604bbc96a26ec5381cc865aa1458b115e41201ce;hp=9e272fbabf86097661cf50b96cb21becd1fb999e;hpb=2ef3c2ef15d6c81069a1f6abeb5bdf502d18f616;p=inkscape.git diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 9e272fbab..3fb9a46fb 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,14 +24,16 @@ #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/combo-enums.h" #include "ui/widget/spin-slider.h" +#include "xml/helper-observer.h" using namespace Inkscape::UI::Widget; @@ -38,54 +43,83 @@ namespace Dialog { class DualSpinButton; class MultiSpinButton; -class FilterEffectsDialog : public Dialog { +class FilterEffectsDialog : public UI::Widget::Panel { public: + + FilterEffectsDialog(); ~FilterEffectsDialog(); - void set_attrs_locked(const bool); + 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 FilterModifier : public Gtk::VBox { public: 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 CellRendererSel : public Gtk::CellRenderer + class Columns : public Gtk::TreeModel::ColumnRecord { public: - CellRendererSel(); - Glib::PropertyProxy property_sel(); - protected: - virtual void get_size_vfunc(Gtk::Widget&, const Gdk::Rectangle*, - int*, int*, int*, int*) const; - virtual void render_vfunc(const Glib::RefPtr& win, Gtk::Widget& w, - const Gdk::Rectangle& bg_area, const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, Gtk::CellRendererState flags); - private: - const int _size; - Glib::Property _sel; + 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 filter_list_button_press(GdkEventButton*); + void update_filters(); void filter_list_button_release(GdkEventButton*); void add_filter(); void remove_filter(); void duplicate_filter(); void rename_filter(); + sigc::connection _doc_replaced; + sigc::connection _resource_changed; + FilterEffectsDialog& _dialog; Gtk::TreeView _list; - CellRendererSel _cell_sel; + 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 @@ -100,7 +134,7 @@ private: } Gtk::TreeModelColumn primitive; - Gtk::TreeModelColumn type_id; + Gtk::TreeModelColumn type_id; Gtk::TreeModelColumn type; Gtk::TreeModelColumn id; }; @@ -129,13 +163,14 @@ private: public: PrimitiveList(FilterEffectsDialog&); - Glib::SignalProxy0 signal_selection_changed(); + sigc::signal& signal_primitive_changed(); void update(); void set_menu(Glib::RefPtr); SPFilterPrimitive* get_selected(); void select(SPFilterPrimitive *prim); + void remove_selected(); int primitive_count() const; protected: @@ -154,6 +189,8 @@ private: 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; @@ -163,9 +200,12 @@ private: 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; }; - FilterEffectsDialog(); void init_settings_widgets(); // Handlers @@ -176,30 +216,42 @@ private: 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_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; - PrimitiveList _primitive_list; - UI::Widget::ComboBoxEnum _add_primitive_type; + UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; // Bottom pane (filter effect primitive settings) - Gtk::VBox _settings_box; + Gtk::Notebook _settings_tabs; + Gtk::VBox _settings_tab2; + Gtk::VBox _settings_tab1; Gtk::Label _empty_settings; + 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; @@ -207,9 +259,16 @@ private: // 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);