Added list "Details in layout".

--HG--
branch : feature
This commit is contained in:
Roman Telezhynskyi 2016-06-26 14:36:12 +03:00
parent 93836ddf35
commit 1608599795
23 changed files with 552 additions and 60 deletions

View File

@ -18,7 +18,8 @@ HEADERS += \
$$PWD/dialoglayoutsettings.h \
$$PWD/dialoglayoutprogress.h \
$$PWD/dialogsavelayout.h \
$$PWD/vwidgetgroups.h
$$PWD/vwidgetgroups.h \
$$PWD/vwidgetdetails.h
SOURCES += \
$$PWD/dialogincrements.cpp \
@ -35,7 +36,8 @@ SOURCES += \
$$PWD/dialoglayoutsettings.cpp \
$$PWD/dialoglayoutprogress.cpp \
$$PWD/dialogsavelayout.cpp \
$$PWD/vwidgetgroups.cpp
$$PWD/vwidgetgroups.cpp \
$$PWD/vwidgetdetails.cpp
FORMS += \
$$PWD/dialogincrements.ui \
@ -47,4 +49,5 @@ FORMS += \
$$PWD/dialoglayoutsettings.ui \
$$PWD/dialoglayoutprogress.ui \
$$PWD/dialogsavelayout.ui \
$$PWD/vwidgetgroups.ui
$$PWD/vwidgetgroups.ui \
$$PWD/vwidgetdetails.ui

View File

