#include "visualizationpage.h"
#include "ui_visualizationpage.h"
#include <QTimer>
#include <QRandomGenerator>

VisualizationPage::VisualizationPage(QWidget *parent) :
    QFrame(parent),
    ui(new Ui::VisualizationPage),
    mDieBieMS(nullptr)
{
    ui->setupUi(this);

    mIsThisPageActivated = false;

    ui->pbPlus->hide();
    ui->rtText->hide();
    ui->tempGraph->hide();
    ui->lbTCurTemp->hide();

    ui->lbVTime->hide();
    ui->lbATime->hide();
    ui->lbTTime->hide();
    ui->lbCTime->hide();

    //V
    ui->lbVMidLegendVal->hide();
    ui->lbVMidLegendMeasure->hide();
    ui->lbVSecondLegendColorLine->hide();
    ui->lbVSecondLegendSubTitle->hide();
    //V
    ui->lbVMinLegendVal->hide();
    ui->lbVMinLegendMeasure->hide();
    ui->lbVThirdLegendColorLine->hide();
    ui->lbVThirdLegendSubTitle->hide();

    //A
    ui->lbAMidLegendVal->hide();
    ui->lbAMidLegendMeasure->hide();
    ui->lbASecondLegendColorLine->hide();
    ui->lbASecondLegendSubTitle->hide();
    //A
    ui->lbAMinLegendVal->hide();
    ui->lbAMinLegendMeasure->hide();
    ui->lbAThirdLegendColorLine->hide();
    ui->lbAThirdLegendSubTitle->hide();

    ui->checkBox->hide();
    /*
    ui->lbTMinLegendVal->hide();
    ui->lbTMinLegendMeasure->hide();
    ui->lbTThirdLegendColorLine->hide();
    ui->lbTThirdLegendSubTitle->hide();

    ui->lbTMinLegendValBms->hide();
    ui->lbTMinLegendMeasureBms->hide();
    ui->lbTThirdLegendColorLineBms->hide();
    ui->lbTThirdLegendSubTitleBms->hide();
    */


    m_btnGroup = new QButtonGroup(this);
    m_btnGroup->addButton(ui->pbVisualizationMenuBarVoltage     );
    m_btnGroup->addButton(ui->pbVisualizationMenuBarAmperage   );
    m_btnGroup->addButton(ui->pbVisualizationMenuBarTemperatureBat );
    m_btnGroup->addButton(ui->pbVisualizationMenuBarTemperatureBms );
    m_btnGroup->addButton(ui->pbVisualizationMenuBarCells );
    m_btnGroup->addButton(ui->pbVisualizationMenuBarCellsAll );

    m_currentPageIndex = TabWidgetPage::TemperatureBat;
    onTabBarButtonClicked();

    chartV = new VisualizationChart(ui->chartViewVoltage->geometry().width(), ui->chartViewVoltage->geometry().height());
    chartV->setTitleForY("Напряжение, В");
    chartV->addSeriesWithNumber(VoltageMax , tr("Максимальная"), Qt::red);
    //chartV->addSeriesWithNumber(VoltageMid , tr("Средняя"), Qt::green);
    //chartV->addSeriesWithNumber(VoltageMin , tr("Низкая"), Qt::yellow);

    chartA = new VisualizationChart(ui->chartViewAmperage->geometry().width(), ui->chartViewAmperage->geometry().height());
    chartA->setTitleForY("Ток, А");
    chartA->addSeriesWithNumber(AmperageMax , tr("Максимальная"), Qt::red);
    //chartA->addSeriesWithNumber(AmperageMid , tr("Средняя"), Qt::green);
    //chartA->addSeriesWithNumber(AmperageMin , tr("Низкая"), Qt::yellow);


     //ui->chartViewTemperature->geometry().width(),
                                    //ui->chartViewTemperature->geometry().height(),
                                    //-10, 50, false);
    /*
    chartT->addSeriesWithNumber(TemperatureMax , tr("Максимальная"), Qt::red);
    chartT->addSeriesWithNumber(TemperatureMid , tr("Средняя"), Qt::green);
    chartT->addSeriesWithNumber(TemperatureMin , tr("Низкая"), Qt::yellow);
    */
    chartT = new VisualizationChart(ui->chartViewTemperature->geometry().width(), ui->chartViewTemperature->geometry().height());
    chartT->setTitleForY("Температура, °C");
    chartT->addSeriesWithNumber(TemperatureBatMax , tr("Максимальная"), Qt::red);
    chartT->addSeriesWithNumber(TemperatureBatMid , tr("Средняя"), Qt::green);
    chartT->addSeriesWithNumber(TemperatureBatMin , tr("Низкая"), Qt::yellow);

    chartTB = new VisualizationChart(ui->chartViewTemperatureBms->geometry().width(), ui->chartViewTemperatureBms->geometry().height());
    chartTB->setTitleForY("Температура, °C");
    chartTB->addSeriesWithNumber(TemperatureBmsMax , tr("Максимальная"), Qt::red);
    chartTB->addSeriesWithNumber(TemperatureBmsMid , tr("Средняя"), Qt::green);
    chartTB->addSeriesWithNumber(TemperatureBmsMin , tr("Низкая"), Qt::yellow);

    chartC = new VisualizationChart(ui->chartViewCells->geometry().width(), ui->chartViewCells->geometry().height());
    chartC->setTitleForY("Напряжение, В");
    chartC->addSeriesWithNumber(CellsMax , tr("Максимальная"), Qt::red);
    chartC->addSeriesWithNumber(CellsMid , tr("Средняя"), Qt::green);
    chartC->addSeriesWithNumber(CellsMin , tr("Низкая"), Qt::yellow);

    chartCA = new VisualizationChart(ui->chartViewCellsAll->geometry().width(), ui->chartViewCellsAll->geometry().height());
    chartCA->setTitleForY("Напряжение, В");
    initColorsForChartCellsAll();
    //chartCA->legend();
    /*
    chartC->addSeriesWithNumber(CellsMax , tr("Максимальная"), Qt::red);
    chartC->addSeriesWithNumber(CellsMid , tr("Средняя"), Qt::green);
    chartC->addSeriesWithNumber(CellsMin , tr("Низкая"), Qt::yellow);
    */


    //chartV->setTitleForY(tr("Напряжение, В"));
    //chartA->setTitleForY(tr("Ток, А"));
    //chartT->setTitleForY(tr("Температура, °C"));
    //chartC->setTitleForY(tr("?????, ??"));

    ui->chartViewVoltage->setChart(chartV);
    ui->chartViewAmperage->setChart(chartA);
    ui->chartViewTemperature->setChart(chartT);
    ui->chartViewTemperatureBms->setChart(chartTB);
    ui->chartViewCells->setChart(chartC);
    ui->chartViewCellsAll->setChart(chartCA);

    ui->chartViewVoltage->setRenderHint(QPainter::Antialiasing);
    ui->chartViewAmperage->setRenderHint(QPainter::Antialiasing);
    ui->chartViewTemperature->setRenderHint(QPainter::Antialiasing);
    ui->chartViewTemperatureBms->setRenderHint(QPainter::Antialiasing);
    ui->chartViewCells->setRenderHint(QPainter::Antialiasing);
    ui->chartViewCellsAll->setRenderHint(QPainter::Antialiasing);


    connect(chartV, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsV);
    connect(chartA, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsA);
    connect(chartT, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsT);
    connect(chartTB, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsT);
    connect(chartC, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsC);
    //connect(chartCA, &VisualizationChart::sendSecs, this, &VisualizationPage::onSetSecsCA);

    connect(m_btnGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), this, &VisualizationPage::onTabBarButtonClicked);

    //initForPlot();

    initForCharts();

#if TURN_ON_DUMMY_DATA_FLOW_TO_GRAPHS
    onVisualizationPageSelected();
    initListWidgetOfCells(10);
#endif

}

VisualizationPage::~VisualizationPage()
{
    delete ui;
}

int VisualizationPage::mOldCellsNumber = 0;

void VisualizationPage::initListWidgetOfCells(int cells)
{
    bool doResetCellsList = (mOldCellsNumber != cells);

    mOldCellsNumber = cells;

    if(doResetCellsList)
    {
        ui->listwgtCells->clear();
        for(int i = 0; i < cells; ++i)
        {
            QListWidgetItem *item = new QListWidgetItem;
            //item->setData(Qt::UserRole, i);
            item->setData(Qt::CheckStateRole, Qt::Checked);

            QString name;
            QColor color;
            chartCA->getSeriesWithNumberNameAndColor(i, name, color);
            QString cname = color.name();
            QString cnumber = QString::number(i+1);

            //item->setData(Qt::DisplayRole, "["+ QString::number(i+1) + "] - " + name );
            item->setData(Qt::DisplayRole, "["+ cnumber + "] - Ячейка " + cnumber );
            item->setForeground(color); //(Qt::red);

            //connect (item, QListWidgetItem:: );
            connect(ui->listwgtCells, &QListWidget::itemChanged, this, &VisualizationPage::onChecked);

            ui->listwgtCells->addItem(item);
        }
    }
}

