From f52f97740d07be33b17fd60688006870552535c6 Mon Sep 17 00:00:00 2001 From: BojanKverh Date: Sat, 2 Jul 2016 01:49:38 +0200 Subject: [PATCH] Moved pattern info geometry into VDetail class --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 27 ++-- src/libs/ifc/schema/pattern/v0.3.3.xsd | 16 ++- src/libs/ifc/xml/vabstractpattern.cpp | 129 +----------------- src/libs/ifc/xml/vabstractpattern.h | 13 +- src/libs/vpatterndb/vdetail.cpp | 22 ++- src/libs/vpatterndb/vdetail.h | 3 + src/libs/vpatterndb/vdetail_p.h | 5 +- src/libs/vpatterndb/vpatterndb.pro | 6 + src/libs/vpatterndb/vpatterninfogeometry.cpp | 108 +++++++++++++++ src/libs/vpatterndb/vpatterninfogeometry.h | 70 ++++++++++ src/libs/vpatterndb/vpatternpiecedata.cpp | 3 +- src/libs/vtools/tools/vtextgraphicsitem.cpp | 2 +- src/libs/vtools/tools/vtooldetail.cpp | 75 ++++++++-- .../vtools/undocommands/savedetailoptions.cpp | 18 +++ .../vtools/undocommands/savedetailoptions.h | 1 + 15 files changed, 329 insertions(+), 169 deletions(-) create mode 100644 src/libs/vpatterndb/vpatterninfogeometry.cpp create mode 100644 src/libs/vpatterndb/vpatterninfogeometry.h diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 777a956d4..acaccce79 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -48,6 +48,7 @@ #include "../core/vapplication.h" #include "../vpatterndb/calculator.h" #include "../vpatterndb/vpatternpiecedata.h" +#include "../vpatterndb/vpatterninfogeometry.h" #include #include @@ -138,7 +139,7 @@ void VPattern::Parse(const Document &parse) QStringList tags = QStringList() << TagDraw << TagIncrements << TagAuthor << TagDescription << TagNotes << TagMeasurements << TagVersion << TagGradation << TagImage << TagUnit << TagPatternName << TagPatternNum << TagCompanyName << TagCustomerName - << TagCreationDate << TagLabelPos << TagLabelSize << TagLabelFont; + << TagCreationDate; PrepareForParse(parse); QDomNode domNode = documentElement().firstChild(); while (domNode.isNull() == false) @@ -213,15 +214,6 @@ void VPattern::Parse(const Document &parse) case 14: // TagCreationDate qCDebug(vXML, "Creation date."); break; - case 15: // TagLabelPos - qCDebug(vXML, "Label position."); - break; - case 16: // TagLabelSize - qCDebug(vXML, "Label size."); - break; - case 17: // TagLabelFont - qCDebug(vXML, "Label font size."); - break; default: qCDebug(vXML, "Wrong tag name %s", qUtf8Printable(domElement.tagName())); break; @@ -695,6 +687,21 @@ void VPattern::ParseDetailElement(const QDomElement &domElement, const Document detail.GetPatternPieceData().Append(mcp); } } + else if (element.tagName() == TagPatternInfo) + { + QPointF ptPos; + ptPos.setX(element.attribute(AttrMx, "0").toDouble()); + ptPos.setY(element.attribute(AttrMy, "0").toDouble()); + detail.GetPatternInfo().SetPos(ptPos); + qreal dLW = element.attribute(VToolDetail::AttrWidth, "0").toDouble(); + detail.GetPatternInfo().SetLabelWidth(dLW); + qreal dLH = element.attribute(VToolDetail::AttrHeight, "0").toDouble(); + detail.GetPatternInfo().SetLabelHeight(dLH); + int iFS = element.attribute(VToolDetail::AttrFont, "0").toInt(); + detail.GetPatternInfo().SetFontSize(iFS); + qreal dRot = element.attribute(VToolDetail::AttrRotation, "0").toDouble(); + detail.GetPatternInfo().SetRotation(dRot); + } } } VToolDetail::Create(id, detail, sceneDetail, this, data, parse, Source::FromFile); diff --git a/src/libs/ifc/schema/pattern/v0.3.3.xsd b/src/libs/ifc/schema/pattern/v0.3.3.xsd index ae4d72f3d..3bdf8d2f3 100644 --- a/src/libs/ifc/schema/pattern/v0.3.3.xsd +++ b/src/libs/ifc/schema/pattern/v0.3.3.xsd @@ -23,10 +23,6 @@ - - - - @@ -364,7 +360,17 @@ - + + + + + + + + + + + diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 4e92b299d..2d716491d 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -61,16 +61,13 @@ const QString VAbstractPattern::TagHeights = QStringLiteral("heights"); const QString VAbstractPattern::TagSizes = QStringLiteral("sizes"); const QString VAbstractPattern::TagUnit = QStringLiteral("unit"); const QString VAbstractPattern::TagData = QStringLiteral("data"); +const QString VAbstractPattern::TagPatternInfo = QStringLiteral("patternInfo"); const QString VAbstractPattern::TagMCP = QStringLiteral("mcp"); const QString VAbstractPattern::TagPatternName = QStringLiteral("patternName"); const QString VAbstractPattern::TagPatternNum = QStringLiteral("patternNumber"); const QString VAbstractPattern::TagCustomerName = QStringLiteral("customer"); const QString VAbstractPattern::TagCompanyName = QStringLiteral("company"); const QString VAbstractPattern::TagCreationDate = QStringLiteral("created"); -const QString VAbstractPattern::TagLabelPos = QStringLiteral("labelPosition"); -const QString VAbstractPattern::TagLabelSize = QStringLiteral("labelSize"); -const QString VAbstractPattern::TagLabelFont = QStringLiteral("fontSize"); -const QString VAbstractPattern::TagLabelRot = QStringLiteral("rotation"); const QString VAbstractPattern::AttrName = QStringLiteral("name"); const QString VAbstractPattern::AttrVisible = QStringLiteral("visible"); @@ -1079,106 +1076,6 @@ QDate VAbstractPattern::GetCreationDate() const return QDate::currentDate(); } -//--------------------------------------------------------------------------------------------------------------------- -QPointF VAbstractPattern::GetLabelPosition() const -{ - QStringList qsl = UniqueTagText(TagLabelPos).split(","); - QPointF ptPos(0, 0); - if (qsl.count() == 2) - { - bool bOKX; - bool bOKY; - double fX = qsl[0].toDouble(&bOKX); - double fY = qsl[1].toDouble(&bOKY); - if (bOKX == true && bOKY == true) - { - ptPos.setX(fX); - ptPos.setY(fY); - } - } - return ptPos; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VAbstractPattern::SetLabelPosition(const QPointF& ptPos) -{ - CheckTagExists(TagLabelPos); - setTagText(TagLabelPos, QString::number(ptPos.x(), 'f', 3) + "," + QString::number(ptPos.y(), 'f', 3)); - modified = true; - emit patternChanged(false); -} - -//--------------------------------------------------------------------------------------------------------------------- -QSizeF VAbstractPattern::GetLabelSize() const -{ - QStringList qsl = UniqueTagText(TagLabelSize).split(","); - QSizeF sz(0, 0); - if (qsl.count() == 2) - { - bool bOKW; - bool bOKH; - double fW = qsl[0].toDouble(&bOKW); - double fH = qsl[1].toDouble(&bOKH); - if (bOKW == true && bOKH == true) - { - sz.setWidth(fW); - sz.setHeight(fH); - } - } - return sz; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VAbstractPattern::SetLabelSize(QSizeF sz) -{ - CheckTagExists(TagLabelSize); - setTagText(TagLabelSize, QString::number(sz.width(), 'f', 3) + "," + QString::number(sz.height(), 'f', 3)); - modified = true; - emit patternChanged(false); -} - -//--------------------------------------------------------------------------------------------------------------------- -int VAbstractPattern::GetFontSize() const -{ - bool bOK; - int iFS = UniqueTagText(TagLabelFont).toInt(&bOK); - if (bOK == false) - { - iFS = 0; - } - return iFS; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VAbstractPattern::SetFontSize(int iFS) -{ - CheckTagExists(TagLabelFont); - setTagText(TagLabelFont, QString::number(iFS)); - modified = true; - emit patternChanged(false); -} - -//--------------------------------------------------------------------------------------------------------------------- -qreal VAbstractPattern::GetRotation() const -{ - bool bOK; - qreal dRot = UniqueTagText(TagLabelRot).toDouble(&bOK); - if (bOK == false) - { - dRot = 0; - } - return dRot; -} - -//--------------------------------------------------------------------------------------------------------------------- -void VAbstractPattern::SetRotation(qreal dRot) -{ - CheckTagExists(TagLabelRot); - setTagText(TagLabelRot, QString::number(dRot, 'f', 3)); - modified = true; - emit patternChanged(false); -} - //--------------------------------------------------------------------------------------------------------------------- QString VAbstractPattern::GetImage() const { @@ -1304,8 +1201,7 @@ QDomElement VAbstractPattern::CheckTagExists(const QString &tag) { const QStringList tags = QStringList() << TagUnit << TagImage << TagAuthor << TagDescription << TagNotes << TagGradation << TagPatternName << TagPatternNum << TagCompanyName - << TagCustomerName << TagCreationDate << TagLabelPos << TagLabelSize - << TagLabelFont << TagLabelRot; + << TagCustomerName << TagCreationDate; switch (tags.indexOf(tag)) { case 0: //TagUnit @@ -1371,27 +1267,6 @@ QDomElement VAbstractPattern::CheckTagExists(const QString &tag) element = createElement(TagCreationDate); break; } - case 11: - { - element = createElement(TagLabelPos); - break; - } - case 12: - { - element = createElement(TagLabelSize); - break; - } - case 13: - { - element = createElement(TagLabelFont); - break; - } - - case 14: - { - element = createElement(TagLabelRot); - break; - } default: { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 806a0e166..0501d5ff6 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -117,14 +117,6 @@ public: QString GetCustomerName() const; void SetCustomerName(QString qsName); QDate GetCreationDate() const; - QPointF GetLabelPosition() const; - void SetLabelPosition(const QPointF& ptPos); - QSizeF GetLabelSize() const; - void SetLabelSize(QSizeF sz); - int GetFontSize() const; - void SetFontSize(int iFS); - qreal GetRotation() const; - void SetRotation(qreal dRot); QString GetImage() const; QString GetImageExtension() const; @@ -175,16 +167,13 @@ public: static const QString TagSizes; static const QString TagUnit; static const QString TagData; + static const QString TagPatternInfo; static const QString TagMCP; static const QString TagPatternName; static const QString TagPatternNum; static const QString TagCompanyName; static const QString TagCustomerName; static const QString TagCreationDate; - static const QString TagLabelPos; - static const QString TagLabelSize; - static const QString TagLabelFont; - static const QString TagLabelRot; static const QString AttrName; static const QString AttrVisible; diff --git a/src/libs/vpatterndb/vdetail.cpp b/src/libs/vpatterndb/vdetail.cpp index ec1da4de2..8f0d25092 100644 --- a/src/libs/vpatterndb/vdetail.cpp +++ b/src/libs/vpatterndb/vdetail.cpp @@ -527,7 +527,7 @@ QVector VDetail::listNodePoint() const //--------------------------------------------------------------------------------------------------------------------- /** - * @brief Returns the full access to the pattern piece data object + * @brief Returns full access to the pattern piece data object * @return pattern piece data object */ VPatternPieceData& VDetail::GetPatternPieceData() @@ -545,6 +545,26 @@ const VPatternPieceData& VDetail::GetPatternPieceData() const return d->m_ppData; } +//--------------------------------------------------------------------------------------------------------------------- +/** + * @brief Returns full access to the pattern info geometry object + * @return pattern info geometry object + */ +VPatternInfoGeometry& VDetail::GetPatternInfo() +{ + return d->m_piPatternInfo; +} + +//--------------------------------------------------------------------------------------------------------------------- +/** + * @brief Returns the read only reference to the pattern info geometry object + * @return pattern info geometry object + */ +const VPatternInfoGeometry& VDetail::GetPatternInfo() const +{ + return d->m_piPatternInfo; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief indexOfNode return index in list node using id object. diff --git a/src/libs/vpatterndb/vdetail.h b/src/libs/vpatterndb/vdetail.h index c6e7817df..976b885d7 100644 --- a/src/libs/vpatterndb/vdetail.h +++ b/src/libs/vpatterndb/vdetail.h @@ -38,6 +38,7 @@ class VDetailData; class VContainer; class QPainterPath; class VPatternPieceData; +class VPatternInfoGeometry; /** * @brief The VDetail class for path of object (points, arcs, splines). @@ -90,6 +91,8 @@ public: QVector listNodePoint()const; VPatternPieceData& GetPatternPieceData(); const VPatternPieceData& GetPatternPieceData() const; + VPatternInfoGeometry& GetPatternInfo(); + const VPatternInfoGeometry& GetPatternInfo() const; private: QSharedDataPointer d; diff --git a/src/libs/vpatterndb/vdetail_p.h b/src/libs/vpatterndb/vdetail_p.h index d7b9fa259..4092cec9a 100644 --- a/src/libs/vpatterndb/vdetail_p.h +++ b/src/libs/vpatterndb/vdetail_p.h @@ -32,6 +32,7 @@ #include #include "vnodedetail.h" #include "vpatternpiecedata.h" +#include "vpatterninfogeometry.h" #include "../ifc/ifcdef.h" #ifdef Q_CC_GNU @@ -52,7 +53,7 @@ public: VDetailData(const VDetailData &detail) :QSharedData(detail), _id(NULL_ID), nodes(detail.nodes), mx(detail.mx), my(detail.my), - m_ppData(detail.m_ppData), inLayout(detail.inLayout) + m_ppData(detail.m_ppData), m_piPatternInfo(detail.m_piPatternInfo), inLayout(detail.inLayout) {} ~VDetailData() {} @@ -71,6 +72,8 @@ public: /** @brief Pattern piece data */ VPatternPieceData m_ppData; + /** @brief Pattern info coordinates */ + VPatternInfoGeometry m_piPatternInfo; bool inLayout; diff --git a/src/libs/vpatterndb/vpatterndb.pro b/src/libs/vpatterndb/vpatterndb.pro index e796f437e..bb5d3d0bc 100644 --- a/src/libs/vpatterndb/vpatterndb.pro +++ b/src/libs/vpatterndb/vpatterndb.pro @@ -101,3 +101,9 @@ CONFIG(debug, debug|release){ } } +HEADERS += \ + vpatterninfogeometry.h + +SOURCES += \ + vpatterninfogeometry.cpp + diff --git a/src/libs/vpatterndb/vpatterninfogeometry.cpp b/src/libs/vpatterndb/vpatterninfogeometry.cpp new file mode 100644 index 000000000..cb0728454 --- /dev/null +++ b/src/libs/vpatterndb/vpatterninfogeometry.cpp @@ -0,0 +1,108 @@ +/************************************************************************ + ** + ** @file vpatterninfogeometry.cpp + ** @author Bojan Kverh + ** @date June 16, 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) 2013-2015 Valentina project + ** 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 . + ** + *************************************************************************/ + +#include "vpatterninfogeometry.h" + +//--------------------------------------------------------------------------------------------------------------------- +VPatternInfoGeometry::VPatternInfoGeometry() : + m_ptPos(0, 0) +{ + m_iFontSize = MIN_FONT_SIZE; + // 0 means unknown width + m_dLabelWidth = 0; + m_dLabelHeight = 0; + m_dRotation = 0; +} + +//--------------------------------------------------------------------------------------------------------------------- +VPatternInfoGeometry::~VPatternInfoGeometry() +{} + +//--------------------------------------------------------------------------------------------------------------------- +QPointF VPatternInfoGeometry::GetPos() const +{ + return m_ptPos; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternInfoGeometry::SetPos(const QPointF& ptPos) +{ + m_ptPos = ptPos; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VPatternInfoGeometry::GetLabelWidth() const +{ + return m_dLabelWidth; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternInfoGeometry::SetLabelWidth(qreal dLabelW) +{ + m_dLabelWidth = dLabelW; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VPatternInfoGeometry::GetLabelHeight() const +{ + return m_dLabelHeight; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternInfoGeometry::SetLabelHeight(qreal dLabelH) +{ + m_dLabelHeight = dLabelH; +} + +//--------------------------------------------------------------------------------------------------------------------- +int VPatternInfoGeometry::GetFontSize() const +{ + return m_iFontSize; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternInfoGeometry::SetFontSize(int iSize) +{ + if (iSize >= MIN_FONT_SIZE) + m_iFontSize = iSize; + else + m_iFontSize = MIN_FONT_SIZE; +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VPatternInfoGeometry::GetRotation() const +{ + return m_dRotation; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VPatternInfoGeometry::SetRotation(qreal dRot) +{ + m_dRotation = dRot; +} + diff --git a/src/libs/vpatterndb/vpatterninfogeometry.h b/src/libs/vpatterndb/vpatterninfogeometry.h new file mode 100644 index 000000000..36c8217c7 --- /dev/null +++ b/src/libs/vpatterndb/vpatterninfogeometry.h @@ -0,0 +1,70 @@ +/************************************************************************ + ** + ** @file vpatterninfogeometry.h + ** @author Bojan Kverh + ** @date June 16, 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) 2013-2015 Valentina project + ** 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 . + ** + *************************************************************************/ + +#ifndef VPATTERNINFOGEOMETRY_H +#define VPATTERNINFOGEOMETRY_H + +#define MIN_FONT_SIZE 12 + +#include + +class VPatternInfoGeometry +{ +public: + VPatternInfoGeometry(); + ~VPatternInfoGeometry(); + + // methods, which set up label parameters + QPointF GetPos() const; + void SetPos(const QPointF& ptPos); + qreal GetLabelWidth() const; + void SetLabelWidth(qreal dLabelW); + qreal GetLabelHeight() const; + void SetLabelHeight(qreal dLabelH); + int GetFontSize() const; + void SetFontSize(int iSize); + qreal GetRotation() const; + void SetRotation(qreal dRot); + +private: + QPointF m_ptPos; + /** @brief Label width + */ + qreal m_dLabelWidth; + /** @brief Label height + */ + qreal m_dLabelHeight; + /** @brief Label font size + */ + int m_iFontSize; + /** @brief Label rotation + */ + qreal m_dRotation; +}; + +#endif // VPATTERNINFOGEOMETRY_H diff --git a/src/libs/vpatterndb/vpatternpiecedata.cpp b/src/libs/vpatterndb/vpatternpiecedata.cpp index 80d68bda5..afb44d731 100644 --- a/src/libs/vpatterndb/vpatternpiecedata.cpp +++ b/src/libs/vpatterndb/vpatternpiecedata.cpp @@ -1,6 +1,6 @@ /************************************************************************ ** - ** @file vpatternpiecedata.h + ** @file vpatternpiecedata.cpp ** @author Bojan Kverh ** @date June 16, 2016 ** @@ -35,6 +35,7 @@ VPatternPieceData::VPatternPieceData() : m_iFontSize = MIN_FONT_SIZE; // 0 means unknown width m_dLabelWidth = 0; + m_dLabelHeight = 0; m_dRotation = 0; } diff --git a/src/libs/vtools/tools/vtextgraphicsitem.cpp b/src/libs/vtools/tools/vtextgraphicsitem.cpp index 9e5e3f31c..48c038cd5 100644 --- a/src/libs/vtools/tools/vtextgraphicsitem.cpp +++ b/src/libs/vtools/tools/vtextgraphicsitem.cpp @@ -249,7 +249,7 @@ void VTextGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent* pME) } double dAng = 180*(GetAngle(pME->scenePos()) - m_dAngle)/M_PI; setRotation(m_dRotation + dAng); - emit SignalRotated(rotation()); + //emit SignalRotated(rotation()); Update(); } } diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index a4150a033..8686e633b 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -41,6 +41,7 @@ #include "../undocommands/adddet.h" #include "../undocommands/deletedetail.h" #include "../vpatterndb/vpatternpiecedata.h" +#include "../vpatterndb/vpatterninfogeometry.h" #include #include @@ -118,6 +119,8 @@ VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); this->setFlag(QGraphicsItem::ItemIsFocusable, true);// For keyboard input focus + qDebug() << "VToolDetail" << patternInfo; + connect(scene, &VMainGraphicsScene::EnableToolMove, this, &VToolDetail::EnableToolMove); connect(scene, &VMainGraphicsScene::ItemClicked, this, &VToolDetail::ResetChildren); if (typeCreation == Source::FromGui || typeCreation == Source::FromTool) @@ -142,6 +145,7 @@ VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 connect(doc, &VAbstractPattern::patternChanged, this, &VToolDetail::UpdatePatternInfo); connect(doc, &VAbstractPattern::CheckLayout, this, &VToolDetail::UpdateLabel); + connect(doc, &VAbstractPattern::CheckLayout, this, &VToolDetail::UpdatePatternInfo); UpdateLabel(); UpdatePatternInfo(); } @@ -373,6 +377,15 @@ void VToolDetail::AddToFile() } domElement.appendChild(domData); + domData = doc->createElement(VAbstractPattern::TagPatternInfo); + const VPatternInfoGeometry& geom = detail.GetPatternInfo(); + doc->SetAttribute(domData, AttrMx, geom.GetPos().x()); + doc->SetAttribute(domData, AttrMy, geom.GetPos().y()); + doc->SetAttribute(domData, AttrWidth, geom.GetLabelWidth()); + doc->SetAttribute(domData, AttrHeight, geom.GetLabelHeight()); + doc->SetAttribute(domData, AttrFont, geom.GetFontSize()); + doc->SetAttribute(domData, AttrRotation, geom.GetRotation()); + for (int i = 0; i < detail.CountNode(); ++i) { AddNode(doc, domElement, detail.at(i)); @@ -422,6 +435,15 @@ void VToolDetail::RefreshDataInFile() } domElement.appendChild(domData); + domData = doc->createElement(VAbstractPattern::TagPatternInfo); + const VPatternInfoGeometry& geom = det.GetPatternInfo(); + doc->SetAttribute(domData, AttrMx, geom.GetPos().x()); + doc->SetAttribute(domData, AttrMy, geom.GetPos().y()); + doc->SetAttribute(domData, AttrWidth, geom.GetLabelWidth()); + doc->SetAttribute(domData, AttrHeight, geom.GetLabelHeight()); + doc->SetAttribute(domData, AttrFont, geom.GetFontSize()); + doc->SetAttribute(domData, AttrRotation, geom.GetRotation()); + for (int i = 0; i < det.CountNode(); ++i) { AddNode(doc, domElement, det.at(i)); @@ -708,17 +730,19 @@ void VToolDetail::UpdateLabel() */ void VToolDetail::UpdatePatternInfo() { + const VDetail detail = VAbstractTool::data.GetDetail(id); + const VPatternInfoGeometry& geom = detail.GetPatternInfo(); + //patternInfo->Reset(); QFont fnt = qApp->font(); - int iFS = doc->GetFontSize(); + int iFS = geom.GetFontSize(); if (iFS < MIN_FONT_SIZE) { iFS = MIN_FONT_SIZE; } fnt.setPixelSize(iFS); patternInfo->SetFont(fnt); - QSizeF sz = doc->GetLabelSize(); - patternInfo->SetSize(sz.width(), sz.height()); + patternInfo->SetSize(geom.GetLabelWidth(), geom.GetLabelHeight()); patternInfo->Clear(); TextLine tl; @@ -752,8 +776,8 @@ void VToolDetail::UpdatePatternInfo() tl.m_qsText = qslDate.last(); patternInfo->AddLine(tl); - patternInfo->setPos(doc->GetLabelPosition()); - patternInfo->setRotation(doc->GetRotation()); + patternInfo->setPos(geom.GetPos()); + patternInfo->setRotation(geom.GetRotation()); patternInfo->Update(); } @@ -802,7 +826,6 @@ void VToolDetail::SaveResizeDetail(qreal dLabelW, int iFontSize) */ void VToolDetail::SaveRotationDetail(qreal dRot) { - qDebug() << "SAVEROTATION" << dRot; VDetail oldDet = VAbstractTool::data.GetDetail(id); VDetail newDet = oldDet; newDet.GetPatternPieceData().SetPos(dataLabel->pos()); @@ -824,8 +847,19 @@ void VToolDetail::SaveRotationDetail(qreal dRot) */ void VToolDetail::SaveMovePattern(QPointF ptPos) { - qDebug() << "Pattern moved to" << ptPos; - doc->SetLabelPosition(ptPos); + VDetail oldDet = VAbstractTool::data.GetDetail(id); + VDetail newDet = oldDet; + newDet.GetPatternInfo().SetPos(ptPos); + newDet.GetPatternInfo().SetLabelWidth(patternInfo->boundingRect().width()); + newDet.GetPatternInfo().SetLabelHeight(patternInfo->boundingRect().height()); + newDet.GetPatternInfo().SetFontSize(patternInfo->GetFontSize()); + newDet.GetPatternInfo().SetRotation(patternInfo->rotation()); + + SaveDetailOptions* moveCommand = new SaveDetailOptions(oldDet, newDet, doc, id, this->scene()); + moveCommand->setText(tr("move pattern info label")); + connect(moveCommand, &SaveDetailOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); + qApp->getUndoStack()->push(moveCommand); + } //--------------------------------------------------------------------------------------------------------------------- @@ -834,14 +868,33 @@ void VToolDetail::SaveMovePattern(QPointF ptPos) */ void VToolDetail::SaveResizePattern(qreal dLabelW, int iFontSize) { - doc->SetLabelSize(QSizeF(dLabelW, patternInfo->boundingRect().height())); - doc->SetFontSize(iFontSize); + VDetail oldDet = VAbstractTool::data.GetDetail(id); + VDetail newDet = oldDet; + newDet.GetPatternInfo().SetLabelWidth(dLabelW); + newDet.GetPatternInfo().SetLabelHeight(patternInfo->boundingRect().height()); + newDet.GetPatternInfo().SetFontSize(iFontSize); + newDet.GetPatternInfo().SetRotation(patternInfo->rotation()); + SaveDetailOptions* resizeCommand = new SaveDetailOptions(oldDet, newDet, doc, id, this->scene()); + resizeCommand->setText(tr("resize pattern info label")); + connect(resizeCommand, &SaveDetailOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); + qApp->getUndoStack()->push(resizeCommand); } //--------------------------------------------------------------------------------------------------------------------- void VToolDetail::SaveRotationPattern(qreal dRot) { - doc->SetRotation(dRot); + VDetail oldDet = VAbstractTool::data.GetDetail(id); + VDetail newDet = oldDet; + newDet.GetPatternInfo().SetPos(patternInfo->pos()); + newDet.GetPatternInfo().SetLabelWidth(patternInfo->boundingRect().width()); + newDet.GetPatternInfo().SetLabelHeight(patternInfo->boundingRect().height()); + newDet.GetPatternInfo().SetFontSize(patternInfo->GetFontSize()); + newDet.GetPatternInfo().SetRotation(dRot); + + SaveDetailOptions* rotateCommand = new SaveDetailOptions(oldDet, newDet, doc, id, this->scene()); + rotateCommand->setText(tr("rotate pattern info label")); + connect(rotateCommand, &SaveDetailOptions::NeedLiteParsing, doc, &VAbstractPattern::LiteParseTree); + qApp->getUndoStack()->push(rotateCommand); } diff --git a/src/libs/vtools/undocommands/savedetailoptions.cpp b/src/libs/vtools/undocommands/savedetailoptions.cpp index 1f1e83612..f6776638a 100644 --- a/src/libs/vtools/undocommands/savedetailoptions.cpp +++ b/src/libs/vtools/undocommands/savedetailoptions.cpp @@ -31,6 +31,7 @@ #include "../../vwidgets/vmaingraphicsview.h" #include "../ifc/xml/vabstractpattern.h" #include "../vpatterndb/vpatternpiecedata.h" +#include "../vpatterndb/vpatterninfogeometry.h" #include @@ -58,6 +59,7 @@ void SaveDetailOptions::undo() SaveDet(domElement, oldDet); doc->RemoveAllChildren(domElement); SavePatternPieceData(domElement, oldDet); + SavePatternInfo(domElement, oldDet); for (int i = 0; i < oldDet.CountNode(); ++i) { VToolDetail::AddNode(doc, domElement, oldDet.at(i)); @@ -83,6 +85,7 @@ void SaveDetailOptions::redo() SaveDet(domElement, newDet); doc->RemoveAllChildren(domElement); SavePatternPieceData(domElement, newDet); + SavePatternInfo(domElement, newDet); for (int i = 0; i < newDet.CountNode(); ++i) { @@ -156,3 +159,18 @@ void SaveDetailOptions::SavePatternPieceData(QDomElement &domElement, const VDet } domElement.appendChild(domData); } + +//--------------------------------------------------------------------------------------------------------------------- +void SaveDetailOptions::SavePatternInfo(QDomElement &domElement, const VDetail &det) +{ + QDomElement domData = doc->createElement(VAbstractPattern::TagPatternInfo); + const VPatternInfoGeometry& data = det.GetPatternInfo(); + doc->SetAttribute(domData, AttrMx, data.GetPos().x()); + doc->SetAttribute(domData, AttrMy, data.GetPos().y()); + doc->SetAttribute(domData, VToolDetail::AttrWidth, data.GetLabelWidth()); + doc->SetAttribute(domData, VToolDetail::AttrHeight, data.GetLabelHeight()); + doc->SetAttribute(domData, VToolDetail::AttrFont, data.GetFontSize()); + doc->SetAttribute(domData, VToolDetail::AttrRotation, data.GetRotation()); + + domElement.appendChild(domData); +} diff --git a/src/libs/vtools/undocommands/savedetailoptions.h b/src/libs/vtools/undocommands/savedetailoptions.h index 99d796ecb..58e1ba789 100644 --- a/src/libs/vtools/undocommands/savedetailoptions.h +++ b/src/libs/vtools/undocommands/savedetailoptions.h @@ -54,6 +54,7 @@ private: QGraphicsScene *scene; void SaveDet(QDomElement &domElement, const VDetail &det); void SavePatternPieceData(QDomElement &domElement, const VDetail &det); + void SavePatternInfo(QDomElement &domElement, const VDetail &det); }; //---------------------------------------------------------------------------------------------------------------------