@ -0,0 +1,125 @@
/************************************************************************
**
** @file vwidgetdetails.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 25 6, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine 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 "vwidgetdetails.h"
#include "ui_vwidgetdetails.h"
#include "../ifc/xml/vabstractpattern.h"
#include "../vpatterndb/vcontainer.h"
#include "../vmisc/vabstractapplication.h"
#include "../vtools/undocommands/toggledetailinlayout.h"
#include <QUndoStack>
//---------------------------------------------------------------------------------------------------------------------
VWidgetDetails::VWidgetDetails(VContainer *data, VAbstractPattern *doc, QWidget *parent)
: QWidget(parent),
ui(new Ui::VWidgetDetails),
m_doc(doc),
m_data(data)
{
ui->setupUi(this);
FillTable(m_data->DataDetails());
connect(ui->tableWidget, &QTableWidget::cellClicked, this, &VWidgetDetails::InLayoutStateChanged);
}
//---------------------------------------------------------------------------------------------------------------------
VWidgetDetails::~VWidgetDetails()
{
delete ui;
}
//---------------------------------------------------------------------------------------------------------------------
void VWidgetDetails::UpdateList()
{
FillTable(m_data->DataDetails());
}
//---------------------------------------------------------------------------------------------------------------------
void VWidgetDetails::InLayoutStateChanged(int row, int column)
{
if (column != 0)
{
return;
}
QTableWidgetItem *item = ui->tableWidget->item(row, column);
const quint32 id = item->data(Qt::UserRole).toUInt();
const QHash<quint32, VDetail> *allDetails = m_data->DataDetails();
const bool inLayout = not allDetails->value(id).IsInLayout();
ToggleDetailInLayout *togglePrint = new ToggleDetailInLayout(id, inLayout, m_data, m_doc);
connect(togglePrint, &ToggleDetailInLayout::NeedLiteParsing, m_doc, &VAbstractPattern::LiteParseTree);
qApp->getUndoStack()->push(togglePrint);
}
//---------------------------------------------------------------------------------------------------------------------
void VWidgetDetails::FillTable(const QHash<quint32, VDetail> *details)
{
const int selectedRow = ui->tableWidget->currentRow();
ui->tableWidget->clear();
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setRowCount(details->size());
qint32 currentRow = -1;
auto i = details->constBegin();
while (i != details->constEnd())
{
++currentRow;
const VDetail det = i.value();
QTableWidgetItem *item = new QTableWidgetItem();
item->setTextAlignment(Qt::AlignHCenter);
if (det.IsInLayout())
{
item->setIcon(QIcon("://icon/16x16/allow_detail.png"));
}
else
{
item->setIcon(QIcon("://icon/16x16/forbid_detail.png"));
}
item->setData(Qt::UserRole, i.key());
ui->tableWidget->setItem(currentRow, 0, item);
QString name = det.getName();
if (name.isEmpty())
{
name = tr("Unnamed");
}
item = new QTableWidgetItem(name);
item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
ui->tableWidget->setItem(currentRow, 1, item);
++i;
}
ui->tableWidget->resizeColumnsToContents();
ui->tableWidget->resizeRowsToContents();
ui->tableWidget->setCurrentCell(selectedRow, 0);
}

View File

@ -0,0 +1,66 @@
/************************************************************************
**
** @file vwidgetdetails.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 25 6, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine 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/>.
**
*************************************************************************/
#ifndef VWIDGETDETAILS_H
#define VWIDGETDETAILS_H
#include <QWidget>
class VAbstractPattern;
class VContainer;
class VDetail;
namespace Ui
{
class VWidgetDetails;
}
class VWidgetDetails : public QWidget
{
Q_OBJECT
public:
explicit VWidgetDetails(VContainer *data, VAbstractPattern *doc, QWidget *parent = nullptr);
virtual ~VWidgetDetails();
public slots:
void UpdateList();
private slots:
void InLayoutStateChanged(int row, int column);
private:
Q_DISABLE_COPY(VWidgetDetails)
Ui::VWidgetDetails *ui;
VAbstractPattern *m_doc;
VContainer *m_data;
void FillTable(const QHash<quint32, VDetail> *details);
};
#endif // VWIDGETDETAILS_H

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>VWidgetDetails</class>
<widget class="QWidget" name="VWidgetDetails">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderMinimumSectionSize">
<number>16</number>
</attribute>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderMinimumSectionSize">
<number>10</number>
</attribute>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -11,7 +11,11 @@
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
<string notr="true"/>
</property>
<property name="windowIcon">
<iconset resource="../../../libs/vmisc/share/resources/icon.qrc">
<normaloff>:/icon/64x64/icon64x64.png</normaloff>:/icon/64x64/icon64x64.png</iconset>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@ -53,6 +57,8 @@
</item>
</layout>
</widget>
<resources/>
<resources>
<include location="../../../libs/vmisc/share/resources/icon.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -56,6 +56,7 @@
#include "dialogs/dialogs.h"
#include "dialogs/vwidgetgroups.h"
#include "../vtools/undocommands/addgroup.h"
#include "dialogs/vwidgetdetails.h"
#include <QInputDialog>
#include <QDebug>
@ -122,6 +123,7 @@ MainWindow::MainWindow(QWidget *parent)
gradationHeights(nullptr), gradationSizes(nullptr), gradationHeightsLabel(nullptr), gradationSizesLabel(nullptr),
toolOptions(nullptr),
groupsWidget(nullptr),
detailsWidget(nullptr),
lock(nullptr)
{
for (int i = 0; i < MaxRecentFiles; ++i)
@ -137,7 +139,12 @@ MainWindow::MainWindow(QWidget *parent)
connect(doc, &VPattern::patternChanged, this, &MainWindow::PatternWasModified);
connect(doc, &VPattern::UndoCommand, this, &MainWindow::FullParseFile);
connect(doc, &VPattern::SetEnabledGUI, this, &MainWindow::SetEnabledGUI);
connect(doc, &VPattern::CheckLayout, this, &MainWindow::Layout);
connect(doc, &VPattern::CheckLayout, [this](){
if (pattern->DataDetails()->count() == 0)
{
ActionDraw(true);
}
});
connect(doc, &VPattern::SetCurrentPP, this, &MainWindow::GlobalChangePP);
qApp->setCurrentDocument(doc);
@ -1320,7 +1327,8 @@ void MainWindow::CleanLayout()
shadows.clear();
papers.clear();
ui->listWidget->clear();
SetLayoutModeActions(false);
listDetails.clear();
SetLayoutModeActions();
}
//---------------------------------------------------------------------------------------------------------------------
@ -1335,7 +1343,7 @@ void MainWindow::PrepareSceneList()
if (not scenes.isEmpty())
{
ui->listWidget->setCurrentRow(0);
SetLayoutModeActions(true);
SetLayoutModeActions();
}
}
@ -2109,7 +2117,10 @@ void MainWindow::ActionDraw(bool checked)
ui->dockWidgetLayoutPages->setVisible(false);
ui->dockWidgetToolOptions->setVisible(isDockToolOptionsVisible);
ui->dockWidgetGroups->setWidget(groupsWidget);
ui->dockWidgetGroups->setVisible(isDockGroupsVisible);
ui->dockWidgetGroups->setToolTip(tr("Contains all visibility groups"));
}
else
{
@ -2149,11 +2160,13 @@ void MainWindow::ActionDetails(bool checked)
QMessageBox::information(this, tr("Detail mode"), tr("You can't use now the Detail mode. "
"Please, create at least one workpiece."),
QMessageBox::Ok, QMessageBox::Ok);
Layout();
ActionDraw(true);
return;
}
}
detailsWidget->UpdateList();
qCDebug(vMainWindow, "Show details scene");
SaveCurrentScene();
@ -2179,7 +2192,10 @@ void MainWindow::ActionDetails(bool checked)
ui->dockWidgetLayoutPages->setVisible(false);
ui->dockWidgetToolOptions->setVisible(isDockToolOptionsVisible);
ui->dockWidgetGroups->setWidget(detailsWidget);
ui->dockWidgetGroups->setVisible(isDockGroupsVisible);
ui->dockWidgetGroups->setToolTip(tr("Show which details will go in layout"));
helpLabel->setText("");
}
@ -2214,17 +2230,39 @@ void MainWindow::ActionLayout(bool checked)
ui->actionDetails->setChecked(false);
ui->actionLayout->setChecked(true);
const QHash<quint32, VDetail> *details = pattern->DataDetails();
QHash<quint32, VDetail> details;
if(not qApp->getOpeningPattern())
{
if (details->count() == 0)
const QHash<quint32, VDetail> *allDetails = pattern->DataDetails();
if (allDetails->count() == 0)
{
QMessageBox::information(this, tr("Layout mode"), tr("You can't use now the Layout mode. "
"Please, create at least one workpiece."),
QMessageBox::Ok, QMessageBox::Ok);
Layout();
ActionDraw(true);
return;
}
else
{
QHash<quint32, VDetail>::const_iterator i = allDetails->constBegin();
while (i != allDetails->constEnd())
{
if (i.value().IsInLayout())
{
details.insert(i.key(), i.value());
}
++i;
}
if (details.count() == 0)
{
QMessageBox::information(this, tr("Layout mode"), tr("You can't use now the Layout mode. Please, "
"include at least one detail in layout."),
QMessageBox::Ok, QMessageBox::Ok);
mode == Draw::Calculation ? ActionDraw(true) : ActionDetails(true);
return;
}
}
}
comboBoxDraws->setCurrentIndex(-1);// Hide pattern pieces
@ -2233,7 +2271,7 @@ void MainWindow::ActionLayout(bool checked)
SaveCurrentScene();
PrepareDetailsForLayout(details);
PrepareDetailsForLayout(&details);
currentScene = tempSceneLayout;
ui->view->itemClicked(nullptr);
@ -2514,7 +2552,7 @@ void MainWindow::Clear()
#ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor();
#endif
Layout();
CleanLayout();
#ifdef Q_OS_WIN32
qt_ntfs_permission_lookup--; // turn it off again
@ -2781,29 +2819,6 @@ void MainWindow::ClickEndVisualization()
EndVisualization(true);
}
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::Layout()
{
if (pattern->DataDetails()->size() > 0)
{
SetLayoutModeActions(true);
}
else
{
listDetails.clear();
if (not ui->actionDraw->isChecked())
{
ActionDraw(true);
}
else
{
ui->actionDetails->setChecked(false);
ui->actionLayout->setChecked(false);
}
SetLayoutModeActions(false);
}
}
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::UpdateGradation()
{
@ -3154,19 +3169,16 @@ void MainWindow::SetEnableTool(bool enable)
}
//---------------------------------------------------------------------------------------------------------------------
void MainWindow::SetLayoutModeActions(bool enable)
void MainWindow::SetLayoutModeActions()
{
bool value = enable;
if (scenes.isEmpty())
{
value = false;
}
ui->actionExportAs->setEnabled(value);
ui->actionPrintPreview->setEnabled(value);
ui->actionPrintPreviewTiled->setEnabled(value);
ui->actionSaveAsTiledPDF->setEnabled(value);
ui->actionPrint->setEnabled(value);
ui->actionPrintTiled->setEnabled(value);
const bool enabled = not scenes.isEmpty();
ui->actionExportAs->setEnabled(enabled);
ui->actionPrintPreview->setEnabled(enabled);
ui->actionPrintPreviewTiled->setEnabled(enabled);
ui->actionSaveAsTiledPDF->setEnabled(enabled);
ui->actionPrint->setEnabled(enabled);
ui->actionPrintTiled->setEnabled(enabled);
}
//---------------------------------------------------------------------------------------------------------------------
@ -3625,6 +3637,10 @@ void MainWindow::InitDocksContain()
qCDebug(vMainWindow, "Initialization groups dock.");
groupsWidget = new VWidgetGroups(doc, this);
ui->dockWidgetGroups->setWidget(groupsWidget);
detailsWidget = new VWidgetDetails(pattern, doc, this);
connect(doc, &VPattern::FullUpdateFromFile, detailsWidget, &VWidgetDetails::UpdateList);
detailsWidget->setVisible(false);
}
//---------------------------------------------------------------------------------------------------------------------
@ -3983,12 +3999,10 @@ void MainWindow::ShowPaper(int index)
if (index < 0 || index >= scenes.size())
{
ui->view->setScene(tempSceneLayout);
SetLayoutModeActions(false);
}
else
{
ui->view->setScene(scenes.at(index));
SetLayoutModeActions(true);
}
ui->view->fitInView(ui->view->scene()->sceneRect(), Qt::KeepAspectRatio);

