Gui: Use freecad_cast whenever possible

This commit is contained in:
Kacper Donat
2025-04-25 00:07:31 +02:00
committed by Benjamin Nauck
parent 585d277e49
commit ef357aa07a
13 changed files with 38 additions and 38 deletions

View File

@@ -62,7 +62,7 @@ void ActiveObjectList::setHighlight(const ObjectInfo &info, HighlightMode mode,
auto obj = getObject(info, false);
if (!obj)
return;
auto vp = dynamic_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(obj));
auto vp = freecad_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(obj));
if (!vp)
return;

View File

@@ -1346,7 +1346,7 @@ void StdCmdDelete::activated(int iMsg)
auto editDoc = Application::Instance->editDocument();
ViewProviderDocumentObject *vpedit = nullptr;
if(editDoc)
vpedit = dynamic_cast<ViewProviderDocumentObject*>(editDoc->getInEdit());
vpedit = freecad_cast<ViewProviderDocumentObject*>(editDoc->getInEdit());
if(vpedit && !vpedit->acceptDeletionsInEdit()) {
for(auto &sel : Selection().getSelectionEx(editDoc->getDocument()->getName())) {
if(sel.getObject() == vpedit->getObject()) {

View File

@@ -98,7 +98,7 @@ void StdCmdRandomColor::activated(int iMsg)
// NOLINTEND
auto objColor = Base::Color(fRed, fGrn, fBlu);
auto vpLink = dynamic_cast<ViewProviderLink*>(view);
auto vpLink = freecad_cast<ViewProviderLink*>(view);
if (vpLink) {
if (!vpLink->OverrideMaterial.getValue()) {
vpLink->OverrideMaterial.setValue(true);

View File

@@ -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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(linked));
auto vp = freecad_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(linked));
doc->setActiveView(vp);
}
} else {

View File

@@ -2865,7 +2865,7 @@ static std::vector<std::string> getBoxSelection(
if(!vis)
continue;
auto svp = dynamic_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(sobj));
auto svp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(obj));
auto vp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(
return freecad_cast<ViewProviderDocumentObject*>(
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<ViewProviderDocumentObject*>(
auto vpd = freecad_cast<ViewProviderDocumentObject*>(
Application::Instance->getViewProvider(obj));
if(!vpd)
return;

View File

@@ -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<NumberExpression*>(exprSimplfied);
auto se = dynamic_cast<StringExpression*>(exprSimplfied);
auto ne = freecad_cast<NumberExpression*>(exprSimplfied);
auto se = freecad_cast<StringExpression*>(exprSimplfied);
if (ne) {
// the value is a number: directly assign it to the property instead of
// making it an expression in the variable set

View File

@@ -151,7 +151,7 @@ struct DocumentP
static ViewProviderDocumentObject* throwIfCastFails(ViewProvider* p)
{
if (auto vp = dynamic_cast<ViewProviderDocumentObject*>(p)) {
if (auto vp = freecad_cast<ViewProviderDocumentObject*>(p)) {
return vp;
}
@@ -223,7 +223,7 @@ struct DocumentP
{
auto svp = vp;
if (sobj != obj) {
svp = dynamic_cast<ViewProviderDocumentObject*>(
svp = freecad_cast<ViewProviderDocumentObject*>(
Application::Instance->getViewProvider(sobj));
if (!svp) {
std::stringstream str;
@@ -310,7 +310,7 @@ struct DocumentP
void signalEditMode()
{
if (auto vpd = dynamic_cast<ViewProviderDocumentObject*>(_editViewProvider)) {
if (auto vpd = freecad_cast<ViewProviderDocumentObject*>(_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<ViewProviderDocumentObject*>(
auto vp = freecad_cast<ViewProviderDocumentObject*>(
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<ViewProviderDocumentObject*>(
if (auto vp = freecad_cast<ViewProviderDocumentObject*>(
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<ViewProviderDocumentObject*>(editDoc->d->_editViewProvider);
auto vpp = dynamic_cast<ViewProviderDocumentObject*>(editDoc->d->_editViewProviderParent);
auto vp = freecad_cast<ViewProviderDocumentObject*>(editDoc->d->_editViewProvider);
auto vpp = freecad_cast<ViewProviderDocumentObject*>(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::vector<App
App::DocumentObject *obj = nullptr;
auto editDoc = Application::Instance->editDocument();
if(editDoc) {
auto vp = dynamic_cast<ViewProviderDocumentObject*>(editDoc->getInEdit());
auto vp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(getViewProviderByName(name.c_str()));
auto pObj = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(getViewProvider(&obj));
auto vpd = freecad_cast<ViewProviderDocumentObject*>(getViewProvider(&obj));
if(vpd) {
vpd->setStatus(Gui::isRestoring,false);
vpd->finishRestoring();
@@ -1961,7 +1961,7 @@ void Document::slotFinishImportObjects(const std::vector<App::DocumentObject*> &
// auto vp = getViewProvider(obj);
// if(!vp) continue;
// vp->setStatus(Gui::isRestoring,false);
// auto vpd = dynamic_cast<ViewProviderDocumentObject*>(vp);
// auto vpd = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(
auto vpLinked = freecad_cast<ViewProviderDocumentObject*>(
Application::Instance->getViewProvider(linked));
if (vpLinked) {
view = vpLinked->getMDIView();

View File

@@ -199,7 +199,7 @@ ViewProviderDocumentObject* ViewProviderT::getViewProvider() const
ViewProviderDocumentObject* obj = nullptr;
Document* doc = getDocument();
if (doc) {
obj = dynamic_cast<ViewProviderDocumentObject*>(doc->getViewProviderByName(object.c_str()));
obj = freecad_cast<ViewProviderDocumentObject*>(doc->getViewProviderByName(object.c_str()));
}
return obj;
}

View File

@@ -74,12 +74,12 @@ public:
const App::DocumentObject* getObject() const;
/// returns the selected DocumentObject or NULL if the object is already deleted
template <class T>
const T* getObject() const { return dynamic_cast<T*>(getObject()); };
const T* getObject() const { return freecad_cast<T*>(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 <class T>
T* getObject() { return dynamic_cast<T*>(getObject()); }
T* getObject() { return freecad_cast<T*>(getObject()); }
/// check the selected object is a special type or derived of
bool isObjectTypeOf(const Base::Type& typeId) const;

View File

@@ -1582,7 +1582,7 @@ void TreeWidget::selectAllLinks(App::DocumentObject* obj) {
TREE_ERR("invalid linked object");
continue;
}
auto vp = dynamic_cast<ViewProviderDocumentObject*>(
auto vp = freecad_cast<ViewProviderDocumentObject*>(
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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(obj));
auto vpc = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(parent));
auto vpp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(obj));
auto vpc = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(parent));
vpp = freecad_cast<ViewProviderDocumentObject*>(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<App:
// Then we set the tree rank
for (size_t i = 0; i < sortedObjList.size(); ++i) {
auto vp = dynamic_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(sortedObjList[i]));
auto vp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(vp);
parentVp = freecad_cast<ViewProviderDocumentObject*>(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<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(childObj));
auto vpc = freecad_cast<ViewProviderDocumentObject*>(Application::Instance->getViewProvider(childObj));
int childTreeRank = getTreeRank(vpc);
// find the last item

View File

@@ -158,7 +158,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason)
if(objs.find(key.c_str())!=objs.end())
return;
auto vp = dynamic_cast<ViewProviderDocumentObject*>(
auto vp = freecad_cast<ViewProviderDocumentObject*>(
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<ViewProviderDocumentObject*>(
svp = freecad_cast<ViewProviderDocumentObject*>(
Application::Instance->getViewProvider(sobj));
if(!svp || !svp->isSelectable())
return;
@@ -220,7 +220,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges &Reason)
break;
}
grpVp = dynamic_cast<ViewProviderDocumentObject*>(
grpVp = freecad_cast<ViewProviderDocumentObject*>(
Application::Instance->getViewProvider(grp));
if (!grpVp) {
break;

View File

@@ -94,7 +94,7 @@ public:
App::DocumentObject *getObject() const {return pcObject;}
/// Get the object of this ViewProvider object as specified type
template <class T>
T *getObject() const { return dynamic_cast<T*>(pcObject); }
T *getObject() const { return freecad_cast<T*>(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

View File

@@ -46,7 +46,7 @@ void WorkbenchFactoryInst::destruct ()
Workbench* WorkbenchFactoryInst::createWorkbench ( const char* sName ) const
{
auto obj = (Workbench*)Produce( sName );
auto wb = dynamic_cast<Workbench*>(obj);
auto wb = freecad_cast<Workbench*>(obj);
if (!wb) {
delete obj; // delete the unknown object as no workbench object
return nullptr;