diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp index 11f116c79..6a8d67aee 100644 --- a/src/libs/vpatterndb/vcontainer.cpp +++ b/src/libs/vpatterndb/vcontainer.cpp @@ -245,21 +245,16 @@ void VContainer::UpdateId(quint32 newId) //--------------------------------------------------------------------------------------------------------------------- /** * @brief UpdateObject update object in container - * @param obj container * @param id id of existing object * @param point object */ template -void VContainer::UpdateObject(QHash &obj, const quint32 &id, val point) +void VContainer::UpdateObject(const quint32 &id, val point) { Q_ASSERT_X(id != NULL_ID, Q_FUNC_INFO, "id == 0"); //-V654 //-V712 SCASSERT(point.isNull() == false) point->setId(id); - if (d->gObjects.contains(id)) - { - d->gObjects[id].clear(); - } - obj[id] = point; + d->gObjects.insert(id, point); UpdateId(id); } @@ -505,7 +500,14 @@ void VContainer::UpdateGObject(quint32 id, VGObject* obj) { SCASSERT(obj != nullptr) QSharedPointer pointer(obj); - UpdateObject(d->gObjects, id, pointer); + UpdateGObject(id, pointer); +} + +//--------------------------------------------------------------------------------------------------------------------- +void VContainer::UpdateGObject(quint32 id, const QSharedPointer &obj) +{ + SCASSERT(not obj.isNull()) + UpdateObject(id, obj); uniqueNames.insert(obj->name()); } diff --git a/src/libs/vpatterndb/vcontainer.h b/src/libs/vpatterndb/vcontainer.h index 5abca636f..54dde76cf 100644 --- a/src/libs/vpatterndb/vcontainer.h +++ b/src/libs/vpatterndb/vcontainer.h @@ -160,6 +160,7 @@ public: void RemovePiece(quint32 id); void UpdateGObject(quint32 id, VGObject* obj); + void UpdateGObject(quint32 id, const QSharedPointer &obj); void UpdatePiece(quint32 id, const VPiece &detail); void UpdatePiecePath(quint32 id, const VPiecePath &path); @@ -220,7 +221,7 @@ private: const val GetObject(const QHash &obj, key id) const; template - void UpdateObject(QHash &obj, const quint32 &id, val point); + void UpdateObject(const quint32 &id, val point); template static quint32 AddObject(QHash &obj, val value); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index ea00e9ad4..9f918fee9 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -114,6 +114,31 @@ void VToolSinglePoint::GroupVisibility(quint32 object, bool visible) setVisible(visible); } +//--------------------------------------------------------------------------------------------------------------------- +bool VToolSinglePoint::IsLabelVisible(quint32 id) const +{ + if (this->id == id) + { + const QSharedPointer point = VAbstractTool::data.GeometricObject(id); + return point->IsShowLabel(); + } + else + { + return false; + } +} + +//--------------------------------------------------------------------------------------------------------------------- +void VToolSinglePoint::SetLabelVisible(quint32 id, bool visible) +{ + if (this->id == id) + { + const QSharedPointer point = VAbstractTool::data.GeometricObject(id); + point->SetShowLabel(visible); + RefreshPointGeometry(*point); + } +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief NameChangePosition handle change posion point label. diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h index 4696ef3c6..d913d3638 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.h @@ -63,6 +63,9 @@ public: void SetEnabled(bool enabled); virtual void GroupVisibility(quint32 object, bool visible) Q_DECL_OVERRIDE; + + virtual bool IsLabelVisible(quint32 id) const Q_DECL_OVERRIDE; + virtual void SetLabelVisible(quint32 id, bool visible) Q_DECL_OVERRIDE; public slots: void NameChangePosition(const QPointF &pos); virtual void Disable(bool disable, const QString &namePP) Q_DECL_OVERRIDE; diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.cpp b/src/libs/vtools/tools/drawTools/vdrawtool.cpp index aa0377242..a801e492f 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.cpp +++ b/src/libs/vtools/tools/drawTools/vdrawtool.cpp @@ -210,6 +210,13 @@ void VDrawTool::DetailsMode(bool mode) // Do nothing. } +//--------------------------------------------------------------------------------------------------------------------- +void VDrawTool::ChangeLabelVisibility(quint32 id, bool visible) +{ + Q_UNUSED(id) + Q_UNUSED(visible) +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief AddToCalculation add tool to calculation tag in pattern file. @@ -236,3 +243,17 @@ void VDrawTool::SetTypeLine(const QString &value) QSharedPointer obj = VAbstractTool::data.GetGObject(id); SaveOption(obj); } + +//--------------------------------------------------------------------------------------------------------------------- +bool VDrawTool::IsLabelVisible(quint32 id) const +{ + Q_UNUSED(id) + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VDrawTool::SetLabelVisible(quint32 id, bool visible) +{ + Q_UNUSED(id) + Q_UNUSED(visible) +} diff --git a/src/libs/vtools/tools/drawTools/vdrawtool.h b/src/libs/vtools/tools/drawTools/vdrawtool.h index f769864fd..fba5dd07c 100644 --- a/src/libs/vtools/tools/drawTools/vdrawtool.h +++ b/src/libs/vtools/tools/drawTools/vdrawtool.h @@ -67,6 +67,9 @@ public: QString getLineType() const; virtual void SetTypeLine(const QString &value); + virtual bool IsLabelVisible(quint32 id) const; + virtual void SetLabelVisible(quint32 id, bool visible); + signals: void ChangedToolSelection(bool selected, quint32 object, quint32 tool); @@ -79,6 +82,7 @@ public slots: virtual void DetailsMode(bool mode); protected slots: virtual void ShowContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 id=NULL_ID)=0; + virtual void ChangeLabelVisibility(quint32 id, bool visible); protected: enum class RemoveOption : bool {Disable = false, Enable = true}; @@ -209,7 +213,7 @@ void VDrawTool::ContextMenu(QGraphicsSceneContextMenuEvent *event, quint32 itemI } else if (selectedAction == actionShowLabel) { - // do something here to show/hide a label + SetLabelVisible(itemId, selectedAction->isChecked()); } } diff --git a/src/libs/vwidgets/vscenepoint.cpp b/src/libs/vwidgets/vscenepoint.cpp index 1294845c6..60701fb8c 100644 --- a/src/libs/vwidgets/vscenepoint.cpp +++ b/src/libs/vwidgets/vscenepoint.cpp @@ -44,6 +44,7 @@ VScenePoint::VScenePoint(QGraphicsItem *parent) m_lineName(nullptr), m_onlyPoint(false), m_isHovered(false), + m_showLabel(true), m_baseColor(Qt::black) { m_namePoint = new VGraphicsSimpleTextItem(this); @@ -74,7 +75,7 @@ void VScenePoint::paint(QPainter *painter, const QStyleOptionGraphicsItem *optio if (not m_onlyPoint) { - m_namePoint->setVisible(true); + m_namePoint->setVisible(m_showLabel); QPen lPen = m_lineName->pen(); lPen.setColor(CorrectColor(m_lineName, Qt::black)); @@ -94,9 +95,12 @@ void VScenePoint::RefreshPointGeometry(const VPointF &point) setPos(static_cast(point)); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); + m_showLabel = point.IsShowLabel(); + m_namePoint->blockSignals(true); m_namePoint->setText(point.name()); m_namePoint->setPos(QPointF(point.mx(), point.my())); + m_namePoint->setVisible(m_showLabel); m_namePoint->blockSignals(false); RefreshLine(); @@ -151,7 +155,7 @@ void VScenePoint::RefreshLine() else { m_lineName->setLine(QLineF(p1, pRec - scenePos())); - m_lineName->setVisible(true); + m_lineName->setVisible(m_showLabel); } } else diff --git a/src/libs/vwidgets/vscenepoint.h b/src/libs/vwidgets/vscenepoint.h index 8d997d080..23bb23258 100644 --- a/src/libs/vwidgets/vscenepoint.h +++ b/src/libs/vwidgets/vscenepoint.h @@ -55,6 +55,7 @@ protected: bool m_onlyPoint; bool m_isHovered; + bool m_showLabel; /** @brief m_baseColor base color of point. */ QColor m_baseColor;