Add option to use current freq/mode in memories

kenwood
Phil Taylor 2025-03-08 10:57:42 +00:00
rodzic 7e9c96e938
commit 1574457a9e
6 zmienionych plików z 501 dodań i 414 usunięć

Wyświetl plik

@ -3029,7 +3029,6 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
uchar ffchar = 0xff;
QVector<memParserFormat> parser;
memoryType mem = value.value<memoryType>();
if (mem.sat)
{
parser = rigCaps.satParser;
@ -3076,7 +3075,13 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
}
break;
case 'd': // combined split and scan
payload.append(quint8((mem.split << 4 & 0xf0) | (mem.scan & 0x0f)));
if (mem.del) {
payload.append(ffchar);
finished=true;
break;
} else {
payload.append(quint8((mem.split << 4 & 0xf0) | (mem.scan & 0x0f)));
}
break;
case 'D': // Duplex only
payload.append(mem.duplex);
@ -3089,7 +3094,9 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
break;
case 'f':
if (mem.del) {
qDebug() << "Pre deleting f" << payload.toHex(' ');
payload.append(ffchar);
qDebug() << "Deleting f" << payload.toHex(' ');
finished=true;
break;
} else {

Wyświetl plik

@ -210,9 +210,56 @@ columnDTCSPolarityB,columnDVSquelchB,columnOffsetB,columnURB,columnR1B,columnR2B
connect(ui->table,SIGNAL(rowAdded(int)),this,SLOT(rowAdded(int)));
connect(ui->table,SIGNAL(rowValDeleted(quint32)),this,SLOT(rowDeleted(quint32)));
connect(ui->table,SIGNAL(menuAction(QAction*, quint32)),this,SLOT(menuAction(QAction*, quint32)));
connect(&timeoutTimer, SIGNAL(timeout()), this, SLOT(timeout()));
ui->table->sortByColumn(columnRecall,Qt::AscendingOrder);
ui->table->addAction(useCurrent);
ui->table->addAction(addCurrent);
}
void memories::menuAction(QAction* action, quint32 row)
{
// First we need to populate a memory struct:
memoryType mem;
vfoCommandType ta = queue->getVfoCommand(vfoA,0,false);
vfoCommandType tb;
if (rigCaps->numReceiver > 1)
tb = queue->getVfoCommand(vfoA,1,false);
else
tb = queue->getVfoCommand(vfoB,0,false);
mem.split = queue->getCache(funcSplitStatus).value.value<uchar>();
mem.frequency = queue->getCache(ta.freqFunc,ta.receiver).value.value<freqt>();
mem.mode = queue->getCache(ta.modeFunc,ta.receiver).value.value<modeInfo>().reg;
mem.filter = queue->getCache(ta.modeFunc,ta.receiver).value.value<modeInfo>().filter;
mem.frequencyB = queue->getCache(tb.freqFunc,tb.receiver).value.value<freqt>();
mem.modeB = queue->getCache(tb.modeFunc,tb.receiver).value.value<modeInfo>().reg;
mem.filterB = queue->getCache(tb.modeFunc,tb.receiver).value.value<modeInfo>().filter;
if (action == useCurrent)
{
qInfo() << "Use Current" << row;
memcpy(mem.name,"<UPDATED>",sizeof mem.name);
updateRow(row,mem);
}
else if (action == addCurrent)
{
qInfo() << "Add Current" << row;
memcpy(mem.name,"<NEW>",sizeof mem.name);
row=ui->table->rowCount();
ui->table->insertRow(ui->table->rowCount());
rowAdded(row,mem);
}
else
{
qInfo() << "Unknown action" << row;
}
}
void memories::enableCell(int row, int col, bool en) {
@ -243,7 +290,176 @@ memories::~memories()
delete ui;
}
void memories::rowAdded(int row)
int memories::updateRow(int row, memoryType mem, bool store)
{
ui->table->blockSignals(true);
int validData=0; // We have 1 more row than will ever be received.
validData += updateEntry(split,row,columnSplit,mem.split);
validData += updateEntry(skip,row,columnSkip,mem.skip);
validData += updateEntry(scan,row,columnScan,mem.scan);
ui->table->model()->setData(ui->table->model()->index(row,columnFrequency),QString::number(double(mem.frequency.Hz/1000000.0),'f',5));
validData++;
if (mem.frequencyB.Hz > 0)
ui->table->model()->setData(ui->table->model()->index(row,columnFrequencyB),QString::number(double(mem.frequencyB.Hz/1000000.0),'f',5));
else
ui->table->model()->setData(ui->table->model()->index(row,columnFrequencyB),QString::number(double(mem.frequency.Hz/1000000.0),'f',5));
validData++;
// Make sure these are populated before mode so they can be enabled/disabled.
validData += updateEntry(toneModes,row,columnToneMode,mem.tonemode);
validData += updateEntry(toneModes,row,columnToneModeB,mem.tonemodeB);
validData += updateEntry(dsql,row,columnDSQL,mem.dsql);
validData += updateEntry(dsql,row,columnDSQLB,mem.dsqlB);
validData += updateEntry(tones,row,columnTSQL,mem.tsql);
validData += updateEntry(tones,row,columnTSQLB,mem.tsqlB);
validData += updateEntry(dvsql,row,columnDVSquelch,QString::number(mem.dvsql).rightJustified(2,'0'));
validData += updateEntry(dvsql,row,columnDVSquelchB,QString::number(mem.dvsqlB).rightJustified(2,'0'));
validData += updateEntry(dtcs,row,columnDTCS,QString::number(mem.dtcs).rightJustified(3,'0'));
validData += updateEntry(dtcs,row,columnDTCSB,QString::number(mem.dtcsB).rightJustified(3,'0'));
validData += updateEntry(dtcsp,row,columnDTCSPolarity,mem.dtcsp);
validData += updateEntry(dtcsp,row,columnDTCSPolarityB,mem.dtcspB);
validData += updateEntry(dataModes,row,columnData,mem.datamode);
validData += updateEntry(dataModes,row,columnDataB,mem.datamodeB);
if (rigCaps->manufacturer == manufKenwood) {
validData += updateEntry(filters,row,columnFilter,mem.filter);
validData += updateEntry(filters,row,columnFilterB,mem.filterB);
} else {
validData += updateEntry(filters,row,columnFilter,mem.filter-1);
validData += updateEntry(filters,row,columnFilterB,mem.filterB-1);
}
validData += updateEntry(duplexModes,row,columnDuplex,mem.duplex);
validData += updateEntry(duplexModes,row,columnDuplexB,mem.duplexB);
validData += updateEntry(tones,row,columnTone,mem.tone);
validData += updateEntry(tones,row,columnToneB,mem.toneB);
validData += updateEntry(tuningSteps,row,columnTuningStep,mem.tuningStep);
ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStep),QString::number(mem.progTs));
validData++;
if (ui->table->item(row,columnTuningStep) != NULL && ui->table->item(row,columnTuningStep)->text() != "Prog")
{
ui->table->item(row,columnCustomTuningStep)->setFlags(ui->table->item(row,columnCustomTuningStep)->flags() & ~Qt::ItemIsEnabled);
}
validData += updateEntry(attenuators,row,columnAttenuator,mem.atten);
validData += updateEntry(preamps,row,columnPreamplifier,mem.preamp);
validData += updateEntry(antennas,row,columnAntenna,mem.antenna);
validData += updateEntry(ipplus,row,columnIPPlus,mem.ipplus);
ui->table->model()->setData(ui->table->model()->index(row,columnOffset),QString::number(double(mem.duplexOffset.Hz/10000.0),'f',3));
validData++;
ui->table->model()->setData(ui->table->model()->index(row,columnOffsetB),QString::number(double(mem.duplexOffsetB.Hz/10000.0),'f',3));
validData++;
if (checkASCII(mem.UR)) {
ui->table->model()->setData(ui->table->model()->index(row,columnUR),QString(mem.UR));
validData++;
} else
qInfo() << "Invalid data in ur";
if (checkASCII(mem.URB)) {
ui->table->model()->setData(ui->table->model()->index(row,columnURB),QString(mem.URB));
validData++;
} else
qInfo() << "Invalid data in urb";
if (checkASCII(mem.R1)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR1),QString(mem.R1));
validData++;
} else
qInfo() << "Invalid data in r1";
if (checkASCII(mem.R1B)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR1B),QString(mem.R1B));
validData++;
} else
qInfo() << "Invalid data in r1b";
if (checkASCII(mem.R2)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR2),QString(mem.R2));
validData++;
} else
qInfo() << "Invalid data in r2";
if (checkASCII(mem.R2B)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR2B),QString(mem.R2B));
validData++;
} else
qInfo() << "Invalid data in r2b";
if (checkASCII(mem.name)) {
ui->table->model()->setData(ui->table->model()->index(row,columnName),QString(mem.name));
validData++;
} else {
qInfo() << "Invalid data in name";
}
// These are optional so don't update validdata
updateEntry(p25Sql,row,columnP25Sql,mem.p25Sql);
ui->table->model()->setData(ui->table->model()->index(row,columnP25Nac),QString::number(mem.p25Nac,16).rightJustified(3,'0'));
updateEntry(dPmrSql,row,columnDPmrSql,mem.dPmrSql);
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrComid),QString::number(mem.dPmrComid).rightJustified(3,'0'));
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrCc),QString::number(mem.dPmrCc).rightJustified(2,'0'));
updateEntry(dPmrSCRM,row,columnDPmrSCRM,mem.dPmrSCRM);
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrKey),QString::number(mem.dPmrKey).rightJustified(5,'0'));
updateEntry(nxdnSql,row,columnNxdnSql,mem.nxdnSql);
ui->table->model()->setData(ui->table->model()->index(row,columnNxdnRan),QString::number(mem.nxdnRan).rightJustified(2,'0'));
updateEntry(nxdnEnc,row,columnNxdnEnc,mem.nxdnEnc);
ui->table->model()->setData(ui->table->model()->index(row,columnNxdnKey),QString::number(mem.nxdnKey).rightJustified(5,'0'));
updateEntry(dcrSql,row,columnDcrSql,mem.dcrSql);
ui->table->model()->setData(ui->table->model()->index(row,columnDcrUc),QString::number(mem.dcrUc).rightJustified(3,'0'));
updateEntry(dcrEnc,row,columnDcrEnc,mem.dcrEnc);
ui->table->model()->setData(ui->table->model()->index(row,columnDcrKey),QString::number(mem.dcrKey).rightJustified(5,'0'));
// Do this after all other fields to ensure they have been populated.
for (uint i=0;i<rigCaps->modes.size();i++)
{
if (mem.mode == rigCaps->modes[i].reg)
{
validData += updateEntry(modes,row,columnMode,i);
// This mode is the one we are interested in!
configColumns(row, rigCaps->modes[i]);
}
if (mem.modeB == rigCaps->modes[i].reg)
{
validData += updateEntry(modes,row,columnModeB,i);
configColumnsB(row, rigCaps->modes[i]);
}
}
ui->table->blockSignals(false);
if (store)
{
on_table_cellChanged(row,columnNum); // Force an attempt to store this row.
}
return validData;
}
void memories::rowAdded(int row, memoryType mem)
{
// Find the next available memory number:
@ -301,69 +517,10 @@ void memories::rowAdded(int row)
queue->add(priorityImmediate,queueItem(funcMemoryGroup,QVariant::fromValue<uint>(quint16(ui->group->currentData().toUInt()))));
queue->add(priorityImmediate,queueItem(selectCommand,QVariant::fromValue<uint>((quint32((ui->group->currentData().toUInt() << 16) | num)))));
});
ui->table->model()->setData(ui->table->model()->index(row,columnNum),QString::number(num).rightJustified(3,'0'));
// Set default values (where possible) for all other values:
if (ui->table->item(row,columnSplit) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnSplit),split[0]);
if (ui->table->item(row,columnSkip) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnSkip),skip[0]);
if (ui->table->item(row,columnScan) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnScan),scan[0]);
if (ui->table->item(row,columnData) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnData),dataModes[0]);
if (ui->table->item(row,columnFilter) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnFilter),filters[0]);
if (ui->table->item(row,columnDuplex) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDuplex),duplexModes[0]);
if (ui->table->item(row,columnToneMode) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnToneMode),toneModes[0]);
if (ui->table->item(row,columnTuningStep) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTuningStep),tuningSteps[0]);
if (ui->table->item(row,columnCustomTuningStep) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStep),"5");
if (ui->table->item(row,columnAttenuator) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnAttenuator),attenuators[0]);
if (ui->table->item(row,columnPreamplifier) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnPreamplifier),preamps[0]);
if (ui->table->item(row,columnAntenna) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnAntenna),antennas[0]);
if (ui->table->item(row,columnIPPlus) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnIPPlus),ipplus[0]);
if (ui->table->item(row,columnDSQL) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDSQL),dsql[0]);
if (ui->table->item(row,columnTone) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTone),tones[0]);
if (ui->table->item(row,columnTSQL) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTSQL),tones[0]);
if (ui->table->item(row,columnDTCSPolarity) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDTCSPolarity),dtcsp[0]);
if (ui->table->item(row,columnDTCS) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDTCS),dtcs[0]);
if (ui->table->item(row,columnDVSquelch) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDVSquelch),"00");
if (ui->table->item(row,columnOffset) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnOffset),"0.000");
if (ui->table->item(row,columnUR) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnUR),"CQCQCQ ");
if (ui->table->item(row,columnR1) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnR1)," ");
if (ui->table->item(row,columnR2) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnR2)," ");
if (ui->table->item(row,columnP25Sql) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnP25Sql),p25Sql[0]);
if (ui->table->item(row,columnP25Nac) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnP25Nac),"293");
updateEntry(row,columnNum,QString::number(num).rightJustified(3,'0'));
if (ui->table->item(row,columnDPmrSql) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDPmrSql),dPmrSql[0]);
if (ui->table->item(row,columnDPmrComid) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDPmrComid),"000");
if (ui->table->item(row,columnDPmrCc) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDPmrCc),"00");
if (ui->table->item(row,columnDPmrSCRM) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDPmrSCRM),dPmrSCRM[0]);
if (ui->table->item(row,columnDPmrKey) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDPmrKey),"00001");
if (ui->table->item(row,columnNxdnSql) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnNxdnSql),nxdnSql[0]);
if (ui->table->item(row,columnNxdnRan) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnNxdnRan),"00");
if (ui->table->item(row,columnNxdnEnc) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnNxdnEnc),nxdnEnc[0]);
if (ui->table->item(row,columnNxdnKey) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnNxdnKey),"00001");
if (ui->table->item(row,columnDcrSql) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDcrSql),dcrSql[0]);
if (ui->table->item(row,columnDcrUc) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDcrUc),"000");
if (ui->table->item(row,columnDcrEnc) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDcrEnc),dcrEnc[0]);
if (ui->table->item(row,columnDcrKey) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDcrKey),"00001");
if (ui->table->item(row,columnDataB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDataB),dataModes[0]);
if (ui->table->item(row,columnFilterB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnFilterB),filters[0]);
if (ui->table->item(row,columnToneModeB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnToneModeB),toneModes[0]);
if (ui->table->item(row,columnDSQLB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDSQLB),dsql[0]);
if (ui->table->item(row,columnToneB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnToneB),tones[0]);
if (ui->table->item(row,columnTSQLB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTSQLB),tones[0]);
if (ui->table->item(row,columnDTCSPolarityB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDTCSPolarityB),dtcsp[0]);
if (ui->table->item(row,columnDTCSB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDTCSB),dtcs[0]);
if (ui->table->item(row,columnDVSquelchB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDVSquelchB),"00");
if (ui->table->item(row,columnOffsetB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnOffsetB),"0.000");
if (ui->table->item(row,columnDuplexB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDuplexB),duplexModes[0]);
if (ui->table->item(row,columnURB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnURB),"CQCQCQ ");
if (ui->table->item(row,columnR1B) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnR1B)," ");
if (ui->table->item(row,columnR2B) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnR2B)," ");
ui->table->item(row,columnNum)->setFlags(ui->table->item(row,columnNum)->flags() | Qt::ItemIsEditable);
ui->table->blockSignals(false);
on_table_cellChanged(row,columnNum); // Force an attempt to store this row.
updateRow(row,mem);
}
void memories::rowDeleted(quint32 mem)
@ -610,9 +767,13 @@ void memories::on_table_cellChanged(int row, int col)
for (auto &m: rigCaps->modes){
if (!ui->table->isColumnHidden(columnMode) && ui->table->item(row,columnMode) != NULL && ui->table->item(row,columnMode)->text()==m.name) {
// This mode is the one we are interested in!
// This mode is the one we are interested in!
configColumns(row,m);
qInfo() << "Updating row" << row << "with mode" << m.name;
break;
}
if (!ui->table->isColumnHidden(columnModeB) && ui->table->item(row,columnModeB) != NULL && ui->table->item(row,columnModeB)->text()==m.name) {
// This mode is the one we are interested in!
configColumnsB(row,m);
break;
}
}
@ -1510,156 +1671,7 @@ void memories::receiveMemory(memoryType mem)
ui->table->item(row,columnNum)->setBackground(Qt::transparent);
validData++;
validData += updateCombo(split,row,columnSplit,mem.split);
validData += updateCombo(skip,row,columnSkip,mem.skip);
validData += updateCombo(scan,row,columnScan,mem.scan);
ui->table->model()->setData(ui->table->model()->index(row,columnFrequency),QString::number(double(mem.frequency.Hz/1000000.0),'f',5));
validData++;
ui->table->model()->setData(ui->table->model()->index(row,columnFrequencyB),QString::number(double(mem.frequencyB.Hz/1000000.0),'f',5));
validData++;
// Make sure these are populated before mode so they can be enabled/disabled.
validData += updateCombo(toneModes,row,columnToneMode,mem.tonemode);
validData += updateCombo(toneModes,row,columnToneModeB,mem.tonemodeB);
validData += updateCombo(dsql,row,columnDSQL,mem.dsql);
validData += updateCombo(dsql,row,columnDSQLB,mem.dsqlB);
validData += updateCombo(tones,row,columnTSQL,mem.tsql);
validData += updateCombo(tones,row,columnTSQLB,mem.tsqlB);
validData += updateCombo(dvsql,row,columnDVSquelch,QString::number(mem.dvsql).rightJustified(2,'0'));
validData += updateCombo(dvsql,row,columnDVSquelchB,QString::number(mem.dvsqlB).rightJustified(2,'0'));
validData += updateCombo(dtcs,row,columnDTCS,QString::number(mem.dtcs).rightJustified(3,'0'));
validData += updateCombo(dtcs,row,columnDTCSB,QString::number(mem.dtcsB).rightJustified(3,'0'));
validData += updateCombo(dtcsp,row,columnDTCSPolarity,mem.dtcsp);
validData += updateCombo(dtcsp,row,columnDTCSPolarityB,mem.dtcspB);
validData += updateCombo(dataModes,row,columnData,mem.datamode);
validData += updateCombo(dataModes,row,columnDataB,mem.datamodeB);
if (rigCaps->manufacturer == manufKenwood) {
validData += updateCombo(filters,row,columnFilter,mem.filter);
validData += updateCombo(filters,row,columnFilterB,mem.filterB);
} else {
validData += updateCombo(filters,row,columnFilter,mem.filter-1);
validData += updateCombo(filters,row,columnFilterB,mem.filterB-1);
}
validData += updateCombo(duplexModes,row,columnDuplex,mem.duplex);
validData += updateCombo(duplexModes,row,columnDuplexB,mem.duplexB);
validData += updateCombo(tones,row,columnTone,mem.tone);
validData += updateCombo(tones,row,columnToneB,mem.toneB);
validData += updateCombo(tuningSteps,row,columnTuningStep,mem.tuningStep);
ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStep),QString::number(mem.progTs));
validData++;
if (ui->table->item(row,columnTuningStep) != NULL && ui->table->item(row,columnTuningStep)->text() != "Prog")
ui->table->item(row,columnCustomTuningStep)->setFlags(ui->table->item(row,columnCustomTuningStep)->flags() & ~Qt::ItemIsEnabled);
validData += updateCombo(attenuators,row,columnAttenuator,mem.atten);
validData += updateCombo(preamps,row,columnPreamplifier,mem.preamp);
validData += updateCombo(antennas,row,columnAntenna,mem.antenna);
validData += updateCombo(ipplus,row,columnIPPlus,mem.ipplus);
ui->table->model()->setData(ui->table->model()->index(row,columnOffset),QString::number(double(mem.duplexOffset.Hz/10000.0),'f',3));
validData++;
ui->table->model()->setData(ui->table->model()->index(row,columnOffsetB),QString::number(double(mem.duplexOffsetB.Hz/10000.0),'f',3));
validData++;
if (checkASCII(mem.UR)) {
ui->table->model()->setData(ui->table->model()->index(row,columnUR),QString(mem.UR));
validData++;
} else
qInfo() << "Invalid data in ur";
if (checkASCII(mem.URB)) {
ui->table->model()->setData(ui->table->model()->index(row,columnURB),QString(mem.URB));
validData++;
} else
qInfo() << "Invalid data in urb";
if (checkASCII(mem.R1)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR1),QString(mem.R1));
validData++;
} else
qInfo() << "Invalid data in r1";
if (checkASCII(mem.R1B)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR1B),QString(mem.R1B));
validData++;
} else
qInfo() << "Invalid data in r1b";
if (checkASCII(mem.R2)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR2),QString(mem.R2));
validData++;
} else
qInfo() << "Invalid data in r2";
if (checkASCII(mem.R2B)) {
ui->table->model()->setData(ui->table->model()->index(row,columnR2B),QString(mem.R2B));
validData++;
} else
qInfo() << "Invalid data in r2b";
if (checkASCII(mem.name)) {
ui->table->model()->setData(ui->table->model()->index(row,columnName),QString(mem.name));
validData++;
} else {
qInfo() << "Invalid data in name";
}
// These are optional so don't update validdata
updateCombo(p25Sql,row,columnP25Sql,mem.p25Sql);
ui->table->model()->setData(ui->table->model()->index(row,columnP25Nac),QString::number(mem.p25Nac,16).rightJustified(3,'0'));
updateCombo(dPmrSql,row,columnDPmrSql,mem.dPmrSql);
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrComid),QString::number(mem.dPmrComid).rightJustified(3,'0'));
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrCc),QString::number(mem.dPmrCc).rightJustified(2,'0'));
updateCombo(dPmrSCRM,row,columnDPmrSCRM,mem.dPmrSCRM);
ui->table->model()->setData(ui->table->model()->index(row,columnDPmrKey),QString::number(mem.dPmrKey).rightJustified(5,'0'));
updateCombo(nxdnSql,row,columnNxdnSql,mem.nxdnSql);
ui->table->model()->setData(ui->table->model()->index(row,columnNxdnRan),QString::number(mem.nxdnRan).rightJustified(2,'0'));
updateCombo(nxdnEnc,row,columnNxdnEnc,mem.nxdnEnc);
ui->table->model()->setData(ui->table->model()->index(row,columnNxdnKey),QString::number(mem.nxdnKey).rightJustified(5,'0'));
updateCombo(dcrSql,row,columnDcrSql,mem.dcrSql);
ui->table->model()->setData(ui->table->model()->index(row,columnDcrUc),QString::number(mem.dcrUc).rightJustified(3,'0'));
updateCombo(dcrEnc,row,columnDcrEnc,mem.dcrEnc);
ui->table->model()->setData(ui->table->model()->index(row,columnDcrKey),QString::number(mem.dcrKey).rightJustified(5,'0'));
// Do this after all other fields to ensure they have been populated.
for (uint i=0;i<rigCaps->modes.size();i++)
{
if (mem.mode == rigCaps->modes[i].reg)
{
validData += updateCombo(modes,row,columnMode,i);
// This mode is the one we are interested in!
configColumns(row, rigCaps->modes[i]);
}
if (mem.modeB == rigCaps->modes[i].reg)
{
validData += updateCombo(modes,row,columnModeB,i);
}
}
ui->table->blockSignals(false);
validData = validData + updateRow(row,mem,false);
if (retries > 2)
{
@ -1686,8 +1698,7 @@ void memories::receiveMemory(memoryType mem)
}
int memories::updateCombo(QStringList& combo, int row, columns column, quint8 data)
int memories::updateEntry(QStringList& combo, int row, columns column, quint8 data)
{
int ret=1;
if (!ui->table->isColumnHidden(column) && combo.size() > data)
@ -1696,7 +1707,7 @@ int memories::updateCombo(QStringList& combo, int row, columns column, quint8 d
}
else if (!ui->table->isColumnHidden(column))
{
qInfo() << "Column" << ui->table->horizontalHeaderItem(column)->text() << "Invalid data received:" << data << "setting to default";
qInfo() << "Column" << ui->table->horizontalHeaderItem(column)->text() << "Invalid data:" << data << "setting to default";
ui->table->model()->setData(ui->table->model()->index(row,column),combo[0]);
ret=1;
} else {
@ -1705,7 +1716,7 @@ int memories::updateCombo(QStringList& combo, int row, columns column, quint8 d
return ret;
}
int memories::updateCombo(QStringList& combo, int row, columns column, QString data)
int memories::updateEntry(QStringList& combo, int row, columns column, QString data)
{
int ret=1;
if (!ui->table->isColumnHidden(column) && combo.contains(data))
@ -1714,7 +1725,7 @@ int memories::updateCombo(QStringList& combo, int row, columns column, QString
}
else if (!ui->table->isColumnHidden(column))
{
qInfo() << "Column" << ui->table->horizontalHeaderItem(column)->text() << "Invalid data received:" << data;
qInfo() << "Column" << ui->table->horizontalHeaderItem(column)->text() << "Invalid data:" << data;
ret=0;
} else {
ret=0;
@ -1722,6 +1733,18 @@ int memories::updateCombo(QStringList& combo, int row, columns column, QString
return ret;
}
int memories::updateEntry(int row, columns column, QString data)
{
int ret=0;
if (!ui->table->isColumnHidden(column))
{
ui->table->model()->setData(ui->table->model()->index(row,column),data);
ret=1;
}
return ret;
}
bool memories::checkASCII(QString str)
{
static QRegularExpression exp = QRegularExpression(QStringLiteral("[^\\x{0020}-\\x{007E}]"));
@ -2104,3 +2127,37 @@ void memories::configColumns(int row, modeInfo mode) {
break;
}
}
void memories::configColumnsB(int row, modeInfo mode) {
enableCell(row,columnToneB,false);
enableCell(row,columnToneModeB,false);
enableCell(row,columnTSQLB,false);
enableCell(row,columnDTCSB,false);
enableCell(row,columnDTCSPolarityB,false);
enableCell(row,columnDVSquelchB,false);
enableCell(row,columnDSQLB,false);
enableCell(row,columnR1B,false);
enableCell(row,columnR2B,false);
enableCell(row,columnURB,false);
switch (mode.mk)
{
case modeFM:
enableCell(row,columnToneB,true);
enableCell(row,columnToneModeB,true);
enableCell(row,columnTSQLB,true);
enableCell(row,columnDTCSB,true);
enableCell(row,columnDTCSPolarityB,true);
break;
case modeDV:
enableCell(row,columnDVSquelchB,true);
enableCell(row,columnDSQLB,true);
enableCell(row,columnR1B,true);
enableCell(row,columnR2B,true);
enableCell(row,columnURB,true);
break;
default:
break;
}
}

Wyświetl plik

@ -50,9 +50,9 @@ private slots:
void receiveMemory(memoryType mem);
void rowAdded(int row);
void rowAdded(int row, memoryType mem=memoryType());
void rowDeleted(quint32 mem);
void menuAction(QAction* action, quint32 mem);
void timeout();
private:
@ -295,8 +295,11 @@ private:
totalColumns
};
int updateCombo(QStringList& combo, int row, columns column, quint8 data);
int updateCombo(QStringList& combo, int row, columns column, QString data);
int updateRow(int row, memoryType mem, bool store=true);
int updateEntry(QStringList& combo, int row, columns column, quint8 data);
int updateEntry(QStringList& combo, int row, columns column, QString data);
int updateEntry(int row, columns column, QString data);
struct stepType {
stepType(){};
@ -323,7 +326,11 @@ private:
void enableCell(int col, int row, bool en);
void configColumns(int row, modeInfo mode);
void configColumnsB(int row, modeInfo mode);
bool disableCommands = false;
QAction *addCurrent = new QAction("Add Current");
QAction *useCurrent = new QAction("Use Current");
};
#endif // MEMORIES_H

Wyświetl plik

@ -474,80 +474,80 @@ Commands\50\Command29=false
Commands\50\GetCommand=true
Commands\50\SetCommand=true
Commands\50\Admin=false
Commands\51\Type=Key Speed
Commands\51\String=KS
Commands\51\Min=4
Commands\51\Max=60
Commands\51\Bytes=3
Commands\51\Type=IF Shift
Commands\51\String=IS
Commands\51\Min=0
Commands\51\Max=0
Commands\51\Bytes=0
Commands\51\Command29=false
Commands\51\GetCommand=true
Commands\51\SetCommand=true
Commands\51\Admin=false
Commands\52\Type=Send CW
Commands\52\String=KY
Commands\52\Min=0
Commands\52\Max=0
Commands\52\Bytes=24
Commands\52\Type=Key Speed
Commands\52\String=KS
Commands\52\Min=4
Commands\52\Max=60
Commands\52\Bytes=3
Commands\52\Command29=false
Commands\52\GetCommand=false
Commands\52\GetCommand=true
Commands\52\SetCommand=true
Commands\52\Admin=false
Commands\53\Type=Lock Function
Commands\53\String=LK
Commands\53\Type=Send CW
Commands\53\String=KY
Commands\53\Min=0
Commands\53\Max=1
Commands\53\Bytes=1
Commands\53\Max=0
Commands\53\Bytes=24
Commands\53\Command29=false
Commands\53\GetCommand=true
Commands\53\GetCommand=false
Commands\53\SetCommand=true
Commands\53\Admin=false
Commands\54\Type=Memory Contents
Commands\54\String=MA0
Commands\54\Type=Lock Function
Commands\54\String=LK
Commands\54\Min=0
Commands\54\Max=119
Commands\54\Bytes=3
Commands\54\Max=1
Commands\54\Bytes=1
Commands\54\Command29=false
Commands\54\GetCommand=true
Commands\54\SetCommand=true
Commands\54\Admin=false
Commands\55\Type=Memory Num Select
Commands\55\String=MC
Commands\55\Type=Memory Contents
Commands\55\String=MA0
Commands\55\Min=0
Commands\55\Max=99
Commands\55\Max=119
Commands\55\Bytes=3
Commands\55\Command29=false
Commands\55\GetCommand=true
Commands\55\SetCommand=true
Commands\55\Admin=false
Commands\56\Type=Mic Gain
Commands\56\String=MG
Commands\56\Type=Memory Num Select
Commands\56\String=MC
Commands\56\Min=0
Commands\56\Max=100
Commands\56\Max=99
Commands\56\Bytes=3
Commands\56\Command29=false
Commands\56\GetCommand=true
Commands\56\SetCommand=true
Commands\56\Admin=false
Commands\57\Type=Monitor Gain
Commands\57\String=ML
Commands\57\Type=Mic Gain
Commands\57\String=MG
Commands\57\Min=0
Commands\57\Max=20
Commands\57\Max=100
Commands\57\Bytes=3
Commands\57\Command29=false
Commands\57\GetCommand=true
Commands\57\SetCommand=true
Commands\57\Admin=false
Commands\58\Type=Data Off Mod Input
Commands\58\String=MS0
Commands\58\Type=Monitor Gain
Commands\58\String=ML
Commands\58\Min=0
Commands\58\Max=3
Commands\58\Bytes=2
Commands\58\Max=20
Commands\58\Bytes=3
Commands\58\Command29=false
Commands\58\GetCommand=true
Commands\58\SetCommand=true
Commands\58\Admin=false
Commands\59\Type=DATA1 Mod Input
Commands\59\String=MS1
Commands\59\Type=Data Off Mod Input
Commands\59\String=MS0
Commands\59\Min=0
Commands\59\Max=3
Commands\59\Bytes=2
@ -555,53 +555,53 @@ Commands\59\Command29=false
Commands\59\GetCommand=true
Commands\59\SetCommand=true
Commands\59\Admin=false
Commands\60\Type=Noise Blanker
Commands\60\String=NB1
Commands\60\Type=DATA1 Mod Input
Commands\60\String=MS1
Commands\60\Min=0
Commands\60\Max=1
Commands\60\Bytes=1
Commands\60\Max=3
Commands\60\Bytes=2
Commands\60\Command29=false
Commands\60\GetCommand=true
Commands\60\SetCommand=true
Commands\60\Admin=false
Commands\61\Type=NB Level
Commands\61\String=NL
Commands\61\Type=Noise Blanker
Commands\61\String=NB1
Commands\61\Min=0
Commands\61\Max=10
Commands\61\Bytes=3
Commands\61\Max=1
Commands\61\Bytes=1
Commands\61\Command29=false
Commands\61\GetCommand=true
Commands\61\SetCommand=true
Commands\61\Admin=false
Commands\62\Type=Noise Reduction
Commands\62\String=NR
Commands\62\Type=NB Level
Commands\62\String=NL
Commands\62\Min=0
Commands\62\Max=2
Commands\62\Bytes=1
Commands\62\Max=10
Commands\62\Bytes=3
Commands\62\Command29=false
Commands\62\GetCommand=true
Commands\62\SetCommand=true
Commands\62\Admin=false
Commands\63\Type=Notch Filter
Commands\63\String=NT
Commands\63\Type=Noise Reduction
Commands\63\String=NR
Commands\63\Min=0
Commands\63\Max=2
Commands\63\Bytes=2
Commands\63\Bytes=1
Commands\63\Command29=false
Commands\63\GetCommand=true
Commands\63\SetCommand=true
Commands\63\Admin=false
Commands\64\Type=Selected Mode
Commands\64\String=OM0
Commands\64\Min=1
Commands\64\Max=9
Commands\64\Bytes=1
Commands\64\Type=Notch Filter
Commands\64\String=NT
Commands\64\Min=0
Commands\64\Max=2
Commands\64\Bytes=2
Commands\64\Command29=false
Commands\64\GetCommand=true
Commands\64\SetCommand=true
Commands\64\Admin=false
Commands\65\Type=Unselected Mode
Commands\65\String=OM1
Commands\65\Type=Selected Mode
Commands\65\String=OM0
Commands\65\Min=1
Commands\65\Max=9
Commands\65\Bytes=1
@ -609,26 +609,26 @@ Commands\65\Command29=false
Commands\65\GetCommand=true
Commands\65\SetCommand=true
Commands\65\Admin=false
Commands\66\Type=Preamp Status
Commands\66\String=PA
Commands\66\Min=0
Commands\66\Max=2
Commands\66\Type=Unselected Mode
Commands\66\String=OM1
Commands\66\Min=1
Commands\66\Max=9
Commands\66\Bytes=1
Commands\66\Command29=false
Commands\66\GetCommand=true
Commands\66\SetCommand=true
Commands\66\Admin=false
Commands\67\Type=RF Power
Commands\67\String=PC
Commands\67\Type=Preamp Status
Commands\67\String=PA
Commands\67\Min=0
Commands\67\Max=100
Commands\67\Bytes=3
Commands\67\Max=2
Commands\67\Bytes=1
Commands\67\Command29=false
Commands\67\GetCommand=true
Commands\67\SetCommand=true
Commands\67\Admin=false
Commands\68\Type=Compressor Level
Commands\68\String=PL
Commands\68\Type=RF Power
Commands\68\String=PC
Commands\68\Min=0
Commands\68\Max=100
Commands\68\Bytes=3
@ -636,17 +636,17 @@ Commands\68\Command29=false
Commands\68\GetCommand=true
Commands\68\SetCommand=true
Commands\68\Admin=false
Commands\69\Type=Compressor Status
Commands\69\String=PR0
Commands\69\Type=Compressor Level
Commands\69\String=PL
Commands\69\Min=0
Commands\69\Max=1
Commands\69\Bytes=1
Commands\69\Max=100
Commands\69\Bytes=3
Commands\69\Command29=false
Commands\69\GetCommand=true
Commands\69\SetCommand=true
Commands\69\Admin=false
Commands\70\Type=Power Control
Commands\70\String=PS
Commands\70\Type=Compressor Status
Commands\70\String=PR0
Commands\70\Min=0
Commands\70\Max=1
Commands\70\Bytes=1
@ -654,62 +654,62 @@ Commands\70\Command29=false
Commands\70\GetCommand=true
Commands\70\SetCommand=true
Commands\70\Admin=false
Commands\71\Type=Attenuator Status
Commands\71\String=RA
Commands\71\Type=Power Control
Commands\71\String=PS
Commands\71\Min=0
Commands\71\Max=3
Commands\71\Max=1
Commands\71\Bytes=1
Commands\71\Command29=false
Commands\71\GetCommand=true
Commands\71\SetCommand=true
Commands\71\Admin=false
Commands\72\Type=RIT Frequency Down
Commands\72\String=RD
Commands\72\Type=Attenuator Status
Commands\72\String=RA
Commands\72\Min=0
Commands\72\Max=9999
Commands\72\Bytes=5
Commands\72\Max=3
Commands\72\Bytes=1
Commands\72\Command29=false
Commands\72\GetCommand=true
Commands\72\SetCommand=true
Commands\72\Admin=false
Commands\73\Type=RF Gain
Commands\73\String=RG
Commands\73\Type=RIT Frequency Down
Commands\73\String=RD
Commands\73\Min=0
Commands\73\Max=255
Commands\73\Bytes=3
Commands\73\Max=9999
Commands\73\Bytes=5
Commands\73\Command29=false
Commands\73\GetCommand=true
Commands\73\SetCommand=true
Commands\73\Admin=false
Commands\74\Type=RX Freq And Mode
Commands\74\String=RI
Commands\74\Type=RF Gain
Commands\74\String=RG
Commands\74\Min=0
Commands\74\Max=0
Commands\74\Bytes=0
Commands\74\Max=255
Commands\74\Bytes=3
Commands\74\Command29=false
Commands\74\GetCommand=true
Commands\74\SetCommand=true
Commands\74\Admin=false
Commands\75\Type=NR Level
Commands\75\String=RL
Commands\75\Min=1
Commands\75\Max=10
Commands\75\Bytes=2
Commands\75\Type=RX Freq And Mode
Commands\75\String=RI
Commands\75\Min=0
Commands\75\Max=0
Commands\75\Bytes=0
Commands\75\Command29=false
Commands\75\GetCommand=true
Commands\75\SetCommand=true
Commands\75\Admin=false
Commands\76\Type=ALC Meter
Commands\76\String=RM1
Commands\76\Min=0
Commands\76\Max=70
Commands\76\Bytes=4
Commands\76\Type=NR Level
Commands\76\String=RL
Commands\76\Min=1
Commands\76\Max=10
Commands\76\Bytes=2
Commands\76\Command29=false
Commands\76\GetCommand=false
Commands\76\GetCommand=true
Commands\76\SetCommand=true
Commands\76\Admin=false
Commands\77\Type=SWR Meter
Commands\77\String=RM2
Commands\77\Type=ALC Meter
Commands\77\String=RM1
Commands\77\Min=0
Commands\77\Max=70
Commands\77\Bytes=4
@ -717,8 +717,8 @@ Commands\77\Command29=false
Commands\77\GetCommand=false
Commands\77\SetCommand=true
Commands\77\Admin=false
Commands\78\Type=Comp Meter
Commands\78\String=RM3
Commands\78\Type=SWR Meter
Commands\78\String=RM2
Commands\78\Min=0
Commands\78\Max=70
Commands\78\Bytes=4
@ -726,8 +726,8 @@ Commands\78\Command29=false
Commands\78\GetCommand=false
Commands\78\SetCommand=true
Commands\78\Admin=false
Commands\79\Type=Id Meter
Commands\79\String=RM4
Commands\79\Type=Comp Meter
Commands\79\String=RM3
Commands\79\Min=0
Commands\79\Max=70
Commands\79\Bytes=4
@ -735,8 +735,8 @@ Commands\79\Command29=false
Commands\79\GetCommand=false
Commands\79\SetCommand=true
Commands\79\Admin=false
Commands\80\Type=Vd Meter
Commands\80\String=RM5
Commands\80\Type=Id Meter
Commands\80\String=RM4
Commands\80\Min=0
Commands\80\Max=70
Commands\80\Bytes=4
@ -744,107 +744,107 @@ Commands\80\Command29=false
Commands\80\GetCommand=false
Commands\80\SetCommand=true
Commands\80\Admin=false
Commands\81\Type=RIT Status
Commands\81\String=RT
Commands\81\Type=Vd Meter
Commands\81\String=RM5
Commands\81\Min=0
Commands\81\Max=1
Commands\81\Bytes=1
Commands\81\Max=70
Commands\81\Bytes=4
Commands\81\Command29=false
Commands\81\GetCommand=true
Commands\81\GetCommand=false
Commands\81\SetCommand=true
Commands\81\Admin=false
Commands\82\Type=RIT Frequency Up
Commands\82\String=RU
Commands\82\Type=RIT Status
Commands\82\String=RT
Commands\82\Min=0
Commands\82\Max=9999
Commands\82\Bytes=5
Commands\82\Max=1
Commands\82\Bytes=1
Commands\82\Command29=false
Commands\82\GetCommand=true
Commands\82\SetCommand=true
Commands\82\Admin=false
Commands\83\Type=Set Receive Mode
Commands\83\String=RX
Commands\83\Type=RIT Frequency Up
Commands\83\String=RU
Commands\83\Min=0
Commands\83\Max=0
Commands\83\Bytes=0
Commands\83\Max=9999
Commands\83\Bytes=5
Commands\83\Command29=false
Commands\83\GetCommand=true
Commands\83\SetCommand=true
Commands\83\Admin=false
Commands\84\Type=Break-In Delay
Commands\84\String=SD
Commands\84\Type=Set Receive Mode
Commands\84\String=RX
Commands\84\Min=0
Commands\84\Max=1000
Commands\84\Bytes=4
Commands\84\Max=0
Commands\84\Bytes=0
Commands\84\Command29=false
Commands\84\GetCommand=true
Commands\84\SetCommand=true
Commands\84\Admin=false
Commands\85\Type=PBT Inner
Commands\85\String=SH0
Commands\85\Type=Break-In Delay
Commands\85\String=SD
Commands\85\Min=0
Commands\85\Max=160
Commands\85\Bytes=3
Commands\85\Max=1000
Commands\85\Bytes=4
Commands\85\Command29=false
Commands\85\GetCommand=true
Commands\85\SetCommand=true
Commands\85\Admin=false
Commands\86\Type=Filter Width
Commands\86\String=SL0
Commands\86\Type=PBT Inner
Commands\86\String=SH0
Commands\86\Min=0
Commands\86\Max=35
Commands\86\Bytes=2
Commands\86\Max=160
Commands\86\Bytes=3
Commands\86\Command29=false
Commands\86\GetCommand=true
Commands\86\SetCommand=true
Commands\86\Admin=false
Commands\87\Type=S Meter
Commands\87\String=SM
Commands\87\Type=Filter Width
Commands\87\String=SL0
Commands\87\Min=0
Commands\87\Max=70
Commands\87\Bytes=4
Commands\87\Max=35
Commands\87\Bytes=2
Commands\87\Command29=false
Commands\87\GetCommand=true
Commands\87\SetCommand=true
Commands\87\Admin=false
Commands\88\Type=Squelch
Commands\88\String=SQ
Commands\88\Type=S Meter
Commands\88\String=SM
Commands\88\Min=0
Commands\88\Max=255
Commands\88\Bytes=3
Commands\88\Max=70
Commands\88\Bytes=4
Commands\88\Command29=false
Commands\88\GetCommand=true
Commands\88\SetCommand=true
Commands\88\Admin=false
Commands\89\Type=Split/Duplex
Commands\89\String=TB
Commands\89\Type=Squelch
Commands\89\String=SQ
Commands\89\Min=0
Commands\89\Max=1
Commands\89\Bytes=1
Commands\89\Max=255
Commands\89\Bytes=3
Commands\89\Command29=false
Commands\89\GetCommand=true
Commands\89\SetCommand=true
Commands\89\Admin=false
Commands\90\Type=Tone Frequency
Commands\90\String=TN
Commands\90\Type=Split/Duplex
Commands\90\String=TB
Commands\90\Min=0
Commands\90\Max=42
Commands\90\Bytes=2
Commands\90\Max=1
Commands\90\Bytes=1
Commands\90\Command29=false
Commands\90\GetCommand=true
Commands\90\SetCommand=true
Commands\90\Admin=false
Commands\91\Type=Repeater Tone
Commands\91\String=TO
Commands\91\Type=Tone Frequency
Commands\91\String=TN
Commands\91\Min=0
Commands\91\Max=1
Commands\91\Bytes=1
Commands\91\Max=42
Commands\91\Bytes=2
Commands\91\Command29=false
Commands\91\GetCommand=true
Commands\91\SetCommand=true
Commands\91\Admin=false
Commands\92\Type=TF-Set Status
Commands\92\String=TS
Commands\92\Type=Repeater Tone
Commands\92\String=TO
Commands\92\Min=0
Commands\92\Max=1
Commands\92\Bytes=1
@ -852,8 +852,8 @@ Commands\92\Command29=false
Commands\92\GetCommand=true
Commands\92\SetCommand=true
Commands\92\Admin=false
Commands\93\Type=Set Transmit Mode
Commands\93\String=TX
Commands\93\Type=TF-Set Status
Commands\93\String=TS
Commands\93\Min=0
Commands\93\Max=1
Commands\93\Bytes=1
@ -861,17 +861,17 @@ Commands\93\Command29=false
Commands\93\GetCommand=true
Commands\93\SetCommand=true
Commands\93\Admin=false
Commands\94\Type=RX Equalizer
Commands\94\String=UR
Commands\94\Type=Set Transmit Mode
Commands\94\String=TX
Commands\94\Min=0
Commands\94\Max=0
Commands\94\Bytes=36
Commands\94\Max=1
Commands\94\Bytes=1
Commands\94\Command29=false
Commands\94\GetCommand=true
Commands\94\SetCommand=true
Commands\94\Admin=false
Commands\95\Type=TX Equalizer
Commands\95\String=UT
Commands\95\Type=RX Equalizer
Commands\95\String=UR
Commands\95\Min=0
Commands\95\Max=0
Commands\95\Bytes=36
@ -879,43 +879,52 @@ Commands\95\Command29=false
Commands\95\GetCommand=true
Commands\95\SetCommand=true
Commands\95\Admin=false
Commands\96\Type=Vox Gain
Commands\96\String=VG
Commands\96\Type=TX Equalizer
Commands\96\String=UT
Commands\96\Min=0
Commands\96\Max=9
Commands\96\Bytes=3
Commands\96\Max=0
Commands\96\Bytes=36
Commands\96\Command29=false
Commands\96\GetCommand=true
Commands\96\SetCommand=true
Commands\96\Admin=false
Commands\97\Type=VFO Equal AB
Commands\97\String=VV
Commands\97\Type=Vox Gain
Commands\97\String=VG
Commands\97\Min=0
Commands\97\Max=0
Commands\97\Bytes=0
Commands\97\Max=9
Commands\97\Bytes=3
Commands\97\Command29=false
Commands\97\GetCommand=true
Commands\97\SetCommand=true
Commands\97\Admin=false
Commands\98\Type=Vox Status
Commands\98\String=VX
Commands\98\Type=VFO Equal AB
Commands\98\String=VV
Commands\98\Min=0
Commands\98\Max=1
Commands\98\Bytes=1
Commands\98\Max=0
Commands\98\Bytes=0
Commands\98\Command29=false
Commands\98\GetCommand=true
Commands\98\SetCommand=true
Commands\98\Admin=false
Commands\99\Type=TX Freq And Mode
Commands\99\String=XI
Commands\99\Type=Vox Status
Commands\99\String=VX
Commands\99\Min=0
Commands\99\Max=0
Commands\99\Bytes=0
Commands\99\Max=1
Commands\99\Bytes=1
Commands\99\Command29=false
Commands\99\GetCommand=true
Commands\99\SetCommand=true
Commands\99\Admin=false
Commands\size=99
Commands\100\Type=TX Freq And Mode
Commands\100\String=XI
Commands\100\Min=0
Commands\100\Max=0
Commands\100\Bytes=0
Commands\100\Command29=false
Commands\100\GetCommand=true
Commands\100\SetCommand=true
Commands\100\Admin=false
Commands\size=100
Periodic\1\Priority=Medium High
Periodic\1\Command=AF Gain
Periodic\1\VFO=0

Wyświetl plik

@ -7,6 +7,10 @@
tableWidget::tableWidget(QWidget *parent): QTableWidget(parent)
{
menuActions.append(new QAction("Add Item"));
menuActions.append(new QAction("Insert Item"));
menuActions.append(new QAction("Clone Item"));
menuActions.append(new QAction("Delete Item"));
}
void tableWidget::mouseReleaseEvent(QMouseEvent *event)
@ -14,30 +18,27 @@ void tableWidget::mouseReleaseEvent(QMouseEvent *event)
if(event->button() == Qt::RightButton && editingEnabled)
{
QMenu menu;
QAction *add= menu.addAction("Add Item");
QAction *insert= menu.addAction("Insert Item");
QAction *clone= menu.addAction("Clone Item");
QAction *del = menu.addAction("Delete Item");
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
QAction *selectedAction = menu.exec(event->globalPos());
QAction *selectedAction = menu.exec(menuActions,event->globalPos());
#else
QAction *selectedAction = menu.exec(event->globalPosition().toPoint());
QAction *selectedAction = menu.exec(menuActions,event->globalPosition().toPoint());
#endif
if(selectedAction == add)
if(selectedAction == menuActions[0])
{
int row=this->rowCount();
this->insertRow(this->rowCount());
emit rowAdded(row);
}
else if(selectedAction == insert)
else if(selectedAction == menuActions[1])
{
int row=this->currentRow();
this->insertRow(this->currentRow());
emit rowAdded(row);
}
else if( selectedAction == clone )
else if( selectedAction == menuActions[2] )
{
this->setSortingEnabled(false);
int row=this->currentRow(); // This will be the new row with the old one as row+1
@ -50,11 +51,14 @@ void tableWidget::mouseReleaseEvent(QMouseEvent *event)
emit rowAdded(row);
this->setSortingEnabled(true);
}
else if( selectedAction == del )
else if( selectedAction == menuActions[3] )
{
emit rowDeleted(this->currentRow());
emit rowValDeleted((this->item(this->currentRow(),1) == NULL) ? 0 : this->item(this->currentRow(),1)->text().toUInt());
this->removeRow(this->currentRow());
} else
{
emit menuAction(selectedAction,this->currentRow());
}
}
}

Wyświetl plik

@ -23,15 +23,18 @@ class tableWidget : public QTableWidget
public:
explicit tableWidget(QWidget* parent = 0);
void editing(bool val) { editingEnabled = val; };
void addAction(QAction* action) { menuActions.append(action); }
signals:
void rowAdded(int row);
void rowDeleted(int num);
void rowValDeleted(quint32 num);
void menuAction(QAction* action, quint32 num);
protected:
void mouseReleaseEvent(QMouseEvent *event);
bool editingEnabled = true;
QList<QAction*> menuActions;
};