void VisualizationPage::onChecked(QListWidgetItem *item)
{
    int irow = ui->listwgtCells->row(item); // starts with ZERO
    QString text = item->text();
    bool checked = (item->checkState() == Qt::CheckState::Checked);
    //int colorMapIndex = item->data(Qt::UserRole).toInt();


    if(checked) //ui->checkBox->isChecked())
    {
        chartCA->showSeriesWithNumber(irow);
    }
    else
    {
        chartCA->hideSeriesWithNumber(irow);
    }

    //connect(ui->listwgtCells, &QListWidget::itemChanged,
}


void VisualizationPage::initColorsForChartCellsAll()
{
    //Qt::white
    //Qt::color0
    //Qt::color1
    //chartCA->addSeriesWithNumber( CellQtwhite 		                ,tr("CellQtwhite                        "),         QColor(Qt::white       ) );
    chartCA->addSeriesWithNumber( CellQtblack                       ,tr("CellQtblack                        "),         QColor(Qt::black       ) );
    chartCA->addSeriesWithNumber( CellQtdarkGray                    ,tr("CellQtdarkGray                     "),         QColor(Qt::darkGray    ) );
    chartCA->addSeriesWithNumber( CellQtgray                        ,tr("CellQtgray                         "),         QColor(Qt::gray        ) );
    chartCA->addSeriesWithNumber( CellQtlightGray                   ,tr("CellQtlightGray                    "),         QColor(Qt::lightGray   ) );
    chartCA->addSeriesWithNumber( CellQtred                         ,tr("CellQtred                          "),         QColor(Qt::red         ) );
    chartCA->addSeriesWithNumber( CellQtgreen                       ,tr("CellQtgreen                        "),         QColor(Qt::green       ) );
    chartCA->addSeriesWithNumber( CellQtblue                        ,tr("CellQtblue                         "),         QColor(Qt::blue        ) );
    chartCA->addSeriesWithNumber( CellQtcyan                        ,tr("CellQtcyan                         "),         QColor(Qt::cyan        ) );
    chartCA->addSeriesWithNumber( CellQtmagenta                     ,tr("CellQtmagenta                      "),         QColor(Qt::magenta     ) );
    chartCA->addSeriesWithNumber( CellQtyellow                      ,tr("CellQtyellow                       "),         QColor(Qt::yellow      ) );
    chartCA->addSeriesWithNumber( CellQtdarkRed                     ,tr("CellQtdarkRed                      "),         QColor(Qt::darkRed     ) );
    chartCA->addSeriesWithNumber( CellQtdarkGreen                   ,tr("CellQtdarkGreen                    "),         QColor(Qt::darkGreen   ) );
    chartCA->addSeriesWithNumber( CellQtdarkBlue                    ,tr("CellQtdarkBlue                     "),         QColor(Qt::darkBlue    ) );
    chartCA->addSeriesWithNumber( CellQtdarkCyan                    ,tr("CellQtdarkCyan                     "),         QColor(Qt::darkCyan    ) );
    chartCA->addSeriesWithNumber( CellQtdarkMagenta                 ,tr("CellQtdarkMagenta                  "),         QColor(Qt::darkMagenta ) );
    chartCA->addSeriesWithNumber( CellQtdarkYellow                  ,tr("CellQtdarkYellow                   "),         QColor(Qt::darkYellow  ) );


    //chartCA->addSeriesWithNumber(CellsMax , tr("Максимальная"), Qt::red);

 chartCA->addSeriesWithNumber(   CellAlmond						,tr("CellAlmond                         "),     QColor("#EFDBC5") ); //	239,219,197
 chartCA->addSeriesWithNumber(   CellAntiqueBrass				,tr("CellAntiqueBrass                   "),     QColor("#CD9575") ); //	205,149,117
 chartCA->addSeriesWithNumber(   CellApricot						,tr("CellApricot						"), QColor("#FDD9B5") ); //	253,217,181
 chartCA->addSeriesWithNumber(   CellAquamarine					,tr("CellAquamarine                     "),     QColor("#78DBE2") ); //	120,219,226
 chartCA->addSeriesWithNumber(   CellAsparagus					,tr("CellAsparagus                      "),     QColor("#87A96B") ); //	135,169,107
 chartCA->addSeriesWithNumber(   CellAtomicTangerine             ,tr("CellAtomicTangerine                "),    QColor("#FFA474") ); //	255,164,116
 chartCA->addSeriesWithNumber(   CellBananaMania                 ,tr("CellBananaMania                    "),    QColor("#FAE7B5") ); //	250,231,181
 chartCA->addSeriesWithNumber(   CellBeaver						,tr("CellBeaver                         "),     QColor("#9F8170") ); //	159,129,112
 chartCA->addSeriesWithNumber(   CellBittersweet					,tr("CellBittersweet					"), QColor("#FD7C6E") ); //	253,124,110
 chartCA->addSeriesWithNumber(   CellBlack						,tr("CellBlack                          "),     QColor("#232323") ); //	35,35,35
 chartCA->addSeriesWithNumber(   CellBlue						,tr("CellBlue                           "),     QColor("#1F75FE") ); //	31,117,254
 chartCA->addSeriesWithNumber(   CellBlueBell					,tr("CellBlueBell                       "),     QColor("#ADADD6") ); //	173,173,214
 chartCA->addSeriesWithNumber(   CellBlueGreen					,tr("CellBlueGreen                      "),     QColor("#199EBD") ); //	25,158,189
 chartCA->addSeriesWithNumber(   CellBlueViolet					,tr("CellBlueViolet                     "),     QColor("#2E5090") ); //	115,102,189
 chartCA->addSeriesWithNumber(   CellBluetiful					,tr("CellBluetiful                      "),     QColor("#7366BD") ); //	46,80,144
 chartCA->addSeriesWithNumber(   CellBlush						,tr("CellBlush                          "),     QColor("#DE5D83") ); //	222,93,131
 chartCA->addSeriesWithNumber(   CellBrickRed					,tr("CellBrickRed                       "),     QColor("#CB4154") ); //	203,65,84
 chartCA->addSeriesWithNumber(   CellBrown						,tr("CellBrown                          "),     QColor("#B5674D") ); //	180,103,77
 chartCA->addSeriesWithNumber(   CellBurntOrange                 ,tr("CellBurntOrange                    "),    QColor("#FF7F49") ); //	255,127,73
 chartCA->addSeriesWithNumber(   CellBurntSienna                 ,tr("CellBurntSienna                    "),    QColor("#EA7E5D") ); //	234,126,93
 chartCA->addSeriesWithNumber(   CellCadetBlue					,tr("CellCadetBlue                      "),     QColor("#B0B7C6") ); //	176,183,198
 chartCA->addSeriesWithNumber(   CellCanary						,tr("CellCanary                         "),     QColor("#FFFF99") ); //	255,255,159
 chartCA->addSeriesWithNumber(   CellCaribbeanGreen				,tr("CellCaribbeanGreen                 "),     QColor("#1CD3A2") ); //	28,211,162
 chartCA->addSeriesWithNumber(   CellCarnationPink				,tr("CellCarnationPink                  "),     QColor("#FFAACC") ); //	255,170,204
 chartCA->addSeriesWithNumber(   CellCerise						,tr("CellCerise                         "),     QColor("#FF43A4") ); //	221,68,146
 chartCA->addSeriesWithNumber(   CellCerulean					,tr("CellCerulean                       "),     QColor("#1DACD6") ); //	29,172,214
 chartCA->addSeriesWithNumber(   CellChestnut					,tr("CellChestnut                       "), QColor("#BC5D58") ); //	188,93,88
 chartCA->addSeriesWithNumber(   CellCopper						,tr("CellCopper                         "), QColor("#DD9475") ); //	221,148,117
 chartCA->addSeriesWithNumber(   CellCornflower					,tr("CellCornflower                     "), QColor("#9ACEEB") ); //	154,206,235
 chartCA->addSeriesWithNumber(   CellCottonCandy                 ,tr("CellCottonCandy                    "), QColor("#FFBCD9") ); //	255,188,217
 chartCA->addSeriesWithNumber(   CellDenim						,tr("CellDenim                          "), QColor("#2B6CC4") ); //	43,108,196
 chartCA->addSeriesWithNumber(   CellDesertSand					,tr("CellDesertSand                     "), QColor("#EFCDB8") ); //	239,205,184
 chartCA->addSeriesWithNumber(   CellEggplant					,tr("CellEggplant                       "), QColor("#DD4492") ); //	110,81,96
 chartCA->addSeriesWithNumber(   CellElectricLime				,tr("CellElectricLime                   "), QColor("#1DF914") ); //	29,249,20
 chartCA->addSeriesWithNumber(   CellFern						,tr("CellFern                           "), QColor("#71BC78") ); //	113,188,120
 chartCA->addSeriesWithNumber(   CellForestGreen                 ,tr("CellForestGreen                    "), QColor("#6DAE81") ); //	109,174,129
 chartCA->addSeriesWithNumber(   CellFuchsia						,tr("CellFuchsia						"), QColor("#C364C5") ); //	195,100,197
 chartCA->addSeriesWithNumber(   CellFuzzyWuzzy					,tr("CellFuzzyWuzzy                     "), QColor("#CC6666") ); //	204,102,102
 chartCA->addSeriesWithNumber(   CellGold						,tr("CellGold                           "), QColor("#E7C697") ); //	231,198,151
 chartCA->addSeriesWithNumber(   CellGoldenrod					,tr("CellGoldenrod                      "), QColor("#FCD975") ); //	255,217,117
 chartCA->addSeriesWithNumber(   CellGrannySmithApple			,tr("CellGrannySmithApple               "), QColor("#A8E4A0") ); //	168,228,160
 chartCA->addSeriesWithNumber(   CellGray						,tr("CellGray                           "), QColor("#95918C") ); //	149,145,140
 chartCA->addSeriesWithNumber(   CellGreen						,tr("CellGreen                          "), QColor("#1CAC78") ); //	28,172,120
 chartCA->addSeriesWithNumber(   CellGreenYellow                 ,tr("CellGreenYellow                    "), QColor("#F0E891") ); //	240,232,145
 chartCA->addSeriesWithNumber(   CellHotMagenta					,tr("CellHotMagenta                     "), QColor("#FF1DCE") ); //	255,29,206
 chartCA->addSeriesWithNumber(   CellInchworm					,tr("CellInchworm                       "), QColor("#B2EC5D") ); //	178,236,93
 chartCA->addSeriesWithNumber(   CellIndigo						,tr("CellIndigo                         "), QColor("#5D76CB") ); //	93,118,203
 chartCA->addSeriesWithNumber(   CellJazzberryJam				,tr("CellJazzberryJam                   "), QColor("#CA3767") ); //	202,55,103
 chartCA->addSeriesWithNumber(   CellJungleGreen                 ,tr("CellJungleGreen                    "), QColor("#3BB08F") ); //	59,176,143
 chartCA->addSeriesWithNumber(   CellLaserLemon					,tr("CellLaserLemon                     "), QColor("#FDFC74") ); //	253,252,116
 chartCA->addSeriesWithNumber(   CellLavender					,tr("CellLavender                       "), QColor("#FCB4D5") ); //	252,180,213
 chartCA->addSeriesWithNumber(   CellMacaroniAndCheese			,tr("CellMacaroniAndCheese              "), QColor("#FFBD88") ); //	255,189,136
 chartCA->addSeriesWithNumber(   CellMagenta						,tr("CellMagenta                        "), QColor("#FCB4D5") ); //	246,100,175
 chartCA->addSeriesWithNumber(   CellMahogany					,tr("CellMahogany                       "), QColor("#CD4A4A") ); //	205,74,74
 chartCA->addSeriesWithNumber(   CellManatee						,tr("CellManatee                        "), QColor("#979AAA") ); //	151,154,170
 chartCA->addSeriesWithNumber(   CellMangoTango					,tr("CellMangoTango                     "), QColor("#FF8243") ); //	255,130,67
 chartCA->addSeriesWithNumber(   CellMaroon						,tr("CellMaroon                         "), QColor("#C8385A") ); //	200,56,90
 chartCA->addSeriesWithNumber(   CellMauvelous					,tr("CellMauvelous                      "), QColor("#EF98AA") ); //	239,152,170
 chartCA->addSeriesWithNumber(   CellMelon						,tr("CellMelon                          "), QColor("#FDBCB4") ); //	253,188,180
 chartCA->addSeriesWithNumber(   CellMidnightBlue				,tr("CellMidnightBlue                   "), QColor("#1A4876") ); //	26,72,118
 chartCA->addSeriesWithNumber(   CellMountainMeadow				,tr("CellMountainMeadow                 "), QColor("#30BA8F") ); //	48,186,143
 chartCA->addSeriesWithNumber(   CellNavyBlue					,tr("CellNavyBlue                       "), QColor("#1974D2") ); //	25,116,210
 chartCA->addSeriesWithNumber(   CellNeonCarrot					,tr("CellNeonCarrot                     "), QColor("#FFA343") ); //	255,163,67
 chartCA->addSeriesWithNumber(   CellOliveGreen					,tr("CellOliveGreen                     "), QColor("#BAB86C") ); //	186,184,108
 chartCA->addSeriesWithNumber(   CellOrange						,tr("CellOrange                         "), QColor("#FF7538") ); //	255,117,56
 chartCA->addSeriesWithNumber(   CellOrchid						,tr("CellOrchid                         "), QColor("#C0448F") ); //	230,168,215
 chartCA->addSeriesWithNumber(   CellOuterSpace					,tr("CellOuterSpace                     "), QColor("#414AAC") ); //	65,74,76
 chartCA->addSeriesWithNumber(   CellOutrageousOrange			,tr("CellOutrageousOrange               "), QColor("#FF6E4A") ); //	255,110,74
 chartCA->addSeriesWithNumber(   CellPacificBlue                 ,tr("CellPacificBlue                    "), QColor("#1CA9C9") ); //	28,169,201
 chartCA->addSeriesWithNumber(   CellPeach						,tr("CellPeach                          "), QColor("#FFCFAB") ); //	255,207,171
 chartCA->addSeriesWithNumber(   CellPeriwinkle					,tr("CellPeriwinkle                     "), QColor("#C5D0E6") ); //	197,208,230
 chartCA->addSeriesWithNumber(   CellPiggyPink					,tr("CellPiggyPink                      "), QColor("#FDD7E4") ); //	253,215,228
 chartCA->addSeriesWithNumber(   CellPineGreen					,tr("CellPineGreen                      "), QColor("#158078") ); //	21,128,120
 chartCA->addSeriesWithNumber(   CellPinkFlamingo				,tr("CellPinkFlamingo                   "), QColor("#FC74FD") ); //	252,116,253
 chartCA->addSeriesWithNumber(   CellPinkSherbet                 ,tr("CellPinkSherbet                    "), QColor("#F780A1") ); //	247,128,161
 chartCA->addSeriesWithNumber(   CellPlum						,tr("CellPlum                           "), QColor("#8E4584") ); //	142,69,133
 chartCA->addSeriesWithNumber(   CellPurpleHeart                 ,tr("CellPurpleHeart                    "), QColor("#7442C8") ); //	116,66,200
 chartCA->addSeriesWithNumber(   CellPurpleMountainsMajesty      ,tr("CellPurpleMountainsMajesty         "), QColor("#9D81BA") ); //	157,129,186
 chartCA->addSeriesWithNumber(   CellPurplePizza                 ,tr("CellPurplePizza                    "), QColor("#FF1DCE") ); //	255,29,206
 chartCA->addSeriesWithNumber(   CellRadicalRed					,tr("CellRadicalRed                     "), QColor("#FF496C") ); //	255,73,107
 chartCA->addSeriesWithNumber(   CellRawSienna                   ,tr("CellRawSienna                      "), QColor("#D68A59") ); //	214,138,89
 chartCA->addSeriesWithNumber(   CellRazzleDazzleRose			,tr("CellRazzleDazzleRose               "), QColor("#E6A8D7") ); //	255,72,208
 chartCA->addSeriesWithNumber(   CellRazzmatazz					,tr("CellRazzmatazz                     "), QColor("#E3256B") ); //	227,37,107
 chartCA->addSeriesWithNumber(   CellRed							,tr("CellRed                            "), QColor("#EE204D") ); //	238,32,77
 chartCA->addSeriesWithNumber(   CellRedOrange					,tr("CellRedOrange                      "), QColor("#FF5349") ); //	255,83,73
 chartCA->addSeriesWithNumber(   CellRedViolet					,tr("CellRedViolet                      "), QColor("#c0448f") ); //	192,68,143
 chartCA->addSeriesWithNumber(   CellRobinsEggBlue               ,tr("CellRobinsEggBlue                  "), QColor("#1FCECB") ); //	31,206,203
 chartCA->addSeriesWithNumber(   CellRoyalPurple                 ,tr("CellRoyalPurple                    "), QColor("#7851A9") ); //	120,81,169
 chartCA->addSeriesWithNumber(   CellSalmon						,tr("CellSalmon                         "), QColor("#FF9BAA") ); //	255,155,170
 chartCA->addSeriesWithNumber(   CellScarlet						,tr("CellScarlet                        "), QColor("#FC2847") ); //	242,40,71
 chartCA->addSeriesWithNumber(   CellScreaminGreen				,tr("CellScreaminGreen                  "), QColor("#76FF7A") ); //	118,255,122
 chartCA->addSeriesWithNumber(   CellSeaGreen					,tr("CellSeaGreen                       "), QColor("#9FE2BF") ); //	159,226,191
 chartCA->addSeriesWithNumber(   CellSepia						,tr("CellSepia                          "), QColor("#A5694F") ); //	165,105,79
 chartCA->addSeriesWithNumber(   CellShadow						,tr("CellShadow                         "), QColor("#8A795D") ); //	138,121,93
 chartCA->addSeriesWithNumber(   CellShamrock					,tr("CellShamrock                       "), QColor("#45CEA2") ); //	69,206,162
 chartCA->addSeriesWithNumber(   CellShockingPink				,tr("CellShockingPink                   "), QColor("#FB7EFD") ); //	251,126,253
 chartCA->addSeriesWithNumber(   CellSilver						,tr("CellSilver                         "), QColor("#CDC5C2") ); //	205,197,194
 chartCA->addSeriesWithNumber(   CellSkyBlue                     ,tr("CellSkyBlue                        "), QColor("#80DAEB") ); //	128,218,235
 chartCA->addSeriesWithNumber(   CellSpringGreen                 ,tr("CellSpringGreen                    "), QColor("#ECEABE") ); //	236,234,190
 chartCA->addSeriesWithNumber(   CellSunglow						,tr("CellSunglow                        "), QColor("#FFCF48") ); //	255,207,72
 chartCA->addSeriesWithNumber(   CellSunsetOrange				,tr("CellSunsetOrange                   "), QColor("#FD5E53") ); //	253,94,83
 chartCA->addSeriesWithNumber(   CellTan							,tr("CellTan							"), QColor("#FAA76C") ); //	250,167,108
 chartCA->addSeriesWithNumber(   CellTickleMePink				,tr("CellTickleMePink                   "), QColor("#FC89AC") ); //	252,137,172
 chartCA->addSeriesWithNumber(   CellTimberwolf					,tr("CellTimberwolf                     "), QColor("#DBD7D2") ); //	219,215,210
 chartCA->addSeriesWithNumber(   CellTropicalRainForest          ,tr("CellTropicalRainForest             "), QColor("#17806D") ); //	23,128,109
 chartCA->addSeriesWithNumber(   CellTumbleweed					,tr("CellTumbleweed                     "), QColor("#DEAA88") ); //	222,170,136
 chartCA->addSeriesWithNumber(   CellTurquoiseBlue				,tr("CellTurquoiseBlue                  "), QColor("#77DDE7") ); //	119,221,231
 chartCA->addSeriesWithNumber(   CellUnmellowYellow				,tr("CellUnmellowYellow                 "), QColor("#FDFC74") ); //	253,252,116
 chartCA->addSeriesWithNumber(   CellVioletPurple				,tr("CellVioletPurple                   "), QColor("#926EAE") ); //	146,110,174
 chartCA->addSeriesWithNumber(   CellVioletRed					,tr("CellVioletRed                      "), QColor("#F75394") ); //	247,83,148
 chartCA->addSeriesWithNumber(   CellVividTangerine				,tr("CellVividTangerine                 "), QColor("#FFA089") ); //	255,160,137
 chartCA->addSeriesWithNumber(   CellVividViolet                 ,tr("CellVividViolet                    "), QColor("#8F509D") ); //	143,80,157
 chartCA->addSeriesWithNumber(   CellWhite						,tr("CellWhite                          "), QColor("#EDEDED") ); //	237,237,237
 chartCA->addSeriesWithNumber(   CellWildBlueYonder              ,tr("CellWildBlueYonder                 "), QColor("#A2ADD0") ); //	162,173,208
 chartCA->addSeriesWithNumber(   CellWildStrawberry				,tr("CellWildStrawberry                 "), QColor("#F664AF") ); //	255,67,164
 chartCA->addSeriesWithNumber(   CellWildWatermelon				,tr("CellWildWatermelon                 "), QColor("#FC6C85") ); //	252,108,133
 chartCA->addSeriesWithNumber(   CellWisteria					,tr("CellWisteria                       "), QColor("#CDA4DE") ); //	205,164,222
 chartCA->addSeriesWithNumber(   CellYellow						,tr("CellYellow                         "), QColor("#FCE883") ); //	252,232,131
 chartCA->addSeriesWithNumber(   CellYellowGreen                 ,tr("CellYellowGreen                    "), QColor("#C5E384") ); //	197,227,132
 chartCA->addSeriesWithNumber(   CellYellowOrange				,tr("CellYellowOrange                   "), QColor("#FB6530") ); //	255,182,83

}


