diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2007-10-28 16:03:07 +0000 |
|---|---|---|
| committer | johanengelen <johanengelen@users.sourceforge.net> | 2007-10-28 16:03:07 +0000 |
| commit | 96b65f32d922a989131ae91798801ea54c4e8b10 (patch) | |
| tree | 627327d9468b399e064111734831864c4730bc2a /src/live_effects | |
| parent | added perfectboundcover.inx to translatable extensions (diff) | |
| download | inkscape-96b65f32d922a989131ae91798801ea54c4e8b10.tar.gz inkscape-96b65f32d922a989131ae91798801ea54c4e8b10.zip | |
LPE: implement 'edit next LPE parameter'. Accessible through key '7'.
(bzr r3968)
Diffstat (limited to 'src/live_effects')
| -rw-r--r-- | src/live_effects/effect.cpp | 41 | ||||
| -rw-r--r-- | src/live_effects/effect.h | 8 | ||||
| -rw-r--r-- | src/live_effects/parameter/parameter.cpp | 1 | ||||
| -rw-r--r-- | src/live_effects/parameter/parameter.h | 7 | ||||
| -rw-r--r-- | src/live_effects/parameter/path.cpp | 36 | ||||
| -rw-r--r-- | src/live_effects/parameter/path.h | 2 |
6 files changed, 82 insertions, 13 deletions
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index cfabc88b4..3802066ec 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -90,6 +90,7 @@ Effect::Effect(LivePathEffectObject *lpeobject) vbox = NULL; tooltips = NULL; lpeobj = lpeobject; + oncanvasedit_it = param_map.begin(); } Effect::~Effect() @@ -261,6 +262,46 @@ Effect::getSPDoc() return SP_OBJECT_DOCUMENT(lpeobj); } +Parameter * +Effect::getNextOncanvasEditableParam() +{ + oncanvasedit_it++; + if (oncanvasedit_it == param_map.end()) { + oncanvasedit_it = param_map.begin(); + } + param_map_type::iterator old_it = oncanvasedit_it; + + do { + Parameter * param = oncanvasedit_it->second; + if(param->oncanvas_editable) { + return param; + } else { + oncanvasedit_it++; + if (oncanvasedit_it == param_map.end()) { // loop round the map + oncanvasedit_it = param_map.begin(); + } + } + } while (oncanvasedit_it != old_it); // iterate until complete loop through map has been made + + return NULL; +} + +void +Effect::editNextParamOncanvas(SPItem * item, SPDesktop * desktop) +{ + if (!desktop) return; + + Parameter * param = getNextOncanvasEditableParam(); + if (param) { + param->param_editOncanvas(item, desktop); + gchar *message = g_strdup_printf(_("Editing parameter <b>%s</b>."), param->param_label.c_str()); + desktop->messageStack()->flash(Inkscape::NORMAL_MESSAGE, message); + g_free(message); + } else { + desktop->messageStack()->flash( Inkscape::WARNING_MESSAGE, + _("None of the applied path effect's parameters can be edited on-canvas.") ); + } +} } /* namespace LivePathEffect */ diff --git a/src/live_effects/effect.h b/src/live_effects/effect.h index 8c647e599..844a158b5 100644 --- a/src/live_effects/effect.h +++ b/src/live_effects/effect.h @@ -21,8 +21,9 @@ //#define LPE_ENABLE_TEST_EFFECTS -struct SPShape; struct SPDocument; +struct SPDesktop; +struct SPItem; class NArtBpath; struct LivePathEffectObject; @@ -75,6 +76,8 @@ public: void readallParameters(Inkscape::XML::Node * repr); void setParameter(const gchar * key, const gchar * new_value); + void editNextParamOncanvas(SPItem * item, SPDesktop * desktop); + protected: Effect(LivePathEffectObject *lpeobject); @@ -91,6 +94,7 @@ protected: doEffect (Geom::Piecewise<Geom::D2<Geom::SBasis> > & pwd2_in); void registerParameter(Parameter * param); + Parameter * getNextOncanvasEditableParam(); typedef std::map<Glib::ustring, Parameter *> param_map_type; param_map_type param_map; @@ -101,6 +105,8 @@ protected: LivePathEffectObject *lpeobj; + param_map_type::iterator oncanvasedit_it; + private: Effect(const Effect&); Effect& operator=(const Effect&); diff --git a/src/live_effects/parameter/parameter.cpp b/src/live_effects/parameter/parameter.cpp index efca9908d..9ee7faae4 100644 --- a/src/live_effects/parameter/parameter.cpp +++ b/src/live_effects/parameter/parameter.cpp @@ -28,6 +28,7 @@ namespace LivePathEffect { Parameter::Parameter( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, Inkscape::UI::Widget::Registry* wr, Effect* effect ) + : oncanvas_editable(false) { param_label = label; param_tooltip = tip; diff --git a/src/live_effects/parameter/parameter.h b/src/live_effects/parameter/parameter.h index a6b05bf36..a41d5f7c6 100644 --- a/src/live_effects/parameter/parameter.h +++ b/src/live_effects/parameter/parameter.h @@ -16,6 +16,9 @@ #include "ui/widget/registry.h" #include "ui/widget/registered-widget.h" +struct SPDesktop; +struct SPItem; + namespace Gtk { class Widget; } @@ -45,10 +48,14 @@ public: virtual Gtk::Widget * param_getWidget() = 0; virtual Glib::ustring * param_getTooltip() { return ¶m_tooltip; }; + virtual void param_editOncanvas(SPItem * item, SPDesktop * dt) { return; }; + Glib::ustring param_key; Inkscape::UI::Widget::Registry * param_wr; Glib::ustring param_label; + bool oncanvas_editable; + protected: Glib::ustring param_tooltip; diff --git a/src/live_effects/parameter/path.cpp b/src/live_effects/parameter/path.cpp index db1064511..2b558d2dd 100644 --- a/src/live_effects/parameter/path.cpp +++ b/src/live_effects/parameter/path.cpp @@ -46,6 +46,7 @@ PathParam::PathParam( const Glib::ustring& label, const Glib::ustring& tip, edit_button = NULL; defvalue = g_strdup(default_value); param_readSVGValue(defvalue); + oncanvas_editable = true; } PathParam::~PathParam() @@ -128,18 +129,35 @@ PathParam::param_getWidget() } void -PathParam::on_edit_button_click() +PathParam::param_editOncanvas(SPItem * item, SPDesktop * dt) { - // Switch to node edit tool: - tools_switch_current(TOOLS_NODES); + // If not already in nodecontext, goto it! + if (!tools_isactive(dt, TOOLS_NODES)) { + tools_switch_current(TOOLS_NODES); + } - // set this parameter to edit: - ShapeEditor * shape_editor = SP_NODE_CONTEXT( SP_ACTIVE_DESKTOP->event_context )->shape_editor; - SPItem * item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->singleItem(); + ShapeEditor * shape_editor = SP_NODE_CONTEXT( dt->event_context )->shape_editor; shape_editor->set_item_livepatheffect_parameter(item, SP_OBJECT(param_effect->getLPEObj()), param_key.c_str()); } void +PathParam::param_write_to_repr(const char * svgd) +{ + param_effect->getRepr()->setAttribute(param_key.c_str(), svgd); +} + + +/* CALLBACK FUNCTIONS FOR THE BUTTONS */ +void +PathParam::on_edit_button_click() +{ + SPItem * item = sp_desktop_selection(SP_ACTIVE_DESKTOP)->singleItem(); + if (item != NULL) { + param_editOncanvas(item, SP_ACTIVE_DESKTOP); + } +} + +void PathParam::on_paste_button_click() { // check if something is in the clipboard @@ -170,12 +188,6 @@ PathParam::on_paste_button_click() } } -void -PathParam::param_write_to_repr(const char * svgd) -{ - param_effect->getRepr()->setAttribute(param_key.c_str(), svgd); -} - } /* namespace LivePathEffect */ diff --git a/src/live_effects/parameter/path.h b/src/live_effects/parameter/path.h index 14387f419..6ba6e7e4b 100644 --- a/src/live_effects/parameter/path.h +++ b/src/live_effects/parameter/path.h @@ -44,6 +44,8 @@ public: void param_set_default(); + void param_editOncanvas(SPItem * item, SPDesktop * dt); + sigc::signal <void> signal_path_pasted; sigc::signal <void> signal_path_changed; |
