Skip to content
OE_actionsFillStitchs.cpp 7.51 KiB
Newer Older
3dsman's avatar
3dsman committed
/*
 * 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<OE_fillstitch*>(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<OE_fillstitch*>(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<OE_fillstitch*>(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;
	}
}