undoRedoRegistrationToolBox::undoRedoRegistrationToolBox(QWidget *parent) : medRegistrationAbstractToolBox(parent), d(new undoRedoRegistrationToolBoxPrivate)
{
    // Undo/redo Buttons
    d->undoButton = new QPushButton(QIcon(":undoRedoRegistration/icons/ArrowDown.png"),tr("Undo"),this);
    d->redoButton = new QPushButton(QIcon(":undoRedoRegistration/icons/ArrowUp.png"),tr("Redo"),this);
    d->undoButton->setEnabled(false);
    d->redoButton->setEnabled(false);
    d->resetButton = new QPushButton(tr("Reset"),this);
    d->resetButton->setEnabled(false);

    connect(d->undoButton,SIGNAL(clicked()),this,SLOT(onUndo()));
    connect(d->redoButton,SIGNAL(clicked()),this,SLOT(onRedo()));
    connect(d->resetButton,SIGNAL(clicked()),registrationFactory::instance(),SLOT(reset()));

    d->arrowCurrentStep = QIcon(":undoRedoRegistration/icons/BlueArrowRight.png");
    d->currentStep = -1;

    d->m_UndoRedo = new undoRedoRegistration();
    // Transformation Stack
    d->transformationStack = new QListWidget(this);

    QVBoxLayout *layoutButtonUndoRedo = new QVBoxLayout;
    layoutButtonUndoRedo->addWidget(d->redoButton);
    layoutButtonUndoRedo->addWidget(d->undoButton);
    layoutButtonUndoRedo->addWidget(d->resetButton);
    QHBoxLayout *layoutButtonsStack = new QHBoxLayout;
    layoutButtonsStack->addLayout(layoutButtonUndoRedo);
    layoutButtonsStack->addWidget(d->transformationStack);
    d->transformationStack->setFixedSize(180,160);

    QWidget * layoutSection = new QWidget(this);
    layoutSection->setLayout(layoutButtonsStack);

    addWidget(layoutSection);

    this->setTitle(tr("Stack of transformations"));
    connect(registrationFactory::instance(),SIGNAL(transformationAdded(int,QString)),this,SLOT(addTransformationIntoList(int, QString)));
    connect(registrationFactory::instance(),SIGNAL(transformationStackReset()),this,SLOT(onTransformationStackReset()));

}
void registrationFactory::reset(){
    if (getGeneralTransform()->GetNumberOfTransformsInStack()>0){
        d->m_Factory->Reset();
        emit transformationStackReset();
    }
}