/******************************moretypemovement.cpp文件说明**********************************
* Descript	:.源文件，包含多段运动添加数据窗口的函数实现
* Author    :caitiancheng
* Date      :2021_12_18
*******************************************************************************/


/******************************************头文件***********************************************/
#include "moretypemovement.h"
#include "ui_moretypemovement.h"
#include <QMessageBox>
#include <QCloseEvent>


/***********************************类的声明和继承****************************************/
MoreTypeMovement::MoreTypeMovement(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MoreTypeMovement)
{
    ui->setupUi(this);
    InitDataTable();
}



/****************************InitDataTable函数*********************************
Function    :初始化数据窗口函数
Output      :
*********************************************************************/
void MoreTypeMovement::InitDataTable()
{
    QStringList TableHeadTitle;
    int TableHeadTitleLength;
    TableHeadTitle.push_back(QStringLiteral("位置"));
    TableHeadTitle.push_back(QStringLiteral("速度"));
    TableHeadTitleLength=TableHeadTitle.length();
    ui->RunDataTWidget->setColumnCount(TableHeadTitleLength);

    for(int i=0;i<TableHeadTitleLength;i++)
    {
       TableHeadItem.push_back(new QTableWidgetItem(TableHeadTitle[i]));
       ui->RunDataTWidget->setHorizontalHeaderItem(i,TableHeadItem[i]);
    }
    ui->RunDataTWidget->horizontalHeader()->setStretchLastSection(true);
    ui->DelRowDataBtn->setEnabled(false);
    ui->DownRowDataBtn->setEnabled(false);
    ui->UpRowDataBtn->setEnabled(false);
    ui->WriteRowDataBtn->setEnabled(false);
}




/****************************CopyTableRow函数*********************************
Function    :复制数据表排函数
Output      :
*********************************************************************/
void MoreTypeMovement::CopyTableRow(int AtRow,int ToRow)
{
    int ColumnCountLog = ui->RunDataTWidget->columnCount();
    for(int i=0; i<ColumnCountLog; i++){
        QString TableItemValue = ui->RunDataTWidget->item(AtRow, i)->text();
        QTableWidgetItem *TableItemdm = new QTableWidgetItem;
        TableItemdm->setText(TableItemValue);
        ui->RunDataTWidget->setItem(ToRow, i, TableItemdm);
    }
}




/****************************MoveTableRow函数*********************************
Function    :移动数据表排函数
Output      :
*********************************************************************/
void MoreTypeMovement::MoveTableRow(int AtRow,int ToRow)
{
    int RowSum=ui->RunDataTWidget->rowCount();
    int RowTarget=0;
    bool direction=AtRow<ToRow?true:false;
    if(direction&&ToRow>RowSum-1)
    {
         return;
    }
     if(!direction&&ToRow<0)
    {
        return;
    }
    int SelectColumn=-1;
    QTableWidgetItem *SelectItem= ui->RunDataTWidget->currentItem();
    if(SelectItem!=NULL)
    {
        SelectColumn=SelectItem->column();
    }
    if(direction)
     {
          RowTarget=ToRow+1;
          ui->RunDataTWidget->insertRow(RowTarget);
          CopyTableRow(AtRow,RowTarget);
           ui->RunDataTWidget->removeRow(AtRow);
     }else
    {
         RowTarget=ToRow;
         ui->RunDataTWidget->insertRow(RowTarget);
         CopyTableRow(AtRow+1,RowTarget);
          ui->RunDataTWidget->removeRow(AtRow+1);
    }
     ui->RunDataTWidget->selectRow(ToRow);

    if(SelectColumn>-1)
    {
     ui->RunDataTWidget->setCurrentCell(ToRow,SelectColumn);
    }

}