View File

@ -49,6 +49,7 @@ class DialogIncrements;
class DialogTool;
class DialogHistory;
class VWidgetGroups;
class VWidgetDetails;
/**
* @brief The MainWindow class main windows.
@ -152,7 +153,6 @@ public slots:
void SetEnabledGUI(bool enabled);
void ClickEndVisualization();
void Layout();
void UpdateGradation();
void GlobalChangePP(const QString &patternPiece);
void WindowsLocale();
@ -277,6 +277,7 @@ private:
QPointer<QLabel> gradationSizesLabel;
VToolOptionsPropertyBrowser *toolOptions;
VWidgetGroups *groupsWidget;
VWidgetDetails *detailsWidget;
std::shared_ptr<VLockGuard<char>> lock;
void SetDefaultHeight();
@ -291,7 +292,7 @@ private:
void SetEnableWidgets(bool enable);
void SetEnableTool(bool enable);
void SetLayoutModeActions(bool enable);
void SetLayoutModeActions();
void SaveCurrentScene();
void RestoreCurrentScene();

View File

@ -1518,8 +1518,11 @@
<property name="enabled">
<bool>true</bool>
</property>
<property name="toolTip">
<string/>
</property>
<property name="windowTitle">
<string>Groups</string>
<string>Group</string>
</property>
<attribute name="dockWidgetArea">
<number>2</number>

View File

@ -590,6 +590,7 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document
detail.setSeamAllowance(GetParametrUInt(domElement, VToolDetail::AttrSupplement, "1"));
detail.setWidth(GetParametrDouble(domElement, VToolDetail::AttrWidth, "10.0"));
detail.setClosed(GetParametrUInt(domElement, VToolDetail::AttrClosed, "1"));
detail.SetInLayout(GetParametrBool(domElement, AttrInLayout, trueStr));
QStringList types = QStringList() << VToolDetail::NodePoint << VToolDetail::NodeArc << VToolDetail::NodeSpline
<< VToolDetail::NodeSplinePath;

View File

@ -130,6 +130,7 @@ const QString AttrCRadius = QStringLiteral("cRadius");
const QString AttrArc = QStringLiteral("arc");
const QString AttrSuffix = QStringLiteral("suffix");
const QString AttrIdObject = QStringLiteral("idObject");
const QString AttrInLayout = QStringLiteral("inLayout");
const QString TypeLineNone = QStringLiteral("none");
const QString TypeLineLine = QStringLiteral("hair");

View File

@ -132,6 +132,7 @@ extern const QString AttrCRadius;
extern const QString AttrArc;
extern const QString AttrSuffix;
extern const QString AttrIdObject;
extern const QString AttrInLayout;
extern const QString TypeLineNone;
extern const QString TypeLineLine;

View File

@ -61,5 +61,9 @@
<file>icon/16x16/closed_eye@2x.png</file>
<file>icon/16x16/open_eye.png</file>
<file>icon/16x16/open_eye@2x.png</file>
<file>icon/16x16/allow_detail.png</file>
<file>icon/16x16/allow_detail@2x.png</file>
<file>icon/16x16/forbid_detail.png</file>
<file>icon/16x16/forbid_detail@2x.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -175,6 +175,18 @@ void VDetail::setId(const quint32 &id)
d->_id = id;
}
//---------------------------------------------------------------------------------------------------------------------
bool VDetail::IsInLayout() const
{
return d->inLayout;
}
//---------------------------------------------------------------------------------------------------------------------
void VDetail::SetInLayout(bool inLayout)
{
d->inLayout = inLayout;
}
//---------------------------------------------------------------------------------------------------------------------
/**
* @brief OnEdge checks if two poins located on the edge. Edge is line between two points. If between two points

View File

@ -67,6 +67,9 @@ public:
quint32 id() const;
void setId(const quint32 &id);
bool IsInLayout() const;
void SetInLayout(bool inLayout);
QVector<VNodeDetail> getNodes() const;
void setNodes(const QVector<VNodeDetail> &value);

View File

@ -42,15 +42,15 @@ class VDetailData : public QSharedData
{
public:
VDetailData()
:_id(NULL_ID), nodes(QVector<VNodeDetail>()), mx(0), my(0)
:_id(NULL_ID), nodes(QVector<VNodeDetail>()), mx(0), my(0), inLayout(true)
{}
explicit VDetailData(const QVector<VNodeDetail> &nodes)
:_id(NULL_ID), nodes(nodes), mx(0), my(0)
:_id(NULL_ID), nodes(nodes), mx(0), my(0), inLayout(true)
{}
VDetailData(const VDetailData &detail)
:QSharedData(detail), _id(NULL_ID), nodes(detail.nodes), mx(detail.mx), my(detail.my)
:QSharedData(detail), _id(NULL_ID), nodes(detail.nodes), mx(detail.mx), my(detail.my), inLayout(detail.inLayout)
{}
~VDetailData() {}
@ -67,6 +67,8 @@ public:
/** @brief my bias y axis. */
qreal my;
bool inLayout;
private:
VDetailData &operator=(const VDetailData &) Q_DECL_EQ_DELETE;
};

