From ef357aa07acee4253744fab2853dc23b992fa2c0 Mon Sep 17 00:00:00 2001 From: Kacper Donat Date: Fri, 25 Apr 2025 00:07:31 +0200 Subject: [PATCH] Gui: Use freecad_cast whenever possible --- src/Gui/ActiveObjectList.cpp | 2 +- src/Gui/CommandDoc.cpp | 2 +- src/Gui/CommandFeat.cpp | 2 +- src/Gui/CommandLink.cpp | 2 +- src/Gui/CommandView.cpp | 8 ++++---- src/Gui/Dialogs/DlgExpressionInput.cpp | 4 ++-- src/Gui/Document.cpp | 24 ++++++++++++------------ src/Gui/DocumentObserver.cpp | 2 +- src/Gui/Selection/SelectionObject.h | 4 ++-- src/Gui/Tree.cpp | 16 ++++++++-------- src/Gui/View3DInventorSelection.cpp | 6 +++--- src/Gui/ViewProviderDocumentObject.h | 2 +- src/Gui/WorkbenchFactory.cpp | 2 +- 13 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/Gui/ActiveObjectList.cpp b/src/Gui/ActiveObjectList.cpp index 1690e116d3..0c0a5693c6 100644 --- a/src/Gui/ActiveObjectList.cpp +++ b/src/Gui/ActiveObjectList.cpp @@ -62,7 +62,7 @@ void ActiveObjectList::setHighlight(const ObjectInfo &info, HighlightMode mode, auto obj = getObject(info, false); if (!obj) return; - auto vp = dynamic_cast(Application::Instance->getViewProvider(obj)); + auto vp = freecad_cast(Application::Instance->getViewProvider(obj)); if (!vp) return; diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index a5b7e20709..bec6a42af0 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -1346,7 +1346,7 @@ void StdCmdDelete::activated(int iMsg) auto editDoc = Application::Instance->editDocument(); ViewProviderDocumentObject *vpedit = nullptr; if(editDoc) - vpedit = dynamic_cast(editDoc->getInEdit()); + vpedit = freecad_cast(editDoc->getInEdit()); if(vpedit && !vpedit->acceptDeletionsInEdit()) { for(auto &sel : Selection().getSelectionEx(editDoc->getDocument()->getName())) { if(sel.getObject() == vpedit->getObject()) { diff --git a/src/Gui/CommandFeat.cpp b/src/Gui/CommandFeat.cpp index 8d8bcae6c3..4ffafc7c40 100644 --- a/src/Gui/CommandFeat.cpp +++ b/src/Gui/CommandFeat.cpp @@ -98,7 +98,7 @@ void StdCmdRandomColor::activated(int iMsg) // NOLINTEND auto objColor = Base::Color(fRed, fGrn, fBlu); - auto vpLink = dynamic_cast(view); + auto vpLink = freecad_cast(view); if (vpLink) { if (!vpLink->OverrideMaterial.getValue()) { vpLink->OverrideMaterial.setValue(true); diff --git a/src/Gui/CommandLink.cpp b/src/Gui/CommandLink.cpp index 618861a147..d0c1baea59 100644 --- a/src/Gui/CommandLink.cpp +++ b/src/Gui/CommandLink.cpp @@ -755,7 +755,7 @@ void StdCmdLinkSelectLinked::activated(int) Selection().addSelection(linked->getDocument()->getName(),linked->getNameInDocument(),subname.c_str()); auto doc = Application::Instance->getDocument(linked->getDocument()); if(doc) { - auto vp = dynamic_cast(Application::Instance->getViewProvider(linked)); + auto vp = freecad_cast(Application::Instance->getViewProvider(linked)); doc->setActiveView(vp); } } else { diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 4af26bb8cf..42d6fcd2cd 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -2865,7 +2865,7 @@ static std::vector getBoxSelection( if(!vis) continue; - auto svp = dynamic_cast(Application::Instance->getViewProvider(sobj)); + auto svp = freecad_cast(Application::Instance->getViewProvider(sobj)); if(!svp) continue; @@ -2928,7 +2928,7 @@ static void doSelect(void* ud, SoEventCallback * cb) if(App::GeoFeatureGroupExtension::getGroupOfObject(obj)) continue; - auto vp = dynamic_cast(Application::Instance->getViewProvider(obj)); + auto vp = freecad_cast(Application::Instance->getViewProvider(obj)); if (!vp || !vp->isVisible()) continue; @@ -3110,7 +3110,7 @@ bool StdCmdTreeSelectAllInstances::isActive() auto obj = sels[0].getObject(); if(!obj || !obj->isAttachedToDocument()) return false; - return dynamic_cast( + return freecad_cast( Application::Instance->getViewProvider(obj)) != nullptr; } @@ -3123,7 +3123,7 @@ void StdCmdTreeSelectAllInstances::activated(int iMsg) auto obj = sels[0].getObject(); if(!obj || !obj->isAttachedToDocument()) return; - auto vpd = dynamic_cast( + auto vpd = freecad_cast( Application::Instance->getViewProvider(obj)); if(!vpd) return; diff --git a/src/Gui/Dialogs/DlgExpressionInput.cpp b/src/Gui/Dialogs/DlgExpressionInput.cpp index b6e676da0f..336bbbd2e5 100644 --- a/src/Gui/Dialogs/DlgExpressionInput.cpp +++ b/src/Gui/Dialogs/DlgExpressionInput.cpp @@ -487,8 +487,8 @@ void DlgExpressionInput::acceptWithVarSet() // The value of the property is going to be the value that was originally // meant to be the value for the property that this dialog is targeting. Expression* exprSimplfied = expression->simplify(); - auto ne = dynamic_cast(exprSimplfied); - auto se = dynamic_cast(exprSimplfied); + auto ne = freecad_cast(exprSimplfied); + auto se = freecad_cast(exprSimplfied); if (ne) { // the value is a number: directly assign it to the property instead of // making it an expression in the variable set diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index 193e852ff5..bbfcb7f0fb 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -151,7 +151,7 @@ struct DocumentP static ViewProviderDocumentObject* throwIfCastFails(ViewProvider* p) { - if (auto vp = dynamic_cast(p)) { + if (auto vp = freecad_cast(p)) { return vp; } @@ -223,7 +223,7 @@ struct DocumentP { auto svp = vp; if (sobj != obj) { - svp = dynamic_cast( + svp = freecad_cast( Application::Instance->getViewProvider(sobj)); if (!svp) { std::stringstream str; @@ -310,7 +310,7 @@ struct DocumentP void signalEditMode() { - if (auto vpd = dynamic_cast(_editViewProvider)) { + if (auto vpd = freecad_cast(_editViewProvider)) { vpd->getDocument()->signalInEdit(*vpd); } } @@ -404,7 +404,7 @@ private: const char* subname) { FC_LOG("deduced editing reference " << parentObj->getFullName() << '.' << subname); - auto vp = dynamic_cast( + auto vp = freecad_cast( Application::Instance->getViewProvider(parentObj)); if (!vp || !vp->getDocument()) { throw Base::RuntimeError("invalid view provider for parent object"); @@ -611,7 +611,7 @@ View3DInventor* Document::openEditingView3D(const ViewProviderDocumentObject* vp View3DInventor* Document::openEditingView3D(const App::DocumentObject* obj) { - if (auto vp = dynamic_cast( + if (auto vp = freecad_cast( Application::Instance->getViewProvider(obj))) { return openEditingView3D(vp); } @@ -1022,8 +1022,8 @@ void Document::slotDeletedObject(const App::DocumentObject& Obj) void Document::beforeDelete() { auto editDoc = Application::Instance->editDocument(); if(editDoc) { - auto vp = dynamic_cast(editDoc->d->_editViewProvider); - auto vpp = dynamic_cast(editDoc->d->_editViewProviderParent); + auto vp = freecad_cast(editDoc->d->_editViewProvider); + auto vpp = freecad_cast(editDoc->d->_editViewProviderParent); if(editDoc == this || (vp && vp->getDocument()==this) || (vpp && vpp->getDocument()==this)) @@ -1173,7 +1173,7 @@ void Document::slotSkipRecompute(const App::Document& doc, const std::vectoreditDocument(); if(editDoc) { - auto vp = dynamic_cast(editDoc->getInEdit()); + auto vp = freecad_cast(editDoc->getInEdit()); if(vp) obj = vp->getObject(); } @@ -1690,7 +1690,7 @@ void Document::RestoreDocFile(Base::Reader &reader) treeRank = int(localreader->getAttributeAsInteger("treeRank")); } - auto pObj = dynamic_cast(getViewProviderByName(name.c_str())); + auto pObj = freecad_cast(getViewProviderByName(name.c_str())); // check if this feature has been registered if (pObj) { pObj->Restore(*localreader); @@ -1742,7 +1742,7 @@ void Document::slotStartRestoreDocument(const App::Document& doc) } void Document::slotFinishRestoreObject(const App::DocumentObject &obj) { - auto vpd = dynamic_cast(getViewProvider(&obj)); + auto vpd = freecad_cast(getViewProvider(&obj)); if(vpd) { vpd->setStatus(Gui::isRestoring,false); vpd->finishRestoring(); @@ -1961,7 +1961,7 @@ void Document::slotFinishImportObjects(const std::vector & // auto vp = getViewProvider(obj); // if(!vp) continue; // vp->setStatus(Gui::isRestoring,false); - // auto vpd = dynamic_cast(vp); + // auto vpd = freecad_cast(vp); // if(vpd) vpd->finishRestoring(); // } } @@ -2422,7 +2422,7 @@ MDIView *Document::setActiveView(const ViewProviderDocumentObject* vp, Base::Typ else { auto linked = obj->getLinkedObject(true); if (linked != obj) { - auto vpLinked = dynamic_cast( + auto vpLinked = freecad_cast( Application::Instance->getViewProvider(linked)); if (vpLinked) { view = vpLinked->getMDIView(); diff --git a/src/Gui/DocumentObserver.cpp b/src/Gui/DocumentObserver.cpp index 8d698db764..10c2e84147 100644 --- a/src/Gui/DocumentObserver.cpp +++ b/src/Gui/DocumentObserver.cpp @@ -199,7 +199,7 @@ ViewProviderDocumentObject* ViewProviderT::getViewProvider() const ViewProviderDocumentObject* obj = nullptr; Document* doc = getDocument(); if (doc) { - obj = dynamic_cast(doc->getViewProviderByName(object.c_str())); + obj = freecad_cast(doc->getViewProviderByName(object.c_str())); } return obj; } diff --git a/src/Gui/Selection/SelectionObject.h b/src/Gui/Selection/SelectionObject.h index 700eaaf2f8..508d56c506 100644 --- a/src/Gui/Selection/SelectionObject.h +++ b/src/Gui/Selection/SelectionObject.h @@ -74,12 +74,12 @@ public: const App::DocumentObject* getObject() const; /// returns the selected DocumentObject or NULL if the object is already deleted template - const T* getObject() const { return dynamic_cast(getObject()); }; + const T* getObject() const { return freecad_cast(getObject()); }; /// returns the selected DocumentObject or NULL if the object is already deleted App::DocumentObject *getObject(); /// returns the selected DocumentObject if it is of T type or null otherwise template - T* getObject() { return dynamic_cast(getObject()); } + T* getObject() { return freecad_cast(getObject()); } /// check the selected object is a special type or derived of bool isObjectTypeOf(const Base::Type& typeId) const; diff --git a/src/Gui/Tree.cpp b/src/Gui/Tree.cpp index a567b275f8..5e7ee7bf83 100644 --- a/src/Gui/Tree.cpp +++ b/src/Gui/Tree.cpp @@ -1582,7 +1582,7 @@ void TreeWidget::selectAllLinks(App::DocumentObject* obj) { TREE_ERR("invalid linked object"); continue; } - auto vp = dynamic_cast( + auto vp = freecad_cast( Application::Instance->getViewProvider(link)); if (!vp) { TREE_ERR("invalid view provider of the linked object"); @@ -2198,7 +2198,7 @@ bool TreeWidget::dropInDocument(QDropEvent* event, TargetItemInfo& targetInfo, auto doc = App::GetApplication().getDocument(info.doc.c_str()); if (!doc) continue; auto obj = doc->getObject(info.obj.c_str()); - auto vpc = dynamic_cast(Application::Instance->getViewProvider(obj)); + auto vpc = freecad_cast(Application::Instance->getViewProvider(obj)); if (!vpc) { FC_WARN("Cannot find dragging object " << info.obj); continue; @@ -2247,7 +2247,7 @@ bool TreeWidget::dropInDocument(QDropEvent* event, TargetItemInfo& targetInfo, continue; } auto parent = parentDoc->getObject(info.parent.c_str()); - auto vpp = dynamic_cast(Application::Instance->getViewProvider(parent)); + auto vpp = freecad_cast(Application::Instance->getViewProvider(parent)); if (!vpp) { FC_WARN("Cannot find dragging object's parent " << info.parent); continue; @@ -2496,7 +2496,7 @@ bool TreeWidget::dropInObject(QDropEvent* event, TargetItemInfo& targetInfo, continue; } auto obj = doc->getObject(info.obj.c_str()); - auto vpc = dynamic_cast(Application::Instance->getViewProvider(obj)); + auto vpc = freecad_cast(Application::Instance->getViewProvider(obj)); if (!vpc) { FC_WARN("Cannot find dragging object " << info.obj); continue; @@ -2507,7 +2507,7 @@ bool TreeWidget::dropInObject(QDropEvent* event, TargetItemInfo& targetInfo, auto parentDoc = App::GetApplication().getDocument(info.parentDoc.c_str()); if (parentDoc) { auto parent = parentDoc->getObject(info.parent.c_str()); - vpp = dynamic_cast(Application::Instance->getViewProvider(parent)); + vpp = freecad_cast(Application::Instance->getViewProvider(parent)); } if (!vpp) { FC_WARN("Cannot find dragging object's parent " << info.parent); @@ -2819,7 +2819,7 @@ void TreeWidget::sortDroppedObjects(TargetItemInfo& targetInfo, std::vector(Application::Instance->getViewProvider(sortedObjList[i])); + auto vp = freecad_cast(Application::Instance->getViewProvider(sortedObjList[i])); vp->setTreeRank(i); } @@ -3871,7 +3871,7 @@ void DocumentItem::slotInEdit(const Gui::ViewProviderDocumentObject& v) std::string subname; auto vp = doc->getInEdit(&parentVp, &subname); if (!parentVp) - parentVp = dynamic_cast(vp); + parentVp = freecad_cast(vp); if (parentVp) getTree()->editingItem = findItemByObject(true, parentVp->getObject(), subname.c_str()); } @@ -4260,7 +4260,7 @@ int DocumentItem::findRootIndex(App::DocumentObject* childObj) { return vp->getTreeRank(); }; - auto vpc = dynamic_cast(Application::Instance->getViewProvider(childObj)); + auto vpc = freecad_cast(Application::Instance->getViewProvider(childObj)); int childTreeRank = getTreeRank(vpc); // find the last item diff --git a/src/Gui/View3DInventorSelection.cpp b/src/Gui/View3DInventorSelection.cpp index d3fa5008a0..8f144856b5 100644 --- a/src/Gui/View3DInventorSelection.cpp +++ b/src/Gui/View3DInventorSelection.cpp @@ -158,7 +158,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason) if(objs.find(key.c_str())!=objs.end()) return; - auto vp = dynamic_cast( + auto vp = freecad_cast( Application::Instance->getViewProvider(obj)); if(!vp || !vp->isSelectable() || !vp->isShow()) return; @@ -168,7 +168,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason) if(!sobj || !sobj->isAttachedToDocument()) return; if(sobj!=obj) { - svp = dynamic_cast( + svp = freecad_cast( Application::Instance->getViewProvider(sobj)); if(!svp || !svp->isSelectable()) return; @@ -220,7 +220,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason) break; } - grpVp = dynamic_cast( + grpVp = freecad_cast( Application::Instance->getViewProvider(grp)); if (!grpVp) { break; diff --git a/src/Gui/ViewProviderDocumentObject.h b/src/Gui/ViewProviderDocumentObject.h index e325142b70..41a5cf3417 100644 --- a/src/Gui/ViewProviderDocumentObject.h +++ b/src/Gui/ViewProviderDocumentObject.h @@ -94,7 +94,7 @@ public: App::DocumentObject *getObject() const {return pcObject;} /// Get the object of this ViewProvider object as specified type template - T *getObject() const { return dynamic_cast(pcObject); } + T *getObject() const { return freecad_cast(pcObject); } /// Asks the view provider if the given object can be deleted. bool canDelete(App::DocumentObject* obj) const override; /// Ask the view provider if it accepts object deletions while in edit diff --git a/src/Gui/WorkbenchFactory.cpp b/src/Gui/WorkbenchFactory.cpp index c2eeaa7662..2025322cee 100644 --- a/src/Gui/WorkbenchFactory.cpp +++ b/src/Gui/WorkbenchFactory.cpp @@ -46,7 +46,7 @@ void WorkbenchFactoryInst::destruct () Workbench* WorkbenchFactoryInst::createWorkbench ( const char* sName ) const { auto obj = (Workbench*)Produce( sName ); - auto wb = dynamic_cast(obj); + auto wb = freecad_cast(obj); if (!wb) { delete obj; // delete the unknown object as no workbench object return nullptr;