#ifndef MainWidget_H
#define MainWidget_H

#include <QDebug>
#include <QWidget>
#include <QDateTime>
#include <QResource>
#include <QMouseEvent>
#include "main.h"
#include "mctype/mainwidgetfunction.h"
#include "sharedviews/promptdialog.h"
#include "sharedviews/patternselectwidget.h"
#include "sharedviews/parametersetdialog.h"
#include "sharedviews/patternmanagewidget.h"
#include "sharedviews/sensorinputwidget.h"
#include "sharedviews/controlactionwidget.h"
#include "sharedviews/colorordersetwidget.h"
#include "sharedviews/needlebarsetwidget.h"
#include "sharedviews/sheetwidget.h"
#include "sharedviews/setworkarea.h"
#include "mctype/patternsingleboard/function/flatembroidery.h"
#include "mctype/patternsingleboard/function/quiembroidery.h"
#include "machine/error.h"

#define NODENUMBER 20 //开位线节点数
#define INTERFACE_SHORTCUT 1    //快捷功能界面
#define INTERFACE_ACCESS 2    //辅助功能界面

namespace Ui {
class MainWidget;
}

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MainWidget(QWidget *parent = 0);
    ~MainWidget();

private:
    Ui::MainWidget *ui;
    PatternSelectWidget *m_pPatternSelectWi;//花样选择窗体
    ParameterSetDialog *m_pParameterSetDlg;//参数设定窗体
    PatternManageWidget *m_pPatternManageWi;//花样管理窗体(花样导入、导出...)
    SensorInputWidget *m_pSensorInputWi;
    ControlActionWidget *m_pControlActionWi;
    ColorOrderSetWidget *m_pColorOrderSetWi;//色序设定
    NeedleBarSetWidget *m_pNeedleBarSetWi;//针杆设定
    MainWidgetFunction *m_pMainWidgetFunction;//快捷功能函数结构体
    SheetWidget *m_pSheetWi;
    SetWorkArea *m_pSetWorkAreaWi;

    QList<MyButton*> m_quickBtnList;//快捷功能中的快捷按钮列表
    QList<QLabel*> m_quickLabelList;//快捷功能中的label显示列表
    QList<MyButton*> m_shortCutBtnList;//窗体下方的快捷按钮列表

    QList<MyButton*> m_assistBtnList;//辅助功能中的辅助按钮列表
    QList<QLabel*> m_assistLabelList;//辅助功能中的label显示列表

    QList<MyButton*> m_patternSetBtnList;//花样设置中的花样设置按钮列表
    QList<QLabel*> m_patternSetLabelList;//花样设置中的label显示列表

    QList<MyButton*> m_paraSetBtnList;//参数设置中的参数设置按钮列表
    QList<QLabel*> m_paraSetLabelList;//参数设置中的label显示列表

    QList<MyButton*> m_embFunctionBtnList;//刺绣功能中的刺绣功能按钮列表
    QList<QLabel*> m_embFunctionLabelList;//刺绣功能中的label显示列表
	
	QString m_usbPath;//优盘路径
    QString m_rootPath;//操作屏根路径
    QString m_curPath;//当前路径

    int m_pageNums;//总页数
    int m_curPages;//快捷界面当前页数
    int m_borderEmb;//边框刺绣的标志

private:
    void initialize();//初始化
    void initArabControlPos();//设置阿拉伯语时控件对齐方式

public:
    void initAllWindows(s16 ifHMIDecrypt = 1, s16 connectMode = 0);//初始化窗体
    void initMcTypeWindows();//不同机型不同的窗体设置

private:
    void initQuickFunBtn();//初始化快捷功能中的快捷按钮
    QList<ShortCutItem> m_quickItemList;//快捷功能中的快捷条目列表

    void initAssisitBtn();//初始化辅助功能中的辅助按钮
    QList<AssistItem> m_assistItemList;//辅助功能中的辅助按钮列表

    void initPatternSetBtn();//初始化花样设置功能中的花样设置按钮
    QList<PatternSetItem> m_patternSetItemList;//花样设置功能中的花样设置条目列表

    void initParaSetBtn();//初始化参数设置功能中的参数设置按钮
    QList<ParaSetItem> m_paraSetItemList;//参数设置功能中的参数设置条目列表

    void initEmbFunctionBtn();//初始化刺绣功能中的刺绣功能按钮
    QList<EmbFunctionItem> m_embFunctionItemList;//刺绣功能中的刺绣功能按钮列表

    QList<ErrorCodeStateItem> m_errorCodeAndStateItemList;//错误代码和状态列表

