From fa105537d2053d3d74c074c68773e65432c9479e Mon Sep 17 00:00:00 2001 From: BojanKverh Date: Mon, 27 Jun 2016 01:17:27 +0200 Subject: [PATCH] Moving and resizing pattern info label (has few bugs still, probably just XML parsing) --HG-- branch : feature --- src/app/valentina/xml/vpattern.cpp | 24 +++++- src/libs/ifc/xml/vabstractpattern.cpp | 96 ++++++++++++++++++++- src/libs/ifc/xml/vabstractpattern.h | 11 +++ src/libs/vtools/tools/vtextgraphicsitem.cpp | 10 +++ src/libs/vtools/tools/vtextgraphicsitem.h | 7 +- src/libs/vtools/tools/vtooldetail.cpp | 94 ++++++++++++++++++-- src/libs/vtools/tools/vtooldetail.h | 8 +- 7 files changed, 236 insertions(+), 14 deletions(-) diff --git a/src/app/valentina/xml/vpattern.cpp b/src/app/valentina/xml/vpattern.cpp index 74c58fb97..b90ec26c2 100644 --- a/src/app/valentina/xml/vpattern.cpp +++ b/src/app/valentina/xml/vpattern.cpp @@ -82,6 +82,11 @@ void VPattern::CreateEmptyFile() version.appendChild(newNodeText); patternElement.appendChild(version); + QDomElement domCreated = createElement(TagCreationDate); + QDomText domCreatedText = createTextNode(QDate::currentDate().toString("d.M.yyyy")); + domCreated.appendChild(domCreatedText); + patternElement.appendChild(domCreated); + QDomElement unit = createElement(TagUnit); newNodeText = createTextNode(UnitsToStr(qApp->patternUnit())); unit.appendChild(newNodeText); @@ -131,7 +136,9 @@ void VPattern::Parse(const Document &parse) SCASSERT(sceneDraw != nullptr); SCASSERT(sceneDetail != nullptr); QStringList tags = QStringList() << TagDraw << TagIncrements << TagAuthor << TagDescription << TagNotes - << TagMeasurements << TagVersion << TagGradation << TagImage << TagUnit; + << TagMeasurements << TagVersion << TagGradation << TagImage << TagUnit + << TagPatternName << TagPatternNum << TagCompanyName << TagCustomerName + << TagCreationDate; PrepareForParse(parse); QDomNode domNode = documentElement().firstChild(); while (domNode.isNull() == false) @@ -191,6 +198,21 @@ void VPattern::Parse(const Document &parse) case 9: // TagUnit qCDebug(vXML, "Tag unit."); break; + case 10: // TagPatternName + qCDebug(vXML, "Pattern name."); + break; + case 11: // TagPatternNumber + qCDebug(vXML, "Pattern number."); + break; + case 12: // TagCompanyName + qCDebug(vXML, "Company name."); + break; + case 13: // TagCustomerName + qCDebug(vXML, "Customer name."); + break; + case 14: // TagCreationDate + qCDebug(vXML, "Creation date."); + break; default: qCDebug(vXML, "Wrong tag name %s", qUtf8Printable(domElement.tagName())); break; diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 5e9ba60ec..70915c8df 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -67,6 +67,7 @@ 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::TagPatternLabel = QStringLiteral("patternLabel"); const QString VAbstractPattern::AttrName = QStringLiteral("name"); const QString VAbstractPattern::AttrVisible = QStringLiteral("visible"); @@ -78,6 +79,8 @@ const QString VAbstractPattern::AttrMaterial = QStringLiteral("material"); const QString VAbstractPattern::AttrUserDefined = QStringLiteral("userDef"); const QString VAbstractPattern::AttrCutNumber = QStringLiteral("cutNumber"); const QString VAbstractPattern::AttrPlacement = QStringLiteral("placement"); +const QString VAbstractPattern::AttrWidth = QStringLiteral("width"); +const QString VAbstractPattern::AttrFont = QStringLiteral("font"); const QString VAbstractPattern::AttrAll = QStringLiteral("all"); @@ -1075,6 +1078,92 @@ QDate VAbstractPattern::GetCreationDate() const return QDate::currentDate(); } +//--------------------------------------------------------------------------------------------------------------------- +QPointF VAbstractPattern::GetLabelPosition() const +{ + QPointF ptPos(0.0, 0.0); + QDomNodeList li = elementsByTagName(TagPatternLabel); + if (li.count() == 0) + { + return ptPos; + } + + QDomNamedNodeMap attr = li.at(0).attributes(); + if (attr.contains(AttrMx) == true) + { + ptPos.setX(attr.namedItem(AttrMx).nodeValue().toDouble()); + } + if (attr.contains(AttrMy) == true) + { + ptPos.setY(attr.namedItem(AttrMy).nodeValue().toDouble()); + } + return ptPos; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractPattern::SetLabelPosition(const QPointF& ptPos) +{ + CheckTagExists(TagPatternLabel); + QDomNode node = elementsByTagName(TagPatternLabel).at(0); + node.toElement().setAttribute(AttrMx, ptPos.x()); + node.toElement().setAttribute(AttrMy, ptPos.y()); + emit patternChanged(false); + + qDebug() << "LABEL POSITION" << GetLabelPosition(); +} + +//--------------------------------------------------------------------------------------------------------------------- +qreal VAbstractPattern::GetLabelWidth() const +{ + qreal fW = 0.0; + QDomNodeList li = elementsByTagName(TagPatternLabel); + if (li.count() == 0) + { + return fW; + } + QDomNamedNodeMap attr = li.at(0).attributes(); + if (attr.contains(AttrWidth) == true) + { + fW = attr.namedItem(AttrWidth).nodeName().toDouble(); + } + return fW; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractPattern::SetLabelWidth(qreal fW) +{ + CheckTagExists(TagPatternLabel); + QDomNode node = elementsByTagName(TagPatternLabel).at(0); + node.toElement().setAttribute(AttrWidth, fW); + emit patternChanged(false); +} + +//--------------------------------------------------------------------------------------------------------------------- +int VAbstractPattern::GetFontSize() const +{ + int iFS = 0; + QDomNodeList li = elementsByTagName(TagPatternLabel); + if (li.count() == 0) + { + return iFS; + } + QDomNamedNodeMap attr = li.at(0).attributes(); + if (attr.contains(AttrFont) == true) + { + iFS = attr.namedItem(AttrFont).nodeName().toInt(); + } + return iFS; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractPattern::SetFontSize(int iFS) +{ + CheckTagExists(TagPatternLabel); + QDomNode node = elementsByTagName(TagPatternLabel).at(0); + node.toElement().setAttribute(AttrWidth, iFS); + emit patternChanged(false); +} + //--------------------------------------------------------------------------------------------------------------------- QString VAbstractPattern::GetImage() const { @@ -1200,7 +1289,7 @@ QDomElement VAbstractPattern::CheckTagExists(const QString &tag) { const QStringList tags = QStringList() << TagUnit << TagImage << TagAuthor << TagDescription << TagNotes << TagGradation << TagPatternName << TagPatternNum << TagCompanyName - << TagCustomerName << TagCreationDate; + << TagCustomerName << TagCreationDate << TagPatternLabel; switch (tags.indexOf(tag)) { case 0: //TagUnit @@ -1266,6 +1355,11 @@ QDomElement VAbstractPattern::CheckTagExists(const QString &tag) element = createElement(TagCreationDate); break; } + case 11: + { + element = createElement(TagPatternLabel); + break; + } default: { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index 4029f063a..11ccd3308 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -117,6 +117,12 @@ public: QString GetCustomerName() const; void SetCustomerName(QString qsName); QDate GetCreationDate() const; + QPointF GetLabelPosition() const; + void SetLabelPosition(const QPointF& ptPos); + qreal GetLabelWidth() const; + void SetLabelWidth(qreal fW); + int GetFontSize() const; + void SetFontSize(int iFS); QString GetImage() const; QString GetImageExtension() const; @@ -173,6 +179,7 @@ public: static const QString TagCompanyName; static const QString TagCustomerName; static const QString TagCreationDate; + static const QString TagPatternLabel; static const QString AttrName; static const QString AttrVisible; @@ -184,6 +191,8 @@ public: static const QString AttrUserDefined; static const QString AttrCutNumber; static const QString AttrPlacement; + static const QString AttrWidth; + static const QString AttrFont; static const QString AttrAll; @@ -308,6 +317,8 @@ protected: QDomElement CheckTagExists(const QString &tag); void InsertTag(const QStringList &tags, const QDomElement &element); + void SetChildTag(const QString& qsParent, const QString& qsChild, const QString& qsValue); + int GetIndexActivPP() const; private: Q_DISABLE_COPY(VAbstractPattern) diff --git a/src/libs/vtools/tools/vtextgraphicsitem.cpp b/src/libs/vtools/tools/vtextgraphicsitem.cpp index 02014e674..853d65039 100644 --- a/src/libs/vtools/tools/vtextgraphicsitem.cpp +++ b/src/libs/vtools/tools/vtextgraphicsitem.cpp @@ -124,6 +124,16 @@ void VTextGraphicsItem::Clear() m_liLines.clear(); } +//--------------------------------------------------------------------------------------------------------------------- +void VTextGraphicsItem::SetWidth(qreal fW) +{ + if (fW < MIN_W) + { + fW = MIN_W; + } + m_rectBoundingBox.setWidth(fW); +} + //--------------------------------------------------------------------------------------------------------------------- void VTextGraphicsItem::Reset() { diff --git a/src/libs/vtools/tools/vtextgraphicsitem.h b/src/libs/vtools/tools/vtextgraphicsitem.h index a9f62f3ae..caed2f7c8 100644 --- a/src/libs/vtools/tools/vtextgraphicsitem.h +++ b/src/libs/vtools/tools/vtextgraphicsitem.h @@ -66,6 +66,7 @@ public: QRectF boundingRect() const; void AddLine(const TextLine& tl); void Clear(); + void SetWidth(qreal fW); protected: void Resize(qreal fW, qreal fH); @@ -78,9 +79,9 @@ protected: QStringList SplitString(const QString& qs, qreal fW, const QFontMetrics& fm); signals: - void SignalMoved(QPointF ptPos); - void SignalResized(qreal iTW, int iFontSize); - void SignalShrink(); + void SignalMoved(QPointF ptPos); + void SignalResized(qreal iTW, int iFontSize); + void SignalShrink(); private: Mode m_eMode; diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index 4be428f24..bc3f7e079 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -79,7 +79,7 @@ VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem *parent) :VAbstractTool(doc, data, id), VNoBrushScalePathItem(parent), dialog(nullptr), sceneDetails(scene), drawName(drawName), seamAllowance(new VNoBrushScalePathItem(this)), - dataLabel(new VTextGraphicsItem(this)) + dataLabel(new VTextGraphicsItem(this)), patternInfo(new VTextGraphicsItem(this)) { VDetail detail = data->GetDetail(id); for (int i = 0; i< detail.CountNode(); ++i) @@ -128,10 +128,16 @@ VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 } setAcceptHoverEvents(true); - connect(dataLabel, &VTextGraphicsItem::SignalMoved, this, &VToolDetail::SaveMove); - connect(dataLabel, &VTextGraphicsItem::SignalResized, this, &VToolDetail::SaveResize); + connect(dataLabel, &VTextGraphicsItem::SignalMoved, this, &VToolDetail::SaveMoveDetail); + connect(dataLabel, &VTextGraphicsItem::SignalResized, this, &VToolDetail::SaveResizeDetail); connect(dataLabel, &VTextGraphicsItem::SignalShrink, this, &VToolDetail::UpdateAll); + + connect(patternInfo, &VTextGraphicsItem::SignalMoved, this, &VToolDetail::SaveMovePattern); + connect(patternInfo, &VTextGraphicsItem::SignalResized, this, &VToolDetail::SaveResizePattern); + connect(patternInfo, &VTextGraphicsItem::SignalShrink, this, &VToolDetail::UpdateAll); + connect(doc, &VAbstractPattern::patternChanged, this, &VToolDetail::UpdatePatternInfo); UpdateLabel(); + UpdatePatternInfo(); } //--------------------------------------------------------------------------------------------------------------------- @@ -684,9 +690,63 @@ void VToolDetail::UpdateLabel() //--------------------------------------------------------------------------------------------------------------------- /** - * @brief SaveMove saves the move operation to the undo stack + * @brief UpdatePatternInfo updates the pattern info label */ -void VToolDetail::SaveMove(QPointF ptPos) +void VToolDetail::UpdatePatternInfo() +{ + QFont fnt = qApp->font(); + int iFS = doc->GetFontSize(); + if (iFS < MIN_FONT_SIZE) + { + iFS = MIN_FONT_SIZE; + } + fnt.setPixelSize(iFS); + patternInfo->SetFont(fnt); + patternInfo->SetWidth(doc->GetLabelWidth()); + patternInfo->Clear(); + TextLine tl; + + // Company name + tl.m_qsText = doc->GetCompanyName(); + tl.m_eAlign = Qt::AlignCenter; + tl.m_eFontWeight = QFont::DemiBold; + tl.m_eStyle = QFont::StyleNormal; + tl.m_iFontSize = 4; + patternInfo->AddLine(tl); + + // Pattern name + tl.m_qsText = doc->GetPatternName(); + tl.m_eFontWeight = QFont::Normal; + tl.m_iFontSize = 2; + patternInfo->AddLine(tl); + + // Pattern number + tl.m_qsText = doc->GetPatternNumber(); + tl.m_iFontSize = 0; + tl.m_eAlign = Qt::AlignLeft | Qt::AlignVCenter; + patternInfo->AddLine(tl); + + // Customer name + tl.m_qsText = doc->GetCustomerName(); + tl.m_eStyle = QFont::StyleItalic; + patternInfo->AddLine(tl); + + // Creation date + QStringList qslDate = doc->GetCreationDate().toString(Qt::SystemLocaleLongDate).split(", "); + tl.m_qsText = qslDate.last(); + patternInfo->AddLine(tl); + + qDebug() << "UpdatePatternInfo" << doc->GetLabelPosition() << sender(); + patternInfo->setPos(doc->GetLabelPosition()); + patternInfo->Reset(); +} + +//--------------------------------------------------------------------------------------------------------------------- + +/** + * @brief SaveMoveDetail saves the move detail operation to the undo stack + */ +void VToolDetail::SaveMoveDetail(QPointF ptPos) { VDetail oldDet = VAbstractTool::data.GetDetail(id); VDetail newDet = oldDet; @@ -699,9 +759,9 @@ void VToolDetail::SaveMove(QPointF ptPos) //--------------------------------------------------------------------------------------------------------------------- /** - * @brief: SaveResize save the resize label operation to the undo stack + * @brief SaveResizeDetail saves the resize detail label operation to the undo stack */ -void VToolDetail::SaveResize(qreal dLabelW, int iFontSize) +void VToolDetail::SaveResizeDetail(qreal dLabelW, int iFontSize) { VDetail oldDet = VAbstractTool::data.GetDetail(id); VDetail newDet = oldDet; @@ -713,6 +773,26 @@ void VToolDetail::SaveResize(qreal dLabelW, int iFontSize) qApp->getUndoStack()->push(resizeCommand); } +//--------------------------------------------------------------------------------------------------------------------- +/** + * @brief SaveMovePattern saves the pattern label position + */ +void VToolDetail::SaveMovePattern(QPointF ptPos) +{ + qDebug() << "Pattern moved to" << ptPos; + doc->SetLabelPosition(ptPos); +} + +//--------------------------------------------------------------------------------------------------------------------- +/** + * @brief: SaveResizePattern saves the pattern label width and font size + */ +void VToolDetail::SaveResizePattern(qreal dLabelW, int iFontSize) +{ + doc->SetLabelWidth(dLabelW); + doc->SetFontSize(iFontSize); +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief AddNode add node to the file. diff --git a/src/libs/vtools/tools/vtooldetail.h b/src/libs/vtools/tools/vtooldetail.h index f4fd7eba9..9f5f2d1a7 100644 --- a/src/libs/vtools/tools/vtooldetail.h +++ b/src/libs/vtools/tools/vtooldetail.h @@ -106,10 +106,13 @@ protected: virtual void keyReleaseEvent(QKeyEvent * event) Q_DECL_OVERRIDE; virtual void SetVisualization() Q_DECL_OVERRIDE {} virtual void UpdateLabel(); + virtual void UpdatePatternInfo(); protected slots: - virtual void SaveMove(QPointF ptPos); - virtual void SaveResize(qreal dLabelW, int iFontSize); + virtual void SaveMoveDetail(QPointF ptPos); + virtual void SaveResizeDetail(qreal dLabelW, int iFontSize); + virtual void SaveMovePattern(QPointF ptPos); + virtual void SaveResizePattern(qreal dLabelW, int iFontSize); private: Q_DISABLE_COPY(VToolDetail) @@ -122,6 +125,7 @@ private: VNoBrushScalePathItem *seamAllowance; VTextGraphicsItem* dataLabel; + VTextGraphicsItem* patternInfo; VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 &id, const Source &typeCreation, VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem * parent = nullptr);