From a9b77de0bef8942e4399587c9201e5249342b011 Mon Sep 17 00:00:00 2001 From: pavltom Date: Mon, 4 Mar 2024 15:35:06 +0100 Subject: [PATCH] [TechDraw] Reimplement Leader Line parent linking --- src/Mod/TechDraw/App/DrawLeaderLine.h | 2 + src/Mod/TechDraw/Gui/QGILeaderLine.cpp | 19 +------ src/Mod/TechDraw/Gui/QGILeaderLine.h | 2 - src/Mod/TechDraw/Gui/QGIView.cpp | 5 -- src/Mod/TechDraw/Gui/QGIView.h | 3 - src/Mod/TechDraw/Gui/QGSPage.cpp | 63 ++------------------- src/Mod/TechDraw/Gui/QGSPage.h | 3 - src/Mod/TechDraw/Gui/ViewProviderLeader.cpp | 17 ------ src/Mod/TechDraw/Gui/ViewProviderLeader.h | 1 - src/Mod/TechDraw/Gui/ViewProviderPage.cpp | 3 - 10 files changed, 7 insertions(+), 111 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawLeaderLine.h b/src/Mod/TechDraw/App/DrawLeaderLine.h index 46f28baa34..2b91909869 100644 --- a/src/Mod/TechDraw/App/DrawLeaderLine.h +++ b/src/Mod/TechDraw/App/DrawLeaderLine.h @@ -65,6 +65,8 @@ public: Base::Vector3d getAttachPoint(); DrawView* getBaseView() const; virtual App::DocumentObject* getBaseObject() const; + App::PropertyLink *getOwnerProperty() override { return &LeaderParent; } + bool keepUpdated() override; double getScale() const override; double getBaseScale() const; diff --git a/src/Mod/TechDraw/Gui/QGILeaderLine.cpp b/src/Mod/TechDraw/Gui/QGILeaderLine.cpp index 5c313119ba..19fdc10e69 100644 --- a/src/Mod/TechDraw/Gui/QGILeaderLine.cpp +++ b/src/Mod/TechDraw/Gui/QGILeaderLine.cpp @@ -52,8 +52,7 @@ using namespace TechDraw; //************************************************************** QGILeaderLine::QGILeaderLine() - : m_parentItem(nullptr), - m_lineColor(Qt::black), + : m_lineColor(Qt::black), m_lineStyle(Qt::SolidLine), m_hasHover(false), m_saveX(0.0), @@ -169,22 +168,6 @@ void QGILeaderLine::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) QGIView::hoverLeaveEvent(event); } -void QGILeaderLine::onSourceChange(TechDraw::DrawView* newParent) -{ - // Base::Console().Message("QGILL::onSoureChange(%s)\n", newParent->getNameInDocument()); - std::string parentName = newParent->getNameInDocument(); - QGIView* qgiParent = getQGIVByName(parentName); - if (qgiParent) { - m_parentItem = qgiParent; - setParentItem(m_parentItem); - draw(); - } - else { - Base::Console().Warning("QGILL::onSourceChange - new parent %s has no QGIView\n", - parentName.c_str()); - } -} - void QGILeaderLine::setNormalColorAll() { // Base::Console().Message("QGILL::setNormalColorAll - normal color: %s\n", qPrintable(getNormalColor().name())); diff --git a/src/Mod/TechDraw/Gui/QGILeaderLine.h b/src/Mod/TechDraw/Gui/QGILeaderLine.h index 002a205ee3..4d65041068 100644 --- a/src/Mod/TechDraw/Gui/QGILeaderLine.h +++ b/src/Mod/TechDraw/Gui/QGILeaderLine.h @@ -100,7 +100,6 @@ public: public Q_SLOTS: void onLineEditFinished(QPointF tipDisplace, std::vector points);//QGEPath is finished editing points - void onSourceChange(TechDraw::DrawView* newParent) override; Q_SIGNALS: void editComplete();//tell caller that edit session is finished @@ -121,7 +120,6 @@ protected: private: std::vector m_pathPoints; - QGraphicsItem* m_parentItem; QGIPrimPath* m_line;//actual leader line QColor m_lineColor; Qt::PenStyle m_lineStyle; diff --git a/src/Mod/TechDraw/Gui/QGIView.cpp b/src/Mod/TechDraw/Gui/QGIView.cpp index fbfe65335e..b327c4c031 100644 --- a/src/Mod/TechDraw/Gui/QGIView.cpp +++ b/src/Mod/TechDraw/Gui/QGIView.cpp @@ -103,11 +103,6 @@ QGIView::QGIView() m_lock->hide(); } -void QGIView::onSourceChange(TechDraw::DrawView* newParent) -{ - Q_UNUSED(newParent); -} - void QGIView::isVisible(bool state) { auto feat = getViewObject(); diff --git a/src/Mod/TechDraw/Gui/QGIView.h b/src/Mod/TechDraw/Gui/QGIView.h index 77c2ca7a4f..16afe9328b 100644 --- a/src/Mod/TechDraw/Gui/QGIView.h +++ b/src/Mod/TechDraw/Gui/QGIView.h @@ -163,9 +163,6 @@ public: void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; -public Q_SLOTS: - virtual void onSourceChange(TechDraw::DrawView* newParent); - protected: QGIView* getQGIVByName(std::string name); diff --git a/src/Mod/TechDraw/Gui/QGSPage.cpp b/src/Mod/TechDraw/Gui/QGSPage.cpp index cb27d018de..3f722b8eb0 100644 --- a/src/Mod/TechDraw/Gui/QGSPage.cpp +++ b/src/Mod/TechDraw/Gui/QGSPage.cpp @@ -130,7 +130,6 @@ void QGSPage::addChildrenToPage() //therefore we need to make sure parentage of the graphics representation is set properly. bit of a kludge. setDimensionGroups(); setBalloonGroups(); - setLeaderGroups(); App::DocumentObject* obj = m_vpPage->getDrawPage()->Template.getValue(); auto pageTemplate(dynamic_cast(obj)); @@ -606,29 +605,11 @@ void QGSPage::addDimToParent(QGIViewDimension* dim, QGIView* parent) QGIView* QGSPage::addViewLeader(TechDraw::DrawLeaderLine* leaderFeat) { - // Base::Console().Message("QGSP::addViewLeader(%s)\n", leader->getNameInDocument()); - QGILeaderLine* leaderGroup = new QGILeaderLine(); - addItem(leaderGroup); + QGILeaderLine *leaderView = new QGILeaderLine; + leaderView->setViewFeature(leaderFeat); - leaderGroup->setLeaderFeature(leaderFeat); - - QGIView* parent = nullptr; - parent = findParent(leaderGroup); - - if (parent) { - addLeaderToParent(leaderGroup, parent); - } - - leaderGroup->updateView(true); - - return leaderGroup; -} - -void QGSPage::addLeaderToParent(QGILeaderLine* lead, QGIView* parent) -{ - // Base::Console().Message("QGSP::addLeaderToParent()\n"); - parent->addToGroup(lead); - lead->setZValue(ZVALUE::DIMENSION); + addQView(leaderView); + return leaderView; } QGIView* QGSPage::addRichAnno(TechDraw::DrawRichAnno* richFeat) @@ -698,25 +679,6 @@ void QGSPage::setBalloonGroups(void) } } -void QGSPage::setLeaderGroups(void) -{ - // Base::Console().Message("QGSP::setLeaderGroups()\n"); - const std::vector& allItems = getViews(); - int leadItemType = QGraphicsItem::UserType + 232; - - //make sure that qgileader belongs to correct parent. - //quite possibly redundant - for (auto& item : allItems) { - if (item->type() == leadItemType && !item->group()) { - QGIView* parent = findParent(item); - if (parent) { - QGILeaderLine* lead = dynamic_cast(item); - addLeaderToParent(lead, parent); - } - } - } -} - //! find the graphic for a DocumentObject QGIView* QGSPage::findQViewForDocObj(App::DocumentObject* obj) const { @@ -799,23 +761,6 @@ QGIView* QGSPage::findParent(QGIView* view) const } } - //If type is LeaderLine we check LeaderParent - TechDraw::DrawLeaderLine* lead = nullptr; - lead = dynamic_cast(myFeat); - - if (lead) { - App::DocumentObject* obj = lead->LeaderParent.getValue(); - if (obj) { - std::string parentName = obj->getNameInDocument(); - for (std::vector::const_iterator it = qviews.begin(); it != qviews.end(); - ++it) { - if (strcmp((*it)->getViewName(), parentName.c_str()) == 0) { - return *it; - } - } - } - } - // Check if part of view collection for (std::vector::const_iterator it = qviews.begin(); it != qviews.end(); ++it) { QGIViewCollection* grp = nullptr; diff --git a/src/Mod/TechDraw/Gui/QGSPage.h b/src/Mod/TechDraw/Gui/QGSPage.h index bf49aeb6d7..f15280ba2a 100644 --- a/src/Mod/TechDraw/Gui/QGSPage.h +++ b/src/Mod/TechDraw/Gui/QGSPage.h @@ -65,7 +65,6 @@ class QGIViewDimension; class QGITemplate; class ViewProviderPage; class QGIViewBalloon; -class QGILeaderLine; class QGITile; class TechDrawGuiExport QGSPage: public QGraphicsScene @@ -111,7 +110,6 @@ public: void createBalloon(QPointF origin, TechDraw::DrawView* parent); void addDimToParent(QGIViewDimension* dim, QGIView* parent); - void addLeaderToParent(QGILeaderLine* lead, QGIView* parent); std::vector getViews() const; @@ -139,7 +137,6 @@ public: void setDimensionGroups(); void setBalloonGroups(); - void setLeaderGroups(); protected: QColor getBackgroundColor(); diff --git a/src/Mod/TechDraw/Gui/ViewProviderLeader.cpp b/src/Mod/TechDraw/Gui/ViewProviderLeader.cpp index 5adefb65f9..e67ea9693d 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderLeader.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderLeader.cpp @@ -102,23 +102,6 @@ bool ViewProviderLeader::doubleClicked() return true; } -void ViewProviderLeader::updateData(const App::Property* p) -{ - if (!getFeature()->isRestoring()) { - if (p == &getFeature()->LeaderParent) { - App::DocumentObject* docObj = getFeature()->LeaderParent.getValue(); - TechDraw::DrawView* dv = dynamic_cast(docObj); - if (dv) { - QGIView* qgiv = getQView(); - if (qgiv) { - qgiv->onSourceChange(dv); - } - } - } - } - ViewProviderDrawingView::updateData(p); -} - void ViewProviderLeader::onChanged(const App::Property* p) { if ((p == &Color) || diff --git a/src/Mod/TechDraw/Gui/ViewProviderLeader.h b/src/Mod/TechDraw/Gui/ViewProviderLeader.h index 31d78ce504..32b9199347 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderLeader.h +++ b/src/Mod/TechDraw/Gui/ViewProviderLeader.h @@ -55,7 +55,6 @@ public: App::PropertyColor Color; bool useNewSelectionModel() const override {return false;} - void updateData(const App::Property*) override; void onChanged(const App::Property* p) override; bool setEdit(int ModNum) override; bool doubleClicked() override; diff --git a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp index 5c69e056ee..2a81118880 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPage.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPage.cpp @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -392,7 +391,6 @@ std::vector ViewProviderPage::claimChildren(void) const // for Page, valid children are any View except: DrawProjGroupItem // DrawViewDimension // DrawViewBalloon - // DrawLeaderLine // any FeatuerView in a DrawViewClip // DrawHatch // DrawWeldSymbol @@ -415,7 +413,6 @@ std::vector ViewProviderPage::claimChildren(void) const || docObj->isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawHatch::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId()) - || docObj->isDerivedFrom(TechDraw::DrawLeaderLine::getClassTypeId()) || docObj->isDerivedFrom(TechDraw::DrawWeldSymbol::getClassTypeId()) || (featView && featView->isInClip())) continue;