/* * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. * */ #include "actions/OE_actionsStitchs.h" #include "actions/OE_actionsFillStitchs.h" #include "OE_document.h" ///////// actionNewFillStitch /////////////// /// \brief OE_actionNewFillStitch::OE_actionNewFillStitch /// \param curve /// \param len /// \param width /// \param Pattern /// \param offset /// OE_actionNewFillStitch::OE_actionNewFillStitch( float len, float width, OE_pattern* pattern) { if (document) { FillStitch = new OE_fillstitch(document->threads.front(), len, width, pattern); action = new OE_actionNewStitch(FillStitch); } } OE_actionNewFillStitch::~OE_actionNewFillStitch() { if (!active) { if (action) delete action; if (FillStitch) delete FillStitch; } } void OE_actionNewFillStitch::undo() { if (active&&action) action->undo(); active = false; } void OE_actionNewFillStitch::redo() { if (!active&&action) action->redo(); active = true; } ///////// OE_actionSetFillStitchPattern /////////////// /// \brief OE_actionSetFillStitchPattern::OE_actionSetFillStitchPattern /// \param stitch /// \param pattern /// OE_actionSetFillStitchPattern::OE_actionSetFillStitchPattern(OE_fillstitch* stitch, OE_pattern* pattern) { if (document&&stitch) { actionStitch = stitch; oldPattern = actionStitch->getPattern(); newPattern = pattern; actionStitch->setPattern(pattern); } } OE_actionSetFillStitchPattern::~OE_actionSetFillStitchPattern(){} void OE_actionSetFillStitchPattern::undo() { if (active) { actionStitch->setPattern(oldPattern); active = false; } } void OE_actionSetFillStitchPattern::redo() { if (!active) { actionStitch->setPattern(newPattern); active = true; } } ///////// OE_actionSetFillStitchLen /////////////// /// \brief OE_actionSetFillStitchLen::OE_actionSetFillStitchLen /// \param stitch /// \param len /// OE_actionSetFillStitchLen::OE_actionSetFillStitchLen(OE_fillstitch* stitch, float len) { if (document&&stitch) { actionStitch = stitch; oldLen = actionStitch->getLen(); actionStitch->setLen(len); } } OE_actionSetFillStitchLen::~OE_actionSetFillStitchLen(){} void OE_actionSetFillStitchLen::undo() { if (active) { actionStitch->setLen(switchVal(actionStitch->getLen(),&oldLen)); active = false; } } void OE_actionSetFillStitchLen::redo() { if (!active) { actionStitch->setLen(switchVal(actionStitch->getLen(),&oldLen)); active = true; } } ///////// OE_actionSetFillStitchWidth /////////////// /// \brief OE_actionSetFillStitchWidth::OE_actionSetFillStitchWidth /// \param stitch /// \param width /// OE_actionSetFillStitchWidth::OE_actionSetFillStitchWidth(OE_fillstitch* stitch, float width) { if (document&&stitch) { actionStitch = stitch; oldWidth = actionStitch->getWidth(); actionStitch->setWidth(width); } } OE_actionSetFillStitchWidth::~OE_actionSetFillStitchWidth(){} void OE_actionSetFillStitchWidth::undo() { if (active) { actionStitch->setWidth(switchVal(actionStitch->getWidth(),&oldWidth)); active = false; } } void OE_actionSetFillStitchWidth::redo() { if (!active) { actionStitch->setWidth(switchVal(actionStitch->getWidth(),&oldWidth)); active = true; } } void OE_actionSetFillStitchWidth::setWidth(float width) { if (document) { actionStitch->setWidth(width); } } void OE_actionSetFillStitchWidth::offsetWidth(float offset) { if (document) { actionStitch->setWidth(actionStitch->getWidth()-oldOffset+offset); } oldOffset = offset; } float OE_actionSetFillStitchWidth::getWidth() { if (document) { return actionStitch->getWidth(); } return 0; } ///////// OE_actionSetSelectedFillStitchWidth /////////////// /// \brief OE_actionSetSelectedFillStitchWidth::OE_actionSetFillStitchWidth /// \param scale /// OE_actionScaleSelectedFillStitchWidth::OE_actionScaleSelectedFillStitchWidth( float scale) { if (document) { OE_fillstitch* tmpFillStitch; for(auto selStitch : document->selectedStitchs) { tmpFillStitch = dynamic_cast(selStitch); if (tmpFillStitch) actions.push_back( new OE_actionSetFillStitchWidth(tmpFillStitch,tmpFillStitch->getWidth()*scale)); } oldScale = scale; } } OE_actionScaleSelectedFillStitchWidth::~OE_actionScaleSelectedFillStitchWidth(){} void OE_actionScaleSelectedFillStitchWidth::undo() { if (active) { for(auto action : actions) action->undo(); active = false; } } void OE_actionScaleSelectedFillStitchWidth::redo() { if (!active) { for(auto action : actions) action->redo(); active = true; } } void OE_actionScaleSelectedFillStitchWidth::scaleWidth(float scale) { for(auto action : actions) { action->setWidth(action->getWidth()/oldScale*scale); } oldScale = scale; } ///////// OE_actionSetSelectedFillStitchLen/////////////// /// \brief OE_actionSetSelectedFillStitchLen::OE_actionSetSelectedFillStitchLen /// \param scale /// OE_actionScaleSelectedFillStitchLen::OE_actionScaleSelectedFillStitchLen( float scale) { if (document) { OE_fillstitch* tmpFillStitch; for(auto selStitch : document->selectedStitchs) { tmpFillStitch = dynamic_cast(selStitch); if (tmpFillStitch) actions.push_back( new OE_actionSetFillStitchLen(tmpFillStitch,tmpFillStitch->getLen()*scale)); } } } OE_actionScaleSelectedFillStitchLen::~OE_actionScaleSelectedFillStitchLen(){} void OE_actionScaleSelectedFillStitchLen::undo() { if (active) { for(auto action : actions) action->undo(); active = false; } } void OE_actionScaleSelectedFillStitchLen::redo() { if (!active) { for(auto action : actions) action->redo(); active = true; } } void OE_actionScaleSelectedFillStitchLen::scaleLen(float scale) { } ///////// OE_actionSetSelectedFillStitchPattern /////////////// /// \brief OE_actionSetSelectedFillStitchPattern::OE_actionSetSelectedFillStitchPattern /// \param pattern /// OE_actionSetSelectedFillStitchPattern::OE_actionSetSelectedFillStitchPattern( OE_pattern* pattern) { if (document) { OE_fillstitch* tmpFillStitch; for(auto selStitch : document->selectedStitchs) { tmpFillStitch = dynamic_cast(selStitch); if (tmpFillStitch) actions.push_back( new OE_actionSetFillStitchPattern(tmpFillStitch, pattern)); } } } OE_actionSetSelectedFillStitchPattern::~OE_actionSetSelectedFillStitchPattern(){} void OE_actionSetSelectedFillStitchPattern::undo() { if (active) { for(auto action : actions) action->undo(); active = false; } } void OE_actionSetSelectedFillStitchPattern::redo() { if (!active) { for(auto action : actions) action->redo(); active = true; } }