View File

@ -0,0 +1,132 @@
/************************************************************************
**
** @file toggledetailinlayout.cpp
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 25 6, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine 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 "toggledetailinlayout.h"
#include "../vpatterndb/vdetail.h"
#include "../vpatterndb/vcontainer.h"
//---------------------------------------------------------------------------------------------------------------------
ToggleDetailInLayout::ToggleDetailInLayout(quint32 id, bool state, VContainer *data, VAbstractPattern *doc,
QUndoCommand *parent)
: VUndoCommand(QDomElement(), doc, parent),
m_id(id),
m_data(data),
m_oldState(m_data->DataDetails()->value(m_id).IsInLayout()),
m_newState(state)
{
setText(tr("detail in layout list"));
}
//---------------------------------------------------------------------------------------------------------------------
ToggleDetailInLayout::~ToggleDetailInLayout()
{
}
//---------------------------------------------------------------------------------------------------------------------
void ToggleDetailInLayout::undo()
{
qCDebug(vUndo, "ToggleDetailInLayout::undo().");
if (m_newState != m_oldState)
{
Do(m_oldState);
}
}
//---------------------------------------------------------------------------------------------------------------------
void ToggleDetailInLayout::redo()
{
qCDebug(vUndo, "ToggleDetailInLayout::redo().");
if (m_newState != m_oldState)
{
Do(m_newState);
}
}
//---------------------------------------------------------------------------------------------------------------------
bool ToggleDetailInLayout::mergeWith(const QUndoCommand *command)
{
const ToggleDetailInLayout *stateCommand = static_cast<const ToggleDetailInLayout *>(command);
SCASSERT(stateCommand != nullptr);
const quint32 id = stateCommand->getDetId();
if (id != m_id)
{
return false;
}
m_newState = stateCommand->getNewState();
return true;
}
//---------------------------------------------------------------------------------------------------------------------
int ToggleDetailInLayout::id() const
{
return static_cast<int>(UndoCommand::ToggleDetailInLayout);
}
//---------------------------------------------------------------------------------------------------------------------
quint32 ToggleDetailInLayout::getDetId() const
{
return m_id;
}
//---------------------------------------------------------------------------------------------------------------------
bool ToggleDetailInLayout::getNewState() const
{
return m_newState;
}
//---------------------------------------------------------------------------------------------------------------------
void ToggleDetailInLayout::Do(bool state)
{
QDomElement detail = doc->elementById(m_id);
if (detail.isElement())
{
if (state == false)
{
doc->SetAttribute(detail, AttrInLayout, state);
}
else
{
detail.removeAttribute(AttrInLayout);
}
VDetail det = m_data->DataDetails()->value(m_id);
det.SetInLayout(state);
m_data->UpdateDetail(m_id, det);
emit NeedLiteParsing(Document::LiteParse);
}
else
{
qDebug("Can't get detail by id = %u.", m_id);
return;
}
}

View File

@ -0,0 +1,57 @@
/************************************************************************
**
** @file toggledetailinlayout.h
** @author Roman Telezhynskyi <dismine(at)gmail.com>
** @date 25 6, 2016
**
** @brief
** @copyright
** This source code is part of the Valentine 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/>.
**
*************************************************************************/
#ifndef TOGGLEDETAILINLAYOUT_H
#define TOGGLEDETAILINLAYOUT_H
#include "vundocommand.h"
class ToggleDetailInLayout : public VUndoCommand
{
Q_OBJECT
public:
ToggleDetailInLayout(quint32 id, bool state, VContainer *data, VAbstractPattern *doc,
QUndoCommand *parent = nullptr);
virtual ~ToggleDetailInLayout();
virtual void undo() Q_DECL_OVERRIDE;
virtual void redo() Q_DECL_OVERRIDE;
virtual bool mergeWith(const QUndoCommand *command) Q_DECL_OVERRIDE;
virtual int id() const Q_DECL_OVERRIDE;
quint32 getDetId() const;
bool getNewState() const;
private:
Q_DISABLE_COPY(ToggleDetailInLayout)
quint32 m_id;
VContainer *m_data;
bool m_oldState;
bool m_newState;
void Do(bool state);
};
#endif // TOGGLEDETAILINLAYOUT_H

View File

@ -22,7 +22,8 @@ HEADERS += \
$$PWD/addgroup.h \
$$PWD/delgroup.h \
$$PWD/label/rotationmovelabel.h \
undocommands/label/moveabstractlabel.h
$$PWD/label/moveabstractlabel.h \
$$PWD/toggledetailinlayout.h
SOURCES += \
$$PWD/addtocalc.cpp \
@ -45,4 +46,5 @@ SOURCES += \
$$PWD/addgroup.cpp \
$$PWD/delgroup.cpp \
$$PWD/label/rotationmovelabel.cpp \
undocommands/label/moveabstractlabel.cpp
$$PWD/label/moveabstractlabel.cpp \
$$PWD/toggledetailinlayout.cpp

View File

@ -50,7 +50,8 @@ enum class UndoCommand: char { AddPatternPiece,
RenamePP,
MoveLabel,
MoveDoubleLabel,
RotationMoveLabel
RotationMoveLabel,
ToggleDetailInLayout
};
class VPattern;