Skip to content
Snippets Groups Projects
Commit ab11fb75 authored by alexander.mruchok's avatar alexander.mruchok
Browse files

[+] Added QStackedWidget initialization to AdaptiveWidget;

[+] Added AnimationChangingWidget::currentWidget();
[+] Added MultiScreenAbstract::activeScreen(), MultiScreenAbstract::activeScreenName()
[*] Changing gettting class name to AdaptiveScreen::scrinName();
[-] removed MultiScreenWindow::activateScreen()
[-] removed property activeScreen from MultiScreenWindow
[+] added MultiScreenWindow::activeScreenName
parent 74d7b97a
No related branches found
No related tags found
2 merge requests!17Develop old,!11Feature 3131
#include "AdaptiveWidget.h"
AdaptiveWidget::AdaptiveWidget(QWidget *parent /*= nullptr*/)
AdaptiveWidget::AdaptiveWidget(QWidget *a_parent /*= nullptr*/)
:QStackedWidget(a_parent)
{
}
......
......@@ -8,7 +8,7 @@
class AdaptiveWidget : public QStackedWidget
{
public:
AdaptiveWidget(QWidget *parent = nullptr);
AdaptiveWidget(QWidget *a_parent = nullptr);
QWidget* variant(ScreenInfo::Rotation a_rotation = ScreenInfo::Rotation::Horizontal);
......
......@@ -116,6 +116,16 @@ void AnimationChangingWidget::setCurrentIndex(int a_index)
m_animation.start();
}
QWidget *AnimationChangingWidget::currentWidget()
{
QLayoutItem* currentItem = m_ltWidgetPlacement.itemAt(this->currentIndex());
if (!currentItem)
return nullptr;
return currentItem->widget();
}
/**
* @brief Getter for currentIndex
* @return Current index
......
......@@ -26,7 +26,8 @@ public:
void setCurrentWidget(QWidget *a_widget);
void setCurrentIndex (int a_index);
int currentIndex ();
QWidget *currentWidget();
int currentIndex ();
int count() const;
......
......@@ -5,6 +5,7 @@
class AdaptiveScreen : public AdaptiveWidget
{
Q_OBJECT
public:
AdaptiveScreen(QWidget *a_parent = nullptr);
......
......@@ -59,7 +59,6 @@ public:
{
if (a_wgScreen->objectName().isEmpty())
a_wgScreen->setObjectName(QStringLiteral("FullScreenMultiScreen"));
// a_wgScreen->resize(1280, 804);
horizontalLayout = new QHBoxLayout(a_wgScreen);
horizontalLayout->setSpacing(0);
horizontalLayout->setObjectName(QStringLiteral("centralLayout"));
......@@ -68,8 +67,7 @@ public:
changingScreen = new AnimationChangingWidget(a_wgScreen);
changingScreen->setObjectName(QStringLiteral("changingScreen"));
changingScreen->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
changingScreen->setStyleSheet("#changingScreen{}");
changingScreen->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
horizontalLayout->addWidget(changingScreen);
} // setupUi
......
......@@ -31,10 +31,26 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic
*/
MultiScreenAbstract::MultiScreenAbstract(QWidget *parent)
:AdaptiveScreen(parent),
m_wgChangedScreen(nullptr)
m_wgtChangingScreen(nullptr)
{
}
AdaptiveScreen *MultiScreenAbstract::activeScreen()
{
QWidget* l_activeWidget = this->wgtChangingScreen()->currentWidget();
return qobject_cast<AdaptiveScreen*>(l_activeWidget);
}
QString MultiScreenAbstract::activeScreenName()
{
AdaptiveScreen* activeScreen = this->activeScreen();
if (!activeScreen)
return QString();
return this->activeScreen()->screenName();
}
/**
* @brief Activate child a_screen. a_screen must exist
* @param a_screen pointer to child screen
......@@ -42,20 +58,33 @@ MultiScreenAbstract::MultiScreenAbstract(QWidget *parent)
*/
MultiScreenAbstract *MultiScreenAbstract::activateChildScreen(AdaptiveScreen *a_screen)
{
Q_ASSERT_X(qobject_cast<MultiScreenAbstract*>(a_screen->parent()) == this, "activateDescendantScreen", "screen is not a child of this screen");
Q_ASSERT_X(MultiScreenAbstract::parentMultiscreen(a_screen) == this, "activateDescendantScreen", "screen is not a child of this screen");
m_wgChangedScreen->setCurrentWidget(a_screen);
m_wgtChangingScreen->setCurrentWidget(a_screen);
return (this);
}
MultiScreenAbstract *MultiScreenAbstract::parentMultiscreen(AdaptiveScreen *a_screen)
{
MultiScreenAbstract *l_parentMultiscr;
for (QObject *parentObj = a_screen->parent(); parentObj; parentObj = parentObj->parent())
{
l_parentMultiscr = qobject_cast<MultiScreenAbstract*>(parentObj);
if (l_parentMultiscr)
return l_parentMultiscr;
}
return nullptr;
}
/**
* @brief Getter for m_wgChangedScreen
* @brief Getter for m_wgChangingScreen
* @return pointer to AnimationChangingWidget
*/
AnimationChangingWidget *MultiScreenAbstract::wgChangedScreen()
AnimationChangingWidget *MultiScreenAbstract::wgtChangingScreen()
{
return m_wgChangedScreen;
return m_wgtChangingScreen;
}
......@@ -70,10 +99,10 @@ void MultiScreenAbstract::initChangedScreen(QWidget *a_widget)
a_widget = variant(ScreenInfo::currentRotation());
// Initializing pointers to window widgets
m_wgChangedScreen = a_widget->findChild<AnimationChangingWidget*>();
Q_ASSERT(m_wgChangedScreen);
m_wgtChangingScreen = a_widget->findChild<AnimationChangingWidget*>();
Q_ASSERT(m_wgtChangingScreen);
connect(m_wgChangedScreen, &AnimationChangingWidget::animationFinished, [=]{
connect(m_wgtChangingScreen, &AnimationChangingWidget::animationFinished, [=]{
emit animationFinished();
});
......
......@@ -24,8 +24,6 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic
#pragma once
#include <QWidget>
#include <typeinfo>
#include "DapUiScreen.h"
#include "AdaptiveScreen.h"
#include "controls/AnimationChangingWidget.h"
......@@ -62,9 +60,13 @@ public:
template<class T>
T *activateScreen();
AdaptiveScreen* activeScreen();
QString activeScreenName();
MultiScreenAbstract *activateChildScreen(AdaptiveScreen *a_screen);
static MultiScreenAbstract *parentMultiscreen(AdaptiveScreen *a_screen);
AnimationChangingWidget *wgChangedScreen();
AnimationChangingWidget *wgtChangingScreen();
signals:
void animationFinished(); ///< Emits this signal after the animation transition has reached the end.
......@@ -74,7 +76,7 @@ protected:
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
AnimationChangingWidget *m_wgtChangingScreen; ///< Pointer to ChangingWidget controll
private:
QMap<QString, AdaptiveScreen*> m_screens; ///< Map with all screens that can be activated
......@@ -107,8 +109,8 @@ T *MultiScreenAbstract::createSubScreen(int a_index /*= -1*/)
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);
m_screens.insert(newScreen->screenName(), newScreen);
wgtChangingScreen()->insertWidget(a_index, newScreen);
return newScreen;
}
......@@ -121,17 +123,16 @@ T *MultiScreenAbstract::createSubScreen(int a_index /*= -1*/)
template<class T>
void MultiScreenAbstract::removeSubscreen()
{
DapUiScreen *screen = subScreen<T>(); // Find subscrin
AdaptiveScreen *screen = subScreen<T>(); // Find subscreen
if (screen) { // If found ...
// 1. remove from parent ChangingWidget, ...
MultiScreenAbstract *parentScreen = qobject_cast<MultiScreenAbstract*> (screen->parent());
parentScreen->wgChangedScreen()->removeWidget(screen->sw());
parentScreen->wgtChangingScreen()->removeWidget(screen);
// 2. delete stackedWidget and screen
delete screen->sw();
delete screen;
m_screens.remove(screen->screenName());
// 3. delete from Map with screens pointers
m_screens.remove(typeid(T).name());
delete screen;
}
// if isn't found do nothing
}
......@@ -150,7 +151,7 @@ NewT *MultiScreenAbstract::replaceSubscreen()
if (oldScreen) {// If found ...
//1. get index of oldScreen stacked widget
MultiScreenAbstract *parentScreen = qobject_cast<MultiScreenAbstract*>(oldScreen->parent());
int index = parentScreen->wgChangedScreen()->indexOf(oldScreen->sw());
int index = parentScreen->wgtChangingScreen()->indexOf(oldScreen->sw());
//2. remove oldScreen, ...
parentScreen->removeSubscreen<OldT>();
//3. create new subscreen in the place of deleted
......@@ -169,13 +170,17 @@ NewT *MultiScreenAbstract::replaceSubscreen()
template<class T>
T *MultiScreenAbstract::subScreen()
{
QString screenTypeName = typeid(T).name();
T *foundScreen = qobject_cast<T*>(m_screens.value(screenTypeName, nullptr)); // Searh in m_screens
T *foundScreen = nullptr;
// If isn't found search in all subScreens recursively
auto i = m_screens.constBegin();
while (i != m_screens.constEnd() and !foundScreen) {
while (i != m_screens.constEnd() and !foundScreen)
{
//if this screen is searched return it
foundScreen = qobject_cast<T*>(i.value());
if (foundScreen)
return foundScreen;
MultiScreenAbstract *curScreen = qobject_cast<MultiScreenAbstract*>(i.value());
//if i.value() is DapUIAnimationScreenAbstract object search in all subScreens
if (curScreen)
......@@ -201,7 +206,7 @@ T *MultiScreenAbstract::activateScreen()
screen = createSubScreen<T>();
// Activate all parent screens in line from found screen to this
MultiScreenAbstract *parent = qobject_cast<MultiScreenAbstract*>(screen->parent());
MultiScreenAbstract *parent = MultiScreenAbstract::parentMultiscreen(screen);
AdaptiveScreen *nextScreen = screen;
//do while parent is not this screen
while (nextScreen != this) {
......
......@@ -12,19 +12,9 @@ MultiScreenWindow::MultiScreenWindow(MultiScreenAbstract* a_centralScreen /*= nu
setCentralWidget(a_centralScreen);
}
void MultiScreenWindow::activateScreen(const QString &a_screenName)
QString MultiScreenWindow::activeScreenName()
{
if (a_screenName == StartScreen::SCREEN_NAME)
m_centralScreen->activateScreen<StartScreen>();
else
return;
m_activeScreen = a_screenName;
}
QString MultiScreenWindow::activeScreen()
{
return centralScreen()->activeScreenName();
}
MultiScreenAbstract *MultiScreenWindow::centralScreen()
......
......@@ -6,18 +6,15 @@
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);
void activateScreen (const QString& a_screenName);
QString activeScreen();
MultiScreenAbstract* centralScreen();
MultiScreenAbstract* m_centralScreen;
QString activeScreenName();
private:
QString m_activeScreen;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment