From c92fe4e3688b54552466a9f44a951b30f2807084 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 21 Jul 2019 17:51:29 +0200 Subject: [PATCH] eliminate some bad old-style casts which hide an obscure error --- src/Gui/MainWindow.cpp | 2 +- src/Gui/ReportView.cpp | 42 ++++++++++++++++++++++++------------------ src/Gui/ReportView.h | 6 +++--- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index fd46be7e44..e22247bf78 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -400,7 +400,7 @@ MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags f) pcReport->setObjectName (QString::fromLatin1(QT_TRANSLATE_NOOP("QDockWidget","Report view"))); pDockMgr->registerDockWindow("Std_ReportView", pcReport); - ReportOutputObserver* rvObserver = new ReportOutputObserver((QDockWidget*)pcReport->parent()); + ReportOutputObserver* rvObserver = new ReportOutputObserver(pcReport); qApp->installEventFilter(rvObserver); } diff --git a/src/Gui/ReportView.cpp b/src/Gui/ReportView.cpp index 504f6e2496..b298403597 100644 --- a/src/Gui/ReportView.cpp +++ b/src/Gui/ReportView.cpp @@ -237,37 +237,43 @@ private: * user always gets the warnings/errors */ -ReportOutputObserver::ReportOutputObserver(QDockWidget *parent) +ReportOutputObserver::ReportOutputObserver(ReportOutput *report) { - this->reportViewParent = parent; + this->reportView = report; } -ReportOutputObserver::~ReportOutputObserver(){ - -} - -bool ReportOutputObserver::eventFilter(QObject *obj, QEvent *event){ - if (event->type() == QEvent::User) { - CustomReportEvent* cr = (CustomReportEvent*) event; - QDockWidget* rv = this->reportViewParent->findChild - (QString::fromLatin1(QT_TRANSLATE_NOOP("QDockWidget","Report view"))); - if(cr && rv){ +bool ReportOutputObserver::eventFilter(QObject *obj, QEvent *event) +{ + if (event->type() == QEvent::User && obj == reportView.data()) { + CustomReportEvent* cr = dynamic_cast(event); + if (cr) { ReportHighlighter::Paragraph msgType = cr->messageType(); if (msgType == ReportHighlighter::Error || msgType == ReportHighlighter::Warning){ ParameterGrp::handle group = App::GetApplication().GetUserParameter(). GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("OutputWindow"); - if(group->GetBool("checkShowReportViewOnWarningOrError", true)){ - if(!rv->toggleViewAction()->isChecked()){ - rv->toggleViewAction()->activate(QAction::Trigger); + + if (group->GetBool("checkShowReportViewOnWarningOrError", true)) { + // get the QDockWidget parent of the report view + QDockWidget* dw = nullptr; + QWidget* par = reportView->parentWidget(); + while (par) { + dw = qobject_cast(par); + if (dw) + break; + par = par->parentWidget(); + } + + if (dw && !dw->toggleViewAction()->isChecked()) { + dw->toggleViewAction()->activate(QAction::Trigger); } } } } return false; //true would prevent the messages reaching the report view - } else { - // standard event processing - return QObject::eventFilter(obj, event); } + + // standard event processing + return QObject::eventFilter(obj, event); } // ---------------------------------------------------------- diff --git a/src/Gui/ReportView.h b/src/Gui/ReportView.h index f9718f87b2..e943ea4fdb 100644 --- a/src/Gui/ReportView.h +++ b/src/Gui/ReportView.h @@ -201,11 +201,11 @@ class ReportOutputObserver : public QObject Q_OBJECT public: - ReportOutputObserver (QDockWidget* parent = 0); - ~ReportOutputObserver(); + ReportOutputObserver (ReportOutput* view); bool eventFilter(QObject *obj, QEvent *event); + protected: - QPointer reportViewParent; + QPointer reportView; }; } // namespace DockWnd