From cb4ee4737dbef3e097c2a0c82dd32c0ef6599a53 Mon Sep 17 00:00:00 2001 From: Benjamin Nauck Date: Fri, 17 Jan 2025 18:45:34 +0100 Subject: [PATCH] Simplify logic using freecad_dynamic_cast --- src/Gui/DemoMode.cpp | 8 +-- .../Drawing/App/FeatureViewSpreadsheet.cpp | 12 ++-- src/Mod/Fem/App/FemPostFilter.cpp | 15 ++--- src/Mod/Spreadsheet/App/Sheet.cpp | 18 ++--- src/Mod/TechDraw/Gui/QGSPage.cpp | 66 +++++++++---------- 5 files changed, 56 insertions(+), 63 deletions(-) diff --git a/src/Gui/DemoMode.cpp b/src/Gui/DemoMode.cpp index 861e1bf86f..e253246b3d 100644 --- a/src/Gui/DemoMode.cpp +++ b/src/Gui/DemoMode.cpp @@ -143,12 +143,8 @@ void DemoMode::hideEvent(QHideEvent*) Gui::View3DInventor* DemoMode::activeView() const { - Document* doc = Application::Instance->activeDocument(); - if (doc) { - MDIView* view = doc->getActiveView(); - if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { - return static_cast(view); - } + if (Document* doc = Application::Instance->activeDocument()) { + return Base::freecad_dynamic_cast(doc->getActiveView()); } return nullptr; diff --git a/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp b/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp index 024bc0889b..bf5b300e76 100644 --- a/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp +++ b/src/Mod/Drawing/App/FeatureViewSpreadsheet.cpp @@ -186,14 +186,14 @@ App::DocumentObjectExecReturn* FeatureViewSpreadsheet::execute(void) App::Property* prop = sheet->getPropertyByName(address.toString().c_str()); std::stringstream field; if (prop) { - if (prop->isDerivedFrom((App::PropertyQuantity::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + if (auto* p = Base::freecad_dynamic_cast(prop)) { + field << p->getValue(); } - else if (prop->isDerivedFrom((App::PropertyFloat::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + else if (auto p = Base::freecad_dynamic_cast(prop)) { + field << p->getValue(); } - else if (prop->isDerivedFrom((App::PropertyString::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + else if (auto p = Base::freecad_dynamic_cast(prop)) { + field << p->getValue(); } else { assert(0); diff --git a/src/Mod/Fem/App/FemPostFilter.cpp b/src/Mod/Fem/App/FemPostFilter.cpp index 7d0fd60c3b..1bb70fe426 100644 --- a/src/Mod/Fem/App/FemPostFilter.cpp +++ b/src/Mod/Fem/App/FemPostFilter.cpp @@ -468,12 +468,9 @@ void FemPostClipFilter::onChanged(const Property* prop) { if (prop == &Function) { - if (Function.getValue() - && Function.getValue()->isDerivedFrom(FemPostFunction::getClassTypeId())) { - m_clipper->SetClipFunction( - static_cast(Function.getValue())->getImplicitFunction()); - m_extractor->SetImplicitFunction( - static_cast(Function.getValue())->getImplicitFunction()); + if (auto* value = Base::freecad_dynamic_cast(Function.getValue())) { + m_clipper->SetClipFunction(value->getImplicitFunction()); + m_extractor->SetImplicitFunction(value->getImplicitFunction()); } } else if (prop == &InsideOut) { @@ -922,10 +919,8 @@ FemPostCutFilter::~FemPostCutFilter() = default; void FemPostCutFilter::onChanged(const Property* prop) { if (prop == &Function) { - if (Function.getValue() - && Function.getValue()->isDerivedFrom(FemPostFunction::getClassTypeId())) { - m_cutter->SetCutFunction( - static_cast(Function.getValue())->getImplicitFunction()); + if (auto* value = Base::freecad_dynamic_cast(Function.getValue())) { + m_cutter->SetCutFunction(value->getImplicitFunction()); } } diff --git a/src/Mod/Spreadsheet/App/Sheet.cpp b/src/Mod/Spreadsheet/App/Sheet.cpp index a9e4edd96a..2c82a184d8 100644 --- a/src/Mod/Spreadsheet/App/Sheet.cpp +++ b/src/Mod/Spreadsheet/App/Sheet.cpp @@ -329,17 +329,19 @@ bool Sheet::exportToFile(const std::string& filename, std::stringstream field; - if (prop->isDerivedFrom((PropertyQuantity::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + using Base::freecad_dynamic_cast; + + if (auto p = freecad_dynamic_cast(prop)) { + field << p->getValue(); } - else if (prop->isDerivedFrom((PropertyFloat::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + else if (auto p = freecad_dynamic_cast(prop)) { + field << p->getValue(); } - else if (prop->isDerivedFrom((PropertyInteger::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + else if (auto p = freecad_dynamic_cast(prop)) { + field << p->getValue(); } - else if (prop->isDerivedFrom((PropertyString::getClassTypeId()))) { - field << static_cast(prop)->getValue(); + else if (auto p = freecad_dynamic_cast(prop)) { + field << p->getValue(); } else { assert(0); diff --git a/src/Mod/TechDraw/Gui/QGSPage.cpp b/src/Mod/TechDraw/Gui/QGSPage.cpp index f6f59a0d94..fae504888d 100644 --- a/src/Mod/TechDraw/Gui/QGSPage.cpp +++ b/src/Mod/TechDraw/Gui/QGSPage.cpp @@ -390,57 +390,57 @@ bool QGSPage::addView(const App::DocumentObject* obj) bool QGSPage::attachView(App::DocumentObject* obj) { // Base::Console().Message("QGSP::attachView(%s)\n", obj->getNameInDocument()); - QGIView* existing = findQViewForDocObj(obj); - if (existing) + if (findQViewForDocObj(obj)) { return true; - - auto typeId(obj->getTypeId()); + } QGIView* qview(nullptr); - if (typeId.isDerivedFrom(TechDraw::DrawViewSection::getClassTypeId())) { - qview = addViewSection(static_cast(obj)); + using Base::freecad_dynamic_cast; + + if (auto o = freecad_dynamic_cast(obj)) { + qview = addViewSection(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewPart::getClassTypeId())) { - qview = addViewPart(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addViewPart(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawProjGroup::getClassTypeId())) { - qview = addProjectionGroup(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addProjectionGroup(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewCollection::getClassTypeId())) { - qview = addDrawView(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addDrawView(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewDimension::getClassTypeId())) { - qview = addViewDimension(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addViewDimension(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewBalloon::getClassTypeId())) { - qview = addViewBalloon(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addViewBalloon(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewAnnotation::getClassTypeId())) { - qview = addAnnotation(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addAnnotation(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewSymbol::getClassTypeId())) { - qview = addDrawViewSymbol(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addDrawViewSymbol(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewClip::getClassTypeId())) { - qview = addDrawViewClip(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addDrawViewClip(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewSpreadsheet::getClassTypeId())) { - qview = addDrawViewSpreadsheet(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addDrawViewSpreadsheet(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawViewImage::getClassTypeId())) { - qview = addDrawViewImage(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addDrawViewImage(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawLeaderLine::getClassTypeId())) { - qview = addViewLeader(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addViewLeader(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawRichAnno::getClassTypeId())) { - qview = addRichAnno(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addRichAnno(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawWeldSymbol::getClassTypeId())) { - qview = addWeldSymbol(static_cast(obj)); + else if (auto o = freecad_dynamic_cast(obj)) { + qview = addWeldSymbol(o); } - else if (typeId.isDerivedFrom(TechDraw::DrawHatch::getClassTypeId())) { + else if (auto o = freecad_dynamic_cast(obj)) { //Hatch is not attached like other Views (since it isn't really a View) return true; }