From 12ec0dd60d94b8ffb440945fab606a60ef7501f1 Mon Sep 17 00:00:00 2001 From: Aussiemon <1407091-Aussiemon@users.noreply.gitlab.com> Date: Fri, 23 Jan 2026 01:14:37 -0700 Subject: [PATCH] Fix bad dynamic cast in subview --- apps/opencs/view/tools/reporttable.hpp | 3 +++ apps/opencs/view/tools/searchsubview.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/opencs/view/tools/reporttable.hpp b/apps/opencs/view/tools/reporttable.hpp index 25f8d1b017..6f94b0c5e9 100644 --- a/apps/opencs/view/tools/reporttable.hpp +++ b/apps/opencs/view/tools/reporttable.hpp @@ -86,6 +86,9 @@ namespace CSVTools /// \return rows in the original model std::vector getReplaceIndices(bool selection) const; + /// Return underlying report model + CSMTools::ReportModel* getReportModel() const { return mModel; } + /// \param index row in the original model void flagAsReplaced(int index); diff --git a/apps/opencs/view/tools/searchsubview.cpp b/apps/opencs/view/tools/searchsubview.cpp index 98fd97e7ae..c4dbd8e6f7 100644 --- a/apps/opencs/view/tools/searchsubview.cpp +++ b/apps/opencs/view/tools/searchsubview.cpp @@ -29,7 +29,7 @@ void CSVTools::SearchSubView::replace(bool selection) std::string replace = mSearchBox.getReplaceText(); - const CSMTools::ReportModel& model = dynamic_cast(*mTable->model()); + const CSMTools::ReportModel* model = mTable->getReportModel(); bool autoDelete = CSMPrefs::get()["Search & Replace"]["auto-delete"].isTrue(); @@ -40,7 +40,7 @@ void CSVTools::SearchSubView::replace(bool selection) // in a single string. for (std::vector::const_reverse_iterator iter(indices.rbegin()); iter != indices.rend(); ++iter) { - const CSMWorld::UniversalId& id = model.getUniversalId(*iter); + const CSMWorld::UniversalId& id = model->getUniversalId(*iter); CSMWorld::UniversalId::Type type = CSMWorld::UniversalId::getParentType(id.getType()); @@ -52,7 +52,7 @@ void CSVTools::SearchSubView::replace(bool selection) currentTable = table; } - std::string hint = model.getHint(*iter); + std::string hint = model->getHint(*iter); if (search.verify(mDocument, table, id, hint)) { @@ -113,7 +113,7 @@ CSVTools::SearchSubView::SearchSubView(const CSMWorld::UniversalId& id, CSMDoc:: void CSVTools::SearchSubView::setEditLock(bool locked) { mLocked = locked; - mSearchBox.setEditLock(locked); + mSearchBox.setEditLock(locked || mSearchBox.hasInvalidText()); } void CSVTools::SearchSubView::setStatusBar(bool show)