Skip to content
OE_actionsLineStitchs.cpp 8.56 KiB
Newer Older
/*
 * 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_actionsLineStitchs.h"
#include "OE_document.h"

///////// actionNewLineStitch ///////////////
/// \brief OE_actionNewLineStitch::OE_actionNewLineStitch
/// \param curve
/// \param len
/// \param width
/// \param motif
/// \param offset
///

3dsman's avatar
3dsman committed
OE_actionNewLineStitch::OE_actionNewLineStitch( float len, float width, unsigned motif, float offset)
3dsman's avatar
3dsman committed
        linestitch = new OE_linestitch(document->threads.front(), len, width, motif, offset);
        action = new OE_actionNewStitch(linestitch);
    }
}

OE_actionNewLineStitch::~OE_actionNewLineStitch()
{
    if (!active)
    {
        if (action) delete action;
        if (linestitch) delete linestitch;
}

void OE_actionNewLineStitch::undo()
{
    if (active&&action)
        action->undo();
    active = false;
}

void OE_actionNewLineStitch::redo()
{
    if (!active&&action)
        action->redo();
    active = true;
}


///////// OE_actionSetLineStitchMotif ///////////////
/// \brief OE_actionSetLineStitchMotif::OE_actionSetLineStitchMotif
/// \param stitch
/// \param motif
///


OE_actionSetLineStitchMotif::OE_actionSetLineStitchMotif(OE_linestitch* stitch, unsigned motif)
{
    if (document&&stitch)
    {
        actionStitch = stitch;
        oldMotif = actionStitch->getMotif();

        actionStitch->setMotif(motif);
    }
}

OE_actionSetLineStitchMotif::~OE_actionSetLineStitchMotif(){}

void OE_actionSetLineStitchMotif::undo()
{
    if (active)
    {
        actionStitch->setMotif(switchVal(actionStitch->getMotif(),&oldMotif));
        active = false;
    }
}

void OE_actionSetLineStitchMotif::redo()
{
    if (!active)
    {
        actionStitch->setMotif(switchVal(actionStitch->getMotif(),&oldMotif));
        active = true;
    }
}




///////// OE_actionSetLineStitchCurve ///////////////
/// \brief OE_actionSetLineStitchCurve::OE_actionSetLineStitchCurve
/// \param stitch
/// \param curve
///
OE_actionSetLineStitchCurve::OE_actionSetLineStitchCurve(OE_linestitch* stitch, OE_curve * curve)
{
    if (document&&stitch)
    {
        actionStitch = stitch;
        oldCurve = actionStitch->getCurve();

        actionStitch->setCurve(curve);
    }
}

OE_actionSetLineStitchCurve::~OE_actionSetLineStitchCurve(){}

void OE_actionSetLineStitchCurve::undo()
{
    if (active)
    {
        actionStitch->setCurve(switchVal(actionStitch->getCurve(),&oldCurve));
        active = false;
    }
}

void OE_actionSetLineStitchCurve::redo()
{
    if (!active)
    {
        actionStitch->setCurve(switchVal(actionStitch->getCurve(),&oldCurve));
        active = true;
    }
}


///////// OE_actionSetLineStitchLen ///////////////
/// \brief OE_actionSetLineStitchLen::OE_actionSetLineStitchLen
/// \param stitch
/// \param len
///

OE_actionSetLineStitchLen::OE_actionSetLineStitchLen(OE_linestitch* stitch, float len)
{
    if (document&&stitch)
    {
        actionStitch = stitch;
        oldLen = actionStitch->getLen();

        actionStitch->setLen(len);
    }
}

OE_actionSetLineStitchLen::~OE_actionSetLineStitchLen(){}

void OE_actionSetLineStitchLen::undo()
{
    if (active)
    {
        actionStitch->setLen(switchVal(actionStitch->getLen(),&oldLen));
        active = false;
    }
}

void OE_actionSetLineStitchLen::redo()
{
    if (!active)
    {
        actionStitch->setLen(switchVal(actionStitch->getLen(),&oldLen));
        active = true;
    }
}


///////// OE_actionSetLineStitchWidth ///////////////
/// \brief OE_actionSetLineStitchWidth::OE_actionSetLineStitchWidth
/// \param stitch
/// \param width
///

OE_actionSetLineStitchWidth::OE_actionSetLineStitchWidth(OE_linestitch* stitch, float width)
{
    if (document&&stitch)
    {
        actionStitch = stitch;
        oldWidth = actionStitch->getWidth();

        actionStitch->setWidth(width);
    }
}

OE_actionSetLineStitchWidth::~OE_actionSetLineStitchWidth(){}

void OE_actionSetLineStitchWidth::undo()
{
    if (active)
    {
        actionStitch->setWidth(switchVal(actionStitch->getWidth(),&oldWidth));
        active = false;
    }
}

void OE_actionSetLineStitchWidth::redo()
{
    if (!active)
    {
        actionStitch->setWidth(switchVal(actionStitch->getWidth(),&oldWidth));
        active = true;
    }
}


///////// OE_actionSetLineStitchReverse ///////////////
/// \brief OE_actionSetLineStitchReverse::OE_actionSetLineStitchReverse
/// \param stitch
/// \param reverse
///

OE_actionSetLineStitchReverse::OE_actionSetLineStitchReverse(OE_linestitch* stitch, bool reverse)
{
    if (document&&stitch)
    {
        actionStitch = stitch;
        oldReverse = actionStitch->getReverse();

        actionStitch->setReverse(reverse);
    }
}

OE_actionSetLineStitchReverse::~OE_actionSetLineStitchReverse(){}

void OE_actionSetLineStitchReverse::undo()
{
    if (active)
    {
        actionStitch->setReverse(switchVal(actionStitch->getReverse(),&oldReverse));
        active = false;
    }
}

void OE_actionSetLineStitchReverse::redo()
{
    if (!active)
    {
        actionStitch->setReverse(switchVal(actionStitch->getReverse(),&oldReverse));
        active = true;
    }
}


///////// OE_actionSetSelectedLineStitchWidth ///////////////
/// \brief OE_actionSetSelectedLineStitchWidth::OE_actionSetLineStitchWidth
/// \param scale
///

OE_actionScaleSelectedLineStitchWidth::OE_actionScaleSelectedLineStitchWidth( float scale)
{
	if (document)
	{
		OE_linestitch* tmpLineStitch;
		for(auto selStitch : document->selectedStitchs)
		{
			tmpLineStitch = dynamic_cast<OE_linestitch*>(selStitch);
			if (tmpLineStitch) actions.push_back( new OE_actionSetLineStitchWidth(tmpLineStitch,tmpLineStitch->getWidth()*scale));
		}
	}
}

OE_actionScaleSelectedLineStitchWidth::~OE_actionScaleSelectedLineStitchWidth(){}

void OE_actionScaleSelectedLineStitchWidth::undo()
{
	if (active)
	{
		for(auto action : actions)
			action->undo();
		active = false;
	}
}

void OE_actionScaleSelectedLineStitchWidth::redo()
{
	if (!active)
	{
		for(auto action : actions)
			action->redo();
		active = true;
	}
}


///////// OE_actionSetSelectedLineStitchLen///////////////
/// \brief OE_actionSetSelectedLineStitchLen::OE_actionSetSelectedLineStitchLen
/// \param scale
///

OE_actionScaleSelectedLineStitchLen::OE_actionScaleSelectedLineStitchLen( float scale)
{
	if (document)
	{
		OE_linestitch* tmpLineStitch;
		for(auto selStitch : document->selectedStitchs)
		{
			tmpLineStitch = dynamic_cast<OE_linestitch*>(selStitch);
			if (tmpLineStitch) actions.push_back( new OE_actionSetLineStitchLen(tmpLineStitch,tmpLineStitch->getLen()*scale));
		}
	}
}

OE_actionScaleSelectedLineStitchLen::~OE_actionScaleSelectedLineStitchLen(){}

void OE_actionScaleSelectedLineStitchLen::undo()
{
	if (active)
	{
		for(auto action : actions)
			action->undo();
		active = false;
	}
}

void OE_actionScaleSelectedLineStitchLen::redo()
{
	if (!active)
	{
		for(auto action : actions)
			action->redo();
		active = true;
	}
}

///////// OE_actionSetSelectedLineStitchMotif ///////////////
/// \brief OE_actionSetSelectedLineStitchMotif::OE_actionSetSelectedLineStitchMotif
/// \param motif
///

OE_actionSetSelectedLineStitchMotif::OE_actionSetSelectedLineStitchMotif( unsigned motif)
{
	if (document)
	{
		OE_linestitch* tmpLineStitch;
		for(auto selStitch : document->selectedStitchs)
		{
			tmpLineStitch = dynamic_cast<OE_linestitch*>(selStitch);
			if (tmpLineStitch) actions.push_back( new OE_actionSetLineStitchMotif(tmpLineStitch, motif));
		}
	}
}

OE_actionSetSelectedLineStitchMotif::~OE_actionSetSelectedLineStitchMotif(){}

void OE_actionSetSelectedLineStitchMotif::undo()
{
	if (active)
	{
		for(auto action : actions)
			action->undo();
		active = false;
	}
}

void OE_actionSetSelectedLineStitchMotif::redo()
{
	if (!active)
	{
		for(auto action : actions)
			action->redo();
		active = true;
	}
}