Files
novikova/mainwindow.cpp
2025-07-23 12:34:16 +03:00

345 lines
12 KiB
C++
Raw Permalink 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 "mainwindow.h"
#include "cmdwrd.h"
#include "reswrd.h"
unsigned char HexBinFlag = 1; //1 - hex, 0 - bin
MainWindow::MainWindow()
{
init_mainwindowobj();
init_table();
init_table_res();
init_connections();
}
void MainWindow::init_mainwindowobj()
{
qDebug() << "Startyem";
Window_1 = new QWidget;
Window_2 = new QWidget;
HexBinButton = new QPushButton("Hex/Bin");
HexBinLabel = new QLabel("Hex");
CmdWordLabel = new QLabel("Enter the command word:");
CmdWordLineEdit = new QLineEdit;
EnterCmdWordButton = new QPushButton("Enter the cmd word");
ResWordLabel = new QLabel("Enter the response word:");
ResWordLineEdit = new QLineEdit;
EnterResWordButton = new QPushButton("Enter the res word");
DataTable = new QTableWidget;
DataTableRes = new QTableWidget;
QGridLayout *layout_g = new QGridLayout(Window_2);
layout_g->addWidget(HexBinButton, 0, 1);
layout_g->addWidget(HexBinLabel, 0, 0);
layout_g->addWidget(CmdWordLabel, 1, 0); // Row 0, Column 0
layout_g->addWidget(CmdWordLineEdit, 2, 0);
layout_g->addWidget(EnterCmdWordButton, 3, 0);
layout_g->addWidget(ResWordLabel, 1, 1);
layout_g->addWidget(ResWordLineEdit, 2, 1);
layout_g->addWidget(EnterResWordButton, 3, 1);
Window_2->setLayout(layout_g);
setCentralWidget(Window_2);
QVBoxLayout *layout = new QVBoxLayout(Window_1);
layout->addWidget(Window_2);
layout->addWidget(DataTable);
layout->addWidget(DataTableRes);
Window_1->setLayout(layout);
setCentralWidget(Window_1);
}
void MainWindow::init_connections()
{
connect(EnterCmdWordButton,
SIGNAL(clicked()),
this,
SLOT(getlineedit()));
connect(EnterResWordButton,
SIGNAL(clicked()),
this,
SLOT(getlineeditres()));
connect(HexBinButton,
SIGNAL(clicked()),
this,
SLOT(HexBinChange()));
}
QString intToBinaryString(int number)
{
return QString::number(number,2);
}
QString intToDecString(int number)
{
return QString::number(number,10);
}
void MainWindow::getlineedit()
{
qDebug() << "Entered the button command word";
QString CmdW = CmdWordLineEdit->text();
qDebug() << CmdW;
QScopedPointer<CommandWord> NewCmdWord(new CommandWord());
NewCmdWord->description(CmdW);
set_item(DataTable, 0, 0, "Адрес устройства", false);
set_item(DataTable, 0, 1, intToBinaryString(NewCmdWord->DeviceAddress), false);
set_item(DataTable, 0, 2, intToDecString(NewCmdWord->DeviceAddress), false);
if(NewCmdWord->K)
{
set_item(DataTable, 1, 0, "Передача", false);
set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->K), false);
set_item(DataTable, 1, 2, intToDecString(NewCmdWord->K), false);
}
else
{
set_item(DataTable, 1, 0, "Прием", false);
set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->K), false);
set_item(DataTable, 1, 2, intToDecString(NewCmdWord->K), false);
}
if((NewCmdWord->SubAdd_CtrlMode == 0) || (NewCmdWord->SubAdd_CtrlMode == 31))
{
set_item(DataTable, 2, 0, "Режим управления", false);
set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->SubAdd_CtrlMode), false);
set_item(DataTable, 2, 2, intToDecString(NewCmdWord->SubAdd_CtrlMode), false);
}
else
{
set_item(DataTable, 2, 0, "Подадрес", false);
set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->SubAdd_CtrlMode), false);
set_item(DataTable, 2, 2, intToDecString(NewCmdWord->SubAdd_CtrlMode), false);
}
if((NewCmdWord->SubAdd_CtrlMode == 0) || (NewCmdWord->SubAdd_CtrlMode == 31))
{
set_item(DataTable, 3, 0, "Код КУ", false);
set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->NumData_CmdCode), false);
set_item(DataTable, 3, 2, intToDecString(NewCmdWord->NumData_CmdCode), false);
}
else
{
if(NewCmdWord->NumData_CmdCode == 0)
{
set_item(DataTable, 3, 0, "Число СД", false);
set_item(DataTable, 3, 1, intToBinaryString(32), false);
set_item(DataTable, 3, 2, intToDecString(32), false);
}
else
{
set_item(DataTable, 3, 0, "Число СД", false);
set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->NumData_CmdCode), false);
set_item(DataTable, 3, 2, intToDecString(NewCmdWord->NumData_CmdCode), false);
}
}
}
void MainWindow::getlineeditres()
{
qDebug() << "Entered the button response word";
QString ResW = ResWordLineEdit->text();
qDebug() << ResW;
QScopedPointer<ResponseWord> NewResWord(new ResponseWord());
NewResWord->description(ResW);
set_item(DataTableRes, 0, 0, "Адрес устройства", false);
set_item(DataTableRes, 0, 1, intToBinaryString(NewResWord->DeviceAddressR), false);
set_item(DataTableRes, 0, 2, intToDecString(NewResWord->DeviceAddressR), false);
if(NewResWord->ErrorInMsg)
{
set_item(DataTableRes, 1, 0, "Достоверная инф-я", false);
set_item(DataTableRes, 1, 1, intToBinaryString(NewResWord->ErrorInMsg), false);
set_item(DataTableRes, 1, 2, intToDecString(NewResWord->ErrorInMsg), false);
}
else
{
set_item(DataTableRes, 1, 0, "Недостоверная инф-я", false);
set_item(DataTableRes, 1, 1, intToBinaryString(NewResWord->ErrorInMsg), false);
set_item(DataTableRes, 1, 2, intToDecString(NewResWord->ErrorInMsg), false);
}
set_item(DataTableRes, 2, 0, "Передача ОС (всегда 0)", false);
set_item(DataTableRes, 2, 1, intToBinaryString(NewResWord->TransResW), false);
set_item(DataTableRes, 2, 2, intToDecString(NewResWord->TransResW), false);
if(NewResWord->SerReq)
{
set_item(DataTableRes, 3, 0, "Запрос на обслуживание", false);
set_item(DataTableRes, 3, 1, intToBinaryString(NewResWord->SerReq), false);
set_item(DataTableRes, 3, 2, intToDecString(NewResWord->SerReq), false);
}
else
{
set_item(DataTableRes, 3, 0, "Нет запроса на обсл-е", false);
set_item(DataTableRes, 3, 1, intToBinaryString(NewResWord->SerReq), false);
set_item(DataTableRes, 3, 2, intToDecString(NewResWord->SerReq), false);
}
set_item(DataTableRes, 4, 0, "Резерв", false);
set_item(DataTableRes, 4, 1, intToBinaryString(NewResWord->Reserve), false);
set_item(DataTableRes, 4, 2, intToDecString(NewResWord->Reserve), false);
if(NewResWord->GroupCmd)
{
set_item(DataTableRes, 5, 0, "Достоверная гр. команда", false);
set_item(DataTableRes, 5, 1, intToBinaryString(NewResWord->GroupCmd), false);
set_item(DataTableRes, 5, 2, intToDecString(NewResWord->GroupCmd), false);
}
else
{
set_item(DataTableRes, 5, 0, "Недостоверная гр. команда", false);
set_item(DataTableRes, 5, 1, intToBinaryString(NewResWord->GroupCmd), false);
set_item(DataTableRes, 5, 2, intToDecString(NewResWord->GroupCmd), false);
}
if(NewResWord->SubBusy)
{
set_item(DataTableRes, 6, 0, "Абонент занят", false);
set_item(DataTableRes, 6, 1, intToBinaryString(NewResWord->SubBusy), false);
set_item(DataTableRes, 6, 2, intToDecString(NewResWord->SubBusy), false);
}
else
{
set_item(DataTableRes, 6, 0, "Абонент не занят", false);
set_item(DataTableRes, 6, 1, intToBinaryString(NewResWord->SubBusy), false);
set_item(DataTableRes, 6, 2, intToDecString(NewResWord->SubBusy), false);
}
if(NewResWord->SubFailure)
{
set_item(DataTableRes, 7, 0, "Неисправность абонента", false);
set_item(DataTableRes, 7, 1, intToBinaryString(NewResWord->SubFailure), false);
set_item(DataTableRes, 7, 2, intToDecString(NewResWord->SubFailure), false);
}
else
{
set_item(DataTableRes, 7, 0, "Абонент функционирует", false);
set_item(DataTableRes, 7, 1, intToBinaryString(NewResWord->SubFailure), false);
set_item(DataTableRes, 7, 2, intToDecString(NewResWord->SubFailure), false);
}
if(NewResWord->IntCtrlAccepted)
{
set_item(DataTableRes, 8, 0, "Принято упр-е интерфейсом", false);
set_item(DataTableRes, 8, 1, intToBinaryString(NewResWord->IntCtrlAccepted), false);
set_item(DataTableRes, 8, 2, intToDecString(NewResWord->IntCtrlAccepted), false);
}
else
{
set_item(DataTableRes, 8, 0, "Не принято упр-е интерфейсом", false);
set_item(DataTableRes, 8, 1, intToBinaryString(NewResWord->IntCtrlAccepted), false);
set_item(DataTableRes, 8, 2, intToDecString(NewResWord->IntCtrlAccepted), false);
}
if(NewResWord->DeviceFailure)
{
set_item(DataTableRes, 9, 0, "Неправильное функ-е ОУ", false);
set_item(DataTableRes, 9, 1, intToBinaryString(NewResWord->DeviceFailure), false);
set_item(DataTableRes, 9, 2, intToDecString(NewResWord->DeviceFailure), false);
}
else
{
set_item(DataTableRes, 9, 0, "Правильное функ-е ОУ", false);
set_item(DataTableRes, 9, 1, intToBinaryString(NewResWord->DeviceFailure), false);
set_item(DataTableRes, 9, 2, intToDecString(NewResWord->DeviceFailure), false);
}
}
void MainWindow::HexBinChange()
{
switch(HexBinFlag)
{
case 0: //было bin
HexBinLabel->setText("Hex");
HexBinFlag = 1;
break;
case 1: //было hex
HexBinLabel->setText("Bin");
HexBinFlag = 0;
break;
}
}
void MainWindow::init_table()
{
int ColCount = 3;
int RowCount = 4;
QStringList header;
header << "Биты КС" << "Бинарное представление" << "Десятичное представление";
DataTable->setColumnCount(ColCount);
DataTable->setRowCount(RowCount);
DataTable->setHorizontalHeaderLabels(header);
DataTable->verticalHeader()->setVisible(true);
DataTable->setColumnWidth(0,160);
DataTable->setColumnWidth(1,160);
DataTable->setColumnWidth(2,160);
for(int i = 0; i < RowCount; i++)
{
DataTable->setRowHeight(i,20);
for(int j = 0; j < ColCount; j++)
set_item(DataTable, i, j, "%", false);
}
}
void MainWindow::init_table_res()
{
int ColCount = 3;
int RowCount = 10;
QStringList header;
header << "Биты ОС" << "Бинарное представление" << "Десятичное представление";
DataTableRes->setColumnCount(ColCount);
DataTableRes->setRowCount(RowCount);
DataTableRes->setHorizontalHeaderLabels(header);
DataTableRes->verticalHeader()->setVisible(true);
DataTableRes->setColumnWidth(0,180);
DataTableRes->setColumnWidth(1,160);
DataTableRes->setColumnWidth(2,160);
for(int i = 0; i < RowCount; i++)
{
DataTableRes->setRowHeight(i,20);
for(int j = 0; j < ColCount; j++)
set_item(DataTableRes, i, j, "%", false);
}
}
void MainWindow::set_item(QTableWidget *pTable, int indRow,
int indCol, QString data, bool editFlag)
{
QColor color;
color.black();
QTableWidgetItem *itm =
new QTableWidgetItem(data);
pTable->setItem(indRow,indCol,itm);
if (editFlag) {}
else
{
pTable->item(indRow, indCol)->setFlags(Qt::ItemIsSelectable|
Qt::ItemIsDragEnabled|
Qt::ItemIsUserCheckable);
}
pTable->item(indRow, indCol)->setTextColor(color);
}
MainWindow::~MainWindow()
{
}