From 74d7b97ad8dd12b3929813894dd216c80d9bdd70 Mon Sep 17 00:00:00 2001 From: "alexandr.mruchok" <alexandr.mruchok@demlabs.net> Date: Fri, 7 Feb 2020 23:25:10 +0200 Subject: [PATCH] [+] Added AdaptiveScreen::initScreen(this); [+] Added DefaultMultiScreen::SCREEN_NAME [+] Added MultiScreenWindow::activeScreen [+] MultiScreenWindow::centralScreen() --- screens/AdaptiveScreen.cpp | 3 ++- screens/AdaptiveScreen.h | 14 +++++++++++++- screens/DefaultMultiScreen.cpp | 7 +++++++ screens/DefaultMultiScreen.h | 4 ++++ screens/MultiScreenAbstract.h | 8 ++++---- screens/MultiScreenWindow.cpp | 25 +++++++++++++++++++++++++ screens/MultiScreenWindow.h | 11 ++++++++++- 7 files changed, 65 insertions(+), 7 deletions(-) diff --git a/screens/AdaptiveScreen.cpp b/screens/AdaptiveScreen.cpp index c11ab70..3d25631 100644 --- a/screens/AdaptiveScreen.cpp +++ b/screens/AdaptiveScreen.cpp @@ -1,8 +1,9 @@ #include "AdaptiveScreen.h" +AdaptiveScreen::InitializerFunc AdaptiveScreen::s_initializerFunc = nullptr; AdaptiveScreen::AdaptiveScreen(QWidget *a_parent /*= nullptr*/) : AdaptiveWidget(a_parent) { - + AdaptiveScreen::initScreen(this); } diff --git a/screens/AdaptiveScreen.h b/screens/AdaptiveScreen.h index e2400d3..b7af840 100644 --- a/screens/AdaptiveScreen.h +++ b/screens/AdaptiveScreen.h @@ -6,12 +6,24 @@ class AdaptiveScreen : public AdaptiveWidget { public: + AdaptiveScreen(QWidget *a_parent = nullptr); // virtual void activateScreen() = 0; -// virtual QString screenName() = 0; + virtual QString screenName() = 0; virtual void initVariantUi(QWidget * a_widget) = 0; + +protected: + typedef void (*InitializerFunc)(AdaptiveScreen*); + + template<typename T> + static void initScreen(T* a_screen){ + if (T::s_initializerFunc) + T::s_initializerFunc(a_screen); + }; + static InitializerFunc s_initializerFunc; + }; #endif // SCREEN_H diff --git a/screens/DefaultMultiScreen.cpp b/screens/DefaultMultiScreen.cpp index caf73e3..67a0a74 100755 --- a/screens/DefaultMultiScreen.cpp +++ b/screens/DefaultMultiScreen.cpp @@ -24,6 +24,8 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic #include "DefaultMultiScreen.h" +const QString DefaultMultiScreen::SCREEN_NAME("FullScreen"); + /** * @brief Overloaded constructor. * @param a_parent Parent. @@ -35,6 +37,11 @@ DefaultMultiScreen::DefaultMultiScreen(QWidget *a_parent) create<Ui_DefaultMultiScreen>(); } +QString DefaultMultiScreen::screenName() +{ + return DefaultMultiScreen::SCREEN_NAME; +} + /** * @brief Form initialization. * @param a_w Window GUI widget. diff --git a/screens/DefaultMultiScreen.h b/screens/DefaultMultiScreen.h index a619df5..2a95959 100755 --- a/screens/DefaultMultiScreen.h +++ b/screens/DefaultMultiScreen.h @@ -34,6 +34,10 @@ class DefaultMultiScreen : public MultiScreenAbstract public: DefaultMultiScreen(QWidget *a_parent = nullptr); + virtual QString screenName() override; + static const QString SCREEN_NAME; + + protected: virtual void initVariantUi(QWidget * a_widget) override; diff --git a/screens/MultiScreenAbstract.h b/screens/MultiScreenAbstract.h index 86a06f4..9ede96a 100755 --- a/screens/MultiScreenAbstract.h +++ b/screens/MultiScreenAbstract.h @@ -72,11 +72,12 @@ signals: protected: virtual void initChangedScreen(QWidget * a_w); ///< Find changingWidget and assign to m_wgChangedScreen virtual void initVariantUi(QWidget * a_widget) = 0; ///<pure virtual method. Must de reimplement it inherited classes + virtual QString screenName() = 0; AnimationChangingWidget *m_wgChangedScreen; ///< Pointer to ChangingWidget controll private: - QMap<QString, DapUiScreen*> m_screens; ///< Map with all screens that can be activated + QMap<QString, AdaptiveScreen*> m_screens; ///< Map with all screens that can be activated }; @@ -103,12 +104,11 @@ T *MultiScreenAbstract::createSubScreen(int a_index /*= -1*/) if (subScreen<T>()) return newScreen; - QStackedWidget *newSW = new QStackedWidget(m_wgChangedScreen); // Create QStackedWidget for new screen and screen; - newScreen = new T(this, newSW); // Create new screen + newScreen = new T(this); // Create new screen //insert screen to m_screens and changing sreen widget m_screens.insert(typeid(T).name(), newScreen); - m_wgChangedScreen->insertWidget(a_index, newScreen->sw()); + m_wgChangedScreen->insertWidget(a_index, newScreen); return newScreen; } diff --git a/screens/MultiScreenWindow.cpp b/screens/MultiScreenWindow.cpp index d15a288..f985664 100644 --- a/screens/MultiScreenWindow.cpp +++ b/screens/MultiScreenWindow.cpp @@ -1,8 +1,33 @@ #include "MultiScreenWindow.h" +#include "StartScreen.h" + MultiScreenWindow::MultiScreenWindow(MultiScreenAbstract* a_centralScreen /*= nullptr*/, QWidget *a_parent /*= nullptr*/) : QMainWindow(a_parent) { if (!a_centralScreen) a_centralScreen = new DefaultMultiScreen(this); + + m_centralScreen = a_centralScreen; + setCentralWidget(a_centralScreen); +} + +void MultiScreenWindow::activateScreen(const QString &a_screenName) +{ + if (a_screenName == StartScreen::SCREEN_NAME) + m_centralScreen->activateScreen<StartScreen>(); + else + return; + + m_activeScreen = a_screenName; +} + +QString MultiScreenWindow::activeScreen() +{ + +} + +MultiScreenAbstract *MultiScreenWindow::centralScreen() +{ + return m_centralScreen; } diff --git a/screens/MultiScreenWindow.h b/screens/MultiScreenWindow.h index 94bc30a..d1af8cd 100644 --- a/screens/MultiScreenWindow.h +++ b/screens/MultiScreenWindow.h @@ -6,11 +6,20 @@ class MultiScreenWindow : public QMainWindow { Q_OBJECT + Q_PROPERTY(QString activeScreen READ activeScreen WRITE activateScreen) + + using QMainWindow::setCentralWidget; //disable access to setCentralWidget. public: explicit MultiScreenWindow(MultiScreenAbstract* a_centralScreen = nullptr, QWidget *a_parent = nullptr); -signals: + void activateScreen (const QString& a_screenName); + QString activeScreen(); + + MultiScreenAbstract* centralScreen(); + MultiScreenAbstract* m_centralScreen; +private: + QString m_activeScreen; }; #endif // MULTISCREENWINDOW_H -- GitLab