#include "normaleffectwin.h"
#include "globalfunc.h"
#include "gutil/qgui.h"
#include <QPushButton>
#include <QStackedWidget>
#include <QCheckBox>
#include "efffrefr.h"
NormalEffectWin::NormalEffectWin(ExpertWin *parent)
{
    expertWin=parent;
    resize(880, 220);
    {
        if(expertWin->m_iRcvCardType == enum_zrf)
        {
            auto vBox1=new VBox(this);
            auto hh = new HBox(vBox1);
            hh->addSpacing(20);
            //第一列区域
            auto vvv = new VBox(hh);
            //1.1.移位时钟频率
            auto hhh = new HBox(vvv);
            auto lb = new QLabel(tr("DCLK频率:"));
            hhh->addWidget(lb);
            cbDCLKf = new QComboBox();              cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M");
                                                    cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M");  ;cbDCLKf->addItem("1M");             hhh->addWidget(cbDCLKf);
            //1.2.灰度级别
            hhh = new HBox(vvv);
            lb = new QLabel(tr("灰度级数:"));                hhh->addWidget(lb);
            cbGryLevel = new QComboBox();       cbGryLevel->addItem("无灰度");  cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级");
                                                cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级");
                                                cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级");
                                                cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级");   hhh->addWidget(cbGryLevel);
            //1.3.刷新倍率
            hhh = new HBox(vvv);
            lb = new QLabel(tr("刷新倍率:"));                hhh->addWidget(lb);
            freshBeiLv = new QComboBox();                freshBeiLv->addItem("1");freshBeiLv->addItem("2");freshBeiLv->addItem("3");freshBeiLv->addItem("4");freshBeiLv->addItem("5");freshBeiLv->addItem("6");freshBeiLv->addItem("7");freshBeiLv->addItem("8");    hhh->addWidget(freshBeiLv);
            //1.4.换行时间
            hhh = new HBox(vvv);
            lb = new QLabel(tr("换行时间(ns):"));        hhh->addWidget(lb);
            spinLineNs = new QSpinBox;             spinLineNs->setRange(2, 9999);                hhh->addWidget(spinLineNs);
            //1.5.换行位置
            hhh = new HBox(vvv);
            lb = new QLabel(tr("换行位置(ns):"));                hhh->addWidget(lb);
            spinLineWz = new QSpinBox;                spinLineWz->setRange(2, 9999);                hhh->addWidget(spinLineWz);
            //1.6.行消隐时间
            hhh = new HBox(vvv);
            lb = new QLabel(tr("行消隐时间(ns):"));                hhh->addWidget(lb);
            spinLineXy = new QSpinBox;                spinLineWz->setRange(2, 9999);                hhh->addWidget(spinLineXy);

            //第二列区域
            hh->addSpacing(20);
            vvv = new VBox(hh);
            //2.1.无信号数据
            hhh = new HBox(vvv);
            lb = new QLabel(tr("无信号数据:"));                hhh->addWidget(lb);
            cbNoSign = new QComboBox();
            cbNoSign->addItem("最后一帧画面");cbNoSign->addItem("黑屏");                hhh->addWidget(cbNoSign);
            //2.2.显卡同步
            hhh = new HBox(vvv);
            lb = new QLabel(tr("显卡同步"));                hhh->addWidget(lb);
            checkSyncXianKa = new QCheckBox;                checkSyncXianKa->setChecked(true);                hhh->addWidget(checkSyncXianKa);
            //2.3.开屏渐亮
            hhh = new HBox(vvv);
            lb = new QLabel(tr("双卡备份"));                hhh->addWidget(lb);
            checkDoubleCopy = new QCheckBox;                checkDoubleCopy->setChecked(false);                hhh->addWidget(checkDoubleCopy);
            //2.4.开屏渐亮
            hhh = new HBox(vvv);
            lb = new QLabel(tr("开屏渐亮"));                hhh->addWidget(lb);
            checkJianLiang = new QCheckBox;                checkSyncXianKa->setChecked(false);                hhh->addWidget(checkJianLiang);
            //2.5.D信号为第二组时钟
            hhh = new HBox(vvv);
            lb = new QLabel(tr("信号为第二组时钟"));                hhh->addWidget(lb);
            checkDsignalAsCLk = new QCheckBox;                checkDsignalAsCLk->setChecked(false);                hhh->addWidget(checkDsignalAsCLk);

            //更多设置
            hh->addStretch();
            vvv = new VBox(hh);
            vvv->addStretch();
            hhh = new HBox(vvv);
            auto btn = new QPushButton(tr("更多设置"));
            btn->setProperty("ss","blue");
            hhh->addWidget(btn);
            connect(btn, &QPushButton::clicked, this, [=] {

            });



            vvv->addStretch();
            hh->addStretch();

            vvv = new VBox(hh);
            //分割线
           auto hh3 = new HBox(vvv);
           QFrame * line2   = new QFrame();
            line2->setFrameShape(QFrame::VLine);
            line2->setFrameShadow(QFrame::Sunken);
            line2->setStyleSheet("background-color:#222;");
            hh3->addWidget(line2);

             //第三列区域
            vvv = new VBox(hh);
            //3.1.DCLK相位
            hhh = new HBox(vvv);
            lb = new QLabel(tr("DCLK相位:"));            hhh->addWidget(lb);
            cbDclkXw = new QComboBox();             cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度");     hhh->addWidget(cbDclkXw);
            //3.2.DCLK占空比
            hhh = new HBox(vvv);
            lb = new QLabel(tr("DCLK占空比:"));          hhh->addWidget(lb);
            cbDclkZkb = new QComboBox();            cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%");      hhh->addWidget(cbDclkZkb);
            //3.3.锁存STB相位微调
            hhh = new HBox(vvv);
            lb = new QLabel(tr("锁存STB相位微调:"));                hhh->addWidget(lb);
            cbStb = new QComboBox();                cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟");   hhh->addWidget(cbStb);
            //3.4.行信号DE相位微调
            hhh = new HBox(vvv);
            lb = new QLabel(tr("行信号DE相位微调:"));                hhh->addWidget(lb);
            cbDE = new QComboBox();                cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟");   hhh->addWidget(cbDE);
            //3.5.行信号ABC相位微调
            hhh = new HBox(vvv);
            lb = new QLabel(tr("行信号ABC相位微调:"));                hhh->addWidget(lb);
            cbABC = new QComboBox();                cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟");   hhh->addWidget(cbABC);
            //3.6.单口带载点数
            hhh = new HBox(vvv);
            lb = new QLabel(tr("单口带载点数:"));                hhh->addWidget(lb);
            spinPointsOnePort = new QSpinBox;                spinPointsOnePort->setRange(1, 999);                hhh->addWidget(spinPointsOnePort);
            hh->addSpacing(20);
            //第四列区域
            vvv = new VBox(hh);
            //4.1.消隐电平
            hhh = new HBox(vvv);
            lb = new QLabel(tr("消隐电平:"));                hhh->addWidget(lb);
            cbXiaoYinDianPing= new QComboBox();                cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效");   hhh->addWidget(cbXiaoYinDianPing);
            //4.2.锁存信号
            hhh = new HBox(vvv);
            lb = new QLabel(tr("锁存信号:"));                hhh->addWidget(lb);
            cbSTB = new QComboBox();                cbSTB->addItem("正向");cbSTB->addItem("反向");   hhh->addWidget(cbSTB);
            //4.3.行输出
            hhh = new HBox(vvv);
            lb = new QLabel(tr("行输出:"));                hhh->addWidget(lb);
            cbSRowOut = new QComboBox();                cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效");   hhh->addWidget(cbSRowOut);

            //分割线
           auto hh1 = new HBox(vBox1);
           QFrame * line   = new QFrame();
            line->setFrameShape(QFrame::HLine);
            line->setFrameShadow(QFrame::Sunken);
            line->setStyleSheet("background-color:#222;");
            hh1->addWidget(line);

            auto hh2=new HBox(vBox1);
            //计算结果竖直信息区
            auto resultInfo = new HBox(hh2);
            lb = new QLabel(tr("[普刷] 视觉刷新率:"));                resultInfo->addWidget(lb);
            float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ );                m_ctrlFreshRate = new QLabel(QString::number(freshLv1));                resultInfo->addWidget(m_ctrlFreshRate);
            resultInfo->addStretch();
            lb = new QLabel(tr("亮度有效率:"));          resultInfo->addWidget(lb);
            float BrightYouXiaoLv1=Get_Eff(8,16);        m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1));                resultInfo->addWidget(m_ctrlBrightEff);
            resultInfo->addStretch();
            lb = new QLabel(tr("最小OE:"));          resultInfo->addWidget(lb);
            float minOe=Get_Eff(8,16);        m_ctrlMinOE = new QLabel(QString::number(minOe));                resultInfo->addWidget(m_ctrlMinOE);
            resultInfo->addStretch();

            vBox1->addStretch();
            changeValueByEffectControler() ;
        }
        else if(expertWin->m_iRcvCardType == enum_xixun_sync)
        {

        }
    }

}
void NormalEffectWin::changeValueByEffectControler() {
    //spinbox
    if(expertWin->m_iRcvCardType==enum_zrf)
    {
        qDebug()<<"changeValueByEffectControler";
        QObject::connect(spinLineNs, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int value){                         qDebug() << "换行时间当前值:" << value;
                    expertWin->zrf_rcv_obj.b193=value;             });
        QObject::connect(spinLineWz, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int value){                         qDebug() << "行位置当前值:" << value;
                    expertWin->zrf_rcv_obj.b193=value;             });
        QObject::connect(spinLineXy, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int value){                         qDebug() << "消隐时间当前值:" << value;
                    expertWin->zrf_rcv_obj.b2=value;               });//
        QObject::connect(spinPointsOnePort, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int value){                  qDebug() << "单口带载点数当前值:" << value;
                    expertWin->zrf_rcv_obj.b193=value;               });

        //combox
        QObject::connect(cbDCLKf, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                   qDebug() << "DLC频率当前值:" << value;
                    expertWin->zrf_rcv_obj.b18_3_0=value;          });//
        QObject::connect(cbDclkXw, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                  qDebug() << "DCLK相位当前值:" << value;
                    expertWin->zrf_rcv_obj.b19_7_4=value;          });//
        QObject::connect(cbDclkZkb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                 qDebug() << "DCLK占空比当前值:" << value;
                    expertWin->zrf_rcv_obj.b19_3_0=value;          });//
        QObject::connect(freshBeiLv, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                qDebug() << "刷新倍率出当前值:" << value;
                    expertWin->zrf_rcv_obj.b21_7_5=value;      });//
        QObject::connect(cbGryLevel, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                qDebug() << "灰度等级出当前值:" << value;
            if(expertWin->zrf_rcv_obj.m_pwmFlag==1){
                switch(value){
                    case 0: expertWin->zrf_rcv_obj.b21_4_0=23; break;//正常4096
                    case 1: expertWin->zrf_rcv_obj.b21_4_0=26; break;//正常8192
                    case 2: expertWin->zrf_rcv_obj.b21_4_0=29; break;//正常16384
                    case 3: expertWin->zrf_rcv_obj.b21_4_0=30; break;//正常32768
                    case 4: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535
                    default: expertWin->zrf_rcv_obj.b21_4_0=31; break;//正常65535
                }

            }
            else
                expertWin->zrf_rcv_obj.b21_4_0=value;               });//
        QObject::connect(cbNoSign, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                  qDebug() << "无信号输出出当前值:" << value;
            expertWin->zrf_rcv_obj.b29_1_0=value;       });//
        QObject::connect(cbStb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                     qDebug() << "行信号STB微调出当前值:" << value;
            expertWin->zrf_rcv_obj.b193=value;         });
        QObject::connect(cbDE, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                      qDebug() << "行信号DE微调出当前值:" << value;
            expertWin->zrf_rcv_obj.b193=value;         });
        QObject::connect(cbABC, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                     qDebug() << "行信号ABC微调出当前值:" << value;
            expertWin->zrf_rcv_obj.b193=value;         });
        QObject::connect(cbXiaoYinDianPing, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){         qDebug() << "消隐电平出当前值:" << value;
            expertWin->zrf_rcv_obj.b1_5=value;         });//
        QObject::connect(cbSTB, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                     qDebug() << "锁存STB电平方向出当前值:" << value;
            expertWin->zrf_rcv_obj.b0_6=value;         });//
        QObject::connect(cbSRowOut, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=](int value){                 qDebug() << "行输出电平出当前值:" << value;
            expertWin->zrf_rcv_obj.b0_4=value;         });//
        //checkbox
        QObject::connect(checkSyncXianKa, static_cast<void (QCheckBox::*)(int)>(&QCheckBox::stateChanged), [=](int value){                 qDebug() << "同步显卡出当前值:" << value;
            if(value==0)    expertWin->zrf_rcv_obj.b26_7=value ;
            else    expertWin->zrf_rcv_obj.b26_7=0b1;      });//
        QObject::connect(checkJianLiang,  static_cast<void (QCheckBox::*)(int)>(&QCheckBox::stateChanged), [=](int value){                 qDebug() << "开屏渐亮出当前值:" << value;
            if(value==0)    expertWin->zrf_rcv_obj.b1_0=value ;
            else    expertWin->zrf_rcv_obj.b1_0=0b1;       });//
        QObject::connect(checkDoubleCopy, static_cast<void (QCheckBox::*)(int)>(&QCheckBox::stateChanged), [=](int value){                 qDebug() << "双备份出当前值:" << value;
            if(value==0)    expertWin->zrf_rcv_obj.b1_4=value ;
            else    expertWin->zrf_rcv_obj.b1_4=0b1;       });//
        QObject::connect(checkDsignalAsCLk, static_cast<void (QCheckBox::*)(int)>(&QCheckBox::stateChanged), [=](int value){                 qDebug() << "D信号作为第二组CLK出当前值:" << value;
            if(value==0)    expertWin->zrf_rcv_obj.b1_1=value ;
            else    expertWin->zrf_rcv_obj.b1_1=0b1;       });//
    }

}
void NormalEffectWin::SetEffectControlerValueByClass()
{
    if(expertWin->m_iRcvCardType == enum_zrf) {
    //spinbox
        qDebug()<<"SetEffectControlerValueByClass";
        spinLineNs->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value();
        spinLineWz->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value();
        spinLineXy->setValue(expertWin->zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();//
        spinPointsOnePort->setValue(expertWin->zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value();

        //combox
        cbDCLKf->setCurrentIndex(expertWin->zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex();
        cbDclkXw->setCurrentIndex(expertWin->zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex();
        cbDclkZkb->setCurrentIndex(expertWin->zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex();
        freshBeiLv->setCurrentIndex(expertWin->zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex();

        int index=31;
        if(expertWin->zrf_rcv_obj.m_pwmFlag==1)
            switch(expertWin->zrf_rcv_obj.b21_4_0){
                case 23: index=0; break;//正常4096
                case 26: index=1; break;//正常8192
                case 29: index=2; break;//正常16384
                case 30: index=3; break;//正常32768
                case 31: index=4; break;//正常65535
                default: index=4; break;//正常65535
            }
        else
            index=expertWin->zrf_rcv_obj.b21_4_0;
        cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex();
        cbNoSign->setCurrentIndex(expertWin->zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex();
        cbStb->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex();
        cbDE->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex();
        cbABC->setCurrentIndex(expertWin->zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex();
        cbXiaoYinDianPing->setCurrentIndex(expertWin->zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex();
        cbSTB->setCurrentIndex(expertWin->zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex();
        cbSRowOut->setCurrentIndex(expertWin->zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex();
        //checkbox
        checkSyncXianKa->setChecked(expertWin->zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked();
        checkJianLiang->setChecked(expertWin->zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked();
        checkDoubleCopy->setChecked(expertWin->zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked();
        checkDsignalAsCLk->setChecked(expertWin->zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked();
        expertWin->SendBaseParam_zrf();
    }
}
void NormalEffectWin::reSetcontrolerByIcType(QString strIcName)
{
    if(strIcName == "ICN2053")
    {
        cbDCLKf->clear();
        cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M");
                                                cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M");  ;cbDCLKf->addItem("1M");
    }
}