From 2b1cd5c96cf139efadf17c020abd114fdb9524ab Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Thu, 23 Feb 2017 14:36:08 +0200 Subject: [PATCH] Copy-on-write for class VPatternLabelData. --HG-- branch : feature --- .../floatItemData/vpatternlabeldata.cpp | 50 +++++++---- .../floatItemData/vpatternlabeldata.h | 17 ++-- .../floatItemData/vpatternlabeldata_p.h | 88 +++++++++++++++++++ src/libs/vpatterndb/vpatterndb.pri | 3 +- 4 files changed, 127 insertions(+), 31 deletions(-) create mode 100644 src/libs/vpatterndb/floatItemData/vpatternlabeldata_p.h diff --git a/src/libs/vpatterndb/floatItemData/vpatternlabeldata.cpp b/src/libs/vpatterndb/floatItemData/vpatternlabeldata.cpp index f82009563..e87f06ddd 100644 --- a/src/libs/vpatterndb/floatItemData/vpatternlabeldata.cpp +++ b/src/libs/vpatterndb/floatItemData/vpatternlabeldata.cpp @@ -27,19 +27,33 @@ *************************************************************************/ #include "vpatternlabeldata.h" +#include "vpatternlabeldata_p.h" #include "../ifc/ifcdef.h" //--------------------------------------------------------------------------------------------------------------------- VPatternLabelData::VPatternLabelData() : VAbstractFloatItemData(), - m_dLabelWidth(0), - m_dLabelHeight(0), - m_iFontSize(0), - m_dRotation(0), - m_topLeftPin(NULL_ID), - m_bottomRightPin(NULL_ID) + d(new VPatternLabelDataPrivate()) {} +//--------------------------------------------------------------------------------------------------------------------- +VPatternLabelData::VPatternLabelData(const VPatternLabelData &data) + : VAbstractFloatItemData(data), + d (data.d) +{} + +//--------------------------------------------------------------------------------------------------------------------- +VPatternLabelData &VPatternLabelData::operator=(const VPatternLabelData &data) +{ + if ( &data == this ) + { + return *this; + } + VAbstractFloatItemData::operator=(data); + d = data.d; + return *this; +} + //--------------------------------------------------------------------------------------------------------------------- VPatternLabelData::~VPatternLabelData() {} @@ -47,71 +61,71 @@ VPatternLabelData::~VPatternLabelData() //--------------------------------------------------------------------------------------------------------------------- qreal VPatternLabelData::GetLabelWidth() const { - return m_dLabelWidth; + return d->m_dLabelWidth; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetLabelWidth(qreal dLabelW) { - m_dLabelWidth = dLabelW; + d->m_dLabelWidth = dLabelW; } //--------------------------------------------------------------------------------------------------------------------- qreal VPatternLabelData::GetLabelHeight() const { - return m_dLabelHeight; + return d->m_dLabelHeight; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetLabelHeight(qreal dLabelH) { - m_dLabelHeight = dLabelH; + d->m_dLabelHeight = dLabelH; } //--------------------------------------------------------------------------------------------------------------------- int VPatternLabelData::GetFontSize() const { - return m_iFontSize; + return d->m_iFontSize; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetFontSize(int iSize) { - m_iFontSize = iSize; + d->m_iFontSize = iSize; } //--------------------------------------------------------------------------------------------------------------------- qreal VPatternLabelData::GetRotation() const { - return m_dRotation; + return d->m_dRotation; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetRotation(qreal dRot) { - m_dRotation = dRot; + d->m_dRotation = dRot; } //--------------------------------------------------------------------------------------------------------------------- quint32 VPatternLabelData::TopLeftPin() const { - return m_topLeftPin; + return d->m_topLeftPin; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetTopLeftPin(const quint32 &topLeftPin) { - m_topLeftPin = topLeftPin; + d->m_topLeftPin = topLeftPin; } //--------------------------------------------------------------------------------------------------------------------- quint32 VPatternLabelData::BottomRightPin() const { - return m_bottomRightPin; + return d->m_bottomRightPin; } //--------------------------------------------------------------------------------------------------------------------- void VPatternLabelData::SetBottomRightPin(const quint32 &bottomRightPin) { - m_bottomRightPin = bottomRightPin; + d->m_bottomRightPin = bottomRightPin; } diff --git a/src/libs/vpatterndb/floatItemData/vpatternlabeldata.h b/src/libs/vpatterndb/floatItemData/vpatternlabeldata.h index 97a79f260..21381f6f7 100644 --- a/src/libs/vpatterndb/floatItemData/vpatternlabeldata.h +++ b/src/libs/vpatterndb/floatItemData/vpatternlabeldata.h @@ -33,6 +33,8 @@ #include "vabstractfloatitemdata.h" +class VPatternLabelDataPrivate; + /** * @brief The VPatternLabelData class holds the information about pattern info label geometry */ @@ -40,6 +42,8 @@ class VPatternLabelData : public VAbstractFloatItemData { public: VPatternLabelData(); + VPatternLabelData(const VPatternLabelData &data); + VPatternLabelData &operator=(const VPatternLabelData &data); virtual ~VPatternLabelData(); // methods, which set up label parameters @@ -62,18 +66,7 @@ public: void SetBottomRightPin(const quint32 &bottomRightPin); protected: - /** @brief m_dLabelWidth label width */ - qreal m_dLabelWidth; - /** @brief m_dLabelHeight label height */ - qreal m_dLabelHeight; - /** @brief m_iFontSize label text base font size */ - int m_iFontSize; - /** @brief m_dRotation label rotation */ - qreal m_dRotation; - /** @brief m_topLeftPin top left corner pin id */ - quint32 m_topLeftPin; - /** @brief m_bottomRightPin bottom right corner pin id */ - quint32 m_bottomRightPin; + QSharedDataPointer d; }; #endif // VPATTERNINFOGEOMETRY_H diff --git a/src/libs/vpatterndb/floatItemData/vpatternlabeldata_p.h b/src/libs/vpatterndb/floatItemData/vpatternlabeldata_p.h new file mode 100644 index 000000000..783addb83 --- /dev/null +++ b/src/libs/vpatterndb/floatItemData/vpatternlabeldata_p.h @@ -0,0 +1,88 @@ +/************************************************************************ + ** + ** @file + ** @author Roman Telezhynskyi + ** @date 23 2, 2017 + ** + ** @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) 2017 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 VPATTERNLABELDATA_P_H +#define VPATTERNLABELDATA_P_H + +#include +#include + +#include "../vmisc/diagnostic.h" +#include "../ifc/ifcdef.h" + +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Weffc++") + +class VPatternLabelDataPrivate : public QSharedData +{ +public: + VPatternLabelDataPrivate() + : m_dLabelWidth(0), + m_dLabelHeight(0), + m_iFontSize(0), + m_dRotation(0), + m_topLeftPin(NULL_ID), + m_bottomRightPin(NULL_ID) + {} + + VPatternLabelDataPrivate(const VPatternLabelDataPrivate &data) + : QSharedData(data), + m_dLabelWidth(data.m_dLabelWidth), + m_dLabelHeight(data.m_dLabelHeight), + m_iFontSize(data.m_iFontSize), + m_dRotation(data.m_dRotation), + m_topLeftPin(data.m_topLeftPin), + m_bottomRightPin(data.m_bottomRightPin) + {} + + ~VPatternLabelDataPrivate(); + + /** @brief m_dLabelWidth label width */ + qreal m_dLabelWidth; + /** @brief m_dLabelHeight label height */ + qreal m_dLabelHeight; + /** @brief m_iFontSize label text base font size */ + int m_iFontSize; + /** @brief m_dRotation label rotation */ + qreal m_dRotation; + /** @brief m_topLeftPin top left corner pin id */ + quint32 m_topLeftPin; + /** @brief m_bottomRightPin bottom right corner pin id */ + quint32 m_bottomRightPin; + +private: + VPatternLabelDataPrivate &operator=(const VPatternLabelDataPrivate &) Q_DECL_EQ_DELETE; +}; + +VPatternLabelDataPrivate::~VPatternLabelDataPrivate() +{} + +QT_WARNING_POP + +#endif // VPATTERNLABELDATA_P_H + diff --git a/src/libs/vpatterndb/vpatterndb.pri b/src/libs/vpatterndb/vpatterndb.pri index ffed4e24e..d0006cd91 100644 --- a/src/libs/vpatterndb/vpatterndb.pri +++ b/src/libs/vpatterndb/vpatterndb.pri @@ -70,4 +70,5 @@ HEADERS += \ $$PWD/floatItemData/vabstractfloatitemdata.h \ $$PWD/floatItemData/vabstractfloatitemdata_p.h \ $$PWD/floatItemData/vgrainlinedata_p.h \ - $$PWD/floatItemData/floatitemdef.h + $$PWD/floatItemData/floatitemdef.h \ + $$PWD/floatItemData/vpatternlabeldata_p.h