void VisualizationPage::setIsPageActivated(bool isActivated)
{
    mIsThisPageActivated = isActivated;
}
bool VisualizationPage::isPageActivated()
{
    return mIsThisPageActivated;
}



void VisualizationPage::onVisualizationPageSelected()
{
    /*
    QTimer* timerV = new QTimer(this);
    connect(timerV, &QTimer::timeout, this, &VisualizationPage::onSetValV);
    timerV->setInterval(1000);
    timerV->start();

    QTimer* timerA = new QTimer(this);
    connect(timerA, &QTimer::timeout, this, &VisualizationPage::onSetValA);
    timerA->setInterval(1000);
    timerA->start();
    */
    QTimer* timerT = new QTimer(this);
    connect(timerT, &QTimer::timeout, this, &VisualizationPage::onSetValT);
    timerT->setInterval(1000);
    timerT->start();
    //*/
}


BMSInterface *VisualizationPage::bms() const
{
    return mDieBieMS;
}

void VisualizationPage::setDieBieMS(BMSInterface *dieBieMS)
{
    mDieBieMS = dieBieMS;

    /*if (mDieBieMS) {
        connect(mDieBieMS->commands(), SIGNAL(valuesReceived(BMS_VALUES)),this, SLOT(valuesReceived(BMS_VALUES)));
        connect(mDieBieMS->commands(), SIGNAL(cellsReceived(int,QVector<double>)),this, SLOT(cellsReceived(int,QVector<double>)));
    }
    */

    if (mDieBieMS) {
        connect(mDieBieMS->commands(), &Commands::valuesReceived,  this, &VisualizationPage::valuesReceived);
        connect(mDieBieMS->commands(), &Commands::cellsReceived,   this, &VisualizationPage::cellsReceived);

        connect(mDieBieMS->commands(), &Commands::auxReceived,     this, &VisualizationPage::auxReceived); //(int,QVector<double>)));
        connect(mDieBieMS->commands(), &Commands::expTempReceived, this, &VisualizationPage::expTempReceived); //(int,QVector<double>)));


        //connect(mDieBieMS->commands(), SIGNAL(valuesReceived(BMS_VALUES)),this, SLOT(valuesReceived(BMS_VALUES)));
        //connect(mDieBieMS->commands(), SIGNAL(cellsReceived(int,QVector<double>)),this, SLOT(cellsReceived(int,QVector<double>)));
    }
}



