logplus/DataMgr/src/CreateNewTableDlg.cpp
2025-11-29 19:34:49 +08:00

293 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "CreateNewTableDlg.h"
#include "DataHelper.h"
#include "LogIO.h"
#include "dataslothelper.h"
extern DEFAULTTABLE *DefauleTable;//[DefTabNum];
extern int DefTabNum;
/*
CCreateNewTableDlg::CCreateNewTableDlg(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
}
*/
CCreateNewTableDlg::~CCreateNewTableDlg()
{
}
CCreateNewTableDlg::CCreateNewTableDlg(QDialog *parent)
: QDialog(parent)
{
//m_pUI = new Ui_CCreateNewTableDlg();
m_pUI.setupUi(this);
QObject::connect(m_pUI.okbtn, SIGNAL(clicked()), this, SLOT(slotSave()));
QObject::connect(m_pUI.cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel()));
QObject::connect(m_pUI.comboBox,SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeTableType(int)));
QObject::connect(m_pUI.tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(slotGetCell(int,int)));
QObject::connect(m_pUI.pushButton_Add, SIGNAL(clicked()), this, SLOT(slotAdd()));
QObject::connect(m_pUI.pushButton_Delete, SIGNAL(clicked()), this, SLOT(slotDelete()));
QObject::connect(m_pUI.pushButton_Up, SIGNAL(clicked()), this, SLOT(slotUp()));
QObject::connect(m_pUI.pushButton_Down, SIGNAL(clicked()), this, SLOT(slotDown()));
m_pUI.tableWidget->setColumnCount(6);
QStringList header;
header<<"字段名"<<"字段描述"<<"字段单位"<<"单位别名"<<"字段类型"<<"字段长度";
m_pUI.tableWidget->setHorizontalHeaderLabels(header);
m_pUI.tableWidget->horizontalHeader()->sectionResizeMode(QHeaderView::Stretch);
for(int i=0;i<DefTabNum;i++)
{
m_pUI.comboBox->addItem(DefauleTable[i].TableAliasName);//系统缺省表列表
}
m_pUI.comboBox->setCurrentIndex(0);
}
void CCreateNewTableDlg::slotComboxSelectChange(int index)
{
if(! m_pUI.tableWidget->isActiveWindow())
return;
//刷新当前字段内容
//QWidget *widget=m_pUI.tableWidget->cellWidget(row,col);
QComboBox *combox=(QComboBox*)sender();
int row=combox->property("row").toInt();
int col=combox->property("col").toInt();
int colIndex=index;
if(index!=5)//STRING
{
m_pUI.tableWidget->setItem(row,5,new QTableWidgetItem(QString::number(RepSize[index+1])));
m_pUI.tableWidget->item(row,5)->setFlags(
m_pUI.tableWidget->item(row,5)->flags()&(~Qt::ItemIsEditable)
);
}
else
{
m_pUI.tableWidget->item(row,5)->setFlags(
m_pUI.tableWidget->item(row,5)->flags()|Qt::ItemIsEditable|Qt::ItemIsEnabled);
//m_pUI.tableWidget->editItem(m_pUI.tableWidget->item(row,5));
}
//m_pUI.tableWidget->item(row,5)->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable);
}
void CCreateNewTableDlg::slotGetCell(int row,int column)
{
if(column!=4)return;
QString oldType=m_pUI.tableWidget->item(row,column)->text();
QComboBox *comboBox = new QComboBox();
for(int i=0;i<11;i++)
{
comboBox->addItem(QString(Rep_STR[i]));
}
connect(comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(slotComboxSelectChange(int)));
comboBox->setProperty("row",row);
comboBox->setProperty("col",column);
for(int i=0;i<11;i++)
{
if(oldType==QString(Rep_STR[i]))comboBox->setCurrentIndex(i);
}
m_pUI.tableWidget->setCellWidget(row,column, comboBox );
}
void CCreateNewTableDlg::slotChangeTableType(int No)
{
m_No = No;
m_pUI.lineEdit_Name->setText(DefauleTable[No].TableName);
m_pUI.lineEdit_Name_2->setText(DefauleTable[No].TableAliasName);
int fNum=DefauleTable[No].ZdNum;
m_pUI.tableWidget->clearContents();
m_pUI.tableWidget->setRowCount(fNum);
m_rowCount=m_pUI.tableWidget->rowCount();
for(int i=0;i<fNum;i++)
{
m_pUI.tableWidget->setItem(i,0,new QTableWidgetItem(QString(DefauleTable[No].tinfo[i].Name)));
m_pUI.tableWidget->setItem(i,1,new QTableWidgetItem(QString(DefauleTable[No].tinfo[i].HZName)));
m_pUI.tableWidget->setItem(i,2,new QTableWidgetItem(QString(DefauleTable[No].tinfo[i].Unit)));
m_pUI.tableWidget->setItem(i,3,new QTableWidgetItem(QString(DefauleTable[No].tinfo[i].HZUnit)));
QString DataType=QString(Rep_STR[DefauleTable[No].tinfo[i].RepCode-1]);
m_pUI.tableWidget->setItem(i,4,new QTableWidgetItem(DataType));
m_pUI.tableWidget->setItem(i,5,new QTableWidgetItem(QString::number(DefauleTable[No].tinfo[i].CodeLength)));
if(DataType=="STRING")
{
m_pUI.tableWidget->editItem(m_pUI.tableWidget->item(i,5));
//m_pUI.tableWidget->item(i,5)->setFlags(m_pUI.tableWidget->item(i,5)->flags()&(Qt::ItemIsEditable));//ItemIsEnabled));
}
else
{
m_pUI.tableWidget->item(i,5)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
}
m_pUI.tableWidget->item(i,0)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.tableWidget->item(i,1)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.tableWidget->item(i,2)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.tableWidget->item(i,3)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.tableWidget->item(i,4)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.tableWidget->item(i,5)->setFlags(Qt::ItemIsSelectable|Qt::NoItemFlags);
m_pUI.pushButton_Add->setEnabled(false);
m_pUI.pushButton_Delete->setEnabled(false);
m_pUI.pushButton_Up->setEnabled(false);
m_pUI.pushButton_Down->setEnabled(false);
}
}
void CCreateNewTableDlg::slotSave()
{
TableName=m_pUI.lineEdit_Name->text().toUpper();
if(TableName=="")
{
QMessageBox::warning(NULL,"警告!","表名不能为空!");return;
}
int fNum=m_pUI.tableWidget->rowCount();
if(!fNum)
{
QMessageBox::warning(NULL,"警告!","没有表字段!");return;
}
CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite);
if(!logio.mFile)
{
QMessageBox::warning(NULL,"警告!",FileName+"\r\n打开井次文件失败!");return ;
}
if(logio.FindObjectIndex(TableName.toStdString().c_str())>=0)
{
QMessageBox::warning(NULL,"警告!","您要产生的表名称已存在!");return;
}
QString TableHzName=m_pUI.lineEdit_Name_2->text();
Slf_OBJECT_FIELD *pField=new Slf_OBJECT_FIELD[fNum];
memset(pField,0,sizeof(Slf_OBJECT_FIELD)*fNum);
for(int i=0;i<fNum;i++)
{
strcpy(pField[i].Name,m_pUI.tableWidget->item(i,0)->text().toStdString().c_str());
strcpy(pField[i].HZName,m_pUI.tableWidget->item(i,1)->text().toStdString().c_str());
strcpy(pField[i].Unit,m_pUI.tableWidget->item(i,2)->text().toStdString().c_str());
strcpy(pField[i].HZUnit,m_pUI.tableWidget->item(i,3)->text().toStdString().c_str());
pField[i].ArrayNum=1;
pField[i].SamplePoint=1;
QString CodeType=m_pUI.tableWidget->item(i,4)->text();
for(int j=0;j<11;j++)
{
if(CodeType==QString(Rep_STR[j]))
{
pField[i].RepCode=j+1;
break;
}
}
pField[i].CodeLength=m_pUI.tableWidget->item(i,5)->text().toInt();
if(QString(pField[i].Name)==""||pField[i].CodeLength<=0)
{
if(QString(pField[i].Name)=="")QMessageBox::warning(NULL,"警告!","字段名不能为空!");
else QMessageBox::warning(NULL,"警告!","字段长度必须是大于0的正整数");
delete []pField;
logio.Close();
return;
}
QString strDigit = DefauleTable[m_No].tinfo[i].Reserved;//pField[i].Reserved;
bool bDigit = true;
for (int n =0;n<strDigit.size();n++)
{
if (!strDigit[n].isDigit()) // to check if it is number!!
{
bDigit = false;
break;
}
}
//FieldInfo[i].Reserved=*(DWORD *)&pf[i].Reserved;
if (bDigit)
*(DWORD *)&pField[i].Reserved = strDigit.toInt();
}
int table=logio.CreateTable(0,TableName.toLocal8Bit().toStdString().c_str(),TableHzName.toLocal8Bit().toStdString().c_str(),fNum,&pField[0],0);
delete []pField;
logio.CloseTable(table);
logio.Close();
accept();
}
void CCreateNewTableDlg::slotAdd()
{
int count=m_pUI.tableWidget->rowCount();
m_rowCount++;
QList<QTableWidgetSelectionRange> selRange=m_pUI.tableWidget->selectedRanges();
bool isSel=selRange.size()>0;
int index=0;
int sRow=isSel?(selRange.value(0).bottomRow()+1):count+1;
if(!isSel)
{
m_pUI.tableWidget->setRowCount(1+count);
index=sRow-1;
}else
{
m_pUI.tableWidget->insertRow(sRow);
index=sRow;
}
m_pUI.tableWidget->setItem(index,0,new QTableWidgetItem("name"+QString::number(index+1)));
m_pUI.tableWidget->setItem(index,1,new QTableWidgetItem("字段"+QString::number(index+1)));
m_pUI.tableWidget->setItem(index,2,new QTableWidgetItem("NONE"));
m_pUI.tableWidget->setItem(index,3,new QTableWidgetItem(""));
m_pUI.tableWidget->setItem(index,4,new QTableWidgetItem("INT"));
m_pUI.tableWidget->setItem(index,5,new QTableWidgetItem("4"));
m_pUI.tableWidget->item(index,5)->setFlags(Qt::ItemIsEditable);
}
void CCreateNewTableDlg::slotDelete()
{
if(m_rowCount<=1)
{
return;
}
int count=m_pUI.tableWidget->rowCount();
int insertRow=m_rowCount-count;
QList<QTableWidgetSelectionRange> selRanges=m_pUI.tableWidget->selectedRanges();
bool isSel=selRanges.size()>0;
if(!isSel)
{
return;
}
int index=0;
int sRow=0;
int eRow=0;
int delCount=0;
foreach(const QTableWidgetSelectionRange &range,selRanges)
{
sRow=range.topRow();
eRow=range.bottomRow();
index=sRow-delCount;
delCount=0;
for(int r=sRow;r<=eRow;r++)
{
--m_rowCount;
delCount++;
m_pUI.tableWidget->removeRow(index);
}
}
}
void CCreateNewTableDlg::slotUp()
{
//选择一行或者多行往前移动允许不连续选择如删除1、2、3、8、10行
//1、把选择的行向上移动一行移动后被选择的行仍处于选中状态可以继续上移实现多步移动
//2、CurveNameList内容随之改变
int count=m_pUI.tableWidget->rowCount();
int insertRow=m_rowCount-count;
QList<QTableWidgetSelectionRange> selRanges=m_pUI.tableWidget->selectedRanges();
bool isSel=selRanges.size()>0;
if(!isSel)
{
return;
}
DataSlotHelper::instance()->movedUp(m_pUI.tableWidget);
}
void CCreateNewTableDlg::slotDown()
{
//选择一行或者多行往后移动允许不连续选择如删除1、2、3、8、10行
//1、把选择的行向上移动一行移动后被选择的行仍处于选中状态可以继续上移实现多步移动
//2、CurveNameList内容随之改变
int count=m_pUI.tableWidget->rowCount();
int insertRow=m_rowCount-count;
QList<QTableWidgetSelectionRange> selRanges=m_pUI.tableWidget->selectedRanges();
bool isSel=selRanges.size()>0;
if(!isSel)
{
return;
}
DataSlotHelper::instance()->movedDow(m_pUI.tableWidget);
}