private:
    u32 m_workStatus;//工作状态
    int m_curRpm;
    int m_curDatIdx;//当前针数索引
    int m_curColorIdx;//当前色序

    int m_forwardBackNeedleIdx;//前进回退时的针数索引
    int m_forwardBackColorIdx;//前进回退时的颜色索引
    s16 m_ifHMIDecrypt;//界面是否授权，1代表已授权解密过，0代表未授权解密过
    s16 m_connectMode;//通讯连接方式 0:网口，1:串口
    int m_stepDrive;//写在配置文件里的步进驱动配置

private:
    MCStatus m_mcStatus;
    u32 m_errorCode;//记录报错代码

    int m_initflag;//初始化标志
    int m_timoutflag;//超时标志
    QTimer * m_pTimer;//建立连接的定时器
    QTimer * m_pConTimer;//检测上下位机心跳包的定时器
    QTimer * m_pMinTimer;//记录当前时间的定时器
    QTimer * m_pRefreshVer;  //刷新版本信息
    QTimer * m_pWifiConTimer;//检测wifi是否连接的定时器
    SetControlStyle m_setControlStyle;

    QTimer * m_pRefreshPatternTimer;//更新花样显示的定时器(测试用)

    int m_conFlag;//连接标志
    int m_linkSta;//连接状态
    int m_itemPerPage;//快捷界面每页按钮数

    EmbData::DISP_MODE m_dispMode;
    QPixmap *m_previewImage;

    QString m_curFilePath;//当前选择的花样路径
    QString m_preFilePath;//边框刺绣前的花样路径
    int m_imageZoom;//花样图片缩放值
    int m_imageMoveX;//花样图片平移值X
    int m_imageMoveY;//花样图片平移值Y
    int m_workNoseHead;//当前工作机头


    DataFileHead m_fileHead;//fcg
    QPixmap m_embBackPix;//绘制预览图的背景图
    FileExecPara m_expara;
    int m_gradientFlag; //是否使用3D显示模式,0:3D,!0=2D

private:
    int m_speedLevel;//速度等级
    int m_showColorIdxBegin;
    QList<QPushButton*> m_colorBtnList;
    QList<OpenLineNode> m_nodeList;//开位线节点
    int m_nodeIdx;
    int m_lastNodeIdx;

private:
    void setFrameNineBtnStyle();

private:
    void clearFileInfo();//清除文件信息
    void initControl();//初始化窗体控件，包括位置、尺寸、样式
    void initResolution1910();//初始化窗体控件为1920x1080分辨率
    void initResolution1006();//初始化窗体控件为1024x600分辨率
    void initControlStyle();//初始化窗体控件样式
    QString getBackImagePath(s16 waterMark);//获取背景图的加载路径
    void refreshPageUi(s16 type);//刷新界面显示
	
	//鼠标事件
protected:
    void mousePressEvent(QMouseEvent *e);
    void mouseReleaseEvent(QMouseEvent *e);

private:
    int m_mousePressX;
    int m_mousePressY;
    int m_mouseReleaseX;
    int m_mouseReleaseY;
    int m_mainWidgetX;
    int m_mainWidgetY;

public:
    QByteArray m_towelHeightTable;//dsr6.3毛巾高度

private:
    void sendInitString(QString str);//发送初始化字符串
    void refConnectUi(int alive);//刷新连接状态(1秒)

    //刷新连接状态
    void refConnectUi(Machine * pMachine,int & linkSta, int alive);
    void hideMenuFrame();//隐藏菜单栏(frame)
    void setZoomMoveBtnVisible(bool bVal);//隐藏放大、缩小、平移按钮

    bool resetAllData();//重置所有数据
    void refreshShowColorUi();
    //void switchActiveFile(int newActive, int force = 0);

    int refreshOpenLineInfo();//刷新开位线绣节点信息
    void patternSelect();//花样选择
    void patternColorSet();//色序设定
    void patternTowelHeightSet();//毛巾高度设定

    void patternRepeatEmbSet(QString style);//花样反复绣功能-用于下位机
    void reSetPatternData();//刷新花样（色序改变后）