void VisualizationPage::onSetValV()
{
    int val = (QRandomGenerator::global()->generate() % 100); // +
            //10;
/*    if (val > 0) {
        //ui->lbV->setText(QString::number(val));
        chartV->append(val);
        chartV->update();
        ui->chartViewVoltage->repaint();
    }
*/
    mHCLoadVoltage.append(val);

}

void VisualizationPage::onSetValA()
{
    int val = /*(QRandomGenerator::global()->generate() % 10) +*/ 10;
    if (val > 0) {
        //ui->lbA->setText(QString::number(val));
        chartA->append(val);
        chartA->update();
        ui->chartViewAmperage->repaint();
    }
}

void VisualizationPage::onSetValT()
{
    //int val = (QRandomGenerator::global()->generate(-10,10) % T_MODUS);
    //int val = QRandomGenerator::global()->bounded(-10, 50);

    int valMax =  QRandomGenerator::global()->bounded(-10, 50) +  0;
    int valMid =  QRandomGenerator::global()->bounded(-10, 50) +  0;
    int valMin =  QRandomGenerator::global()->bounded(-10, 50) +  0;

    //if (val > 0) {
        //ui->lbT->setText(QString::number(val));
        //chartT->append(val);

        // increas X
        chartT->appendNextX();
        // then set all new Ys
        /*
        chartT->appendYToSeries(TemperatureMax, valMax);
        chartT->appendYToSeries(TemperatureMid, valMid);
        chartT->appendYToSeries(TemperatureMin, valMin);
        */
        chartT->appendYToSeries(TemperatureBatMax, valMax);
        chartT->appendYToSeries(TemperatureBatMid, valMid);
        chartT->appendYToSeries(TemperatureBatMin, valMin);

        ui->lbTMaxLegendVal->setText(QString("%1").arg(valMax));
        ui->lbTMidLegendVal->setText(QString("%1").arg(valMid));
        ui->lbTMinLegendVal->setText(QString("%1").arg(valMin));

        //chartT->refreshSeries(TemperatureMax);
        //chartT->refreshSeries(TemperatureMid);
        //chartT->refreshSeries(TemperatureMin);

        chartT->update();
        ui->chartViewTemperature->repaint();
    //}

    ///ui->lbTCurTemp->setText(QString::number(val));
    ui->lbTCurTemp->setText("");
}


