valentina/src/libs/vtools/undocommands/addgroup.cpp
Roman Telezhynskyi fe9dc90dc7 Bug in undocommands. We should return to pattern piece only if in Calculation
mode. If do it in Details mode Valentina may not switch pattern piece back when
a user returns to Calculation mode. This breaks a work and no new object can be
added to pattern.

--HG--
branch : develop
2018-07-25 11:26:09 +03:00

123 lines
3.9 KiB
C++

/************************************************************************
**
** @file addgroup.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 6 4, 2016
**
** @brief
** @copyright
** This source code is part of the Valentina project, a pattern making
** program, whose allow create and modeling patterns of clothing.
** Copyright (C) 2016 Valentina project
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
**
** Valentina is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Valentina is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
**
*************************************************************************/
#include "addgroup.h"
#include <QDomNode>
#include <QDomNodeList>
#include "../vmisc/logging.h"
#include "../vmisc/vabstractapplication.h"
#include "../vmisc/def.h"
#include "../vwidgets/vmaingraphicsview.h"
#include "../ifc/xml/vabstractpattern.h"
#include "vundocommand.h"
//---------------------------------------------------------------------------------------------------------------------
AddGroup::AddGroup(const QDomElement &xml, VAbstractPattern *doc, QUndoCommand *parent)
: VUndoCommand(xml, doc, parent), nameActivDraw(doc->GetNameActivPP())
{
setText(tr("add group"));
nodeId = doc->GetParametrId(xml);
}
//---------------------------------------------------------------------------------------------------------------------
AddGroup::~AddGroup()
{
}
//---------------------------------------------------------------------------------------------------------------------
void AddGroup::undo()
{
qCDebug(vUndo, "Undo.");
doc->ChangeActivPP(nameActivDraw);//Without this user will not see this change
QDomElement groups = doc->CreateGroups();
if (not groups.isNull())
{
QDomElement group = doc->elementById(nodeId, VAbstractPattern::TagGroup);
if (group.isElement())
{
group.setAttribute(VAbstractPattern::AttrVisible, trueStr);
doc->ParseGroups(groups);
if (groups.removeChild(group).isNull())
{
qCDebug(vUndo, "Can't delete group.");
return;
}
emit UpdateGroups();
}
else
{
if (groups.childNodes().isEmpty())
{
QDomNode parent = groups.parentNode();
parent.removeChild(groups);
}
qCDebug(vUndo, "Can't get group by id = %u.", nodeId);
return;
}
}
else
{
qCDebug(vUndo, "Can't get tag Groups.");
return;
}
VMainGraphicsView::NewSceneRect(qApp->getCurrentScene(), qApp->getSceneView());
if (qApp->GetDrawMode() == Draw::Calculation)
{
emit doc->SetCurrentPP(nameActivDraw);//Return current pattern piece after undo
}
}
//---------------------------------------------------------------------------------------------------------------------
void AddGroup::redo()
{
qCDebug(vUndo, "Redo.");
doc->ChangeActivPP(nameActivDraw);//Without this user will not see this change
QDomElement groups = doc->CreateGroups();
if (not groups.isNull())
{
groups.appendChild(xml);
doc->ParseGroups(groups);
emit UpdateGroups();
}
else
{
qCDebug(vUndo, "Can't get tag Groups.");
return;
}
VMainGraphicsView::NewSceneRect(qApp->getCurrentScene(), qApp->getSceneView());
}