From d38e81cecb4d93d7d6b74a2aa1c309a403de85b1 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Fri, 14 Oct 2016 20:41:37 +0300 Subject: [PATCH] Added new option "In layout" to context menu tool Detail. --HG-- branch : develop --- src/app/valentina/mainwindow.cpp | 1 + src/libs/ifc/xml/vabstractpattern.cpp | 6 ++++++ src/libs/ifc/xml/vabstractpattern.h | 2 ++ src/libs/vpatterndb/vcontainer.cpp | 18 +++++++++--------- src/libs/vpatterndb/vcontainer.h | 15 ++++++++++----- src/libs/vtools/tools/vtooldetail.cpp | 24 ++++++++++++++++-------- 6 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index f302efc57..684814517 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -3510,6 +3510,7 @@ void MainWindow::InitDocksContain() detailsWidget = new VWidgetDetails(pattern, doc, this); connect(doc, &VPattern::FullUpdateFromFile, detailsWidget, &VWidgetDetails::UpdateList); + connect(doc, &VPattern::UpdateInLayoutList, detailsWidget, &VWidgetDetails::UpdateList); connect(detailsWidget, &VWidgetDetails::Highlight, sceneDetails, &VMainGraphicsScene::HighlightItem); detailsWidget->setVisible(false); } diff --git a/src/libs/ifc/xml/vabstractpattern.cpp b/src/libs/ifc/xml/vabstractpattern.cpp index 77a6dae99..535f8fc3d 100644 --- a/src/libs/ifc/xml/vabstractpattern.cpp +++ b/src/libs/ifc/xml/vabstractpattern.cpp @@ -1202,6 +1202,12 @@ void VAbstractPattern::ClearScene() emit ClearMainWindow(); } +//--------------------------------------------------------------------------------------------------------------------- +void VAbstractPattern::CheckInLayoutList() +{ + emit UpdateInLayoutList(); +} + //--------------------------------------------------------------------------------------------------------------------- void VAbstractPattern::ToolExists(const quint32 &id) const { diff --git a/src/libs/ifc/xml/vabstractpattern.h b/src/libs/ifc/xml/vabstractpattern.h index d13d8f718..e68299e53 100644 --- a/src/libs/ifc/xml/vabstractpattern.h +++ b/src/libs/ifc/xml/vabstractpattern.h @@ -291,6 +291,7 @@ signals: void UndoCommand(); void SetEnabledGUI(bool enabled); void CheckLayout(); + void UpdateInLayoutList(); void SetCurrentPP(const QString &patterPiece); public slots: @@ -298,6 +299,7 @@ public slots: void haveLiteChange(); void NeedFullParsing(); void ClearScene(); + void CheckInLayoutList(); protected: /** @brief nameActivDraw name current pattern peace. */ diff --git a/src/libs/vpatterndb/vcontainer.cpp b/src/libs/vpatterndb/vcontainer.cpp index ea350a8a9..5661de0c3 100644 --- a/src/libs/vpatterndb/vcontainer.cpp +++ b/src/libs/vpatterndb/vcontainer.cpp @@ -156,9 +156,9 @@ const val VContainer::GetObject(const QHash &obj, key id) const */ const VDetail VContainer::GetDetail(quint32 id) const { - if (d->details.contains(id)) + if (d->details->contains(id)) { - return d->details.value(id); + return d->details->value(id); } else { @@ -188,8 +188,8 @@ quint32 VContainer::AddGObject(VGObject *obj) */ quint32 VContainer::AddDetail(const VDetail &detail) { - quint32 id = getNextId(); - d->details[id] = detail; + const quint32 id = getNextId(); + d->details->insert(id, detail); return id; } @@ -260,7 +260,7 @@ void VContainer::Clear() qCDebug(vCon, "Clearing container data."); _id = NULL_ID; - d->details.clear(); + d->details->clear(); ClearVariables(); ClearGObjects(); ClearUniqueNames(); @@ -272,7 +272,7 @@ void VContainer::ClearForFullParse() qCDebug(vCon, "Clearing container data for full parse."); _id = NULL_ID; - d->details.clear(); + d->details->clear(); ClearVariables(VarType::Increment); ClearVariables(VarType::LineAngle); ClearVariables(VarType::LineLength); @@ -496,7 +496,7 @@ void VContainer::UpdateGObject(quint32 id, VGObject* obj) void VContainer::UpdateDetail(quint32 id, const VDetail &detail) { Q_ASSERT_X(id != NULL_ID, Q_FUNC_INFO, "id == 0"); //-V654 //-V712 - d->details[id] = detail; + d->details->insert(id, detail); UpdateId(id); } @@ -653,7 +653,7 @@ const QMap > VContainer::DataVar(const VarType &type) // cppcheck-suppress unusedFunction void VContainer::ClearDetails() { - d->details.clear(); + d->details->clear(); } //--------------------------------------------------------------------------------------------------------------------- @@ -731,7 +731,7 @@ const QHash > *VContainer::DataGObjects() cons */ const QHash *VContainer::DataDetails() const { - return &d->details; + return d->details.data(); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/libs/vpatterndb/vcontainer.h b/src/libs/vpatterndb/vcontainer.h index 6a581f94c..028d763ce 100644 --- a/src/libs/vpatterndb/vcontainer.h +++ b/src/libs/vpatterndb/vcontainer.h @@ -78,14 +78,19 @@ class VContainerData : public QSharedData //-V690 public: VContainerData(const VTranslateVars *trVars, const Unit *patternUnit) - :gObjects(QHash >()), - variables(QHash > ()), details(QHash()), + : gObjects(QHash >()), + variables(QHash > ()), + details(QSharedPointer>(new QHash())), trVars(trVars), patternUnit(patternUnit) {} VContainerData(const VContainerData &data) - :QSharedData(data), gObjects(data.gObjects), - variables(data.variables), details(data.details), trVars(data.trVars), patternUnit(data.patternUnit) + : QSharedData(data), + gObjects(data.gObjects), + variables(data.variables), + details(data.details), + trVars(data.trVars), + patternUnit(data.patternUnit) {} virtual ~VContainerData(); @@ -102,7 +107,7 @@ public: /** * @brief details container of details */ - QHash details; + QSharedPointer> details; const VTranslateVars *trVars; const Unit *patternUnit; diff --git a/src/libs/vtools/tools/vtooldetail.cpp b/src/libs/vtools/tools/vtooldetail.cpp index cf0d90d33..1cfcb324b 100644 --- a/src/libs/vtools/tools/vtooldetail.cpp +++ b/src/libs/vtools/tools/vtooldetail.cpp @@ -76,6 +76,7 @@ #include "../undocommands/deletedetail.h" #include "../undocommands/movedetail.h" #include "../undocommands/savedetailoptions.h" +#include "../undocommands/toggledetailinlayout.h" #include "../vgeometry/varc.h" #include "../vgeometry/vcubicbezier.h" #include "../vgeometry/vcubicbezierpath.h" @@ -731,15 +732,15 @@ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { QMenu menu; QAction *actionOption = menu.addAction(QIcon::fromTheme("preferences-other"), tr("Options")); + + QAction *inLayoutOption = menu.addAction(tr("In layout")); + inLayoutOption->setCheckable(true); + const VDetail detail = VAbstractTool::data.GetDetail(id); + inLayoutOption->setChecked(detail.IsInLayout()); + QAction *actionRemove = menu.addAction(QIcon::fromTheme("edit-delete"), tr("Delete")); - if (_referens > 1) - { - actionRemove->setEnabled(false); - } - else - { - actionRemove->setEnabled(true); - } + _referens > 1 ? actionRemove->setEnabled(false) : actionRemove->setEnabled(true); + QAction *selectedAction = menu.exec(event->screenPos()); if (selectedAction == actionOption) { @@ -751,6 +752,13 @@ void VToolDetail::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) setDialog(); dialog->show(); } + else if (selectedAction == inLayoutOption) + { + ToggleDetailInLayout *togglePrint = new ToggleDetailInLayout(id, selectedAction->isChecked(), + &(VAbstractTool::data), doc); + connect(togglePrint, &ToggleDetailInLayout::UpdateList, doc, &VAbstractPattern::CheckInLayoutList); + qApp->getUndoStack()->push(togglePrint); + } else if (selectedAction == actionRemove) { try