void VisualizationPage::onSetSecsV(int secs)
{
    if(secs <= 0)
      ui->lbVTime->setText(QString(""));
    else if(secs < 60)
      ui->lbVTime->setText(QString("%1 с").arg(secs));
    else if(secs % 60 == 0)
      ui->lbVTime->setText(QString("%1 мин").arg(secs/60));
    else if(secs > 60)
      ui->lbVTime->setText(QString("%1 мин %2 с").arg(secs/60).arg(secs%60));
}
void VisualizationPage::onSetSecsA(int secs)
{
    if(secs <= 0)
      ui->lbATime->setText(QString(""));
    else if(secs < 60)
      ui->lbATime->setText(QString("%1 с").arg(secs));
    else if(secs % 60 == 0)
      ui->lbATime->setText(QString("%1 мин").arg(secs/60));
    else if(secs > 60)
      ui->lbATime->setText(QString("%1 мин %2 с").arg(secs/60).arg(secs%60));
}
void VisualizationPage::onSetSecsT(int secs)
{
    if(secs <= 0)
      ui->lbTTime->setText(QString(""));
    else if(secs < 60)
      ui->lbTTime->setText(QString("%1 с").arg(secs));
    else if(secs % 60 == 0)
      ui->lbTTime->setText(QString("%1 мин").arg(secs/60));
    else if(secs > 60)
      ui->lbTTime->setText(QString("%1 мин %2 с").arg(secs/60).arg(secs%60));
}
void VisualizationPage::onSetSecsC(int secs)
{
    if(secs <= 0)
      ui->lbCTime->setText(QString(""));
    else if(secs < 60)
      ui->lbCTime->setText(QString("%1 с").arg(secs));
    else if(secs % 60 == 0)
      ui->lbCTime->setText(QString("%1 мин").arg(secs/60));
    else if(secs > 60)
      ui->lbCTime->setText(QString("%1 мин %2 с").arg(secs/60).arg(secs%60));
}
/*void VisualizationPage::onSetSecsCA(int secs)
{
    if(secs <= 0)
      ui->lbCATime->setText(QString(""));
    else if(secs < 60)
      ui->lbCATime->setText(QString("%1 с").arg(secs));
    else if(secs % 60 == 0)
      ui->lbCATime->setText(QString("%1 мин").arg(secs/60));
    else if(secs > 60)
      ui->lbCATime->setText(QString("%1 мин %2 с").arg(secs/60).arg(secs%60));
}
*/


void VisualizationPage::onTabBarButtonClicked()
{
    for(auto btn: m_btnGroup->buttons())
    {
        if(!btn->isChecked())
            continue;

        if     ( btn->objectName() == ui->pbVisualizationMenuBarVoltage    ->objectName() ) m_currentPageIndex = Voltage    ;
        else if( btn->objectName() == ui->pbVisualizationMenuBarAmperage   ->objectName() ) m_currentPageIndex = Apmerage  ;
        //else if( btn->objectName() == ui->pbVisualizationMenuBarTemperature->objectName() ) m_currentPageIndex = Temperature ;
        else if( btn->objectName() == ui->pbVisualizationMenuBarTemperatureBat->objectName() ) m_currentPageIndex = TemperatureBat ;
        else if( btn->objectName() == ui->pbVisualizationMenuBarTemperatureBms->objectName() ) m_currentPageIndex = TemperatureBms ;
        else if( btn->objectName() == ui->pbVisualizationMenuBarCells      ->objectName() ) m_currentPageIndex = Cells ;
        else if( btn->objectName() == ui->pbVisualizationMenuBarCellsAll      ->objectName() ) m_currentPageIndex = CellsAll ;


        ui->tabWidgetVisualizationContent->setCurrentIndex(m_currentPageIndex);
    }
}




void VisualizationPage::initForPlot()
{
    ui->rtText->setVisible(false);

    mTimer = new QTimer(this);
    mTimer->start(20);

    mSecondCounter = 0.0;
    mLastUpdateTime = 0;

    mUpdateValPlot = false;

    /*
    ui->ivLCGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
    ui->ivHCGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
    ui->cellGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
    */
    ui->tempGraph->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);


    // LC IVGraph
    int graphIndex = 0;
    /*
    ui->ivLCGraph->addGraph();
    ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::red));
    ui->ivLCGraph->graph(graphIndex)->setName("Pack");
    graphIndex++;

    ui->ivLCGraph->addGraph();
    ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::darkGreen));
    ui->ivLCGraph->graph(graphIndex)->setName("LC Voltage");
    graphIndex++;

    ui->ivLCGraph->addGraph(ui->ivLCGraph->xAxis, ui->ivLCGraph->yAxis2);
    ui->ivLCGraph->graph(graphIndex)->setPen(QPen(Qt::green));
    ui->ivLCGraph->graph(graphIndex)->setName("LC Current");
    graphIndex++;

    // HC IVGraph
    graphIndex = 0;
    ui->ivHCGraph->addGraph();
    ui->ivHCGraph->graph(graphIndex)->setPen(QPen(Qt::blue));
    ui->ivHCGraph->graph(graphIndex)->setName("HC Voltage");
    graphIndex++;

    ui->ivHCGraph->addGraph(ui->ivHCGraph->xAxis, ui->ivHCGraph->yAxis2);
    ui->ivHCGraph->graph(graphIndex)->setPen(QPen(Qt::magenta));
    ui->ivHCGraph->graph(graphIndex)->setName("HC Current");
    graphIndex++;

    // Cell voltage graph
    graphIndex = 0;
    ui->cellGraph->addGraph();
    ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::green));
    ui->cellGraph->graph(graphIndex)->setName("Cell high");
    graphIndex++;

    ui->cellGraph->addGraph();
    ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::blue));
    ui->cellGraph->graph(graphIndex)->setName("Cell average");
    graphIndex++;

    ui->cellGraph->addGraph();
    ui->cellGraph->graph(graphIndex)->setPen(QPen(Qt::red));
    ui->cellGraph->graph(graphIndex)->setName("Cell low");
    graphIndex++;

    // Temperature graph
    // LC IVGraph
    graphIndex = 0;
    */
    ui->tempGraph->addGraph();
    ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::red));
    ui->tempGraph->graph(graphIndex)->setName("BMS High");
    graphIndex++;

    ui->tempGraph->addGraph();
    ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::green));
    ui->tempGraph->graph(graphIndex)->setName("BMS Average");
    graphIndex++;

    ui->tempGraph->addGraph();
    ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::yellow));
    ui->tempGraph->graph(graphIndex)->setName("BMS Low");
    graphIndex++;


    ///ui->tempGraph->addGraph();
    ///ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::green));
    ///ui->tempGraph->graph(graphIndex)->setName("Battery high");
    ///graphIndex++;

    ///ui->tempGraph->addGraph();
    ///ui->tempGraph->graph(graphIndex)->setPen(QPen(Qt::darkGreen));
    ///ui->tempGraph->graph(graphIndex)->setName("Battery Average");
    ///graphIndex++;

    QFont legendFont = font();
    legendFont.setPointSize(9);

    /*
    //LC Graph
    ui->ivLCGraph->legend->setVisible(true);
    ui->ivLCGraph->legend->setFont(legendFont);
    ui->ivLCGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
    ui->ivLCGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
    ui->ivLCGraph->xAxis->setLabel("Seconds (s)");
    ui->ivLCGraph->yAxis->setLabel("Voltage (V)");
    ui->ivLCGraph->yAxis2->setLabel("Current (A)");
    ui->ivLCGraph->yAxis->setRange(0, 60);
    ui->ivLCGraph->yAxis2->setRange(-5, 5);
    ui->ivLCGraph->yAxis2->setVisible(true);

    //HC Graph
    ui->ivHCGraph->legend->setVisible(true);
    ui->ivHCGraph->legend->setFont(legendFont);
    ui->ivHCGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
    ui->ivHCGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
    ui->ivHCGraph->xAxis->setLabel("Seconds (s)");
    ui->ivHCGraph->yAxis->setLabel("Voltage (V)");
    ui->ivHCGraph->yAxis2->setLabel("Current (A)");
    ui->ivHCGraph->yAxis->setRange(0, 60);
    ui->ivHCGraph->yAxis2->setRange(-5, 5);
    ui->ivHCGraph->yAxis2->setVisible(true);

    //Cell voltage Graph
    ui->cellGraph->legend->setVisible(true);
    ui->cellGraph->legend->setFont(legendFont);
    ui->cellGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
    ui->cellGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
    ui->cellGraph->xAxis->setLabel("Seconds (s)");
    ui->cellGraph->yAxis->setLabel("Voltage (V)");
    ui->cellGraph->yAxis->setRange(0, 4.2);
    */
    //Temperature Graph
    ui->tempGraph->legend->setVisible(true);
    ui->tempGraph->legend->setFont(legendFont);
    ui->tempGraph->axisRect()->insetLayout()->setInsetAlignment(0, Qt::AlignRight|Qt::AlignBottom);
    ui->tempGraph->legend->setBrush(QBrush(QColor(255,255,255,230)));
    ui->tempGraph->xAxis->setLabel("Seconds (s)");
    ui->tempGraph->yAxis->setLabel("Temperature (\u00B0C)");
    ui->tempGraph->yAxis->setRange(0, 70);
    /*
    // Cell bar graph
    group = new QCPBarsGroup(ui->cellBarGraph);
    barsNormal = new QCPBars(ui->cellBarGraph->xAxis, ui->cellBarGraph->yAxis);
    barsBalance = new QCPBars(ui->cellBarGraph->xAxis, ui->cellBarGraph->yAxis);

    barsNormal->setBrush(QColor(0, 255, 0, 50));
    barsNormal->setPen(QColor(0, 211, 56));
    barsNormal->setWidth(0.9);
    barsNormal->setBarsGroup(group);

    barsBalance->setBrush(QColor(0, 0, 255, 50));
    barsBalance->setPen(QColor(0, 211, 56));
    barsBalance->setWidth(0.9);
    barsBalance->setBarsGroup(group);

    barsBalance->moveAbove(barsNormal);

    ui->cellBarGraph->xAxis->setRange(0.5, 12);
    ui->cellBarGraph->yAxis->setRange(2.5, 4.15);
    ui->cellBarGraph->yAxis->setLabel("Voltage (V)");
    ui->cellBarGraph->xAxis->setTickLabelRotation(85);
    ui->cellBarGraph->xAxis->setSubTicks(false);
    ui->cellBarGraph->xAxis->setTickLength(0, 5);
    */

    connect(mTimer, &QTimer::timeout,this, &VisualizationPage::timerSlot);
}



