diff --git a/tools/drawTools/vdrawtool.h b/tools/drawTools/vdrawtool.h index da654fb42..e761422ee 100644 --- a/tools/drawTools/vdrawtool.h +++ b/tools/drawTools/vdrawtool.h @@ -38,8 +38,6 @@ public slots: void ChangedNameDraw(const QString oldName, const QString newName); virtual void FullUpdateFromGui(int result)=0; virtual void SetFactor(qreal factor); -signals: - void RemoveTool(QGraphicsItem *tool); protected: bool ignoreContextMenuEvent; bool ignoreFullUpdate; diff --git a/tools/modelingTools/vmodelingtool.h b/tools/modelingTools/vmodelingtool.h index ff7b4da89..014ff996d 100644 --- a/tools/modelingTools/vmodelingtool.h +++ b/tools/modelingTools/vmodelingtool.h @@ -34,8 +34,6 @@ public: inline void ignoreContextMenu(bool enable) {ignoreContextMenuEvent = enable;} public slots: virtual void FullUpdateFromGui(int result)=0; -signals: - void RemoveTool(QGraphicsItem *tool); protected: bool ignoreContextMenuEvent; bool ignoreFullUpdate; diff --git a/tools/vabstracttool.h b/tools/vabstracttool.h index 0b25f29f9..511e43f31 100644 --- a/tools/vabstracttool.h +++ b/tools/vabstracttool.h @@ -78,6 +78,7 @@ signals: void toolhaveChange(); void ChoosedTool(qint64 id, Scene::Scenes type); void FullUpdateTree(); + void RemoveTool(QGraphicsItem *tool); protected: VDomDocument *doc; const qint64 id; diff --git a/tools/vtooldetail.cpp b/tools/vtooldetail.cpp index 36dd521f6..6f0138518 100644 --- a/tools/vtooldetail.cpp +++ b/tools/vtooldetail.cpp @@ -38,150 +38,73 @@ VToolDetail::VToolDetail(VDomDocument *doc, VContainer *data, const qint64 &id, VMainGraphicsScene *scene, QGraphicsItem *parent) :VAbstractTool(doc, data, id), QGraphicsPathItem(parent), dialogDetail(QSharedPointer()), sceneDetails(scene){ VDetail detail = data->GetDetail(id); - QHash* tools = doc->getTools(); - Q_ASSERT(tools != 0); for(qint32 i = 0; i< detail.CountNode(); ++i){ switch(detail[i].getTypeTool()){ case(Tool::NodePoint):{ - VNodePoint *point = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(point != 0); - connect(point, &VNodePoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - point->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::NodeArc):{ - VNodeArc *arc = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(arc != 0); - connect(arc, &VNodeArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - arc->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::NodeSpline):{ - VNodeSpline *spl = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(spl != 0); - connect(spl, &VNodeSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - spl->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::NodeSplinePath):{ - VNodeSplinePath *splPath = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(splPath != 0); - connect(splPath, &VNodeSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - splPath->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::AlongLineTool):{ - VModelingAlongLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingAlongLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingAlongLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::ArcTool):{ - VModelingArc *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingArc::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingArc::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::BisectorTool):{ - VModelingBisector *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingBisector::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingBisector::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::EndLineTool):{ - VModelingEndLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingEndLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingEndLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::LineIntersectTool):{ - VModelingLineIntersect *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingLineIntersect::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingLineIntersect::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::LineTool):{ - VModelingLine *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingLine::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingLine::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } case(Tool::NormalTool):{ - VModelingNormal *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingNormal::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingNormal::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + InitTool(scene, detail[i]); break; } - case(Tool::PointOfContact):{ - VModelingPointOfContact *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingPointOfContact::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingPointOfContact::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::PointOfContact): + InitTool(scene, detail[i]); break; - } - case(Tool::ShoulderPointTool):{ - VModelingShoulderPoint *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingShoulderPoint::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingShoulderPoint::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::ShoulderPointTool): + InitTool(scene, detail[i]); break; - } - case(Tool::SplinePathTool):{ - VModelingSplinePath *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingSplinePath::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingSplinePath::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::SplinePathTool): + InitTool(scene, detail[i]); break; - } - case(Tool::SplineTool):{ - VModelingSpline *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingSpline::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingSpline::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::SplineTool): + InitTool(scene, detail[i]); break; - } - case(Tool::Height):{ - VModelingHeight *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingHeight::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingHeight::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::Height): + InitTool(scene, detail[i]); break; - } - case(Tool::Triangle):{ - VModelingTriangle *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingTriangle::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingTriangle::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::Triangle): + InitTool(scene, detail[i]); break; - } - case(Tool::PointOfIntersection):{ - VModelingPointOfIntersection *tool = qobject_cast(tools->value(detail[i].getId())); - Q_ASSERT(tool != 0); - connect(tool, &VModelingPointOfIntersection::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); - connect(tool, &VModelingPointOfIntersection::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); - tool->setParentItem(this); + case(Tool::PointOfIntersection): + InitTool(scene, detail[i]); break; - } default: qWarning()<<"Get wrong tool type. Ignore."; break; @@ -484,3 +407,14 @@ void VToolDetail::RefreshGeometry(){ QPainterPath path = VAbstractTool::data.ContourPath(id); this->setPath(path); } + +template +void VToolDetail::InitTool(VMainGraphicsScene *scene, const VNodeDetail &node){ + QHash* tools = doc->getTools(); + Q_ASSERT(tools != 0); + Tool *tool = qobject_cast(tools->value(node.getId())); + Q_ASSERT(tool != 0); + connect(tool, &Tool::ChoosedTool, scene, &VMainGraphicsScene::ChoosedItem); + connect(tool, &Tool::RemoveTool, scene, &VMainGraphicsScene::RemoveTool); + tool->setParentItem(this); +} diff --git a/tools/vtooldetail.h b/tools/vtooldetail.h index 6708c76a2..4a877e8e6 100644 --- a/tools/vtooldetail.h +++ b/tools/vtooldetail.h @@ -77,6 +77,8 @@ private: VMainGraphicsScene *sceneDetails; void RefreshGeometry (); void AddNode(QDomElement &domElement, VNodeDetail &node); + template + void InitTool(VMainGraphicsScene *scene, const VNodeDetail &node); }; #endif // VTOOLDETAIL_H