diff options
Diffstat (limited to 'src/ui/toolbar/lpe-toolbar.cpp')
| -rw-r--r-- | src/ui/toolbar/lpe-toolbar.cpp | 484 |
1 files changed, 245 insertions, 239 deletions
diff --git a/src/ui/toolbar/lpe-toolbar.cpp b/src/ui/toolbar/lpe-toolbar.cpp index 8ed30d9ac..361144881 100644 --- a/src/ui/toolbar/lpe-toolbar.cpp +++ b/src/ui/toolbar/lpe-toolbar.cpp @@ -45,219 +45,30 @@ using Inkscape::DocumentUndo; using Inkscape::UI::Tools::ToolBase; using Inkscape::UI::Tools::LpeTool; - -//######################## -//## LPETool ## -//######################## - -// the subtools from which the toolbar is built automatically are listed in lpe-tool-context.h - -// this is called when the mode is changed via the toolbar (i.e., one of the subtool buttons is pressed) -static void sp_lpetool_mode_changed(GObject *tbl, int mode) -{ - using namespace Inkscape::LivePathEffect; - - SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(tbl, "desktop")); - ToolBase *ec = desktop->event_context; - if (!SP_IS_LPETOOL_CONTEXT(ec)) { - return; - } - - // only take action if run by the attr_changed listener - if (!g_object_get_data(tbl, "freeze")) { - // in turn, prevent listener from responding - g_object_set_data(tbl, "freeze", GINT_TO_POINTER(TRUE)); - - EffectType type = lpesubtools[mode].type; - - LpeTool *lc = SP_LPETOOL_CONTEXT(desktop->event_context); - bool success = lpetool_try_construction(lc, type); - if (success) { - // since the construction was already performed, we set the state back to inactive - InkSelectOneAction* act = - static_cast<InkSelectOneAction*>( g_object_get_data( tbl, "lpetool_mode_action" ) ); - act->set_active(0); - mode = 0; - } else { - // switch to the chosen subtool - SP_LPETOOL_CONTEXT(desktop->event_context)->mode = type; - } - - if (DocumentUndo::getUndoSensitive(desktop->getDocument())) { - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setInt( "/tools/lpetool/mode", mode ); - } - - g_object_set_data(tbl, "freeze", GINT_TO_POINTER(FALSE)); - } -} - -static void sp_lpetool_toolbox_sel_modified(Inkscape::Selection *selection, guint /*flags*/, GObject * /*tbl*/) -{ - ToolBase *ec = selection->desktop()->event_context; - if (SP_IS_LPETOOL_CONTEXT(ec)) { - lpetool_update_measuring_items(SP_LPETOOL_CONTEXT(ec)); - } -} - -static void sp_lpetool_toolbox_sel_changed(Inkscape::Selection *selection, GObject *tbl) -{ - using namespace Inkscape::LivePathEffect; - ToolBase *ec = selection->desktop()->event_context; - if (!SP_IS_LPETOOL_CONTEXT(ec)) { - return; - } - LpeTool *lc = SP_LPETOOL_CONTEXT(ec); - - lpetool_delete_measuring_items(lc); - lpetool_create_measuring_items(lc, selection); - - // activate line segment combo box if a single item with LPELineSegment is selected - InkSelectOneAction* act = - static_cast<InkSelectOneAction*>( g_object_get_data( tbl, "lpetool_line_segment_action" ) ); - - SPItem *item = selection->singleItem(); - if (item && SP_IS_LPE_ITEM(item) && lpetool_item_has_construction(lc, item)) { - - SPLPEItem *lpeitem = SP_LPE_ITEM(item); - Effect* lpe = lpeitem->getCurrentLPE(); - if (lpe && lpe->effectType() == LINE_SEGMENT) { - LPELineSegment *lpels = static_cast<LPELineSegment*>(lpe); - g_object_set_data(tbl, "currentlpe", lpe); - g_object_set_data(tbl, "currentlpeitem", lpeitem); - act->set_sensitive(true); - act->set_active( lpels->end_type.get_value() ); - } else { - g_object_set_data(tbl, "currentlpe", nullptr); - g_object_set_data(tbl, "currentlpeitem", nullptr); - act->set_sensitive(false); - } - - } else { - g_object_set_data(tbl, "currentlpe", nullptr); - g_object_set_data(tbl, "currentlpeitem", nullptr); - act->set_sensitive(false); - } -} - -static void lpetool_toggle_show_bbox(GtkToggleAction *act, gpointer data) { - SPDesktop *desktop = static_cast<SPDesktop *>(data); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - - bool show = gtk_toggle_action_get_active( act ); - prefs->setBool("/tools/lpetool/show_bbox", show); - - if (tools_isactive(desktop, TOOLS_LPETOOL)) { - LpeTool *lc = SP_LPETOOL_CONTEXT(desktop->event_context); - lpetool_context_reset_limiting_bbox(lc); - } -} - -static void lpetool_toggle_show_measuring_info(GtkToggleAction *act, GObject *tbl) -{ - SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data(tbl, "desktop")); - if (!tools_isactive(desktop, TOOLS_LPETOOL)) { - return; - } - - bool show = gtk_toggle_action_get_active( act ); - - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool("/tools/lpetool/show_measuring_info", show); - - LpeTool *lc = SP_LPETOOL_CONTEXT(desktop->event_context); - lpetool_show_measuring_info(lc, show); - - InkSelectOneAction* unitact = - static_cast<InkSelectOneAction*>(g_object_get_data(tbl, "lpetool_units_action")); - unitact->set_sensitive( show ); -} - -static void lpetool_unit_changed(GObject* tbl, int /* NotUsed */) -{ - UnitTracker* tracker = reinterpret_cast<UnitTracker*>(g_object_get_data(tbl, "tracker")); - Unit const *unit = tracker->getActiveUnit(); - g_return_if_fail(unit != nullptr); - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setString("/tools/lpetool/unit", unit->abbr); - - SPDesktop *desktop = static_cast<SPDesktop *>(g_object_get_data( tbl, "desktop" )); - if (SP_IS_LPETOOL_CONTEXT(desktop->event_context)) { - LpeTool *lc = SP_LPETOOL_CONTEXT(desktop->event_context); - lpetool_delete_measuring_items(lc); - lpetool_create_measuring_items(lc); - } -} - -static void lpetool_toggle_set_bbox(GtkToggleAction *act, gpointer data) -{ - SPDesktop *desktop = static_cast<SPDesktop *>(data); - Inkscape::Selection *selection = desktop->selection; - - Geom::OptRect bbox = selection->visualBounds(); - - if (bbox) { - Geom::Point A(bbox->min()); - Geom::Point B(bbox->max()); - - A *= desktop->doc2dt(); - B *= desktop->doc2dt(); - - // TODO: should we provide a way to store points in prefs? - Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setDouble("/tools/lpetool/bbox_upperleftx", A[Geom::X]); - prefs->setDouble("/tools/lpetool/bbox_upperlefty", A[Geom::Y]); - prefs->setDouble("/tools/lpetool/bbox_lowerrightx", B[Geom::X]); - prefs->setDouble("/tools/lpetool/bbox_lowerrighty", B[Geom::Y]); - - lpetool_context_reset_limiting_bbox(SP_LPETOOL_CONTEXT(desktop->event_context)); - } - - gtk_toggle_action_set_active(act, false); -} - -static void sp_lpetool_change_line_segment_type(GObject* tbl, int mode) +namespace Inkscape { +namespace UI { +namespace Toolbar { +LPEToolbar::LPEToolbar(SPDesktop *desktop) + : Toolbar(desktop), + _tracker(new UnitTracker(Util::UNIT_TYPE_LINEAR)), + _freeze(false), + _currentlpe(nullptr), + _currentlpeitem(nullptr) { - using namespace Inkscape::LivePathEffect; - - // quit if run by the attr_changed listener - if (g_object_get_data(tbl, "freeze")) { - return; - } - - // in turn, prevent listener from responding - g_object_set_data(tbl, "freeze", GINT_TO_POINTER(TRUE)); - - LPELineSegment *lpe = static_cast<LPELineSegment *>(g_object_get_data(tbl, "currentlpe")); - SPLPEItem *lpeitem = static_cast<SPLPEItem *>(g_object_get_data(tbl, "currentlpeitem")); - if (lpeitem) { - SPLPEItem *lpeitem = static_cast<SPLPEItem *>(g_object_get_data(tbl, "currentlpeitem")); - lpe->end_type.param_set_value(static_cast<Inkscape::LivePathEffect::EndType>(mode)); - sp_lpe_item_update_patheffect(lpeitem, true, true); - } - - g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); + _tracker->setActiveUnit(_desktop->getNamedView()->display_units); } -static void lpetool_open_lpe_dialog(GtkToggleAction *act, gpointer data) +LPEToolbar::~LPEToolbar() { - SPDesktop *desktop = static_cast<SPDesktop *>(data); - - if (tools_isactive(desktop, TOOLS_LPETOOL)) { - sp_action_perform(Inkscape::Verb::get(SP_VERB_DIALOG_LIVE_PATH_EFFECT)->get_action(Inkscape::ActionContext(desktop)), nullptr); - } - gtk_toggle_action_set_active(act, false); + delete _tracker; } -static void lpetool_toolbox_watch_ec(SPDesktop* dt, Inkscape::UI::Tools::ToolBase* ec, GObject* holder); - -void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObject* holder) +GtkWidget * +LPEToolbar::prep(SPDesktop *desktop, GtkActionGroup* mainActions) { - UnitTracker* tracker = new UnitTracker(Inkscape::Util::UNIT_TYPE_LINEAR); - tracker->setActiveUnit(desktop->getNamedView()->display_units); - g_object_set_data(holder, "tracker", tracker); - Unit const *unit = tracker->getActiveUnit(); - g_return_if_fail(unit != nullptr); + auto toolbar = new LPEToolbar(desktop); + Unit const *unit = toolbar->_tracker->getActiveUnit(); + g_return_val_if_fail(unit != nullptr, nullptr); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); prefs->setString("/tools/lpetool/unit", unit->abbr); @@ -289,23 +100,22 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO row[columns.col_sensitive] = true; } - InkSelectOneAction* act = + toolbar->_mode_action = InkSelectOneAction::create( "LPEToolModeAction", // Name (""), // Label (""), // Tooltip "Not Used", // Icon store ); // Tree store - act->use_radio( true ); - act->use_icon( true ); - act->use_label( false ); + toolbar->_mode_action->use_radio( true ); + toolbar->_mode_action->use_icon( true ); + toolbar->_mode_action->use_label( false ); int mode = prefs->getInt("/tools/lpetool/mode", 0); - act->set_active( mode ); + toolbar->_mode_action->set_active( mode ); - gtk_action_group_add_action( mainActions, act->gobj() ); - g_object_set_data( holder, "lpetool_mode_action", act ); + gtk_action_group_add_action( mainActions, toolbar->_mode_action->gobj() ); - act->signal_changed().connect(sigc::bind<0>(sigc::ptr_fun(&sp_lpetool_mode_changed), holder)); + toolbar->_mode_action->signal_changed().connect(sigc::mem_fun(*toolbar, &LPEToolbar::mode_changed)); } /* Show limiting bounding box */ @@ -316,7 +126,7 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO "show-bounding-box", GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); - g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_bbox), desktop ); + g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_bbox), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_bbox", true ) ); } @@ -328,11 +138,10 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO "draw-geometry-set-bounding-box", GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); - g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_set_bbox), desktop ); + g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_set_bbox), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), FALSE ); } - /* Combo box to choose line segment type */ { InkSelectOneActionColumns columns; @@ -365,22 +174,21 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO row[columns.col_icon ] = "NotUsed"; row[columns.col_sensitive] = true; - InkSelectOneAction* act = + toolbar->_line_segment_action = InkSelectOneAction::create( "LPELineSegmentAction", // Name (""), // Label _("Choose a line segment type"), // Tooltip "Not Used", // Icon store ); // Tree store - act->use_radio( false ); - act->use_icon( false ); - act->use_label( true ); - act->set_sensitive( false ); + toolbar->_line_segment_action->use_radio( false ); + toolbar->_line_segment_action->use_icon( false ); + toolbar->_line_segment_action->use_label( true ); + toolbar->_line_segment_action->set_sensitive( false ); - gtk_action_group_add_action( mainActions, GTK_ACTION( act->gobj() )); - g_object_set_data (holder, "lpetool_line_segment_action", act ); + gtk_action_group_add_action( mainActions, GTK_ACTION( toolbar->_line_segment_action->gobj() )); - act->signal_changed().connect(sigc::bind<0>(sigc::ptr_fun(sp_lpetool_change_line_segment_type), holder)); + toolbar->_line_segment_action->signal_changed().connect(sigc::mem_fun(*toolbar, &LPEToolbar::change_line_segment_type)); } /* Display measuring info for selected items */ @@ -391,17 +199,16 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO "draw-geometry-show-measuring-info", GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); - g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_toggle_show_measuring_info), holder ); + g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(toggle_show_measuring_info), toolbar ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), prefs->getBool( "/tools/lpetool/show_measuring_info", true ) ); } // Add the units menu { - InkSelectOneAction* act = tracker->createAction( "LPEToolUnitsAction", _("Units"), ("") ); - gtk_action_group_add_action( mainActions, act->gobj() ); - act->signal_changed_after().connect(sigc::bind<0>(sigc::ptr_fun(&lpetool_unit_changed), holder)); - g_object_set_data(holder, "lpetool_units_action", act); - act->set_sensitive( prefs->getBool("/tools/lpetool/show_measuring_info", true)); + toolbar->_units_action = toolbar->_tracker->createAction( "LPEToolUnitsAction", _("Units"), ("") ); + gtk_action_group_add_action( mainActions, toolbar->_units_action->gobj() ); + toolbar->_units_action->signal_changed_after().connect(sigc::mem_fun(*toolbar, &LPEToolbar::unit_changed)); + toolbar->_units_action->set_sensitive( prefs->getBool("/tools/lpetool/show_measuring_info", true)); } /* Open LPE dialog (to adapt parameters numerically) */ @@ -412,23 +219,171 @@ void sp_lpetool_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GO "dialog-geometry", GTK_ICON_SIZE_MENU ); gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); - g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(lpetool_open_lpe_dialog), desktop ); + g_signal_connect_after( G_OBJECT(act), "toggled", G_CALLBACK(open_lpe_dialog), desktop ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION(act), FALSE ); } - desktop->connectEventContextChanged(sigc::bind(sigc::ptr_fun(lpetool_toolbox_watch_ec), holder)); + desktop->connectEventContextChanged(sigc::mem_fun(*toolbar, &LPEToolbar::watch_ec)); + + return GTK_WIDGET(toolbar->gobj()); } -static void lpetool_toolbox_watch_ec(SPDesktop* desktop, Inkscape::UI::Tools::ToolBase* ec, GObject* holder) +// this is called when the mode is changed via the toolbar (i.e., one of the subtool buttons is pressed) +void +LPEToolbar::mode_changed(int mode) { - static sigc::connection c_selection_modified; - static sigc::connection c_selection_changed; + using namespace Inkscape::LivePathEffect; + + ToolBase *ec = _desktop->event_context; + if (!SP_IS_LPETOOL_CONTEXT(ec)) { + return; + } + + // only take action if run by the attr_changed listener + if (!_freeze) { + // in turn, prevent listener from responding + _freeze = true; + + EffectType type = lpesubtools[mode].type; + + LpeTool *lc = SP_LPETOOL_CONTEXT(_desktop->event_context); + bool success = lpetool_try_construction(lc, type); + if (success) { + // since the construction was already performed, we set the state back to inactive + _mode_action->set_active(0); + mode = 0; + } else { + // switch to the chosen subtool + SP_LPETOOL_CONTEXT(_desktop->event_context)->mode = type; + } + + if (DocumentUndo::getUndoSensitive(_desktop->getDocument())) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setInt( "/tools/lpetool/mode", mode ); + } + + _freeze = false; + } +} + +void +LPEToolbar::toggle_show_bbox(GtkToggleAction *act, gpointer data) { + SPDesktop *desktop = static_cast<SPDesktop *>(data); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + + bool show = gtk_toggle_action_get_active( act ); + prefs->setBool("/tools/lpetool/show_bbox", show); + + if (tools_isactive(desktop, TOOLS_LPETOOL)) { + LpeTool *lc = SP_LPETOOL_CONTEXT(desktop->event_context); + lpetool_context_reset_limiting_bbox(lc); + } +} + +void +LPEToolbar::toggle_set_bbox(GtkToggleAction *act, gpointer data) +{ + SPDesktop *desktop = static_cast<SPDesktop *>(data); + Inkscape::Selection *selection = desktop->selection; + + Geom::OptRect bbox = selection->visualBounds(); + + if (bbox) { + Geom::Point A(bbox->min()); + Geom::Point B(bbox->max()); + + A *= desktop->doc2dt(); + B *= desktop->doc2dt(); + + // TODO: should we provide a way to store points in prefs? + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble("/tools/lpetool/bbox_upperleftx", A[Geom::X]); + prefs->setDouble("/tools/lpetool/bbox_upperlefty", A[Geom::Y]); + prefs->setDouble("/tools/lpetool/bbox_lowerrightx", B[Geom::X]); + prefs->setDouble("/tools/lpetool/bbox_lowerrighty", B[Geom::Y]); + + lpetool_context_reset_limiting_bbox(SP_LPETOOL_CONTEXT(desktop->event_context)); + } + + gtk_toggle_action_set_active(act, false); +} + +void +LPEToolbar::change_line_segment_type(int mode) +{ + using namespace Inkscape::LivePathEffect; + + // quit if run by the attr_changed listener + if (_freeze) { + return; + } + + // in turn, prevent listener from responding + _freeze = true; + auto line_seg = dynamic_cast<LPELineSegment *>(_currentlpe); + + if (_currentlpeitem && line_seg) { + line_seg->end_type.param_set_value(static_cast<Inkscape::LivePathEffect::EndType>(mode)); + sp_lpe_item_update_patheffect(_currentlpeitem, true, true); + } + _freeze = false; +} + +void +LPEToolbar::toggle_show_measuring_info(GtkToggleAction *act, gpointer data) +{ + auto toolbar = reinterpret_cast<LPEToolbar *>(data); + + if (!tools_isactive(toolbar->_desktop, TOOLS_LPETOOL)) { + return; + } + + bool show = gtk_toggle_action_get_active( act ); + + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setBool("/tools/lpetool/show_measuring_info", show); + + LpeTool *lc = SP_LPETOOL_CONTEXT(toolbar->_desktop->event_context); + lpetool_show_measuring_info(lc, show); + + toolbar->_units_action->set_sensitive( show ); +} + +void +LPEToolbar::unit_changed(int /* NotUsed */) +{ + Unit const *unit = _tracker->getActiveUnit(); + g_return_if_fail(unit != nullptr); + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setString("/tools/lpetool/unit", unit->abbr); + + if (SP_IS_LPETOOL_CONTEXT(_desktop->event_context)) { + LpeTool *lc = SP_LPETOOL_CONTEXT(_desktop->event_context); + lpetool_delete_measuring_items(lc); + lpetool_create_measuring_items(lc); + } +} + +void +LPEToolbar::open_lpe_dialog(GtkToggleAction *act, gpointer data) +{ + SPDesktop *desktop = static_cast<SPDesktop *>(data); + + if (tools_isactive(desktop, TOOLS_LPETOOL)) { + sp_action_perform(Inkscape::Verb::get(SP_VERB_DIALOG_LIVE_PATH_EFFECT)->get_action(Inkscape::ActionContext(desktop)), nullptr); + } + gtk_toggle_action_set_active(act, false); +} + +void +LPEToolbar::watch_ec(SPDesktop* desktop, Inkscape::UI::Tools::ToolBase* ec) +{ if (SP_IS_LPETOOL_CONTEXT(ec)) { // Watch selection - c_selection_modified = desktop->getSelection()->connectModified(sigc::bind(sigc::ptr_fun(sp_lpetool_toolbox_sel_modified), holder)); - c_selection_changed = desktop->getSelection()->connectChanged(sigc::bind(sigc::ptr_fun(sp_lpetool_toolbox_sel_changed), holder)); - sp_lpetool_toolbox_sel_changed(desktop->getSelection(), holder); + c_selection_modified = desktop->getSelection()->connectModified(sigc::mem_fun(*this, &LPEToolbar::sel_modified)); + c_selection_changed = desktop->getSelection()->connectChanged(sigc::mem_fun(*this, &LPEToolbar::sel_changed)); + sel_changed(desktop->getSelection()); } else { if (c_selection_modified) c_selection_modified.disconnect(); @@ -437,6 +392,57 @@ static void lpetool_toolbox_watch_ec(SPDesktop* desktop, Inkscape::UI::Tools::To } } +void +LPEToolbar::sel_modified(Inkscape::Selection *selection, guint /*flags*/) +{ + ToolBase *ec = selection->desktop()->event_context; + if (SP_IS_LPETOOL_CONTEXT(ec)) { + lpetool_update_measuring_items(SP_LPETOOL_CONTEXT(ec)); + } +} + +void +LPEToolbar::sel_changed(Inkscape::Selection *selection) +{ + using namespace Inkscape::LivePathEffect; + ToolBase *ec = selection->desktop()->event_context; + if (!SP_IS_LPETOOL_CONTEXT(ec)) { + return; + } + LpeTool *lc = SP_LPETOOL_CONTEXT(ec); + + lpetool_delete_measuring_items(lc); + lpetool_create_measuring_items(lc, selection); + + // activate line segment combo box if a single item with LPELineSegment is selected + SPItem *item = selection->singleItem(); + if (item && SP_IS_LPE_ITEM(item) && lpetool_item_has_construction(lc, item)) { + + SPLPEItem *lpeitem = SP_LPE_ITEM(item); + Effect* lpe = lpeitem->getCurrentLPE(); + if (lpe && lpe->effectType() == LINE_SEGMENT) { + LPELineSegment *lpels = static_cast<LPELineSegment*>(lpe); + _currentlpe = lpe; + _currentlpeitem = lpeitem; + _line_segment_action->set_sensitive(true); + _line_segment_action->set_active( lpels->end_type.get_value() ); + } else { + _currentlpe = nullptr; + _currentlpeitem = nullptr; + _line_segment_action->set_sensitive(false); + } + + } else { + _currentlpe = nullptr; + _currentlpeitem = nullptr; + _line_segment_action->set_sensitive(false); + } +} + +} +} +} + /* Local Variables: mode:c++ |
