kopia lustrzana https://gitlab.com/eliggett/wfview
Initial work on 8600 memories
rodzic
87bb43c726
commit
3dc4fe53a1
|
@ -92,8 +92,8 @@ void cachingQueue::run()
|
||||||
it--;
|
it--;
|
||||||
auto item = it.value();
|
auto item = it.value();
|
||||||
emit haveCommand(item.command,item.param,item.receiver);
|
emit haveCommand(item.command,item.param,item.receiver);
|
||||||
//it=queue.erase(it);
|
it=queue.erase(it);
|
||||||
queue.remove(prio,it.value());
|
//queue.remove(prio,it.value()); // Will remove ALL matching commands which breaks some things (memory bulk write)
|
||||||
if (item.recurring && prio != priorityImmediate) {
|
if (item.recurring && prio != priorityImmediate) {
|
||||||
queue.insert(prio,item);
|
queue.insert(prio,item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1510,7 +1510,7 @@ void icomCommander::determineRigCaps()
|
||||||
|
|
||||||
|
|
||||||
// Setup memory formats.
|
// Setup memory formats.
|
||||||
static QRegularExpression memFmtEx("%(?<flags>[-+#0])?(?<pos>\\d+|\\*)?(?:\\.(?<width>\\d+|\\*))?(?<spec>[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ])");
|
static QRegularExpression memFmtEx("%(?<flags>[-+#0])?(?<pos>\\d+|\\*)?(?:\\.(?<width>\\d+|\\*))?(?<spec>[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+])");
|
||||||
QRegularExpressionMatchIterator i = memFmtEx.globalMatch(rigCaps.memFormat);
|
QRegularExpressionMatchIterator i = memFmtEx.globalMatch(rigCaps.memFormat);
|
||||||
while (i.hasNext()) {
|
while (i.hasNext()) {
|
||||||
QRegularExpressionMatch qmatch = i.next();
|
QRegularExpressionMatch qmatch = i.next();
|
||||||
|
@ -2129,7 +2129,7 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
||||||
payloadIn.insert(0,"**");
|
payloadIn.insert(0,"**");
|
||||||
for (auto &parse: *memParser) {
|
for (auto &parse: *memParser) {
|
||||||
// non-existant memory is short so send what we have so far.
|
// non-existant memory is short so send what we have so far.
|
||||||
if (payloadIn.size() < (parse.pos+1+parse.len)) {
|
if (payloadIn.size() < (parse.pos+1+parse.len) && parse.spec != 'Z') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
QByteArray data = payloadIn.mid(parse.pos+1,parse.len);
|
QByteArray data = payloadIn.mid(parse.pos+1,parse.len);
|
||||||
|
@ -2151,10 +2151,17 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
||||||
case 'c':
|
case 'c':
|
||||||
mem->scan = data[0];
|
mem->scan = data[0];
|
||||||
break;
|
break;
|
||||||
|
case 'C':
|
||||||
|
mem->skip = data[0] >> 4 & 0xf;
|
||||||
|
mem->scan = data[0] & 0xf;
|
||||||
|
break;
|
||||||
case 'd': // combined split and scan
|
case 'd': // combined split and scan
|
||||||
mem->split = quint8(data[0] >> 4 & 0x0f);
|
mem->split = quint8(data[0] >> 4 & 0x0f);
|
||||||
mem->scan = quint8(data[0] & 0x0f);
|
mem->scan = quint8(data[0] & 0x0f);
|
||||||
break;
|
break;
|
||||||
|
case 'D': // duplex only (used for IC-R8600)
|
||||||
|
mem->duplex = quint8(data[0] & 0x0f);
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
mem->vfo=data[0];
|
mem->vfo=data[0];
|
||||||
break;
|
break;
|
||||||
|
@ -2267,11 +2274,29 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
||||||
case 'V':
|
case 'V':
|
||||||
memcpy(mem->R2B,data.data(),qMin(int(sizeof mem->R2B),data.size()));
|
memcpy(mem->R2B,data.data(),qMin(int(sizeof mem->R2B),data.size()));
|
||||||
break;
|
break;
|
||||||
|
case 'w': // Tuning step
|
||||||
|
if (bool(data[0])) { // Only set if enabled.
|
||||||
|
mem->tuningStep = quint8(data[1]);
|
||||||
|
mem->progTs = bcdHexToUInt(data[2],data[3]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'x': // Attenuator & Preamp
|
||||||
|
mem->atten = bcdHexToUChar(data[0]);
|
||||||
|
mem->preamp = bcdHexToUChar(data[1]);
|
||||||
|
break;
|
||||||
|
case 'y': // Antenna
|
||||||
|
mem->antenna = bcdHexToUChar(data[0]);
|
||||||
|
break;
|
||||||
|
case '+': // IP Plus
|
||||||
|
mem->ipplus=bool(data[0] & 0x0f);
|
||||||
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
if (mem->scan == 0xfe)
|
if (mem->scan == 0xfe)
|
||||||
mem->scan = 0;
|
mem->scan = 0;
|
||||||
memcpy(mem->name,data.data(),qMin(int(sizeof mem->name),data.size()));
|
memcpy(mem->name,data.data(),qMin(int(sizeof mem->name),data.size()));
|
||||||
break;
|
break;
|
||||||
|
case 'Z': // Special mode dependant features (I have no idea how to make these work!)
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
qInfo() << "Parser didn't match!" << "spec:" << parse.spec << "pos:" << parse.pos << "len" << parse.len;
|
qInfo() << "Parser didn't match!" << "spec:" << parse.spec << "pos:" << parse.pos << "len" << parse.len;
|
||||||
break;
|
break;
|
||||||
|
@ -2391,7 +2416,7 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
||||||
if (func == funcMemoryContents || func == funcMemoryClear || func == funcMemoryWrite || func == funcMemoryMode)
|
if (func == funcMemoryContents || func == funcMemoryClear || func == funcMemoryWrite || func == funcMemoryMode)
|
||||||
{
|
{
|
||||||
// Strip out group number from memory for validation purposes.
|
// Strip out group number from memory for validation purposes.
|
||||||
qInfo(logRig()) << "Memory Command" << funcString[func] << "with valuetype " << QString(value.typeName());
|
qDebug(logRig()) << "Memory Command" << funcString[func] << "with valuetype " << QString(value.typeName());
|
||||||
val = val & 0xffff;
|
val = val & 0xffff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2541,8 +2566,8 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
||||||
}
|
}
|
||||||
else if (!strcmp(value.typeName(),"uint") && (func == funcMemoryContents || func == funcMemoryMode))
|
else if (!strcmp(value.typeName(),"uint") && (func == funcMemoryContents || func == funcMemoryMode))
|
||||||
{
|
{
|
||||||
qInfo(logRig()) << "Get Memory Contents" << (value.value<uint>() & 0xffff);
|
qDebug(logRig()) << "Get Memory Contents" << (value.value<uint>() & 0xffff);
|
||||||
qInfo(logRig()) << "Get Memory Group (if exists)" << (value.value<uint>() >> 16 & 0xffff);
|
qDebug(logRig()) << "Get Memory Group (if exists)" << (value.value<uint>() >> 16 & 0xffff);
|
||||||
// Format is different for all radios!
|
// Format is different for all radios!
|
||||||
if (func == funcMemoryContents) {
|
if (func == funcMemoryContents) {
|
||||||
for (auto &parse: rigCaps.memParser) {
|
for (auto &parse: rigCaps.memParser) {
|
||||||
|
@ -2604,9 +2629,22 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
||||||
payload.append(mem.scan);
|
payload.append(mem.scan);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'C':
|
||||||
|
// Are we deleting the memory?
|
||||||
|
if (mem.del) {
|
||||||
|
payload.append(ffchar);
|
||||||
|
finished=true;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
payload.append(mem.scan);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'd': // combined split and scan
|
case 'd': // combined split and scan
|
||||||
payload.append(quint8((mem.split << 4 & 0xf0) | (mem.scan & 0x0f)));
|
payload.append(quint8((mem.split << 4 & 0xf0) | (mem.scan & 0x0f)));
|
||||||
break;
|
break;
|
||||||
|
case 'D': // Duplex only
|
||||||
|
payload.append(mem.duplex);
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
payload.append(mem.vfo);
|
payload.append(mem.vfo);
|
||||||
break;
|
break;
|
||||||
|
@ -2725,9 +2763,26 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
||||||
case 'V':
|
case 'V':
|
||||||
payload.append(QByteArray(mem.R2B).leftJustified(parse.len,' ',true));
|
payload.append(QByteArray(mem.R2B).leftJustified(parse.len,' ',true));
|
||||||
break;
|
break;
|
||||||
|
case 'w': // Tuning step
|
||||||
|
payload.append(quint8(mem.tuningStep!=0?true:false));
|
||||||
|
payload.append(quint8(mem.tuningStep));
|
||||||
|
payload.append(bcdEncodeInt(mem.progTs));
|
||||||
|
break;
|
||||||
|
case 'x': // Attenuator & Preamp
|
||||||
|
payload.append(bcdEncodeChar(mem.atten));
|
||||||
|
payload.append(bcdEncodeChar(mem.preamp));
|
||||||
|
break;
|
||||||
|
case 'y': // Antenna
|
||||||
|
payload.append(bcdEncodeChar(mem.antenna));
|
||||||
|
break;
|
||||||
|
case '+': // IP Plus
|
||||||
|
payload.append(bcdEncodeChar(mem.ipplus));
|
||||||
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
payload.append(QByteArray(mem.name).leftJustified(parse.len,' ',true));
|
payload.append(QByteArray(mem.name).leftJustified(parse.len,' ',true));
|
||||||
break;
|
break;
|
||||||
|
case 'Z': // Special mode dependant features (I have no idea how to make these work!)
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
269
memories.cpp
269
memories.cpp
|
@ -33,19 +33,30 @@ memories::memories(bool isAdmin, bool slowLoad, QWidget *parent) :
|
||||||
|
|
||||||
progress->setRange(rigCaps->memStart,rigCaps->memories);
|
progress->setRange(rigCaps->memStart,rigCaps->memories);
|
||||||
|
|
||||||
|
if (!rigCaps->commands.contains(funcScanning))
|
||||||
|
{
|
||||||
|
ui->scanButton->setVisible(false);
|
||||||
|
} else {
|
||||||
|
ui->scanButton->setCheckable(true);
|
||||||
|
}
|
||||||
QStringList headers;
|
QStringList headers;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
columnRecall=0, columnNum,columnSplit,columnScan,columnFrequency,columnMode,columnFilter,columnData,columnDuplex,columnToneMode,columnDSQL,columnTone,columnTSQL,columnDTCS,
|
columnRecall=0, columnNum,columnSplit,columnSkip,columnScan,columnFrequency,columnMode,columnFilter,columnData,columnDuplex,columnToneMode,
|
||||||
columnDTCSPolarity,columnDVSquelch,columnOffset,columnUR,columnR1,columnR2,columnFrequencyB,columnModeB,columnFilterB,columnDataB,columnDuplexB,columnToneModeB, columnDSQLB
|
columnTuningStep, columnCustomTuningStep, columnAttenuator, columnPreamplifier, columnAntenna, columnIPPlus,columnDSQL,columnTone,columnTSQL,columnDTCS,
|
||||||
columnToneB,columnTSQLB,columnDTCSB,columnDTCSPolarityB,columnDVSquelchB,columnOffsetB,columnURB,columnR1B,columnR2B,columnName,
|
columnDTCSPolarity,columnDVSquelch,columnOffset,columnUR,columnR1,columnR2,columnFrequencyB,columnModeB,columnFilterB,columnDataB,columnDuplexB,columnToneModeB,
|
||||||
|
columnTuningStepB, columnCustomTuningStepB, columnAttenuatorB, columnPreamplifierB, columnAntennaB, columnIPPlusB, columnDSQLB
|
||||||
|
columnToneB,columnTSQLB,columnDTCSB,columnDTCSPolarityB,columnDVSquelchB,columnOffsetB,columnURB,columnR1B,columnR2B,columnName,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
headers << "" << "Num" << "Name" << "Split" << "Scan" << "VFO" << "Freq" << "Mode" << "Filter" << "Data" <<"Duplex" << "Tn Mode" << "DSQL" << "Tone" << "TSQL" <<
|
headers << "" << "Num" << "Name" << "Split" << "Skip" << "Scan" << "VFO" << "Freq" << "Mode" << "Filter" << "Data" <<"Duplex" << "Tn Mode" <<
|
||||||
"DTCS" << "DTCS Pol" << "DV Sql" << "Offset" << "UR" << "R1" << "R2" << "VFO B" << "Freq B" << "Mode B" << "Filter B" << "Data B" << "Duplex B" <<
|
"Step" << "Prog Step" << "Atten" << "Preamp" << "Ant" << "IP Plus" << "DSQL" << "Tone" << "TSQL" << "DTCS" << "DTCS Pol" << "DV Sql" <<
|
||||||
"Tn Mode B" << "DSQL B" << "Tone B" << "TSQL B" << "DTCS B" << "DTCSP B" << "DV Sql B" << "Offset B" << "UR B" << "R1 B" << "R2 B";
|
"Offset" << "UR" << "R1" << "R2" << "VFO B" << "Freq B" << "Mode B" << "Filter B" << "Data B" << "Duplex B" << "Tn Mode B" << "Step B" <<
|
||||||
|
"Prog Step B" << "Atten B" << "Preamp B" << "Ant B" << "IP Plus B" << "DSQL B" << "Tone B" << "TSQL B" << "DTCS B" << "DTCSP B" <<
|
||||||
|
"DV Sql B" << "Offset B" << "UR B" << "R1 B" << "R2 B";
|
||||||
|
|
||||||
|
skip << "OFF" << "SKIP" << "PSKIP";
|
||||||
scan << "OFF" << "*1" << "*2" << "*3";
|
scan << "OFF" << "*1" << "*2" << "*3";
|
||||||
|
|
||||||
split << "OFF" << "ON";
|
split << "OFF" << "ON";
|
||||||
|
@ -80,14 +91,37 @@ memories::memories(bool isAdmin, bool slowLoad, QWidget *parent) :
|
||||||
|
|
||||||
dtcsp << "BOTH N" << "N/R" << "R/N" << "BOTH R";
|
dtcsp << "BOTH N" << "N/R" << "R/N" << "BOTH R";
|
||||||
|
|
||||||
|
ipplus << "OFF" << "ON";
|
||||||
|
|
||||||
|
// We can populate the other comboboxes from RigCaps (ensuring they are valid)
|
||||||
|
tuningSteps << "None";
|
||||||
|
for (const auto &step: rigCaps->steps)
|
||||||
|
{
|
||||||
|
if (step.num)
|
||||||
|
{
|
||||||
|
tuningSteps.append(step.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto &atten: rigCaps->attenuators) {
|
||||||
|
attenuators.append(QString("%0").arg(atten));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto &preamp: rigCaps->preamps) {
|
||||||
|
preamps.append(preamp.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto &ant: rigCaps->antennas) {
|
||||||
|
antennas.append(ant.name);
|
||||||
|
}
|
||||||
|
|
||||||
ui->table->setHorizontalHeaderLabels(headers);
|
ui->table->setHorizontalHeaderLabels(headers);
|
||||||
|
|
||||||
ui->group->hide();
|
ui->group->hide();
|
||||||
ui->vfoMode->hide();
|
ui->vfoMode->hide();
|
||||||
ui->memoryMode->hide();
|
ui->memoryMode->hide();
|
||||||
ui->loadingMemories->setVisible(false);
|
//ui->loadingMemories->setVisible(false);
|
||||||
ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
//ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
||||||
|
|
||||||
ui->group->blockSignals(true);
|
ui->group->blockSignals(true);
|
||||||
ui->group->addItem("Memory Group",-1);
|
ui->group->addItem("Memory Group",-1);
|
||||||
|
@ -208,11 +242,26 @@ void memories::rowAdded(int row)
|
||||||
ui->table->model()->setData(ui->table->model()->index(row,columnNum),QString::number(num).rightJustified(3,'0'));
|
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:
|
// 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,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,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,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,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,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,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),"0.000");
|
||||||
|
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]);
|
||||||
|
|
||||||
|
/* columnTuningStep,
|
||||||
|
columnCustomTuningStep,
|
||||||
|
columnAttenuator,
|
||||||
|
columnPreamplifier,
|
||||||
|
columnAntenna,
|
||||||
|
columnIPPlus,
|
||||||
|
*/
|
||||||
if (ui->table->item(row,columnDSQL) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDSQL),dsql[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,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,columnTSQL) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTSQL),tones[0]);
|
||||||
|
@ -226,6 +275,12 @@ void memories::rowAdded(int row)
|
||||||
if (ui->table->item(row,columnDataB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnDataB),dataModes[0]);
|
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,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,columnToneModeB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnToneModeB),toneModes[0]);
|
||||||
|
if (ui->table->item(row,columnTuningStepB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTuningStepB),tuningSteps[0]);
|
||||||
|
if (ui->table->item(row,columnCustomTuningStepB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStepB),"0.000");
|
||||||
|
if (ui->table->item(row,columnAttenuatorB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnAttenuatorB),attenuators[0]);
|
||||||
|
if (ui->table->item(row,columnPreamplifierB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnPreamplifierB),preamps[0]);
|
||||||
|
if (ui->table->item(row,columnAntennaB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnAntennaB),antennas[0]);
|
||||||
|
if (ui->table->item(row,columnIPPlusB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnIPPlusB),ipplus[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,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,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,columnTSQLB) == NULL) ui->table->model()->setData(ui->table->model()->index(row,columnTSQLB),tones[0]);
|
||||||
|
@ -327,6 +382,10 @@ void memories::on_table_cellChanged(int row, int col)
|
||||||
currentMemory.split = split.indexOf(ui->table->item(row,columnSplit)->text().toUpper());
|
currentMemory.split = split.indexOf(ui->table->item(row,columnSplit)->text().toUpper());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnSkip) && ui->table->item(row,columnSkip) != NULL) {
|
||||||
|
currentMemory.skip = skip.indexOf(ui->table->item(row,columnSkip)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
if (!ui->table->isColumnHidden(columnScan) && ui->table->item(row,columnScan) != NULL) {
|
if (!ui->table->isColumnHidden(columnScan) && ui->table->item(row,columnScan) != NULL) {
|
||||||
currentMemory.scan = scan.indexOf(ui->table->item(row,columnScan)->text().toUpper());
|
currentMemory.scan = scan.indexOf(ui->table->item(row,columnScan)->text().toUpper());
|
||||||
}
|
}
|
||||||
|
@ -383,6 +442,54 @@ void memories::on_table_cellChanged(int row, int col)
|
||||||
currentMemory.tonemodeB = toneModes.indexOf(ui->table->item(row,columnToneModeB)->text().toUpper());
|
currentMemory.tonemodeB = toneModes.indexOf(ui->table->item(row,columnToneModeB)->text().toUpper());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnTuningStep) && ui->table->item(row,columnTuningStep) != NULL) {
|
||||||
|
currentMemory.tuningStep = tuningSteps.indexOf(ui->table->item(row,columnTuningStep)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnTuningStepB) && ui->table->item(row,columnTuningStepB) != NULL) {
|
||||||
|
currentMemory.tuningStepB = tuningSteps.indexOf(ui->table->item(row,columnTuningStepB)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnCustomTuningStep) && ui->table->item(row,columnCustomTuningStep) != NULL) {
|
||||||
|
currentMemory.progTs =(ui->table->item(row,columnCustomTuningStep) == NULL) ? 0 : int(ui->table->item(row,columnCustomTuningStep)->text().toUInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnCustomTuningStepB) && ui->table->item(row,columnCustomTuningStepB) != NULL) {
|
||||||
|
currentMemory.progTsB =(ui->table->item(row,columnCustomTuningStepB) == NULL) ? 0 : int(ui->table->item(row,columnCustomTuningStepB)->text().toUInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnAttenuator) && ui->table->item(row,columnAttenuator) != NULL) {
|
||||||
|
currentMemory.atten = (ui->table->item(row,columnAttenuator) == NULL) ? 0 : int(ui->table->item(row,columnAttenuator)->text().toUInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnAttenuatorB) && ui->table->item(row,columnAttenuatorB) != NULL) {
|
||||||
|
currentMemory.attenB = (ui->table->item(row,columnAttenuatorB) == NULL) ? 0 : int(ui->table->item(row,columnAttenuatorB)->text().toUInt());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnPreamplifier) && ui->table->item(row,columnPreamplifier) != NULL) {
|
||||||
|
currentMemory.preamp = preamps.indexOf(ui->table->item(row,columnPreamplifier)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnPreamplifierB) && ui->table->item(row,columnPreamplifierB) != NULL) {
|
||||||
|
currentMemory.preampB = preamps.indexOf(ui->table->item(row,columnPreamplifierB)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnAntenna) && ui->table->item(row,columnAntenna) != NULL) {
|
||||||
|
currentMemory.antenna = antennas.indexOf(ui->table->item(row,columnAntenna)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnAntennaB) && ui->table->item(row,columnAntennaB) != NULL) {
|
||||||
|
currentMemory.antennaB = antennas.indexOf(ui->table->item(row,columnAntennaB)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnIPPlus) && ui->table->item(row,columnIPPlus) != NULL) {
|
||||||
|
currentMemory.ipplus = ipplus.indexOf(ui->table->item(row,columnIPPlus)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ui->table->isColumnHidden(columnIPPlusB) && ui->table->item(row,columnIPPlusB) != NULL) {
|
||||||
|
currentMemory.ipplusB = ipplus.indexOf(ui->table->item(row,columnIPPlusB)->text().toUpper());
|
||||||
|
}
|
||||||
|
|
||||||
if (!ui->table->isColumnHidden(columnDSQL) && ui->table->item(row,columnDSQL) != NULL) {
|
if (!ui->table->isColumnHidden(columnDSQL) && ui->table->item(row,columnDSQL) != NULL) {
|
||||||
currentMemory.dsql = dsql.indexOf(ui->table->item(row,columnDSQL)->text().toUpper());
|
currentMemory.dsql = dsql.indexOf(ui->table->item(row,columnDSQL)->text().toUpper());
|
||||||
}
|
}
|
||||||
|
@ -439,7 +546,7 @@ void memories::on_table_cellChanged(int row, int col)
|
||||||
write=false;
|
write=false;
|
||||||
}
|
}
|
||||||
if (write) {
|
if (write) {
|
||||||
queue->add(priorityImmediate,queueItem((currentMemory.sat?funcSatelliteMemory:funcMemoryContents),QVariant::fromValue<memoryType>(currentMemory)));
|
queue->add(priorityHighest,queueItem((currentMemory.sat?funcSatelliteMemory:funcMemoryContents),QVariant::fromValue<memoryType>(currentMemory)));
|
||||||
qInfo() << "Sending memory, group:" << currentMemory.group << "channel" << currentMemory.channel;
|
qInfo() << "Sending memory, group:" << currentMemory.group << "channel" << currentMemory.channel;
|
||||||
// Set number to not be editable once written. Not sure why but this crashes?
|
// Set number to not be editable once written. Not sure why but this crashes?
|
||||||
//ui->table->item(row,columnNum)->setFlags(ui->table->item(row,columnNum)->flags() & (~Qt::ItemIsEditable));
|
//ui->table->item(row,columnNum)->setFlags(ui->table->item(row,columnNum)->flags() & (~Qt::ItemIsEditable));
|
||||||
|
@ -463,7 +570,7 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
else
|
else
|
||||||
groupMemories=rigCaps->memories;
|
groupMemories=rigCaps->memories;
|
||||||
|
|
||||||
ui->loadingMemories->setVisible(true);
|
//ui->loadingMemories->setVisible(true);
|
||||||
ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||||
|
|
||||||
ui->group->setEnabled(false);
|
ui->group->setEnabled(false);
|
||||||
|
@ -512,6 +619,20 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
ui->table->showColumn(columnNum);
|
ui->table->showColumn(columnNum);
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
break;
|
break;
|
||||||
|
#if defined __GNUC__
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
||||||
|
#endif
|
||||||
|
case 'C':
|
||||||
|
if (skipList != Q_NULLPTR)
|
||||||
|
delete skipList;
|
||||||
|
skipList = new tableCombobox(createModel(skipModel, skip),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnSkip, skipList);
|
||||||
|
ui->table->showColumn(columnSkip);
|
||||||
|
visibleColumns++;
|
||||||
|
// Fallthrough to add Scanlist column as well.
|
||||||
|
scan.clear();
|
||||||
|
scan << "OFF" << "*1" << "*2" << "*3" << "*4" << "*5" << "*6" << "*7" << "*8" << "*9";
|
||||||
case 'c':
|
case 'c':
|
||||||
if (scanList != Q_NULLPTR)
|
if (scanList != Q_NULLPTR)
|
||||||
delete scanList;
|
delete scanList;
|
||||||
|
@ -521,6 +642,9 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
ui->table->showColumn(columnScan);
|
ui->table->showColumn(columnScan);
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
break;
|
break;
|
||||||
|
#if defined __GNUC__
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
case 'd':
|
case 'd':
|
||||||
if (splitList != Q_NULLPTR)
|
if (splitList != Q_NULLPTR)
|
||||||
delete splitList;
|
delete splitList;
|
||||||
|
@ -538,7 +662,14 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
break;
|
break;
|
||||||
|
case 'D': // Duplex only added for IC-R8600 (most rigs use j for duplex+tone)
|
||||||
|
if (duplexList != Q_NULLPTR)
|
||||||
|
delete duplexList;
|
||||||
|
duplexList = new tableCombobox(createModel(duplexModel, duplexModes),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnDuplex, duplexList);
|
||||||
|
ui->table->showColumn(columnDuplex);
|
||||||
|
visibleColumns++;
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
if (vfoList != Q_NULLPTR)
|
if (vfoList != Q_NULLPTR)
|
||||||
delete vfoList;
|
delete vfoList;
|
||||||
|
@ -889,6 +1020,53 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
ui->table->showColumn(columnR2B);
|
ui->table->showColumn(columnR2B);
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
break;
|
break;
|
||||||
|
case 'w':
|
||||||
|
if (tuningStepsList != Q_NULLPTR)
|
||||||
|
delete tuningStepsList;
|
||||||
|
tuningStepsList = new tableCombobox(createModel(tuningStepsModel, tuningSteps),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnTuningStep, tuningStepsList);
|
||||||
|
ui->table->showColumn(columnTuningStep);
|
||||||
|
visibleColumns++;
|
||||||
|
|
||||||
|
if (tuningStepEditor != Q_NULLPTR)
|
||||||
|
delete tuningStepEditor;
|
||||||
|
tuningStepEditor = new tableEditor("0000",ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnCustomTuningStep, tuningStepEditor);
|
||||||
|
ui->table->showColumn(columnCustomTuningStep);
|
||||||
|
visibleColumns++;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
if (attenuatorsList != Q_NULLPTR)
|
||||||
|
delete attenuatorsList;
|
||||||
|
attenuatorsList = new tableCombobox(createModel(attenuatorsModel, attenuators),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnAttenuator, attenuatorsList);
|
||||||
|
ui->table->showColumn(columnAttenuator);
|
||||||
|
visibleColumns++;
|
||||||
|
|
||||||
|
if (preampsList != Q_NULLPTR)
|
||||||
|
delete preampsList;
|
||||||
|
preampsList = new tableCombobox(createModel(preampsModel, preamps),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnPreamplifier, preampsList);
|
||||||
|
ui->table->showColumn(columnPreamplifier);
|
||||||
|
visibleColumns++;
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
if (antennasList != Q_NULLPTR)
|
||||||
|
delete antennasList;
|
||||||
|
antennasList = new tableCombobox(createModel(antennasModel, antennas),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnAntenna, antennasList);
|
||||||
|
ui->table->showColumn(columnAntenna);
|
||||||
|
visibleColumns++;
|
||||||
|
break;
|
||||||
|
case '+':
|
||||||
|
if (ipplusList != Q_NULLPTR)
|
||||||
|
delete ipplusList;
|
||||||
|
ipplusList = new tableCombobox(createModel(ipplusModel, ipplus),false,ui->table);
|
||||||
|
ui->table->setItemDelegateForColumn(columnIPPlus, ipplusList);
|
||||||
|
ui->table->showColumn(columnIPPlus);
|
||||||
|
visibleColumns++;
|
||||||
|
break;
|
||||||
case 'z':
|
case 'z':
|
||||||
if (nameEditor != Q_NULLPTR)
|
if (nameEditor != Q_NULLPTR)
|
||||||
delete nameEditor;
|
delete nameEditor;
|
||||||
|
@ -898,6 +1076,8 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
ui->table->showColumn(columnName);
|
ui->table->showColumn(columnName);
|
||||||
visibleColumns++;
|
visibleColumns++;
|
||||||
break;
|
break;
|
||||||
|
case 'Z':
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -939,7 +1119,7 @@ void memories::on_group_currentIndexChanged(int index)
|
||||||
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
queue->add(priorityImmediate,queueItem(funcMemoryContents,QVariant::fromValue<uint>(lastMemoryRequested)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui->loadingMemories->setText(QString("Loading Memory %0/%1 (this may take a while!)").arg(lastMemoryRequested&0xffff,3,10,QLatin1Char('0')).arg(rigCaps->memories,3,10,QLatin1Char('0')));
|
//ui->loadingMemories->setText(QString("Loading Memory %0/%1 (this may take a while!)").arg(lastMemoryRequested&0xffff,3,10,QLatin1Char('0')).arg(rigCaps->memories,3,10,QLatin1Char('0')));
|
||||||
}
|
}
|
||||||
|
|
||||||
void memories::on_vfoMode_clicked()
|
void memories::on_vfoMode_clicked()
|
||||||
|
@ -962,7 +1142,7 @@ void memories::on_memoryMode_clicked()
|
||||||
|
|
||||||
void memories::receiveMemory(memoryType mem)
|
void memories::receiveMemory(memoryType mem)
|
||||||
{
|
{
|
||||||
ui->loadingMemories->setText(QString("Loading Memory %0/%1 (this may take a while!)").arg(lastMemoryRequested&0xffff,3,10,QLatin1Char('0')).arg(rigCaps->memories,3,10,QLatin1Char('0')));
|
//ui->loadingMemories->setText(QString("Loading Memory %0/%1 (this may take a while!)").arg(lastMemoryRequested&0xffff,3,10,QLatin1Char('0')).arg(rigCaps->memories,3,10,QLatin1Char('0')));
|
||||||
progress->setValue(lastMemoryRequested & 0xffff);
|
progress->setValue(lastMemoryRequested & 0xffff);
|
||||||
// First, do we need to request the next memory?
|
// First, do we need to request the next memory?
|
||||||
if ((lastMemoryRequested & 0xffff) < groupMemories)
|
if ((lastMemoryRequested & 0xffff) < groupMemories)
|
||||||
|
@ -978,7 +1158,7 @@ void memories::receiveMemory(memoryType mem)
|
||||||
{
|
{
|
||||||
timeoutTimer.stop();
|
timeoutTimer.stop();
|
||||||
ui->group->setEnabled(true);
|
ui->group->setEnabled(true);
|
||||||
ui->loadingMemories->setVisible(false);
|
//ui->loadingMemories->setVisible(false);
|
||||||
if (!ui->disableEditing->isChecked())
|
if (!ui->disableEditing->isChecked())
|
||||||
{
|
{
|
||||||
ui->table->setEditTriggers(QAbstractItemView::DoubleClicked);
|
ui->table->setEditTriggers(QAbstractItemView::DoubleClicked);
|
||||||
|
@ -1026,6 +1206,8 @@ void memories::receiveMemory(memoryType mem)
|
||||||
|
|
||||||
validData += updateCombo(split,row,columnSplit,mem.split);
|
validData += updateCombo(split,row,columnSplit,mem.split);
|
||||||
|
|
||||||
|
validData += updateCombo(skip,row,columnSkip,mem.skip);
|
||||||
|
|
||||||
validData += updateCombo(scan,row,columnScan,mem.scan);
|
validData += updateCombo(scan,row,columnScan,mem.scan);
|
||||||
|
|
||||||
|
|
||||||
|
@ -1045,43 +1227,54 @@ void memories::receiveMemory(memoryType mem)
|
||||||
}
|
}
|
||||||
|
|
||||||
validData += updateCombo(dataModes,row,columnData,mem.datamode);
|
validData += updateCombo(dataModes,row,columnData,mem.datamode);
|
||||||
|
|
||||||
validData += updateCombo(dataModes,row,columnDataB,mem.datamodeB);
|
validData += updateCombo(dataModes,row,columnDataB,mem.datamodeB);
|
||||||
|
|
||||||
validData += updateCombo(toneModes,row,columnToneMode,mem.tonemode);
|
validData += updateCombo(toneModes,row,columnToneMode,mem.tonemode);
|
||||||
|
|
||||||
validData += updateCombo(toneModes,row,columnToneModeB,mem.tonemodeB);
|
validData += updateCombo(toneModes,row,columnToneModeB,mem.tonemodeB);
|
||||||
|
|
||||||
validData += updateCombo(filters,row,columnFilter,mem.filter-1);
|
validData += updateCombo(filters,row,columnFilter,mem.filter-1);
|
||||||
|
|
||||||
validData += updateCombo(filters,row,columnFilterB,mem.filterB-1);
|
validData += updateCombo(filters,row,columnFilterB,mem.filterB-1);
|
||||||
|
|
||||||
validData += updateCombo(duplexModes,row,columnDuplex,mem.duplex);
|
validData += updateCombo(duplexModes,row,columnDuplex,mem.duplex);
|
||||||
|
|
||||||
validData += updateCombo(duplexModes,row,columnDuplexB,mem.duplexB);
|
validData += updateCombo(duplexModes,row,columnDuplexB,mem.duplexB);
|
||||||
|
|
||||||
validData += updateCombo(dsql,row,columnDSQL,mem.dsql);
|
validData += updateCombo(dsql,row,columnDSQL,mem.dsql);
|
||||||
|
|
||||||
validData += updateCombo(dsql,row,columnDSQLB,mem.dsqlB);
|
validData += updateCombo(dsql,row,columnDSQLB,mem.dsqlB);
|
||||||
|
|
||||||
validData += updateCombo(tones,row,columnTone,QString::number((float)mem.tone/10,'f',1));
|
validData += updateCombo(tones,row,columnTone,QString::number((float)mem.tone/10,'f',1));
|
||||||
|
|
||||||
validData += updateCombo(tones,row,columnToneB,QString::number((float)mem.toneB/10,'f',1));
|
validData += updateCombo(tones,row,columnToneB,QString::number((float)mem.toneB/10,'f',1));
|
||||||
|
|
||||||
validData += updateCombo(tones,row,columnTSQL,QString::number((float)mem.tsql/10,'f',1));
|
validData += updateCombo(tuningSteps,row,columnTuningStep,mem.tuningStep);
|
||||||
|
validData += updateCombo(tuningSteps,row,columnTuningStepB,mem.tuningStepB);
|
||||||
|
|
||||||
|
ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStep),QString::number(mem.progTs));
|
||||||
|
validData++;
|
||||||
|
|
||||||
|
ui->table->model()->setData(ui->table->model()->index(row,columnCustomTuningStepB),QString::number(mem.progTsB));
|
||||||
|
validData++;
|
||||||
|
|
||||||
|
validData += updateCombo(attenuators,row,columnAttenuator,mem.atten);
|
||||||
|
validData += updateCombo(attenuators,row,columnAttenuatorB,mem.attenB);
|
||||||
|
|
||||||
|
validData += updateCombo(attenuators,row,columnPreamplifier,mem.preamp);
|
||||||
|
validData += updateCombo(attenuators,row,columnPreamplifierB,mem.preampB);
|
||||||
|
|
||||||
|
validData += updateCombo(antennas,row,columnAntenna,mem.antenna);
|
||||||
|
validData += updateCombo(antennas,row,columnAntennaB,mem.antennaB);
|
||||||
|
|
||||||
|
validData += updateCombo(ipplus,row,columnIPPlus,mem.ipplus);
|
||||||
|
validData += updateCombo(ipplus,row,columnIPPlusB,mem.ipplusB);
|
||||||
|
|
||||||
|
validData += updateCombo(tones,row,columnTSQL,QString::number((float)mem.tsql/10,'f',1));
|
||||||
validData += updateCombo(tones,row,columnTSQLB,QString::number((float)mem.tsqlB/10,'f',1));
|
validData += updateCombo(tones,row,columnTSQLB,QString::number((float)mem.tsqlB/10,'f',1));
|
||||||
|
|
||||||
validData += updateCombo(dvsql,row,columnDVSquelch,QString::number(mem.dvsql).rightJustified(2,'0'));
|
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(dvsql,row,columnDVSquelchB,QString::number(mem.dvsqlB).rightJustified(2,'0'));
|
||||||
|
|
||||||
validData += updateCombo(dtcsp,row,columnDTCSPolarity,mem.dtcsp);
|
validData += updateCombo(dtcsp,row,columnDTCSPolarity,mem.dtcsp);
|
||||||
|
|
||||||
validData += updateCombo(dtcsp,row,columnDTCSPolarityB,mem.dtcspB);
|
validData += updateCombo(dtcsp,row,columnDTCSPolarityB,mem.dtcspB);
|
||||||
|
|
||||||
validData += updateCombo(dtcs,row,columnDTCS,QString::number(mem.dtcs).rightJustified(3,'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(dtcs,row,columnDTCSB,QString::number(mem.dtcsB).rightJustified(3,'0'));
|
||||||
|
|
||||||
ui->table->model()->setData(ui->table->model()->index(row,columnOffset),QString::number(double(mem.duplexOffset.Hz/10000.0),'f',3));
|
ui->table->model()->setData(ui->table->model()->index(row,columnOffset),QString::number(double(mem.duplexOffset.Hz/10000.0),'f',3));
|
||||||
|
@ -1160,7 +1353,7 @@ void memories::receiveMemory(memoryType mem)
|
||||||
else if (row != -1)
|
else if (row != -1)
|
||||||
{
|
{
|
||||||
// Check if we already have this memory as it might have failed to write?
|
// Check if we already have this memory as it might have failed to write?
|
||||||
ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
//ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
||||||
ui->table->item(row,columnNum)->setBackground(Qt::red);
|
ui->table->item(row,columnNum)->setBackground(Qt::red);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1222,7 +1415,7 @@ void memories::timeout()
|
||||||
timeoutCount++;
|
timeoutCount++;
|
||||||
} else {
|
} else {
|
||||||
timeoutCount=0;
|
timeoutCount=0;
|
||||||
ui->loadingMemories->setVisible(false);
|
//ui->loadingMemories->setVisible(false);
|
||||||
timeoutTimer.stop();
|
timeoutTimer.stop();
|
||||||
ui->group->setEnabled(true);
|
ui->group->setEnabled(true);
|
||||||
if (!ui->disableEditing->isChecked())
|
if (!ui->disableEditing->isChecked())
|
||||||
|
@ -1258,6 +1451,8 @@ void memories::on_csvImport_clicked()
|
||||||
|
|
||||||
if (!file.isEmpty())
|
if (!file.isEmpty())
|
||||||
{
|
{
|
||||||
|
ui->table->blockSignals(true);
|
||||||
|
|
||||||
ui->table->sortByColumn(0,Qt::AscendingOrder); // Force natural order
|
ui->table->sortByColumn(0,Qt::AscendingOrder); // Force natural order
|
||||||
|
|
||||||
QFile data(file);
|
QFile data(file);
|
||||||
|
@ -1305,7 +1500,6 @@ void memories::on_csvImport_clicked()
|
||||||
|
|
||||||
int colnum=1;
|
int colnum=1;
|
||||||
|
|
||||||
ui->table->blockSignals(true);
|
|
||||||
for (int i=0; i<row.size();i++)
|
for (int i=0; i<row.size();i++)
|
||||||
{
|
{
|
||||||
while (colnum < ui->table->columnCount() && ui->table->isColumnHidden(colnum)) {
|
while (colnum < ui->table->columnCount() && ui->table->isColumnHidden(colnum)) {
|
||||||
|
@ -1353,14 +1547,18 @@ void memories::on_csvImport_clicked()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colnum == lastcol)
|
|
||||||
ui->table->blockSignals(false);
|
|
||||||
|
|
||||||
ui->table->model()->setData(ui->table->model()->index(rownum,colnum),data);
|
ui->table->model()->setData(ui->table->model()->index(rownum,colnum),data);
|
||||||
|
|
||||||
|
if (colnum == lastcol) {
|
||||||
|
on_table_cellChanged(rownum,colnum); // store this row.
|
||||||
|
}
|
||||||
colnum++;
|
colnum++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->table->blockSignals(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1478,3 +1676,14 @@ void memories::on_disableEditing_toggled(bool dis)
|
||||||
ui->table->setEditTriggers(QAbstractItemView::DoubleClicked);
|
ui->table->setEditTriggers(QAbstractItemView::DoubleClicked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void memories::on_scanButton_toggled(bool scan)
|
||||||
|
{
|
||||||
|
if (scan) {
|
||||||
|
ui->scanButton->setText("Stop Scan");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
ui->scanButton->setText("Start Scan");
|
||||||
|
}
|
||||||
|
queue->add(priorityImmediate,queueItem(funcScanning,QVariant::fromValue<uchar>(uchar(scan))));
|
||||||
|
}
|
||||||
|
|
46
memories.h
46
memories.h
|
@ -43,6 +43,7 @@ private slots:
|
||||||
void on_memoryMode_clicked();
|
void on_memoryMode_clicked();
|
||||||
void on_csvImport_clicked();
|
void on_csvImport_clicked();
|
||||||
void on_csvExport_clicked();
|
void on_csvExport_clicked();
|
||||||
|
void on_scanButton_toggled(bool scan);
|
||||||
void on_disableEditing_toggled(bool dis);
|
void on_disableEditing_toggled(bool dis);
|
||||||
bool readCSVRow (QTextStream &in, QStringList *row);
|
bool readCSVRow (QTextStream &in, QStringList *row);
|
||||||
|
|
||||||
|
@ -69,6 +70,7 @@ private:
|
||||||
|
|
||||||
QStringList split;
|
QStringList split;
|
||||||
QStringList scan;
|
QStringList scan;
|
||||||
|
QStringList skip;
|
||||||
QStringList vfos;
|
QStringList vfos;
|
||||||
QStringList duplexModes;
|
QStringList duplexModes;
|
||||||
QStringList modes;
|
QStringList modes;
|
||||||
|
@ -80,6 +82,11 @@ private:
|
||||||
QStringList dtcsp;
|
QStringList dtcsp;
|
||||||
QStringList dsql;
|
QStringList dsql;
|
||||||
QStringList dvsql;
|
QStringList dvsql;
|
||||||
|
QStringList tuningSteps;
|
||||||
|
QStringList preamps;
|
||||||
|
QStringList attenuators;
|
||||||
|
QStringList antennas;
|
||||||
|
QStringList ipplus;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
columnFrequencyB,
|
columnFrequencyB,
|
||||||
|
@ -98,6 +105,7 @@ private:
|
||||||
columnR2B,
|
columnR2B,
|
||||||
*/
|
*/
|
||||||
QStandardItemModel* splitModel = Q_NULLPTR;
|
QStandardItemModel* splitModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* skipModel = Q_NULLPTR;
|
||||||
QStandardItemModel* scanModel = Q_NULLPTR;
|
QStandardItemModel* scanModel = Q_NULLPTR;
|
||||||
QStandardItemModel* filterModel = Q_NULLPTR;
|
QStandardItemModel* filterModel = Q_NULLPTR;
|
||||||
QStandardItemModel* vfoModel = Q_NULLPTR;
|
QStandardItemModel* vfoModel = Q_NULLPTR;
|
||||||
|
@ -111,6 +119,11 @@ private:
|
||||||
QStandardItemModel* dtcspModel = Q_NULLPTR;
|
QStandardItemModel* dtcspModel = Q_NULLPTR;
|
||||||
QStandardItemModel* dtcsModel = Q_NULLPTR;
|
QStandardItemModel* dtcsModel = Q_NULLPTR;
|
||||||
QStandardItemModel* dvsqlModel = Q_NULLPTR;
|
QStandardItemModel* dvsqlModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* tuningStepsModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* preampsModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* attenuatorsModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* antennasModel = Q_NULLPTR;
|
||||||
|
QStandardItemModel* ipplusModel = Q_NULLPTR;
|
||||||
|
|
||||||
QStandardItemModel* vfoModelB = Q_NULLPTR;
|
QStandardItemModel* vfoModelB = Q_NULLPTR;
|
||||||
QStandardItemModel* modesModelB = Q_NULLPTR;
|
QStandardItemModel* modesModelB = Q_NULLPTR;
|
||||||
|
@ -124,11 +137,17 @@ private:
|
||||||
QStandardItemModel* duplexModelB = Q_NULLPTR;
|
QStandardItemModel* duplexModelB = Q_NULLPTR;
|
||||||
QStandardItemModel* dtcsModelB = Q_NULLPTR;
|
QStandardItemModel* dtcsModelB = Q_NULLPTR;
|
||||||
QStandardItemModel* dvsqlModelB = Q_NULLPTR;
|
QStandardItemModel* dvsqlModelB = Q_NULLPTR;
|
||||||
|
// I don't know of any radio that uses these!
|
||||||
|
QStandardItemModel* tuningStepsModelB = Q_NULLPTR;
|
||||||
|
QStandardItemModel* preampsModelB = Q_NULLPTR;
|
||||||
|
QStandardItemModel* attenuatorsModelB = Q_NULLPTR;
|
||||||
|
QStandardItemModel* antennasModelB = Q_NULLPTR;
|
||||||
|
QStandardItemModel* ipplusModelB = Q_NULLPTR;
|
||||||
|
|
||||||
tableEditor* numEditor = Q_NULLPTR;
|
tableEditor* numEditor = Q_NULLPTR;
|
||||||
tableCombobox* splitList = Q_NULLPTR;
|
tableCombobox* splitList = Q_NULLPTR;
|
||||||
tableCombobox* scanList = Q_NULLPTR;
|
tableCombobox* scanList = Q_NULLPTR;
|
||||||
|
tableCombobox* skipList = Q_NULLPTR;
|
||||||
tableCombobox* vfoList = Q_NULLPTR;
|
tableCombobox* vfoList = Q_NULLPTR;
|
||||||
tableEditor* nameEditor = Q_NULLPTR;
|
tableEditor* nameEditor = Q_NULLPTR;
|
||||||
tableEditor* freqEditor = Q_NULLPTR;
|
tableEditor* freqEditor = Q_NULLPTR;
|
||||||
|
@ -147,6 +166,12 @@ private:
|
||||||
tableEditor* urEditor = Q_NULLPTR;
|
tableEditor* urEditor = Q_NULLPTR;
|
||||||
tableEditor* r1Editor = Q_NULLPTR;
|
tableEditor* r1Editor = Q_NULLPTR;
|
||||||
tableEditor* r2Editor = Q_NULLPTR;
|
tableEditor* r2Editor = Q_NULLPTR;
|
||||||
|
tableCombobox* tuningStepsList = Q_NULLPTR;
|
||||||
|
tableEditor* tuningStepEditor = Q_NULLPTR;
|
||||||
|
tableCombobox* preampsList = Q_NULLPTR;
|
||||||
|
tableCombobox* attenuatorsList = Q_NULLPTR;
|
||||||
|
tableCombobox* antennasList = Q_NULLPTR;
|
||||||
|
tableCombobox* ipplusList = Q_NULLPTR;
|
||||||
|
|
||||||
tableCombobox* vfoListB = Q_NULLPTR;
|
tableCombobox* vfoListB = Q_NULLPTR;
|
||||||
tableEditor* freqEditorB = Q_NULLPTR;
|
tableEditor* freqEditorB = Q_NULLPTR;
|
||||||
|
@ -165,6 +190,12 @@ private:
|
||||||
tableEditor* urEditorB = Q_NULLPTR;
|
tableEditor* urEditorB = Q_NULLPTR;
|
||||||
tableEditor* r1EditorB = Q_NULLPTR;
|
tableEditor* r1EditorB = Q_NULLPTR;
|
||||||
tableEditor* r2EditorB = Q_NULLPTR;
|
tableEditor* r2EditorB = Q_NULLPTR;
|
||||||
|
tableCombobox* tuningStepsListB = Q_NULLPTR;
|
||||||
|
tableEditor* tuningStepEditorB = Q_NULLPTR;
|
||||||
|
tableCombobox* preampsListB = Q_NULLPTR;
|
||||||
|
tableCombobox* attenuatorsListB = Q_NULLPTR;
|
||||||
|
tableCombobox* antennasListB = Q_NULLPTR;
|
||||||
|
tableCombobox* ipplusListBB = Q_NULLPTR;
|
||||||
|
|
||||||
rigCapabilities* rigCaps = Q_NULLPTR;
|
rigCapabilities* rigCaps = Q_NULLPTR;
|
||||||
|
|
||||||
|
@ -179,6 +210,7 @@ private:
|
||||||
columnNum,
|
columnNum,
|
||||||
columnName,
|
columnName,
|
||||||
columnSplit,
|
columnSplit,
|
||||||
|
columnSkip,
|
||||||
columnScan,
|
columnScan,
|
||||||
columnVFO,
|
columnVFO,
|
||||||
columnFrequency,
|
columnFrequency,
|
||||||
|
@ -187,6 +219,12 @@ private:
|
||||||
columnData,
|
columnData,
|
||||||
columnDuplex,
|
columnDuplex,
|
||||||
columnToneMode,
|
columnToneMode,
|
||||||
|
columnTuningStep,
|
||||||
|
columnCustomTuningStep,
|
||||||
|
columnAttenuator,
|
||||||
|
columnPreamplifier,
|
||||||
|
columnAntenna,
|
||||||
|
columnIPPlus,
|
||||||
columnDSQL,
|
columnDSQL,
|
||||||
columnTone,
|
columnTone,
|
||||||
columnTSQL,
|
columnTSQL,
|
||||||
|
@ -204,6 +242,12 @@ private:
|
||||||
columnDataB,
|
columnDataB,
|
||||||
columnDuplexB,
|
columnDuplexB,
|
||||||
columnToneModeB,
|
columnToneModeB,
|
||||||
|
columnTuningStepB,
|
||||||
|
columnCustomTuningStepB,
|
||||||
|
columnAttenuatorB,
|
||||||
|
columnPreamplifierB,
|
||||||
|
columnAntennaB,
|
||||||
|
columnIPPlusB,
|
||||||
columnDSQLB,
|
columnDSQLB,
|
||||||
columnToneB,
|
columnToneB,
|
||||||
columnTSQLB,
|
columnTSQLB,
|
||||||
|
|
58
memories.ui
58
memories.ui
|
@ -17,7 +17,7 @@
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="sizeConstraint">
|
<property name="sizeConstraint">
|
||||||
<enum>QLayout::SetMaximumSize</enum>
|
<enum>QLayout::SizeConstraint::SetMaximumSize</enum>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_4">
|
<spacer name="horizontalSpacer_4">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_3">
|
<spacer name="horizontalSpacer_3">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
|
@ -61,56 +61,16 @@
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="loadingMemories">
|
<widget class="QPushButton" name="scanButton">
|
||||||
<property name="enabled">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="palette">
|
|
||||||
<palette>
|
|
||||||
<active>
|
|
||||||
<colorrole role="WindowText">
|
|
||||||
<brush brushstyle="SolidPattern">
|
|
||||||
<color alpha="255">
|
|
||||||
<red>0</red>
|
|
||||||
<green>0</green>
|
|
||||||
<blue>0</blue>
|
|
||||||
</color>
|
|
||||||
</brush>
|
|
||||||
</colorrole>
|
|
||||||
</active>
|
|
||||||
<inactive>
|
|
||||||
<colorrole role="WindowText">
|
|
||||||
<brush brushstyle="SolidPattern">
|
|
||||||
<color alpha="255">
|
|
||||||
<red>0</red>
|
|
||||||
<green>0</green>
|
|
||||||
<blue>0</blue>
|
|
||||||
</color>
|
|
||||||
</brush>
|
|
||||||
</colorrole>
|
|
||||||
</inactive>
|
|
||||||
<disabled>
|
|
||||||
<colorrole role="WindowText">
|
|
||||||
<brush brushstyle="SolidPattern">
|
|
||||||
<color alpha="255">
|
|
||||||
<red>120</red>
|
|
||||||
<green>120</green>
|
|
||||||
<blue>120</blue>
|
|
||||||
</color>
|
|
||||||
</brush>
|
|
||||||
</colorrole>
|
|
||||||
</disabled>
|
|
||||||
</palette>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Loading Memories (this may take a while!)</string>
|
<string>Start Scan</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer">
|
<spacer name="horizontalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
|
@ -137,7 +97,7 @@
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Orientation::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
|
@ -169,10 +129,10 @@
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="selectionMode">
|
<property name="selectionMode">
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
<enum>QAbstractItemView::SelectionMode::SingleSelection</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="selectionBehavior">
|
<property name="selectionBehavior">
|
||||||
<enum>QAbstractItemView::SelectItems</enum>
|
<enum>QAbstractItemView::SelectionBehavior::SelectItems</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="sortingEnabled">
|
<property name="sortingEnabled">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
|
Ładowanie…
Reference in New Issue