private:
    void showExecInfo();//显示机器运行状态中的信息
    void showPatternPreview();//显示花样显示页面

private:
    void setCommonBtn();//设置常用按钮
    QString getCommonBtnStyle(int idx);//获取常用按钮样式
    void runCommonBtnFunction(int idx);//执行常用按钮功能
    void runAssistBtnFunction(int funEnum,int idx);//执行辅助按钮功能
    void runPatternSetBtnFunction(int funEnum,int idx);//执行花样设置按钮功能
    void runEmbFunctionBtnFunction(int funEnum,int idx);//执行刺绣功能按钮功能
    void setUiBtnEnable(bool bValue);//设置UI界面按钮的使能
    void setPatternSetBtnEnable(bool bValue);//设置花样操作按钮的使能，如快进快退等

private:
    void reSetDatIdx(int newidx);
    void funForwardOrBack();//前进回退
    void addOrDecNeedleIdx(int &idx); //加减针
    void addOrDecColorIdx(int &idx,s16 flag); //按颜色数前进回退

signals:
    void siSendLoadingMessage(QString info, int alignment, QColor color);//接受加载信息
    void siSpeed(int speed);//手动换挡
    void siCounterPrompt(s16 flag);

private slots:
    void slotWaitTimout();//等待超时
    void slotMachineStatus(int toggle);//机器状态
    void slotShowPercentage(int val);
    void slotRefreshWifiIcon(bool bl);
    //void slotLotDat();   //测试物联网用

private slots:
    void onRefreshVer();//刷新版本信息定时器
    void slotChangeColorTable(int selColor,int colorIdx);//改变色序
    void slotChangeTowelHighTable(int selColor,int colorIdx);//改变毛巾高度
    //选择花样后是否弹出花样参数设置窗体并设置花样参数(默认显示花样参数设置窗体)
    void slotShowPatternPara(QString filePath,s16 showFlag = 0);
    void slotRemoveBorder(QString filePath);
    void slotIfFileExist();//删除文件后判断当前文件是否被删除
    void slotClearPatternFcg();//删除fcg后重新选择花版
    void slotReplacePattrn(QString path);//花样导入替换文件
    void slotSetPatternData();//设置花样数据
    void slotRefreshPattern();//针杆设置后重新刷新花样
    void slotColorOrderChange(s16 combineMode,s16 threeCombineMode);//色序设定之后重新刷新花样并发送文件头
    void slotTowelHighChange();//毛巾高度改变后重新发送毛巾高度数据

    void slotSetHeadEmbBtnEnable(bool bl);//设置隔头绣按钮是否可按
    //重新重置ds16数据(换色点击取消后数据会变为单个图元的原数据，
    //若图形经过变换数据会不对，主界面保存了最后的数据，
    //若点击换色并取消后恢复为主界面最后保存的数据即可)
    void slotReSetEmbData(QByteArray table);
    void slotReSetTowelHigh(QByteArray table);//高度设置界面点击取消后返回设置之前的
    void slotHeadEmb();//隔头绣
    void slotShowFrameAngleWi();//显示动框角度设置界面
    void slotEmbWorkArea();//设置平绣可工作区域界面
    void slotChenWorkArea();
    void slotCoilWorkArea();
    void slotDebugInfo();
public slots:
    void slotChangeProgressBar(int value);

