M3KTE_TERM/M3KTE_TERM/devicesettingsdialog.cpp

156 lines
4.6 KiB
C++

#include "devicesettingsdialog.h"
#include "ui_devicesettingsdialog.h"
#include <QDebug>
#include <QProcess>
#include <QCoreApplication>
DeviceSettingsDialog::DeviceSettingsDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::DeviceSettingsDialog)
{
ui->setupUi(this);
on_buttonApplyChangeTimer_clicked();
{
_m_timer[0] = ui->spinTimerBoard_1;
_m_timer[1] = ui->spinTimerBoard_2;
_m_timer[2] = ui->spinTimerBoard_3;
_m_timer[3] = ui->spinTimerBoard_4;
}
_currentSpeed = ui->speedBox->currentText().toUInt();
_currentParity = ui->parityBox->currentIndex();
for(int i = 0; i < 4; i++) {
_currentAdrs[i] = i+1;
}
}
DeviceSettingsDialog::~DeviceSettingsDialog()
{
delete ui;
}
void DeviceSettingsDialog::on_buttonApplyChangeTimer_clicked()
{
_currentBoardTimers[0] = ui->spinTimerBoard_1->value();
_currentBoardTimers[1] = ui->spinTimerBoard_2->value();
_currentBoardTimers[2] = ui->spinTimerBoard_3->value();
_currentBoardTimers[3] = ui->spinTimerBoard_4->value();
}
void DeviceSettingsDialog::on_buttonApplyChangeSpeed_clicked()
{
_currentSpeed = ui->speedBox->currentIndex();
emit speedChanged();
}
void DeviceSettingsDialog::on_buttonApplyChangeParity_clicked()
{
_currentParity = ui->parityBox->currentIndex();
emit parityChanged();
}
void DeviceSettingsDialog::on_buttonApplyChangeAdr_clicked()
{
BoardIdHasBeenChanged* _boardIdHasBeenChanged = new BoardIdHasBeenChanged(ui->idComboBox->currentText().toUInt(), ui->adrSpinBox->value());
QCoreApplication::postEvent(parent(), _boardIdHasBeenChanged);
close();
}
unsigned DeviceSettingsDialog::currentBoardTimer(unsigned short _ID)
{
return _currentBoardTimers[_ID];
}
unsigned DeviceSettingsDialog::currentSpeed()
{
return _currentSpeed;
}
unsigned short DeviceSettingsDialog::currentParity()
{
return _currentParity;
}
void DeviceSettingsDialog::updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr, bool *ActiveDevices)
{
ui->speedBox->setCurrentText(QString::number(_currentSpeed=tmp_speed, 10));
if(tmp_parity>0)
tmp_parity--;
ui->parityBox->setCurrentIndex(_currentParity = tmp_parity);
for(int i = 0; i < 4; i++) {
if(ActiveDevices[i]) {
_m_timer[i]->setEnabled(true);
ui->idComboBox->addItem(QString::number(i));
_currentAdrs[i] = tmp_adr[i];
} else {
_m_timer[i]->setEnabled(false);
}
}
on_idComboBox_currentIndexChanged(ui->idComboBox->currentIndex());
}
void DeviceSettingsDialog::on_idComboBox_currentIndexChanged(int index)
{
ui->adrSpinBox->setValue(_currentAdrs[index]);
}
void DeviceSettingsDialog::on_buttonBox_clicked(QAbstractButton *button)
{
switch (ui->buttonBox->buttonRole(button)) {
case QDialogButtonBox::ResetRole:
ui->spinTimerBoard_1->setValue(1000);
ui->spinTimerBoard_2->setValue(1000);
ui->spinTimerBoard_3->setValue(1000);
ui->spinTimerBoard_4->setValue(1000);
on_buttonApplyChangeTimer_clicked();
ui->speedBox->setCurrentText("31250");
_currentSpeed = ui->speedBox->currentText().toUInt();
ui->parityBox->setCurrentIndex(0);
_currentParity = ui->parityBox->currentIndex();
for(int i = 0; i < 4; i++) {
_currentAdrs[i] = i+1;
}
ui->adrSpinBox->setValue(_currentAdrs[ui->idComboBox->currentIndex()]);
break;
case QDialogButtonBox::AcceptRole:
close();
break;
default:
break;
}
}
void DeviceSettingsDialog::initPollForBoard(unsigned boardID, unsigned boardAdr)
{
ui->idPollComboBox->addItem(QString("Плата №%1 (ID %2)").arg(boardID+1).arg(boardAdr), QVariant(boardID));
}
void DeviceSettingsDialog::updatePollStatus(unsigned boardID, bool status)
{
_currentPollStatus[boardID] = status;
}
void DeviceSettingsDialog::on_buttonApplyChangePoll_clicked()
{
sendPollCommand(ui->idPollComboBox->currentData().toUInt(), (bool)ui->pollStatusBox->currentIndex());
}
void DeviceSettingsDialog::sendPollCommand(unsigned boardID, bool status)
{
updatePollStatus(boardID, status);
pollStatusChange* _pollStatusChanged = new pollStatusChange(boardID, status);
QCoreApplication::postEvent(parent(), _pollStatusChanged);
}
void DeviceSettingsDialog::on_idPollComboBox_currentIndexChanged(int index)
{
Q_UNUSED(index);
ui->pollStatusBox->setCurrentIndex(_currentPollStatus[ui->idPollComboBox->currentData().toUInt()]);
}
void DeviceSettingsDialog::onDisconnect()
{
ui->idComboBox->clear();
ui->idPollComboBox->clear();
}