diff --git a/screens/AdaptiveScreen.cpp b/screens/AdaptiveScreen.cpp index c11ab7086aae1b5d57479a8d5f360dbef4af9d56..3d25631e04fb9c5f569723d0f04e9a32af2b3c8d 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 e2400d3beb9f32ff27a710e1e38ce6a44e8a1bca..b7af8408e17cb3a48278fd28aac2d9d4705b4ee8 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 caf73e3fd28ec1615e398afe08f8a2dffc91357e..67a0a74d6b69182b71acb2a4da7dec87f367b42b 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 a619df5b470eb47bd25006998e8872805ef32de9..2a9595934f018d10747588c550a33619600d9c0b 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 86a06f49e3f43086ce2b9317de483a6215d4f89f..9ede96a4d25ff0f9049a91e8d10910208e27eb23 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 d15a28803b922c81123a41b7b5612889eab6532e..f985664067875d2dbf5354608c608242c013f3b1 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 94bc30a8a500e7c9955d505a63b2772a572dfe3d..d1af8cdf5a938231d804c05c7eafb3d5b3de9ce4 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