Skip to content
Snippets Groups Projects
DapUiMainWindow.h 1.88 KiB
Newer Older
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
#ifndef DAPUIMAINWINDOW_H
#define DAPUIMAINWINDOW_H

#include <QMainWindow>
#include <QScreen>
#include <QVariant>
#include <QtDebug>
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
#include "DapUiScreen.h"

class QStackedWidget;
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
class DapUiMainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit DapUiMainWindow(QWidget *parent = 0);
    virtual ~DapUiMainWindow();
    QStackedWidget * sw() { return m_sw; }
    DapUiScreen * screen() { return m_screen; }
    QString screenName(){ return QString::fromLatin1(screen()?screen()->metaObject()->className():"nullptr" ); }
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
    void newScreen(DapUiScreen * a_screen);

    void setUiProp(const QString& a_objName, const QString& a_varName, const QVariant& a_varValue){
        if(screen())
            screen()->setVars(a_objName, a_varName, a_varValue);
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
    }

    DapUiScreen::ScreenRotation rotation() { return m_rotation; }
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
    static DapUiMainWindow *getInstance() { return m_instance; }

    template <class T1, typename Func1, class T2, typename Func2>
    inline void
    connectScreen(Func1 a_signal, T2* a_receiver, Func2 a_slot  ){
        if(screen())
            connect(qobject_cast<T1*>(screen()),a_signal, a_receiver, a_slot );
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
        else
            qWarning() << "[DapUiMainWindow] no current screen to connecto to";
    }

    template <class T1, typename Func1, typename Func2>
    inline void
    connectScreen(Func1 a_signal, Func2 a_lambda  ){
        if(screen())
            connect(qobject_cast<T1*>(screen()),a_signal, a_lambda );
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
        else
            qWarning() << "[DapUiMainWindow] no current screen to connecto to";
    }
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
signals:
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
protected:
    void onScreenOrientationChanged(Qt::ScreenOrientation a_orientation);
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed
private:
    QStackedWidget * m_sw;
    DapUiScreen * m_screen = nullptr;
    DapUiScreen::ScreenRotation m_rotation;
dmitriy.pavlyuk's avatar
dmitriy.pavlyuk committed

    static DapUiMainWindow * m_instance;
private slots:
};

#endif // DAPUIMAINWINDOW_H