2021-01-29 Fred Gleason <fredg@paravelsystems.com>

* Fixed regressions in rdadmin(1) that caused data in the 'INPUTS'
	and 'OUTPUTS' table to fail to be kept in sync with data in the
	'MATRICES' table.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason 2021-01-29 12:09:23 -05:00
parent 0821eb7c27
commit 34317146b7
11 changed files with 483 additions and 28 deletions

View File

@ -20941,3 +20941,7 @@
* Added 'RDEndpointListModel'.
* Refactored the 'List Inputs'/'List Outputs' dialogs in rdadmin(1) to
use the model-based API.
2021-01-29 Fred Gleason <fredg@paravelsystems.com>
* Fixed regressions in rdadmin(1) that caused data in the 'INPUTS'
and 'OUTPUTS' table to fail to be kept in sync with data in the
'MATRICES' table.

View File

@ -60,7 +60,7 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
edit_enginenum_edit=new QLineEdit(this);
edit_enginenum_edit->setGeometry(135,36,50,20);
edit_enginenum_label=
new QLabel(edit_enginenum_edit,tr("Engine (Hex): "),this);
new QLabel(edit_enginenum_edit,tr("Engine")+":",this);
edit_enginenum_label->setGeometry(10,36,120,20);
edit_enginenum_label->setFont(labelFont());
edit_enginenum_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
@ -70,7 +70,8 @@ EditEndpoint::EditEndpoint(RDMatrix::Type type,RDMatrix::Endpoint endpoint,
//
edit_devicenum_edit=new QLineEdit(this);
edit_devicenum_edit->setGeometry(135,62,50,20);
edit_devicenum_label=new QLabel(edit_devicenum_edit,tr("Device (Hex): "),this);
edit_devicenum_label=
new QLabel(edit_devicenum_edit,tr("Device (Hex)")+":",this);
edit_devicenum_label->setGeometry(10,62,120,20);
edit_devicenum_label->setFont(labelFont());
edit_devicenum_label->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
@ -131,16 +132,25 @@ int EditEndpoint::exec(RDMatrix *mtx,RDMatrix::Endpoint endpt_type,int endpt_id)
"DEVICE_NUM "+ // 02
"from "+edit_table+" where "+
QString().sprintf("ID=%d",endpt_id);
printf("SQL: %s\n",sql.toUtf8().constData());
q=new RDSqlQuery(sql);
if(q->first()) {
edit_endpoint_edit->setText(q->value(0).toString());
if(q->value(1).toInt()>=0) {
edit_enginenum_edit->setText(QString().sprintf("%d",q->value(1).toInt()));
}
else {
edit_enginenum_edit->setText("");
}
if(q->value(2).toInt()>=0) {
edit_devicenum_edit->
setText(QString().sprintf("%04X",q->value(2).toInt()));
}
else {
edit_enginenum_edit->setText("");
}
}
delete q;
if(mtx->type()!=RDMatrix::LogitekVguest) {

View File

@ -45,8 +45,6 @@
EditMatrix::EditMatrix(RDMatrix *matrix,QWidget *parent)
: RDDialog(parent)
{
setModal(true);
QString str;
edit_matrix=matrix;
@ -1164,6 +1162,12 @@ void EditMatrix::stopCart2Data()
void EditMatrix::okData()
{
if((!ConfirmPruneEndpoints(RDMatrix::Input))||
(!ConfirmPruneEndpoints(RDMatrix::Output))) {
return;
}
PruneEndpoints(RDMatrix::Input);
PruneEndpoints(RDMatrix::Output);
if(!WriteMatrix()) {
return;
}
@ -1296,6 +1300,12 @@ bool EditMatrix::WriteMatrix()
edit_matrix->setLayer('@'+edit_layer_box->currentItem());
}
//
// Update Endpoints
//
AddEndpoints(RDMatrix::Input);
AddEndpoints(RDMatrix::Output);
//
// Update GPIO Tables
//
@ -1376,3 +1386,103 @@ void EditMatrix::WriteGpioTable(RDMatrix::GpioType type)
delete q;
}
}
void EditMatrix::AddEndpoints(RDMatrix::Endpoint ep) const
{
//
// Ensure that we have endpoint entries for at least the number of
// endpoints specified in the corresponding 'Inputs'/'Outputs'
// control. If we have "excess" entries, don't touch them!
//
QString sql;
RDSqlQuery *q=NULL;
QString table="INPUTS";
int endpoint_quan=edit_inputs_box->value();
QString name=tr("Input");
if(ep==RDMatrix::Output) {
table="OUTPUTS";
endpoint_quan=edit_outputs_box->value();
name=tr("Output");
}
for(int i=0;i<endpoint_quan;i++) {
sql=QString("select ")+
"NUMBER "+ // 00
"from "+table+" where "+
"STATION_NAME=\""+RDEscapeString(edit_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",edit_matrix->matrix())+
QString().sprintf("NUMBER=%d",i+1);
q=new RDSqlQuery(sql);
if(!q->first()) {
sql=QString("insert into ")+table+" set "+
"STATION_NAME=\""+RDEscapeString(edit_matrix->station())+"\","+
QString().sprintf("MATRIX=%d,",edit_matrix->matrix())+
QString().sprintf("NUMBER=%d,",i+1)+
"NAME=\""+RDEscapeString(name+QString().sprintf(" %03d",i+1))+"\"";
RDSqlQuery::apply(sql);
}
}
delete q;
}
void EditMatrix::PruneEndpoints(RDMatrix::Endpoint ep) const
{
QString sql;
QString table="INPUTS";
int endpoint_quan=edit_inputs_box->value();
if(ep==RDMatrix::Output) {
table="OUTPUTS";
endpoint_quan=edit_outputs_box->value();
}
sql=QString("delete from ")+table+" where "+
"STATION_NAME=\""+RDEscapeString(edit_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",edit_matrix->matrix())+
QString().sprintf("NUMBER>%d",endpoint_quan);
RDSqlQuery::apply(sql);
}
bool EditMatrix::ConfirmPruneEndpoints(RDMatrix::Endpoint ep)
{
QString sql;
RDSqlQuery *q=NULL;
QString table="INPUTS";
int endpoint_quan=edit_inputs_box->value();
QString name=tr("Inputs");
if(ep==RDMatrix::Output) {
table="OUTPUTS";
endpoint_quan=edit_outputs_box->value();
name=tr("Outputs");
}
sql=QString("select ")+
"ID "+ // 00
"from "+table+" where "+
"STATION_NAME=\""+RDEscapeString(edit_matrix->station())+"\" && "+
QString().sprintf("MATRIX=%d && ",edit_matrix->matrix())+
QString().sprintf("NUMBER>%d",endpoint_quan);
q=new RDSqlQuery(sql);
if(q->first()) {
if(QMessageBox::warning(this,"RDAdmin - "+tr("Warning"),
tr("It appears that the")+" "+name+" "+
tr("control has been changed to a lower value.")+" "+
tr("This may result in configuration data for the \"orphaned\"")+" "+name+" "+tr("being deleted.")+"\n"+
"\n"+
tr("Continue?"),
QMessageBox::Yes,QMessageBox::No)!=QMessageBox::Yes) {
delete q;
return false;
}
}
else {
delete q;
return true;
}
delete q;
return true;
}

View File

@ -68,6 +68,9 @@ class EditMatrix : public RDDialog
private:
bool WriteMatrix();
void WriteGpioTable(RDMatrix::GpioType type);
void AddEndpoints(RDMatrix::Endpoint ep) const;
void PruneEndpoints(RDMatrix::Endpoint ep) const;
bool ConfirmPruneEndpoints(RDMatrix::Endpoint ep);
RDMatrix *edit_matrix;
QString edit_stationname;
int edit_matrix_number;

View File

@ -1390,7 +1390,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Stroj (Hex):</translation>
<translation type="obsolete">Stroj (Hex):</translation>
</message>
<message>
<source>Provider ID:</source>
@ -1398,7 +1398,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Zařízení (Hex):</translation>
<translation type="obsolete">Zařízení (Hex):</translation>
</message>
<message>
<source>Service ID:</source>
@ -1432,6 +1432,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">ID služby je neplatné!</translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2355,6 +2363,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Vstup</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Výstup</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished">Varování</translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>

View File

@ -1298,7 +1298,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Engine (Hex):</translation>
<translation type="obsolete">Engine (Hex):</translation>
</message>
<message>
<source>Provider ID:</source>
@ -1306,7 +1306,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Gerät (Hex):</translation>
<translation type="obsolete">Gerät (Hex):</translation>
</message>
<message>
<source>Service ID:</source>
@ -1340,6 +1340,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">Die Service-ID ist ungültig!</translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2201,6 +2209,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Eingang</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Ausgang</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>

View File

@ -1392,7 +1392,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Motor (Hex): </translation>
<translation type="obsolete">Motor (Hex): </translation>
</message>
<message>
<source>Provider ID:</source>
@ -1400,7 +1400,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Disposit (Hex): </translation>
<translation type="obsolete">Disposit (Hex): </translation>
</message>
<message>
<source>Service ID:</source>
@ -1434,6 +1434,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">¡El ID del servicio es inválido!</translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2364,6 +2372,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Entrada</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Salida</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished">Advertencia</translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>

View File

@ -936,14 +936,6 @@ files, causing any whose files remain to be imported again.</source>
<source>Name: </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine (Hex): </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex): </source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;OK</source>
<translation type="unfinished"></translation>
@ -960,6 +952,14 @@ files, causing any whose files remain to be imported again.</source>
<source>Edit Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -1791,6 +1791,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditPypad</name>

View File

@ -1260,7 +1260,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Maskin (heksadesimal):</translation>
<translation type="obsolete">Maskin (heksadesimal):</translation>
</message>
<message>
<source>Provider ID:</source>
@ -1268,7 +1268,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Eining (heksadesimal):</translation>
<translation type="obsolete">Eining (heksadesimal):</translation>
</message>
<message>
<source>Service ID:</source>
@ -1302,6 +1302,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">Tenest-ID-en er ugyldig!</translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2177,6 +2185,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Inngang</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Utgang</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>

View File

@ -1260,7 +1260,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Maskin (heksadesimal):</translation>
<translation type="obsolete">Maskin (heksadesimal):</translation>
</message>
<message>
<source>Provider ID:</source>
@ -1268,7 +1268,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Eining (heksadesimal):</translation>
<translation type="obsolete">Eining (heksadesimal):</translation>
</message>
<message>
<source>Service ID:</source>
@ -1302,6 +1302,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">Tenest-ID-en er ugyldig!</translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2177,6 +2185,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Inngang</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Utgang</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>

View File

@ -1270,7 +1270,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Engine (Hex): </source>
<translation>Mecanismo (Hex): </translation>
<translation type="obsolete">Mecanismo (Hex): </translation>
</message>
<message>
<source>Provider ID:</source>
@ -1278,7 +1278,7 @@ files, causing any whose files remain to be imported again.</source>
</message>
<message>
<source>Device (Hex): </source>
<translation>Dispositivo (Hex): </translation>
<translation type="obsolete">Dispositivo (Hex): </translation>
</message>
<message>
<source>Service ID:</source>
@ -1312,6 +1312,14 @@ files, causing any whose files remain to be imported again.</source>
<source>The Service ID is Invalid!</source>
<translation type="obsolete">A Identificação do Serviçor é inválida! </translation>
</message>
<message>
<source>Engine</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Device (Hex)</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditFeed</name>
@ -2180,6 +2188,46 @@ GPIOs</source>
<source>The backup serial device is not active!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Input</source>
<translation type="unfinished">Entrada</translation>
</message>
<message>
<source>Output</source>
<translation type="unfinished">Saída</translation>
</message>
<message>
<source>Inputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Outputs</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Warning</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>It appears that the</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>This may result in configuration data for the &quot;orphaned&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>being deleted.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>control has been changed to a lower value.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>EditNowNext</name>