/****************************GetTableNum函数*********************************
Function    :获取列表行数
Output      :
*********************************************************************/
int MoreTypeMovement::GetTableNum(QString &Str,bool *ok)
{
    int ResNum=0;
    int Slen=0;
    if(ok==NULL)
    {
        bool BoolTemp;
        ok=&BoolTemp;
    }
    *ok=false;
    if(Str.isEmpty())
    {
        return ResNum;
    }
    Slen=Str.length();
    for(int i=0;i<Slen;i++)
    {
        if(Str.at(i)>='0'&&Str.at(i)<='9')
        {
            ResNum=ResNum*10+Str.at(i).toLatin1()-'0';
        }else
        {
            return 0;
        }
    }
    *ok=true;
    return ResNum;
}



/****************************closeEvent函数*********************************
Function    :关闭窗口事件函数
Output      :
*********************************************************************/
void MoreTypeMovement::closeEvent(QCloseEvent *event)
{
     QMessageBox::StandardButton Value=QMessageBox::question(this,QStringLiteral("退出提示"),QStringLiteral("确认数据已经同步到设备?"));
    if(Value==QMessageBox::Yes)
    {
        emit CloseWin();
        event->accept();
    }else
    {
        event->ignore();
    }
}



/******************************************************析构函数*****************************************************/
MoreTypeMovement::~MoreTypeMovement()
{
    delete ui;
}



/****************************************************槽函数*****************************************************/
/****************************添加按钮槽函数*********************************
Function    :点击添加按钮，触发该槽函数
Output      :
*********************************************************************/
void MoreTypeMovement::on_AddRowDataBtn_clicked()
{
    int Row=ui->RunDataTWidget->rowCount();
    if(Row>14)
    {
        QMessageBox::information(this,QStringLiteral("添加数据"),QStringLiteral("最多只能添加15段运动"));
        return;
    }
    ui->RunDataTWidget->insertRow(Row);
    ui->DelRowDataBtn->setEnabled(true);
    ui->DownRowDataBtn->setEnabled(true);
    ui->UpRowDataBtn->setEnabled(true);
    ui->WriteRowDataBtn->setEnabled(true);
}



/****************************删除按钮槽函数*********************************
Function    :点击删除按钮，触发该槽函数
Output      :
*********************************************************************/
void MoreTypeMovement::on_DelRowDataBtn_clicked()
{
    int Row=ui->RunDataTWidget->currentRow();
    if(Row!=-1)
    {
        ui->RunDataTWidget->removeRow(Row);
    }
}


/****************************上移按钮槽函数*********************************
Function    :点击上移按钮，触发该槽函数
Output      :
*********************************************************************/
void MoreTypeMovement::on_UpRowDataBtn_clicked()
{
    int Row=ui->RunDataTWidget->currentRow();
    MoveTableRow(Row,Row-1);
}



/****************************下移按钮槽函数*********************************
Function    :点击上移按钮，触发该槽函数
Output      :
*********************************************************************/
void MoreTypeMovement::on_DownRowDataBtn_clicked()
{
    int Row=ui->RunDataTWidget->currentRow();
    MoveTableRow(Row,Row+1);
}



/****************************写入按钮槽函数*********************************
Function    :点击写入按钮，触发该槽函数
Output      :
*********************************************************************/
void MoreTypeMovement::on_WriteRowDataBtn_clicked()
{
    int Row=ui->RunDataTWidget->rowCount();
    QString PlaceTemp;
    QString SpeedTemp;
    int WriteCount=0;
    int RegAddr=250;
    bool ok1,ok2;
    int iPlaceTemp;
    int iSpeedTemp;
    for(int i=0;i<Row;i++)
    {
        PlaceTemp=ui->RunDataTWidget->item(i,0)->text();
        SpeedTemp=ui->RunDataTWidget->item(i,1)->text();
        iPlaceTemp=GetTableNum(PlaceTemp,&ok1);
        iSpeedTemp=GetTableNum(SpeedTemp,&ok2);
        if(ok1&&ok2)
        {
            WriteDInt(RegAddr,iPlaceTemp);
            WriteDInt(RegAddr+2,iSpeedTemp);
            RegAddr+=10;
            WriteCount++;
        }
    }
     WriteDInt(402,WriteCount);
    QMessageBox::information(this,QStringLiteral("写入提示"),QStringLiteral("总共写入:")+QString::number(WriteCount)+QStringLiteral("段"));
}
