From 219ded18ba18e4a4cebd3a945ca3f12c4657f504 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 9 Dec 2021 07:40:44 +0100 Subject: [PATCH] Gui: refactoring: move duplicated code to DockWindowManager::activate() --- src/Gui/CommandFeat.cpp | 17 ++--------------- src/Gui/DockWindowManager.cpp | 20 ++++++++++++++++++++ src/Gui/DockWindowManager.h | 7 ++++++- src/Gui/ReportView.cpp | 17 ++++------------- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/Gui/CommandFeat.cpp b/src/Gui/CommandFeat.cpp index a6729776d0..ea79e896b5 100644 --- a/src/Gui/CommandFeat.cpp +++ b/src/Gui/CommandFeat.cpp @@ -23,8 +23,6 @@ #include "PreCompiled.h" #ifndef _PreComp_ -# include -# include #endif #include @@ -169,19 +167,8 @@ void StdCmdSendToPythonConsole::activated(int iMsg) //show the python console if it's not already visible, and set the keyboard focus to it QWidget* pc = DockWindowManager::instance()->getDockWindow("Python console"); PythonConsole *pcPython = qobject_cast(pc); - if (pcPython){ - QDockWidget* dw = nullptr; - QWidget* par = pcPython->parentWidget(); - while (par){ - dw = qobject_cast(par); - if (dw){ - break; - } - par = par->parentWidget(); - } - if (dw && !dw->toggleViewAction()->isChecked()){ - dw->toggleViewAction()->activate(QAction::Trigger); - } + if (pcPython) { + DockWindowManager::instance()->activate(pcPython); pcPython->setFocus(); } } diff --git a/src/Gui/DockWindowManager.cpp b/src/Gui/DockWindowManager.cpp index 45289b00be..2bede4be97 100644 --- a/src/Gui/DockWindowManager.cpp +++ b/src/Gui/DockWindowManager.cpp @@ -239,6 +239,26 @@ void DockWindowManager::removeDockWindow(QWidget* widget) } } +/** + * If the corresponding dock widget isn't visible then activate it. + */ +void DockWindowManager::activate(QWidget* widget) +{ + QDockWidget* dw = nullptr; + QWidget* par = widget->parentWidget(); + while (par) { + dw = qobject_cast(par); + if (dw) { + break; + } + par = par->parentWidget(); + } + + if (dw && !dw->toggleViewAction()->isChecked()) { + dw->toggleViewAction()->activate(QAction::Trigger); + } +} + /** * Sets the window title for the dockable windows. */ diff --git a/src/Gui/DockWindowManager.h b/src/Gui/DockWindowManager.h index 5e5825b83a..d479346a4f 100644 --- a/src/Gui/DockWindowManager.h +++ b/src/Gui/DockWindowManager.h @@ -25,8 +25,11 @@ #define GUI_DOCKWINDOWMANAGER_H #include +#include +#include class QDockWidget; +class QWidget; namespace Gui { @@ -57,7 +60,7 @@ private: * Class that manages the widgets inside a QDockWidget. * \author Werner Mayer */ -class GuiExport DockWindowManager : QObject +class GuiExport DockWindowManager : public QObject { Q_OBJECT @@ -86,6 +89,8 @@ public: QWidget* getDockWindow(const char* name) const; /// Returns a list of all widgets which set to a QDockWidget. QList getDockWindows() const; + /// If the corresponding dock widget isn't visible then activate it + void activate(QWidget* widget); void saveState(); void loadState(); diff --git a/src/Gui/ReportView.cpp b/src/Gui/ReportView.cpp index 6c90bd5266..7ea9c065b3 100644 --- a/src/Gui/ReportView.cpp +++ b/src/Gui/ReportView.cpp @@ -36,6 +36,7 @@ #include #include "ReportView.h" +#include "DockWindowManager.h" #include "FileDialog.h" #include "PythonConsole.h" #include "PythonConsolePy.h" @@ -245,20 +246,10 @@ ReportOutputObserver::ReportOutputObserver(ReportOutput *report) this->reportView = report; } -void ReportOutputObserver::showReportView(){ +void ReportOutputObserver::showReportView() +{ // 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); - } + DockWindowManager::instance()->activate(reportView); } bool ReportOutputObserver::eventFilter(QObject *obj, QEvent *event)