#ifndef CAMERABOX_H
#define CAMERABOX_H

#include <QObject>
#include <QWidget>
#include <QMap>

class QMenu;
class QWidget;
class QGridLayout;

class CameraBox : public QObject
{
    Q_OBJECT

public:
    explicit CameraBox(QObject *parent = 0);

    // 设置当前画面类型
    void setCameraType(const QString &cameraType);

    // 设置表格布局
    void setLayout(QGridLayout *gridLayout);

    // 设置视频控件集合
    void setWidgets(QWidgetList widgets);

    // 设置主菜单子菜单文字标识
    void setMenuFlag(const QString &menuFlag);
    void setActionFlag(const QString &actionFlag);

    // 设置子菜单类型集合
    void setTypes(const QMap<int, QStringList> &types);

    /**
    * @brief 初始化菜单
    **/
    void initMenu(QMenu *menu, const QList<bool> &enable);



    // 显示和隐藏所有通道
    void showAllCamera();
    void hideAllCamera();


public slots:
    // 通用设置函数
    void showCamera(int type, int index);
    // 菜单切换布局槽函数
    void showCamera();

    // 常规及异形通道布局
    void changeCameranormal(int index, int flag);
    void changeCameracustom(int index, int type);

    // 异形布局
    void changeCamera6(const QList<int> &indexs);
    void changeCamera8(const QList<int> &indexs);
    void changeCamera13(const QList<int> &indexs);

    // 具体通道切换函数
    void changeCamera1(int index);
    void changeCamera2(int index);
    void changeCamera4(int index);
    void changeCamera6(int index);
    void changeCamera8(int index);
    void changeCamera9(int index);
    void changeCamera13(int index);
    void changeCamera16(int index);

signals:
    // 画面布局切换信号
    void changeCamera(int type, const QString &cameraType, bool videoMax);

private:
    void addMenu(QMenu *menu, int type);

private:
    // 表格布局存放通道
    QGridLayout *gridLayout;
    // 视频控件集合
    QWidgetList widgets;

    // 通道数量
    int mCameraCount;

    // 当前画面类型
    QString mCameraType;

    // 主菜单子菜单文字标识
    QString menuFlag;
    QString actionFlag;

    // 布局方案标识集合
    QMap<int, QStringList> types;
};

#endif // CAMERABOX_H