void VisualizationPage::initForCharts()
{
    ui->rtText->setVisible(false);

    mTimer = new QTimer(this);
    //mTimer->start(20);
    mTimer->start(1000);

    mSecondCounter = 0.0;
    mLastUpdateTime = 0;

    mUpdateValPlot = false;

    QFont legendFont = font();
    legendFont.setPointSize(9);

    connect(mTimer, &QTimer::timeout,this, &VisualizationPage::timerSlot);
}

void VisualizationPage::timerSlot()
{
    //
    // We will start revieve Data WHEN
    // SEE - void MainWindowNew::onTimerSlot()
    // one of those left-tab-bar buttons are selected (ui->pbMainMenuBarVisualization->isChecked() || ui->pbMainMenuBarVisualization->isChecked())
    //

    if
    (
#if TURN_ON_DUMMY_DATA_FLOW_TO_GRAPHS
        true
#else
        mUpdateValPlot && mIsThisPageActivated
#endif
    )
    {
        //COMM_GET_BMS_CELLS

        /*
        int dataSize = mPackVoltage.size();

        QVector<double> xAxis(dataSize);
        for (int i = 0;i < mSeconds.size();i++) {
            xAxis[i] = mSeconds[i];
        }
        */

        // Current and duty-plot
        ///int graphIndex = 0;
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mPackVoltage);
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadVoltage);
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadCurrent);

        ///graphIndex = 0;
        ///ui->ivHCGraph->graph(graphIndex++)->setData(xAxis, mHCLoadVoltage);
        ///ui->ivHCGraph->graph(graphIndex++)->setData(xAxis, mHCLoadCurrent);

        ///graphIndex = 0;
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);

        ///graphIndex = 0;
        ///mTempBMSLow.fill(0,1);
        ///ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSHigh);
        ///ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSAverage);
        ///ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSLow);

        // V

        double valV = mPackVoltage.empty()   ? 0 : mPackVoltage.last();

        //double valVMax = mHCLoadVoltage.empty() ? 0 : mHCLoadVoltage.last();
        //double valVMid = mPackVoltage.empty()   ? 0 : mPackVoltage.last();
        //double valVMin = mLCLoadVoltage.empty() ? 0 : mLCLoadVoltage.last();

        // increas X
        chartV->appendNextX();
        // then set all new Ys
        chartV->appendYToSeries(VoltageMax, valV);

        //chartV->appendYToSeries(VoltageMax, valVMax);
        //chartV->appendYToSeries(VoltageMid, valVMid);
        //chartV->appendYToSeries(VoltageMin, valVMin);

        ui->lbVMaxLegendVal->setText(QString::number(valV,'f',2));
        //ui->lbVMaxLegendVal->setText(QString::number(valVMax,'f',2));
        //ui->lbVMidLegendVal->setText(QString::number(valVMid,'f',2));
        //ui->lbVMinLegendVal->setText(QString::number(valVMin,'f',2));

        chartV->update();
        ui->chartViewVoltage->repaint();

        // A

        //mMCLoadCurrent_.fill(0, 1);
        double valA = mPackCurrent.empty()  ? 0 : mPackCurrent.last();
        //double valAMax = mHCLoadCurrent.empty()  ? 0 : mHCLoadCurrent.last();
        //double valAMid = mMCLoadCurrent_.empty() ? 0 : mMCLoadCurrent_.last();
        //double valAMin = mLCLoadCurrent.empty()  ? 0 : mLCLoadCurrent.last();

        // increas X
        chartA->appendNextX();
        // then set all new Ys
        chartA->appendYToSeries(AmperageMax, valA);

        //chartA->appendYToSeries(AmperageMax, valAMax);
        //chartA->appendYToSeries(AmperageMid, valAMid);
        //chartA->appendYToSeries(AmperageMin, valAMin);

        ui->lbAMaxLegendVal->setText(QString::number(valA,'f',2));
        //ui->lbAMaxLegendVal->setText(QString::number(valAMax,'f',2));
        //ui->lbAMidLegendVal->setText(QString::number(valAMid,'f',2));
        //ui->lbAMinLegendVal->setText(QString::number(valAMin,'f',2));

        chartA->update();
        ui->chartViewAmperage->repaint();

        // T Bat

        //mTempBattLow_.fill(0, 1);
        double valTMax = mTempBattHigh.empty()    ? 0 : mTempBattHigh.last();
        double valTMid = mTempBattAverage.empty() ? 0 : mTempBattAverage.last();
        double valTMin = mTempBattLow.empty()     ? 0 : mTempBattLow.last();

        // increas X
        chartT->appendNextX();
        // then set all new Ys
        /*
        chartT->appendYToSeries(TemperatureMax, valTMax);
        chartT->appendYToSeries(TemperatureMid, valTMid);
        chartT->appendYToSeries(TemperatureMin, valTMin);
        */
        chartT->appendYToSeries(TemperatureBatMax, valTMax);
        chartT->appendYToSeries(TemperatureBatMid, valTMid);
        chartT->appendYToSeries(TemperatureBatMin, valTMin);

        ui->lbTMaxLegendVal->setText(QString::number(valTMax,'f',2));
        ui->lbTMidLegendVal->setText(QString::number(valTMid,'f',2));
        ui->lbTMinLegendVal->setText(QString::number(valTMin,'f',2));

        chartT->update();
        ui->chartViewTemperature->repaint();

        // T Bms

        //mTempBMSLow_.fill(0, 1);
        double valTBMax = mTempBMSHigh.empty()    ? 0 : mTempBMSHigh.last();
        double valTBMid = mTempBMSAverage.empty() ? 0 : mTempBMSAverage.last();
        double valTBMin = mTempBMSLow.empty()    ? 0 : mTempBMSLow.last();

        // increas X
        chartTB->appendNextX();
        // then set all new Ys
        /*
        chartT->appendYToSeries(TemperatureMax, valTMax);
        chartT->appendYToSeries(TemperatureMid, valTMid);
        chartT->appendYToSeries(TemperatureMin, valTMin);
        */
        chartTB->appendYToSeries(TemperatureBmsMax, valTBMax);
        chartTB->appendYToSeries(TemperatureBmsMid, valTBMid);
        chartTB->appendYToSeries(TemperatureBmsMin, valTBMin);

        ui->lbTMaxLegendValBms->setText(QString::number(valTBMax,'f',2));
        ui->lbTMidLegendValBms->setText(QString::number(valTBMid,'f',2));
        ui->lbTMinLegendValBms->setText(QString::number(valTBMin,'f',2));

        chartTB->update();
        ui->chartViewTemperatureBms->repaint();

        // C

        double valCMax = mCellVHigh.empty() ?    0 : mCellVHigh.last();
        double valCMid = mCellVAverage.empty() ? 0 : mCellVAverage.last();
        double valCMin = mCellVLow.empty() ?     0 : mCellVLow.last();

        // increas X
        chartC->appendNextX();
        // then set all new Ys
        chartC->appendYToSeries(CellsMax, valCMax);
        chartC->appendYToSeries(CellsMid, valCMid);
        chartC->appendYToSeries(CellsMin, valCMin);

        ui->lbCMaxLegendVal->setText(QString::number(valCMax,'f',2));
        ui->lbCMidLegendVal->setText(QString::number(valCMid,'f',2));
        ui->lbCMinLegendVal->setText(QString::number(valCMin,'f',2));

        chartC->update();
        ui->chartViewCells->repaint();

        // Cells //

        mCellsVals;
        //double valCMax = mCellVHigh.empty() ?    0 : mCellVHigh.last();
        //double valCMid = mCellVAverage.empty() ? 0 : mCellVAverage.last();
        //double valCMin = mCellVLow.empty() ?     0 : mCellVLow.last();

        // increas X
        chartCA->appendNextX();
        // then set all new Ys

        try
        {
            for(int i = 0; i < mCellsVals.size(); ++i)
            {
                chartCA->appendYToSeries((ChartsForCellsIndex)(i), mCellsVals.at(i));
            }
        }
        catch (...) {
            // mCellsVals.at out of bound EXCEPTION handling
        }

        //ui->lbCMaxLegendVal->setText(QString::number(valCMax,'f',2));
        //ui->lbCMidLegendVal->setText(QString::number(valCMid,'f',2));
        //ui->lbCMinLegendVal->setText(QString::number(valCMin,'f',2));

        chartCA->update();
        ui->chartViewCellsAll->repaint();


        /*
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattHigh);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattAverage);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattLow);

        ///if (ui->autoscaleButton->isChecked())
        {
            ///ui->ivLCGraph->rescaleAxes();
            ///ui->ivHCGraph->rescaleAxes();
            ///ui->cellGraph->rescaleAxes();
            ui->tempGraph->rescaleAxes();
        }

        ///ui->ivLCGraph->replot();
        ///ui->ivHCGraph->replot();
        ///ui->cellGraph->replot();
        ui->tempGraph->replot();
        ///ui->cellBarGraph->replot();

        mUpdateValPlot = false;
        */
    }
}

