Skip to content
OE_actionsThreads.cpp 4.32 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_actionsThreads.h"
#include "OE_document.h"


///////// OE_actionNewThread ///////////////
/// \brief OE_actionNewThread::OE_actionNewThread
/// \param thread
///

OE_actionNewThread::OE_actionNewThread(OE_thread* thread)
{
    if (document && thread)
    {
        actionThread = thread;
        document->addThread(thread);
    }
}

OE_actionNewThread::~OE_actionNewThread()
{
    if (actionThread && !active)
    {
        delete actionThread;
    }
}

void OE_actionNewThread::undo()
{
    if (actionThread && active) document->removeThread(actionThread);
    active = false;
}

void OE_actionNewThread::redo()
{
    if (actionThread && !active) document->addThread( actionThread);
    active = true;
}


///////// OE_actionDelThread ///////////////
/// \brief OE_actionDelThread::OE_actionDelThread
/// \param thread
///

OE_actionDelThread::OE_actionDelThread(OE_thread* thread)
{
    if (document && thread)
    {
        actionThread = thread;
        document->removeThread(thread);
    }
}

OE_actionDelThread::~OE_actionDelThread()
{
}

void OE_actionDelThread::undo()
{
    if (actionThread && active) document->addThread( actionThread);
    active = false;
}

void OE_actionDelThread::redo()
{
    if (actionThread && !active) document->removeThread( actionThread);
    active = true;
}



///////// OE_actionThreadColor ///////////////
/// \brief OE_actionThreadColor::OE_actionThreadColor
/// \param thread
/// \param r
/// \param g
/// \param b
///

OE_actionThreadColor::OE_actionThreadColor(OE_thread* thread, unsigned char r, unsigned char g, unsigned char b)
{
    if (document && thread)
    {
        actionThread = thread;

        unsigned char * color;
        color = actionThread->getColor();
        oldR = color[0];
        oldG = color[1];
        oldB = color[2];

        actionThread->setColor(r,g,b);
    }
}

OE_actionThreadColor::~OE_actionThreadColor()
{
}

void OE_actionThreadColor::undo()
{
    if (active)
    {
        unsigned char* color;
        color = actionThread->getColor();

        unsigned char tmpOldR = color[0];
        unsigned char tmpOldG = color[1];
        unsigned char tmpOldB = color[2];
        actionThread->setColor(oldR, oldG, oldB);
        oldR = tmpOldR;
        oldG = tmpOldG;
        oldB = tmpOldB;
        active = false;
    }
}

void OE_actionThreadColor::redo()
{
    if (!active)
    {
        unsigned char* color;
        color = actionThread->getColor();
        unsigned char tmpOldR = color[0];
        unsigned char tmpOldG = color[1];
        unsigned char tmpOldB = color[2];
        actionThread->setColor(oldR, oldG, oldB);
        oldR = tmpOldR;
        oldG = tmpOldG;
        oldB = tmpOldB;
        active = true;
    }
}


///////// OE_actionThreadWidth ///////////////
/// \brief OE_actionThreadWidth::OE_actionThreadWidth
/// \param thread
/// \param width
///

OE_actionThreadWidth::OE_actionThreadWidth(OE_thread* thread, float width)
{
    if (document&&thread)
    {
        actionThread = thread;
        oldWidth = actionThread->getWidth();

        actionThread->setWidth(width);
    }
}

OE_actionThreadWidth::~OE_actionThreadWidth(){}

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

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