private slots:
    void slotQuickBtnClick();//快捷功能中的快捷按钮被点击
    void slotShortCutBtnClick();//界面下方的快捷按钮被点击
    void slotAssistBtnClick();//辅助功能中的辅助功能按钮被点击
    void slotPatternSetBtnClick();//花样设置中的花样设置按钮被点击
    void slotParaTypeBtnClick();//参数设置中的参数功能按钮被点击
    void slotEmbFunctionBtnClick();//刺绣功能中的刺绣功能按钮被点击
    void slotSetButtonRootLogo(int level);//设置超级用户图标
    void slotEXBUpgrade(u8 protocol, u8 nodeid ,u8 nodeType);//外围板升级
    void slotClearPatternBreakLineNum();//清空花版断线次数
    void slotResetStartPos(DataFilePos pos);//边框检查超限后重新定起始点(起绣点)
    void slotDebugState();//界面调试模式
    void slotCloseRootPara();//关闭超级用户参数窗体

private slots:
    void onRefreshPatternTimer();//1秒定时器(刷新花样测试用)

    void onOneSecondTimer();//1秒定时器
    void onFiveSecondTimer();//5秒定时器
    void onTenMiniteTimer();//10分钟定时器
    void onOneMinTimer();//1分钟定时器
    void on_buttonMainMenu_clicked();//主界面按钮
    void on_buttonPatternSet_clicked();//花样设置按钮
    void on_buttonParaSet_clicked();//参数设定按钮
    void on_buttonEmbFunction_clicked();//刺绣功能按钮
    void on_buttonShortcutFunction_clicked();//快捷功能按钮
    void on_buttonAccessFunction_clicked();//辅助功能按钮

    void on_buttonUp_clicked();
    void on_buttonDown_clicked();
    void on_buttonLeft_clicked();
    void on_buttonRight_clicked();
    void on_buttonAuto_clicked();
    void on_buttonZoom_clicked();
    void on_buttonNarrow_clicked();
    void on_buttonMiddle_clicked();

    void on_buttonPreNode_clicked();
    void on_buttonNextNode_clicked();
    void on_buttonSetNode_clicked();
    void on_buttonNodeDelete_clicked();
    void on_buttonOpenLineOk_clicked();
    void on_buttonOpenLineClose_clicked();

    void on_buttonSpeedAdd_clicked();
    void on_buttonSpeedDec_clicked();
    void on_buttonNineBtnUp_pressed();
    void on_buttonNineBtnUp_released();
    void on_buttonNineBtnDown_pressed();
    void on_buttonNineBtnDown_released();
    void on_buttonNineBtnLeft_pressed();
    void on_buttonNineBtnLeft_released();
    void on_buttonNineBtnRight_pressed();
    void on_buttonNineBtnRight_released();
    void on_buttonNineBtnMiddle_pressed();//九宫格中间键按下
    void on_buttonNineBtnMiddle_released();//九宫格中间键抬起
    void on_buttonNineBtn1_clicked();
    void on_buttonNineBtn2_clicked();
    void on_buttonNineBtn3_clicked();
    void on_buttonNineBtn4_clicked();
    void on_buttonNeedle_clicked();//色序设定快捷按钮
    void on_buttonPatternInfo_clicked();//花样参数快捷按钮
    void on_buttonNeedleBegin_clicked();
    void on_buttonNeedleEnd_clicked();
    void on_buttonNeedleDec1_clicked();
    void on_buttonNeedleAdd1_clicked();
    void on_buttonNeedleDec10_clicked();
    void on_buttonNeedleAdd10_clicked();
    void on_buttonNeedleDec100_clicked();
    void on_buttonNeedleAdd100_clicked();
    void on_buttonNeedleDec1000_clicked();
    void on_buttonNeedleAdd1000_clicked();
    void on_buttonNeedleDec10000_clicked();
    void on_buttonNeedleAdd10000_clicked();
    void on_buttonColorDec_clicked();
    void on_buttonColorAdd_clicked();
    void on_buttonForwardBackOk_clicked();
    void on_buttonForwardBackCancel_clicked();
    void on_buttonUser_clicked();
    void on_buttonNeedleDown_clicked();
    void on_buttonNeedleUp_clicked();
    void on_buttonExitMateEmb_clicked();
    void on_buttonShortCutPgUp_clicked();
    void on_buttonShortCutPgDn_clicked();
    void on_buttonAssistPgUp_clicked();
    void on_buttonAssistPgDn_clicked();
    void on_buttonMove_pressed();
    void on_buttonMove_released();
};

#endif // MainWidget_H