/* // OLD CODE
void VisualizationPage::timerSlot()
{
    if (mUpdateValPlot) {
        int dataSize = mPackVoltage.size();

        QVector<double> xAxis(dataSize);
        for (int i = 0;i < mSeconds.size();i++) {
            xAxis[i] = mSeconds[i];
        }

        // Current and duty-plot
        int graphIndex = 0;
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mPackVoltage);
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadVoltage);
        ///ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadCurrent);

        graphIndex = 0;
        ///ui->ivHCGraph->graph(graphIndex++)->setData(xAxis, mHCLoadVoltage);
        ///ui->ivHCGraph->graph(graphIndex++)->setData(xAxis, mHCLoadCurrent);

        graphIndex = 0;
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
        ///ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);

        graphIndex = 0;
        mTempBMSLow.fill(0,1);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSHigh);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSAverage);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSLow);

        //ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattHigh);
        //ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattAverage);

        ///if (ui->autoscaleButton->isChecked())
        {
            ///ui->ivLCGraph->rescaleAxes();
            ///ui->ivHCGraph->rescaleAxes();
            ///ui->cellGraph->rescaleAxes();
            ui->tempGraph->rescaleAxes();
        }

        ///ui->ivLCGraph->replot();
        ///ui->ivHCGraph->replot();
        ///ui->cellGraph->replot();
        ui->tempGraph->replot();
        ///ui->cellBarGraph->replot();

        mUpdateValPlot = false;
    }
}
*/

void VisualizationPage::valuesReceived(BMS_VALUES values)
{
    ui->rtText->setValues(values);

    const int maxS = 500;

    appendDoubleAndTrunc(&mPackVoltage, values.packVoltage, maxS);
    appendDoubleAndTrunc(&mPackCurrent, values.packCurrent, maxS);

    appendDoubleAndTrunc(&mLCLoadVoltage, values.loadLCVoltage, maxS);
    appendDoubleAndTrunc(&mLCLoadCurrent, values.loadLCCurrent, maxS);

    appendDoubleAndTrunc(&mHCLoadVoltage, values.loadHCVoltage, maxS);
    appendDoubleAndTrunc(&mHCLoadCurrent, values.loadHCCurrent, maxS);

    appendDoubleAndTrunc(&mChargerVoltage, values.chargerVoltage, maxS);

    appendDoubleAndTrunc(&mAuxVoltage, values.auxVoltage, maxS);
    appendDoubleAndTrunc(&mAuxCurrent, values.auxCurrent, maxS);

    appendDoubleAndTrunc(&mCellVHigh, values.cVHigh, maxS);
    appendDoubleAndTrunc(&mCellVAverage, values.cVAverage, maxS);
    appendDoubleAndTrunc(&mCellVLow, values.cVLow, maxS);

    appendDoubleAndTrunc(&mTempBMSHigh, values.tempBMSHigh, maxS);
    appendDoubleAndTrunc(&mTempBMSAverage, values.tempBMSAverage, maxS);
    appendDoubleAndTrunc(&mTempBMSLow, values.tempBMSLow, maxS);

    appendDoubleAndTrunc(&mTempBattHigh, values.tempBattHigh, maxS);
    appendDoubleAndTrunc(&mTempBattAverage, values.tempBattAverage, maxS);
    appendDoubleAndTrunc(&mTempBattLow, values.tempBattLow, maxS);

    appendDoubleAndTrunc(&mHumidity, values.humidity, maxS);


    qint64 tNow = QDateTime::currentMSecsSinceEpoch();

    double elapsed = (double)(tNow - mLastUpdateTime) / 1000.0;
    if (elapsed > 1.0) {
        elapsed = 1.0;
    }

    mSecondCounter += elapsed;

    appendDoubleAndTrunc(&mSeconds, mSecondCounter, maxS);

    mLastUpdateTime = tNow;

    mUpdateValPlot = true;
/*
    ui->rtText->setValues(values);

    const int maxS = 500;

    appendDoubleAndTrunc(&mPackVoltage, values.packVoltage, maxS);

    appendDoubleAndTrunc(&mLCLoadVoltage, values.loadLCVoltage, maxS);
    appendDoubleAndTrunc(&mLCLoadCurrent, values.loadLCCurrent, maxS);

    appendDoubleAndTrunc(&mHCLoadVoltage, values.loadHCVoltage, maxS);
    appendDoubleAndTrunc(&mHCLoadCurrent, values.loadHCCurrent, maxS);

    appendDoubleAndTrunc(&mAuxVoltage, values.auxVoltage, maxS);
    appendDoubleAndTrunc(&mAuxCurrent, values.auxCurrent, maxS);

    appendDoubleAndTrunc(&mCellVHigh, values.cVHigh, maxS);
    appendDoubleAndTrunc(&mCellVAverage, values.cVAverage, maxS);
    appendDoubleAndTrunc(&mCellVLow, values.cVLow, maxS);

    appendDoubleAndTrunc(&mTempBMSHigh, values.tempBMSHigh, maxS);
    appendDoubleAndTrunc(&mTempBMSAverage, values.tempBMSAverage, maxS);
    //appendDoubleAndTrunc(&mTempBMSLow_, values.tempBMSLow_, maxS);

    appendDoubleAndTrunc(&mTempBattHigh, values.tempBattHigh, maxS);
    appendDoubleAndTrunc(&mTempBattAverage, values.tempBattAverage, maxS);
    //appendDoubleAndTrunc(&mTempBattLow_, values.tempBattLow_, maxS);


    qint64 tNow = QDateTime::currentMSecsSinceEpoch();

    double elapsed = (double)(tNow - mLastUpdateTime) / 1000.0;
    if (elapsed > 1.0) {
        elapsed = 1.0;
    }

    mSecondCounter += elapsed;

    appendDoubleAndTrunc(&mSeconds, mSecondCounter, maxS);

    mLastUpdateTime = tNow;

    mUpdateValPlot = true;
*/
}

void VisualizationPage::cellsReceived(int cellCount, QVector<double> cellVoltageArray)
{
    initListWidgetOfCells(cellCount);
    mCellsVals = cellVoltageArray;

    QVector<double> dataxNew;
    dataxNew.clear();
    QVector<double> datayNormal;
    datayNormal.clear();
    QVector<double> datayBalance;
    datayBalance.clear();
    QVector<QString> labels;
    int indexPointer;

    double cellHardUnder = mDieBieMS->bmsConfig()->getParamDouble("cellHardUnderVoltage");
    double cellHardOver  = mDieBieMS->bmsConfig()->getParamDouble("cellHardOverVoltage");

    for(indexPointer = 0; indexPointer < cellCount; indexPointer++){
        dataxNew.append(indexPointer + 1);

        if(cellVoltageArray[indexPointer] < 0.0){
            datayNormal.append(0.0);
            datayBalance.append(fabs(cellVoltageArray[indexPointer]));
        }else{
            datayNormal.append(fabs(cellVoltageArray[indexPointer]));
            datayBalance.append(0.0);
        }

        QString voltageString = QStringLiteral("%1V (C").arg(fabs(cellVoltageArray[indexPointer]), 0, 'f',3);
        labels.append(voltageString + QString::number(indexPointer) + ")");
    }

    int z =0;
    //QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    //textTicker->addTicks(dataxNew, labels);

    //ui->cellBarGraph->xAxis->setTicker(textTicker);
    //ui->cellBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
    //ui->cellBarGraph->yAxis->setRange(cellHardUnder, cellHardOver);
    //barsNormal->setData(dataxNew, datayNormal);
    //barsBalance->setData(dataxNew, datayBalance);
}




