From 20e22439c9dd4f4781d6b59b29891ec66a25c07f Mon Sep 17 00:00:00 2001 From: dismine Date: Fri, 3 Jan 2014 17:13:43 +0200 Subject: [PATCH] Fixed issue #30. --HG-- branch : develop --- src/tools/drawTools/vdrawtool.h | 18 +--- src/tools/drawTools/vtoolalongline.cpp | 2 +- src/tools/drawTools/vtoolarc.cpp | 34 +++++++- src/tools/drawTools/vtoolarc.h | 28 ++++--- src/tools/drawTools/vtoolbisector.cpp | 2 +- src/tools/drawTools/vtoolcutspline.cpp | 2 +- src/tools/drawTools/vtoolcutsplinepath.cpp | 2 +- src/tools/drawTools/vtoolendline.cpp | 2 +- src/tools/drawTools/vtoolheight.cpp | 2 +- src/tools/drawTools/vtoolline.cpp | 34 +++++++- src/tools/drawTools/vtoolline.h | 30 +++---- src/tools/drawTools/vtoollineintersect.cpp | 2 +- src/tools/drawTools/vtoolnormal.cpp | 2 +- src/tools/drawTools/vtoolpoint.cpp | 32 ++++++++ src/tools/drawTools/vtoolpoint.h | 2 + src/tools/drawTools/vtoolpointofcontact.cpp | 2 +- .../drawTools/vtoolpointofintersection.cpp | 2 +- src/tools/drawTools/vtoolshoulderpoint.cpp | 2 +- src/tools/drawTools/vtoolsinglepoint.cpp | 1 + src/tools/drawTools/vtoolsinglepoint.h | 5 ++ src/tools/drawTools/vtoolspline.cpp | 34 +++++++- src/tools/drawTools/vtoolspline.h | 38 +++++---- src/tools/drawTools/vtoolsplinepath.cpp | 34 +++++++- src/tools/drawTools/vtoolsplinepath.h | 46 ++++++----- src/tools/drawTools/vtooltriangle.cpp | 2 +- src/tools/vabstracttool.cpp | 27 ++++++ src/tools/vabstracttool.h | 3 +- src/tools/vtooldetail.cpp | 82 ++++++++----------- src/tools/vtooldetail.h | 5 +- 29 files changed, 324 insertions(+), 153 deletions(-) diff --git a/src/tools/drawTools/vdrawtool.h b/src/tools/drawTools/vdrawtool.h index 37d87e419..78edf29e5 100644 --- a/src/tools/drawTools/vdrawtool.h +++ b/src/tools/drawTools/vdrawtool.h @@ -161,23 +161,7 @@ protected: { if (selectedAction == actionRemove) { - //deincrement referens - RemoveReferens(); - //remove form xml file - QDomElement domElement = doc->elementById(QString().setNum(id)); - if (domElement.isElement()) - { - QDomElement element; - bool ok = doc->GetActivCalculationElement(element); - if (ok) - { - element.removeChild(domElement); - //update xml file - emit FullUpdateTree(); - //remove form scene - emit RemoveTool(tool); - } - } + DeleteTool(tool); } } } diff --git a/src/tools/drawTools/vtoolalongline.cpp b/src/tools/drawTools/vtoolalongline.cpp index 62c8a2053..2d5498f1e 100644 --- a/src/tools/drawTools/vtoolalongline.cpp +++ b/src/tools/drawTools/vtoolalongline.cpp @@ -193,7 +193,7 @@ void VToolAlongLine::Create(const qint64 _id, const QString &pointName, const QS secondPointId, typeLine, typeCreation); scene->addItem(point); connect(point, &VToolAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolAlongLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolAlongLine::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolAlongLine::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); diff --git a/src/tools/drawTools/vtoolarc.cpp b/src/tools/drawTools/vtoolarc.cpp index 2f59bf87f..597dbb1b1 100644 --- a/src/tools/drawTools/vtoolarc.cpp +++ b/src/tools/drawTools/vtoolarc.cpp @@ -43,6 +43,7 @@ VToolArc::VToolArc(VDomDocument *doc, VContainer *data, qint64 id, const Tool::S this->setPath(path); this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, true); this->setAcceptHoverEvents(true); if (typeCreation == Tool::FromGui) @@ -127,7 +128,7 @@ void VToolArc::Create(const qint64 _id, const qint64 ¢er, const QString &rad VToolArc *toolArc = new VToolArc(doc, data, id, typeCreation); scene->addItem(toolArc); connect(toolArc, &VToolArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(toolArc, &VToolArc::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(toolArc, &VToolArc::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); doc->AddTool(id, toolArc); doc->IncrementReferens(center); } @@ -245,6 +246,37 @@ void VToolArc::RemoveReferens() doc->DecrementReferens(arc->GetCenter().id()); } +QVariant VToolArc::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + if (value == true) + { + // do stuff if selected + this->setFocus(); + } + else + { + // do stuff if not selected + } + } + + return QGraphicsItem::itemChange(change, value); +} + +void VToolArc::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Delete: + DeleteTool(this); + break; + default: + break; + } + QGraphicsItem::keyReleaseEvent ( event ); +} + void VToolArc::RefreshGeometry() { this->setPen(QPen(currentColor, widthHairLine/factor)); diff --git a/src/tools/drawTools/vtoolarc.h b/src/tools/drawTools/vtoolarc.h index cedeed99a..24f56ecab 100644 --- a/src/tools/drawTools/vtoolarc.h +++ b/src/tools/drawTools/vtoolarc.h @@ -92,62 +92,64 @@ public slots: /** * @brief FullUpdateFromFile */ - virtual void FullUpdateFromFile(); + virtual void FullUpdateFromFile(); /** * @brief FullUpdateFromGui * @param result */ - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromGui(int result); /** * @brief ChangedActivDraw * @param newName */ - virtual void ChangedActivDraw(const QString &newName); + virtual void ChangedActivDraw(const QString &newName); /** * @brief ShowTool * @param id * @param color * @param enable */ - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); /** * @brief SetFactor * @param factor */ - virtual void SetFactor(qreal factor); + virtual void SetFactor(qreal factor); protected: /** * @brief contextMenuEvent * @param event */ - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); /** * @brief AddToFile */ - virtual void AddToFile(); + virtual void AddToFile(); /** * @brief RefreshDataInFile refresh attributes in file. If attributes don't exist create them. */ - virtual void RefreshDataInFile(); + virtual void RefreshDataInFile(); /** * @brief mouseReleaseEvent * @param event */ - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); /** * @brief hoverMoveEvent * @param event */ - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief hoverLeaveEvent * @param event */ - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief RemoveReferens */ - virtual void RemoveReferens(); + virtual void RemoveReferens(); + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void keyReleaseEvent(QKeyEvent * event); private: /** * @brief dialogArc @@ -156,7 +158,7 @@ private: /** * @brief RefreshGeometry */ - void RefreshGeometry(); + void RefreshGeometry(); }; #endif // VTOOLARC_H diff --git a/src/tools/drawTools/vtoolbisector.cpp b/src/tools/drawTools/vtoolbisector.cpp index eb973f3af..435ad73ef 100644 --- a/src/tools/drawTools/vtoolbisector.cpp +++ b/src/tools/drawTools/vtoolbisector.cpp @@ -134,7 +134,7 @@ void VToolBisector::Create(const qint64 _id, const QString &formula, const qint6 thirdPointId, typeCreation); scene->addItem(point); connect(point, &VToolBisector::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolBisector::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolBisector::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolBisector::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); diff --git a/src/tools/drawTools/vtoolcutspline.cpp b/src/tools/drawTools/vtoolcutspline.cpp index f05e012d1..d2345a5b2 100644 --- a/src/tools/drawTools/vtoolcutspline.cpp +++ b/src/tools/drawTools/vtoolcutspline.cpp @@ -145,7 +145,7 @@ void VToolCutSpline::Create(const qint64 _id, const QString &pointName, VToolCutSpline *point = new VToolCutSpline(doc, data, id, formula, splineId, spl1id, spl2id, typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPoint::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); doc->AddTool(id, point); doc->AddTool(spl1id, point); diff --git a/src/tools/drawTools/vtoolcutsplinepath.cpp b/src/tools/drawTools/vtoolcutsplinepath.cpp index 277119865..676096d5a 100644 --- a/src/tools/drawTools/vtoolcutsplinepath.cpp +++ b/src/tools/drawTools/vtoolcutsplinepath.cpp @@ -216,7 +216,7 @@ void VToolCutSplinePath::Create(const qint64 _id, const QString &pointName, cons splPath2id, typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPoint::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); doc->AddTool(id, point); doc->AddTool(splPath1id, point); diff --git a/src/tools/drawTools/vtoolendline.cpp b/src/tools/drawTools/vtoolendline.cpp index c8225c361..d553fae36 100644 --- a/src/tools/drawTools/vtoolendline.cpp +++ b/src/tools/drawTools/vtoolendline.cpp @@ -108,7 +108,7 @@ void VToolEndLine::Create(const qint64 _id, const QString &pointName, const QStr basePointId, typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPoint::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(basePointId); diff --git a/src/tools/drawTools/vtoolheight.cpp b/src/tools/drawTools/vtoolheight.cpp index 57b3290cc..c3aa91b3d 100644 --- a/src/tools/drawTools/vtoolheight.cpp +++ b/src/tools/drawTools/vtoolheight.cpp @@ -107,7 +107,7 @@ void VToolHeight::Create(const qint64 _id, const QString &pointName, const QStri typeCreation); scene->addItem(point); connect(point, &VToolPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPoint::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPoint::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(basePointId); diff --git a/src/tools/drawTools/vtoolline.cpp b/src/tools/drawTools/vtoolline.cpp index 4b2e8c7c5..964d6b136 100644 --- a/src/tools/drawTools/vtoolline.cpp +++ b/src/tools/drawTools/vtoolline.cpp @@ -42,6 +42,7 @@ VToolLine::VToolLine(VDomDocument *doc, VContainer *data, qint64 id, qint64 firs this->setLine(QLineF(first->toQPointF(), second->toQPointF())); this->setFlag(QGraphicsItem::ItemStacksBehindParent, true); this->setFlag(QGraphicsItem::ItemIsSelectable, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, true); this->setAcceptHoverEvents(true); this->setPen(QPen(Qt::black, widthHairLine/factor)); @@ -98,7 +99,7 @@ void VToolLine::Create(const qint64 &_id, const qint64 &firstPoint, const qint64 Q_ASSERT(line != 0); scene->addItem(line); connect(line, &VToolLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(line, &VToolLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(line, &VToolLine::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, line, &VToolLine::SetFactor); doc->AddTool(id, line); doc->IncrementReferens(firstPoint); @@ -198,6 +199,37 @@ void VToolLine::RemoveReferens() doc->DecrementReferens(secondPoint); } +QVariant VToolLine::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + if (value == true) + { + // do stuff if selected + this->setFocus(); + } + else + { + // do stuff if not selected + } + } + + return QGraphicsItem::itemChange(change, value); +} + +void VToolLine::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Delete: + DeleteTool(this); + break; + default: + break; + } + QGraphicsItem::keyReleaseEvent ( event ); +} + void VToolLine::RefreshGeometry() { QDomElement domElement = doc->elementById(QString().setNum(id)); diff --git a/src/tools/drawTools/vtoolline.h b/src/tools/drawTools/vtoolline.h index d02b95f03..700a15a44 100644 --- a/src/tools/drawTools/vtoolline.h +++ b/src/tools/drawTools/vtoolline.h @@ -87,66 +87,68 @@ public slots: /** * @brief FullUpdateFromFile */ - virtual void FullUpdateFromFile(); + virtual void FullUpdateFromFile(); /** * @brief ChangedActivDraw * @param newName */ - virtual void ChangedActivDraw(const QString &newName); + virtual void ChangedActivDraw(const QString &newName); /** * @brief FullUpdateFromGui * @param result */ - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromGui(int result); /** * @brief ShowTool * @param id * @param color * @param enable */ - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); /** * @brief SetFactor * @param factor */ - virtual void SetFactor(qreal factor); + virtual void SetFactor(qreal factor); protected: /** * @brief contextMenuEvent * @param event */ - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); /** * @brief AddToFile */ - virtual void AddToFile(); + virtual void AddToFile(); /** * @brief RefreshDataInFile refresh attributes in file. If attributes don't exist create them. */ - virtual void RefreshDataInFile(); + virtual void RefreshDataInFile(); /** * @brief hoverMoveEvent * @param event */ - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief hoverLeaveEvent * @param event */ - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief RemoveReferens */ - virtual void RemoveReferens(); + virtual void RemoveReferens(); + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void keyReleaseEvent(QKeyEvent * event); private: /** * @brief firstPoint */ - qint64 firstPoint; + qint64 firstPoint; /** * @brief secondPoint */ - qint64 secondPoint; + qint64 secondPoint; /** * @brief dialogLine */ @@ -154,7 +156,7 @@ private: /** * @brief RefreshGeometry */ - void RefreshGeometry(); + void RefreshGeometry(); }; #endif // VTOOLLINE_H diff --git a/src/tools/drawTools/vtoollineintersect.cpp b/src/tools/drawTools/vtoollineintersect.cpp index 30fa1fa39..251c244bd 100644 --- a/src/tools/drawTools/vtoollineintersect.cpp +++ b/src/tools/drawTools/vtoollineintersect.cpp @@ -116,7 +116,7 @@ void VToolLineIntersect::Create(const qint64 _id, const qint64 &p1Line1Id, const p2Line2Id, typeCreation); scene->addItem(point); connect(point, &VToolLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolLineIntersect::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolLineIntersect::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolLineIntersect::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(p1Line1Id); diff --git a/src/tools/drawTools/vtoolnormal.cpp b/src/tools/drawTools/vtoolnormal.cpp index c648b14cc..a33ed61b0 100644 --- a/src/tools/drawTools/vtoolnormal.cpp +++ b/src/tools/drawTools/vtoolnormal.cpp @@ -110,7 +110,7 @@ void VToolNormal::Create(const qint64 _id, const QString &formula, const qint64 firstPointId, secondPointId, typeCreation); scene->addItem(point); connect(point, &VToolNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolNormal::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolNormal::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolNormal::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); diff --git a/src/tools/drawTools/vtoolpoint.cpp b/src/tools/drawTools/vtoolpoint.cpp index 453dfb2f2..372cc4d6c 100644 --- a/src/tools/drawTools/vtoolpoint.cpp +++ b/src/tools/drawTools/vtoolpoint.cpp @@ -39,6 +39,7 @@ VToolPoint::VToolPoint(VDomDocument *doc, VContainer *data, qint64 id, QGraphics &VToolPoint::NameChangePosition); this->setBrush(QBrush(Qt::NoBrush)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, true); this->setAcceptHoverEvents(true); RefreshPointGeometry(*VAbstractTool::data.GeometricObject(id)); } @@ -159,3 +160,34 @@ void VToolPoint::RefreshLine() lineName->setVisible(true); } } + +QVariant VToolPoint::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + if (value == true) + { + // do stuff if selected + this->setFocus(); + } + else + { + // do stuff if not selected + } + } + + return QGraphicsItem::itemChange(change, value); +} + +void VToolPoint::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Delete: + DeleteTool(this); + break; + default: + break; + } + QGraphicsItem::keyReleaseEvent ( event ); +} diff --git a/src/tools/drawTools/vtoolpoint.h b/src/tools/drawTools/vtoolpoint.h index e902fce32..11914ba80 100644 --- a/src/tools/drawTools/vtoolpoint.h +++ b/src/tools/drawTools/vtoolpoint.h @@ -123,6 +123,8 @@ protected: * @brief RefreshLine */ void RefreshLine(); + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void keyReleaseEvent(QKeyEvent * event); private: Q_DISABLE_COPY(VToolPoint) }; diff --git a/src/tools/drawTools/vtoolpointofcontact.cpp b/src/tools/drawTools/vtoolpointofcontact.cpp index eaf0bfb18..a1ac628c3 100644 --- a/src/tools/drawTools/vtoolpointofcontact.cpp +++ b/src/tools/drawTools/vtoolpointofcontact.cpp @@ -140,7 +140,7 @@ void VToolPointOfContact::Create(const qint64 _id, const QString &radius, const firstPointId, secondPointId, typeCreation); scene->addItem(point); connect(point, &VToolPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPointOfContact::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPointOfContact::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfContact::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(center); diff --git a/src/tools/drawTools/vtoolpointofintersection.cpp b/src/tools/drawTools/vtoolpointofintersection.cpp index f2dda86da..cf5202ca2 100644 --- a/src/tools/drawTools/vtoolpointofintersection.cpp +++ b/src/tools/drawTools/vtoolpointofintersection.cpp @@ -94,7 +94,7 @@ void VToolPointOfIntersection::Create(const qint64 _id, const QString &pointName secondPointId, typeCreation); scene->addItem(point); connect(point, &VToolPointOfIntersection::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolPointOfIntersection::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolPointOfIntersection::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolPointOfIntersection::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(firstPointId); diff --git a/src/tools/drawTools/vtoolshoulderpoint.cpp b/src/tools/drawTools/vtoolshoulderpoint.cpp index b11fc9119..5d6ae4f8d 100644 --- a/src/tools/drawTools/vtoolshoulderpoint.cpp +++ b/src/tools/drawTools/vtoolshoulderpoint.cpp @@ -142,7 +142,7 @@ void VToolShoulderPoint::Create(const qint64 _id, const QString &formula, const typeCreation); scene->addItem(point); connect(point, &VToolShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolShoulderPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolShoulderPoint::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolShoulderPoint::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(p1Line); diff --git a/src/tools/drawTools/vtoolsinglepoint.cpp b/src/tools/drawTools/vtoolsinglepoint.cpp index cc2d15f13..f32aa2bc4 100644 --- a/src/tools/drawTools/vtoolsinglepoint.cpp +++ b/src/tools/drawTools/vtoolsinglepoint.cpp @@ -37,6 +37,7 @@ VToolSinglePoint::VToolSinglePoint (VDomDocument *doc, VContainer *data, qint64 ignoreFullUpdate = true; this->setFlag(QGraphicsItem::ItemIsMovable, true); this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, false); if (typeCreation == Tool::FromGui) { AddToFile(); diff --git a/src/tools/drawTools/vtoolsinglepoint.h b/src/tools/drawTools/vtoolsinglepoint.h index 837c27748..fbc99c1ff 100644 --- a/src/tools/drawTools/vtoolsinglepoint.h +++ b/src/tools/drawTools/vtoolsinglepoint.h @@ -107,6 +107,11 @@ protected: * @brief decrementReferens */ virtual void decrementReferens(); + /** + * @brief DeleteTool delete tool from file and scene. This tool can't be deleted by now. + * @param tool tool what me delete. + */ + virtual void DeleteTool(QGraphicsItem *tool){Q_UNUSED(tool)} private: /** * @brief dialogSinglePoint diff --git a/src/tools/drawTools/vtoolspline.cpp b/src/tools/drawTools/vtoolspline.cpp index 6be80255e..465323980 100644 --- a/src/tools/drawTools/vtoolspline.cpp +++ b/src/tools/drawTools/vtoolspline.cpp @@ -46,6 +46,7 @@ VToolSpline::VToolSpline(VDomDocument *doc, VContainer *data, qint64 id, const T this->setPath(path); this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, true); this->setAcceptHoverEvents(true); VControlPointSpline *controlPoint1 = new VControlPointSpline(1, SplinePoint::FirstPoint, spl->GetP2(), @@ -131,7 +132,7 @@ void VToolSpline::Create(const qint64 _id, const qint64 &p1, const qint64 &p4, c VToolSpline *spl = new VToolSpline(doc, data, id, typeCreation); scene->addItem(spl); connect(spl, &VToolSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(spl, &VToolSpline::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(spl, &VToolSpline::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSpline::SetFactor); doc->AddTool(id, spl); doc->IncrementReferens(p1); @@ -274,6 +275,37 @@ void VToolSpline::RemoveReferens() doc->DecrementReferens(spl->GetP4().id()); } +QVariant VToolSpline::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + if (value == true) + { + // do stuff if selected + this->setFocus(); + } + else + { + // do stuff if not selected + } + } + + return QGraphicsItem::itemChange(change, value); +} + +void VToolSpline::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Delete: + DeleteTool(this); + break; + default: + break; + } + QGraphicsItem::keyReleaseEvent ( event ); +} + void VToolSpline::RefreshGeometry() { this->setPen(QPen(currentColor, widthHairLine/factor)); diff --git a/src/tools/drawTools/vtoolspline.h b/src/tools/drawTools/vtoolspline.h index d4133e8ac..5fdbabc68 100644 --- a/src/tools/drawTools/vtoolspline.h +++ b/src/tools/drawTools/vtoolspline.h @@ -101,81 +101,83 @@ signals: * @param controlPoint * @param splinePoint */ - void RefreshLine ( const qint32 &indexSpline, SplinePoint::Position position, const QPointF &controlPoint, - const QPointF &splinePoint ); + void RefreshLine ( const qint32 &indexSpline, SplinePoint::Position position, const QPointF &controlPoint, + const QPointF &splinePoint ); /** * @brief setEnabledPoint * @param enable */ - void setEnabledPoint ( bool enable ); + void setEnabledPoint ( bool enable ); public slots: /** * @brief FullUpdateFromFile */ - virtual void FullUpdateFromFile (); + virtual void FullUpdateFromFile (); /** * @brief FullUpdateFromGui * @param result */ - virtual void FullUpdateFromGui ( int result ); + virtual void FullUpdateFromGui ( int result ); /** * @brief ControlPointChangePosition * @param indexSpline * @param position * @param pos */ - void ControlPointChangePosition (const qint32 &indexSpline, const SplinePoint::Position &position, - const QPointF &pos); + void ControlPointChangePosition (const qint32 &indexSpline, const SplinePoint::Position &position, + const QPointF &pos); /** * @brief ChangedActivDraw * @param newName */ - virtual void ChangedActivDraw ( const QString &newName ); + virtual void ChangedActivDraw ( const QString &newName ); /** * @brief ShowTool * @param id * @param color * @param enable */ - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); /** * @brief SetFactor * @param factor */ - virtual void SetFactor(qreal factor); + virtual void SetFactor(qreal factor); protected: /** * @brief contextMenuEvent * @param event */ - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); /** * @brief AddToFile */ - virtual void AddToFile (); + virtual void AddToFile (); /** * @brief RefreshDataInFile refresh attributes in file. If attributes don't exist create them. */ - virtual void RefreshDataInFile(); + virtual void RefreshDataInFile(); /** * @brief mouseReleaseEvent * @param event */ - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); /** * @brief hoverMoveEvent * @param event */ - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief hoverLeaveEvent * @param event */ - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief RemoveReferens */ - virtual void RemoveReferens(); + virtual void RemoveReferens(); + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void keyReleaseEvent(QKeyEvent * event); private: /** * @brief dialogSpline @@ -188,7 +190,7 @@ private: /** * @brief RefreshGeometry */ - void RefreshGeometry (); + void RefreshGeometry (); }; #endif // VTOOLSPLINE_H diff --git a/src/tools/drawTools/vtoolsplinepath.cpp b/src/tools/drawTools/vtoolsplinepath.cpp index 3c2d4f003..7beea2025 100644 --- a/src/tools/drawTools/vtoolsplinepath.cpp +++ b/src/tools/drawTools/vtoolsplinepath.cpp @@ -44,6 +44,7 @@ VToolSplinePath::VToolSplinePath(VDomDocument *doc, VContainer *data, qint64 id, this->setPath(path); this->setPen(QPen(Qt::black, widthHairLine/factor)); this->setFlag(QGraphicsItem::ItemIsSelectable, true); + this->setFlag(QGraphicsItem::ItemIsFocusable, true); this->setAcceptHoverEvents(true); for (qint32 i = 1; i<=splPath->Count(); ++i) @@ -118,7 +119,7 @@ void VToolSplinePath::Create(const qint64 _id, VSplinePath *path, VMainGraphicsS VToolSplinePath *spl = new VToolSplinePath(doc, data, id, typeCreation); scene->addItem(spl); connect(spl, &VToolSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(spl, &VToolSplinePath::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(spl, &VToolSplinePath::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, spl, &VToolSplinePath::SetFactor); doc->AddTool(id, spl); } @@ -350,6 +351,37 @@ void VToolSplinePath::RemoveReferens() } } +QVariant VToolSplinePath::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +{ + if (change == QGraphicsItem::ItemSelectedChange) + { + if (value == true) + { + // do stuff if selected + this->setFocus(); + } + else + { + // do stuff if not selected + } + } + + return QGraphicsItem::itemChange(change, value); +} + +void VToolSplinePath::keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Delete: + DeleteTool(this); + break; + default: + break; + } + QGraphicsItem::keyReleaseEvent ( event ); +} + void VToolSplinePath::RefreshGeometry() { this->setPen(QPen(currentColor, widthHairLine/factor)); diff --git a/src/tools/drawTools/vtoolsplinepath.h b/src/tools/drawTools/vtoolsplinepath.h index 80aa2cf08..053a5a32e 100644 --- a/src/tools/drawTools/vtoolsplinepath.h +++ b/src/tools/drawTools/vtoolsplinepath.h @@ -54,7 +54,7 @@ public: /** * @brief setDialog */ - virtual void setDialog(); + virtual void setDialog(); /** * @brief Create * @param dialog @@ -93,81 +93,83 @@ signals: * @param controlPoint * @param splinePoint */ - void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, - const QPointF &controlPoint, const QPointF &splinePoint); + void RefreshLine(const qint32 &indexSpline, SplinePoint::Position pos, + const QPointF &controlPoint, const QPointF &splinePoint); /** * @brief setEnabledPoint * @param enable */ - void setEnabledPoint(bool enable); + void setEnabledPoint(bool enable); public slots: /** * @brief FullUpdateFromFile */ - virtual void FullUpdateFromFile(); + virtual void FullUpdateFromFile(); /** * @brief FullUpdateFromGui * @param result */ - virtual void FullUpdateFromGui(int result); + virtual void FullUpdateFromGui(int result); /** * @brief ControlPointChangePosition * @param indexSpline * @param position * @param pos */ - void ControlPointChangePosition(const qint32 &indexSpline, const SplinePoint::Position &position, - const QPointF &pos); + void ControlPointChangePosition(const qint32 &indexSpline, const SplinePoint::Position &position, + const QPointF &pos); /** * @brief ChangedActivDraw * @param newName */ - virtual void ChangedActivDraw(const QString &newName); + virtual void ChangedActivDraw(const QString &newName); /** * @brief ShowTool * @param id * @param color * @param enable */ - virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); + virtual void ShowTool(qint64 id, Qt::GlobalColor color, bool enable); /** * @brief SetFactor * @param factor */ - virtual void SetFactor(qreal factor); + virtual void SetFactor(qreal factor); protected: /** * @brief contextMenuEvent * @param event */ - virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); + virtual void contextMenuEvent ( QGraphicsSceneContextMenuEvent * event ); /** * @brief AddToFile */ - virtual void AddToFile(); + virtual void AddToFile(); /** * @brief RefreshDataInFile refresh attributes in file. If attributes don't exist create them. */ - virtual void RefreshDataInFile(); + virtual void RefreshDataInFile(); /** * @brief mouseReleaseEvent * @param event */ - virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); + virtual void mouseReleaseEvent ( QGraphicsSceneMouseEvent * event ); /** * @brief hoverMoveEvent * @param event */ - virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverMoveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief hoverLeaveEvent * @param event */ - virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); + virtual void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event ); /** * @brief RemoveReferens */ - virtual void RemoveReferens(); + virtual void RemoveReferens(); + virtual QVariant itemChange ( GraphicsItemChange change, const QVariant &value ); + virtual void keyReleaseEvent(QKeyEvent * event); private: /** * @brief dialogSplinePath @@ -180,26 +182,26 @@ private: /** * @brief RefreshGeometry */ - void RefreshGeometry(); + void RefreshGeometry(); /** * @brief AddPathPoint * @param domElement * @param splPoint */ - void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); + void AddPathPoint(QDomElement &domElement, const VSplinePoint &splPoint); /** * @brief UpdatePathPoint * @param node * @param path */ - void UpdatePathPoint(QDomNode& node, VSplinePath &path); + void UpdatePathPoint(QDomNode& node, VSplinePath &path); /** * @brief CorectControlPoints * @param spl * @param splPath * @param indexSpline */ - void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, const qint32 &indexSpline); + void CorectControlPoints(const VSpline &spl, VSplinePath &splPath, const qint32 &indexSpline); }; #endif // VTOOLSPLINEPATH_H diff --git a/src/tools/drawTools/vtooltriangle.cpp b/src/tools/drawTools/vtooltriangle.cpp index af21f9856..d9b0ba0d0 100644 --- a/src/tools/drawTools/vtooltriangle.cpp +++ b/src/tools/drawTools/vtooltriangle.cpp @@ -102,7 +102,7 @@ void VToolTriangle::Create(const qint64 _id, const QString &pointName, const qin secondPointId, typeCreation); scene->addItem(point); connect(point, &VToolTriangle::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(point, &VToolTriangle::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + connect(point, &VToolTriangle::SceneRemoveTool, scene, &VMainGraphicsScene::RemoveTool); connect(scene, &VMainGraphicsScene::NewFactor, point, &VToolTriangle::SetFactor); doc->AddTool(id, point); doc->IncrementReferens(axisP1Id); diff --git a/src/tools/vabstracttool.cpp b/src/tools/vabstracttool.cpp index 62e5260f6..77e93d649 100644 --- a/src/tools/vabstracttool.cpp +++ b/src/tools/vabstracttool.cpp @@ -178,6 +178,33 @@ void VAbstractTool::RemoveAllChild(QDomElement &domElement) } } +void VAbstractTool::DeleteTool(QGraphicsItem *tool) +{ + if (_referens <= 1) + { + //remove from xml file + QDomElement domElement = doc->elementById(QString().setNum(id)); + if (domElement.isElement()) + { + QDomNode element = domElement.parentNode(); + if (element.isNull() == false) + { + RemoveReferens();//deincrement referens + element.removeChild(domElement);//remove form file + emit SceneRemoveTool(tool);//remove form scene + } + else + { + qWarning()<<"parent isNull"<