/*
void VisualizationPage::timerSlot()
{
    if (mUpdateValPlot) {
        int dataSize = mPackVoltage.size();

        QVector<double> xAxis(dataSize);
        for (int i = 0;i < mSeconds.size();i++) {
            xAxis[i] = mSeconds[i];
        }

        // Current and duty-plot
        int graphIndex = 0;
        ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mPackVoltage);
        ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadVoltage);
        ui->ivLCGraph->graph(graphIndex++)->setData(xAxis, mLCLoadCurrent);

#if 0
        graphIndex = 0;
        ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
        ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
        ui->cellGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);
#endif
        graphIndex = 0;
        ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVHigh);
        ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVAverage);
        ui->cellLimitsGraph->graph(graphIndex++)->setData(xAxis, mCellVLow);

        graphIndex = 0;
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSHigh);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSAverage);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBMSLow);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattHigh);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattAverage);
        ui->tempGraph->graph(graphIndex++)->setData(xAxis, mTempBattLow);

        if (ui->autoscaleButton->isChecked()) {
            ui->ivLCGraph->rescaleAxes();
#if 0 // do not autoscale since we're displaying cell voltages
            ui->cellGraph->rescaleAxes();
#endif
            // only scale X axis
            ui->cellGraph->xAxis->rescale();
            ui->cellLimitsGraph->xAxis->rescale();
            ui->tempGraph->rescaleAxes();
        }

        ui->ivLCGraph->replot();
        ui->cellGraph->replot();
        ui->cellLimitsGraph->replot();
        ui->tempGraph->replot();
        ui->cellBarGraph->replot();
        ui->auxBarGraph->replot();
        ui->expBarGraph->replot();

        mUpdateValPlot = false;
    }
}

void VisualizationPage::valuesReceived(BMS_VALUES values)
{
    ui->rtText->setValues(values);

    const int maxS = 500;

    appendDoubleAndTrunc(&mPackVoltage, values.packVoltage, maxS);
    appendDoubleAndTrunc(&mLCLoadVoltage, values.loadLCVoltage, maxS);
    appendDoubleAndTrunc(&mLCLoadCurrent, values.loadLCCurrent, maxS);
    appendDoubleAndTrunc(&mHCLoadVoltage, values.loadHCVoltage, maxS);
    appendDoubleAndTrunc(&mHCLoadCurrent, values.loadHCCurrent, maxS);
    appendDoubleAndTrunc(&mChargerVoltage, values.chargerVoltage, maxS);
    appendDoubleAndTrunc(&mAuxVoltage, values.auxVoltage, maxS);
    appendDoubleAndTrunc(&mAuxCurrent, values.auxCurrent, maxS);

    appendDoubleAndTrunc(&mCellVHigh, values.cVHigh, maxS);
    appendDoubleAndTrunc(&mCellVAverage, values.cVAverage, maxS);
    appendDoubleAndTrunc(&mCellVLow, values.cVLow, maxS);

    appendDoubleAndTrunc(&mTempBMSHigh, values.tempBMSHigh, maxS);
    appendDoubleAndTrunc(&mTempBMSAverage, values.tempBMSAverage, maxS);
    appendDoubleAndTrunc(&mTempBMSLow, values.tempBMSLow, maxS);
    appendDoubleAndTrunc(&mTempBattHigh, values.tempBattHigh, maxS);
    appendDoubleAndTrunc(&mTempBattAverage, values.tempBattAverage, maxS);
    appendDoubleAndTrunc(&mTempBattLow, values.tempBattLow, maxS);
    appendDoubleAndTrunc(&mHumidity, values.humidity, maxS);


    qint64 tNow = QDateTime::currentMSecsSinceEpoch();

    double elapsed = (double)(tNow - mLastUpdateTime) / 1000.0;
    if (elapsed > 1.0) {
        elapsed = 1.0;
    }

    mSecondCounter += elapsed;

    appendDoubleAndTrunc(&mSeconds, mSecondCounter, maxS);

    mLastUpdateTime = tNow;

    mUpdateValPlot = true;
}


void VisualizationPage::cellsReceived(int cellCount, QVector<double> cellVoltageArray){
    QVector<double> dataxNew;
    dataxNew.clear();
    QVector<double> datayNormal;
    datayNormal.clear();
    QVector<double> datayBalance;
    datayBalance.clear();
    QVector<QString> labels;
    int indexPointer;

    double cellHardUnder = mDieBieMS->bmsConfig()->getParamDouble("cellHardUnderVoltage");
    double cellHardOver  = mDieBieMS->bmsConfig()->getParamDouble("cellHardOverVoltage");

    for(indexPointer = 0; indexPointer < cellCount; indexPointer++){
        dataxNew.append(indexPointer + 1);

        if(cellVoltageArray[indexPointer] < 0.0){
            datayNormal.append(0.0);
            datayBalance.append(fabs(cellVoltageArray[indexPointer]));
        }else{
            datayNormal.append(fabs(cellVoltageArray[indexPointer]));
            datayBalance.append(0.0);
        }

        QString voltageString = QStringLiteral("%1V (C").arg(fabs(cellVoltageArray[indexPointer]), 0, 'f',3);
        labels.append(voltageString + QString::number(indexPointer+1) + ")");
    }

    QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    textTicker->addTicks(dataxNew, labels);

    int idx = 0;
    double plotx = mSeconds.empty() ? 0 : mSeconds.last();
    for(auto v : cellVoltageArray)
    {
        // if ( auto *pg = ui->cellGraph->graph(idx) )
        // {
        //     auto ploty = fabs(v);
        //     pg->addData(plotx, ploty);
        // }
        //
        ++idx;
    }

    // ui->cellBarGraph->xAxis->setTicker(textTicker);
    // ui->cellBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
    // ui->cellBarGraph->yAxis->setRange(cellHardUnder, cellHardOver);
    // barsNormal->setData(dataxNew, datayNormal);
    // barsBalance->setData(dataxNew, datayBalance);
}
*/

void VisualizationPage::auxReceived(int auxCount, QVector<double> auxVoltageArray){
    QVector<double> dataxNew;
    dataxNew.clear();
    QVector<double> datayNormal;
    datayNormal.clear();
    QVector<QString> labels;
    int indexPointer;

    for(indexPointer = 0; indexPointer < auxCount; indexPointer++){
        dataxNew.append(indexPointer + 1);

        if(auxVoltageArray[indexPointer] < -50.0){
            datayNormal.append(0.0);
        }else{
            datayNormal.append(auxVoltageArray[indexPointer]);
        }

        QString voltageString = QStringLiteral("%1°C (TH").arg(auxVoltageArray[indexPointer], 0, 'f',3);
        labels.append(voltageString + QString::number(indexPointer+1) + ")");
    }

    QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    textTicker->addTicks(dataxNew, labels);

    /*ui->auxBarGraph->xAxis->setTicker(textTicker);
    ui->auxBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
    ui->auxBarGraph->yAxis->setRange(-40, 75);
    barsTemperature->setData(dataxNew, datayNormal);*/
}

void VisualizationPage::expTempReceived(int expTempCount, QVector<double> expTempVoltageArray){
    QVector<double> dataxNew;
    dataxNew.clear();
    QVector<double> datayNormal;
    datayNormal.clear();
    QVector<QString> labels;
    int indexPointer;

    for(indexPointer = 0; indexPointer < expTempCount; indexPointer++){
        dataxNew.append(indexPointer + 1);

        if(expTempVoltageArray[indexPointer] < -50.0){
            datayNormal.append(0.0);
        }else{
            datayNormal.append(expTempVoltageArray[indexPointer]);
        }

        QString voltageString = QStringLiteral("%1°C (T").arg(expTempVoltageArray[indexPointer], 0, 'f',3);
        labels.append(voltageString + QString::number(indexPointer) + ")");
    }

    QSharedPointer<QCPAxisTickerText> textTicker(new QCPAxisTickerText);
    textTicker->addTicks(dataxNew, labels);

    /*ui->expBarGraph->xAxis->setTicker(textTicker);
    ui->expBarGraph->xAxis->setRange(0.5, indexPointer + 0.5);
    ui->expBarGraph->yAxis->setRange(-40, 75);
    ExpBarsTemperature->setData(dataxNew, datayNormal);*/
}


void VisualizationPage::appendDoubleAndTrunc(QVector<double> *vec, double num, int maxSize)
{
    vec->append(num);

    if(vec->size() > maxSize) {
        vec->remove(0, vec->size() - maxSize);
    }
}


void VisualizationPage::on_checkBox_stateChanged(int arg1)
{
    if(ui->checkBox->isChecked())
    {
        chartT->hideSeriesWithNumber(TemperatureBatMax);
    }
    else
    {
        chartT->showSeriesWithNumber(TemperatureBatMax);
    }
}
