kopia lustrzana https://gitlab.com/eliggett/wfview
Initial work on 8600 memories
rodzic
87bb43c726
commit
3dc4fe53a1
|
@ -92,8 +92,8 @@ void cachingQueue::run()
|
|||
it--;
|
||||
auto item = it.value();
|
||||
emit haveCommand(item.command,item.param,item.receiver);
|
||||
//it=queue.erase(it);
|
||||
queue.remove(prio,it.value());
|
||||
it=queue.erase(it);
|
||||
//queue.remove(prio,it.value()); // Will remove ALL matching commands which breaks some things (memory bulk write)
|
||||
if (item.recurring && prio != priorityImmediate) {
|
||||
queue.insert(prio,item);
|
||||
}
|
||||
|
|
|
@ -1510,7 +1510,7 @@ void icomCommander::determineRigCaps()
|
|||
|
||||
|
||||
// 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);
|
||||
while (i.hasNext()) {
|
||||
QRegularExpressionMatch qmatch = i.next();
|
||||
|
@ -2129,7 +2129,7 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
|||
payloadIn.insert(0,"**");
|
||||
for (auto &parse: *memParser) {
|
||||
// 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;
|
||||
}
|
||||
QByteArray data = payloadIn.mid(parse.pos+1,parse.len);
|
||||
|
@ -2151,10 +2151,17 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
|||
case 'c':
|
||||
mem->scan = data[0];
|
||||
break;
|
||||
case 'C':
|
||||
mem->skip = data[0] >> 4 & 0xf;
|
||||
mem->scan = data[0] & 0xf;
|
||||
break;
|
||||
case 'd': // combined split and scan
|
||||
mem->split = quint8(data[0] >> 4 & 0x0f);
|
||||
mem->scan = quint8(data[0] & 0x0f);
|
||||
break;
|
||||
case 'D': // duplex only (used for IC-R8600)
|
||||
mem->duplex = quint8(data[0] & 0x0f);
|
||||
break;
|
||||
case 'e':
|
||||
mem->vfo=data[0];
|
||||
break;
|
||||
|
@ -2267,11 +2274,29 @@ bool icomCommander::parseMemory(QVector<memParserFormat>* memParser, memoryType*
|
|||
case 'V':
|
||||
memcpy(mem->R2B,data.data(),qMin(int(sizeof mem->R2B),data.size()));
|
||||
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':
|
||||
if (mem->scan == 0xfe)
|
||||
mem->scan = 0;
|
||||
memcpy(mem->name,data.data(),qMin(int(sizeof mem->name),data.size()));
|
||||
break;
|
||||
case 'Z': // Special mode dependant features (I have no idea how to make these work!)
|
||||
break;
|
||||
default:
|
||||
qInfo() << "Parser didn't match!" << "spec:" << parse.spec << "pos:" << parse.pos << "len" << parse.len;
|
||||
break;
|
||||
|
@ -2391,7 +2416,7 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
if (func == funcMemoryContents || func == funcMemoryClear || func == funcMemoryWrite || func == funcMemoryMode)
|
||||
{
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
@ -2541,8 +2566,8 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
}
|
||||
else if (!strcmp(value.typeName(),"uint") && (func == funcMemoryContents || func == funcMemoryMode))
|
||||
{
|
||||
qInfo(logRig()) << "Get Memory Contents" << (value.value<uint>() & 0xffff);
|
||||
qInfo(logRig()) << "Get Memory Group (if exists)" << (value.value<uint>() >> 16 & 0xffff);
|
||||
qDebug(logRig()) << "Get Memory Contents" << (value.value<uint>() & 0xffff);
|
||||
qDebug(logRig()) << "Get Memory Group (if exists)" << (value.value<uint>() >> 16 & 0xffff);
|
||||
// Format is different for all radios!
|
||||
if (func == funcMemoryContents) {
|
||||
for (auto &parse: rigCaps.memParser) {
|
||||
|
@ -2604,9 +2629,22 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
payload.append(mem.scan);
|
||||
}
|
||||
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
|
||||
payload.append(quint8((mem.split << 4 & 0xf0) | (mem.scan & 0x0f)));
|
||||
break;
|
||||
case 'D': // Duplex only
|
||||
payload.append(mem.duplex);
|
||||
break;
|
||||
case 'e':
|
||||
payload.append(mem.vfo);
|
||||
break;
|
||||
|
@ -2725,9 +2763,26 @@ void icomCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
case 'V':
|
||||
payload.append(QByteArray(mem.R2B).leftJustified(parse.len,' ',true));
|
||||
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':
|
||||
payload.append(QByteArray(mem.name).leftJustified(parse.len,' ',true));
|
||||
break;
|
||||
case 'Z': // Special mode dependant features (I have no idea how to make these work!)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
267
memories.cpp
267
memories.cpp
|
@ -33,19 +33,30 @@ memories::memories(bool isAdmin, bool slowLoad, QWidget *parent) :
|
|||
|
||||
progress->setRange(rigCaps->memStart,rigCaps->memories);
|
||||
|
||||
if (!rigCaps->commands.contains(funcScanning))
|
||||
{
|
||||
ui->scanButton->setVisible(false);
|
||||
} else {
|
||||
ui->scanButton->setCheckable(true);
|
||||
}
|
||||
QStringList headers;
|
||||
|
||||
/*
|
||||
|
||||
columnRecall=0, columnNum,columnSplit,columnScan,columnFrequency,columnMode,columnFilter,columnData,columnDuplex,columnToneMode,columnDSQL,columnTone,columnTSQL,columnDTCS,
|
||||
columnDTCSPolarity,columnDVSquelch,columnOffset,columnUR,columnR1,columnR2,columnFrequencyB,columnModeB,columnFilterB,columnDataB,columnDuplexB,columnToneModeB, columnDSQLB
|
||||
columnRecall=0, columnNum,columnSplit,columnSkip,columnScan,columnFrequency,columnMode,columnFilter,columnData,columnDuplex,columnToneMode,
|
||||
columnTuningStep, columnCustomTuningStep, columnAttenuator, columnPreamplifier, columnAntenna, columnIPPlus,columnDSQL,columnTone,columnTSQL,columnDTCS,
|
||||
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" <<
|
||||
"DTCS" << "DTCS Pol" << "DV Sql" << "Offset" << "UR" << "R1" << "R2" << "VFO B" << "Freq B" << "Mode B" << "Filter B" << "Data B" << "Duplex B" <<
|
||||
"Tn Mode B" << "DSQL B" << "Tone B" << "TSQL B" << "DTCS B" << "DTCSP B" << "DV Sql B" << "Offset B" << "UR B" << "R1 B" << "R2 B";
|
||||
headers << "" << "Num" << "Name" << "Split" << "Skip" << "Scan" << "VFO" << "Freq" << "Mode" << "Filter" << "Data" <<"Duplex" << "Tn Mode" <<
|
||||
"Step" << "Prog Step" << "Atten" << "Preamp" << "Ant" << "IP Plus" << "DSQL" << "Tone" << "TSQL" << "DTCS" << "DTCS Pol" << "DV Sql" <<
|
||||
"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";
|
||||
|
||||
split << "OFF" << "ON";
|
||||
|
@ -80,14 +91,37 @@ memories::memories(bool isAdmin, bool slowLoad, QWidget *parent) :
|
|||
|
||||
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->group->hide();
|
||||
ui->vfoMode->hide();
|
||||
ui->memoryMode->hide();
|
||||
ui->loadingMemories->setVisible(false);
|
||||
ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
||||
//ui->loadingMemories->setVisible(false);
|
||||
//ui->loadingMemories->setStyleSheet("QLabel {color: #ff0000}");
|
||||
|
||||
ui->group->blockSignals(true);
|
||||
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'));
|
||||
// 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),"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,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]);
|
||||
|
@ -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,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,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,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]);
|
||||
|
@ -327,6 +382,10 @@ void memories::on_table_cellChanged(int row, int col)
|
|||
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) {
|
||||
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());
|
||||
}
|
||||
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
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;
|
||||
// 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));
|
||||
|
@ -463,7 +570,7 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
else
|
||||
groupMemories=rigCaps->memories;
|
||||
|
||||
ui->loadingMemories->setVisible(true);
|
||||
//ui->loadingMemories->setVisible(true);
|
||||
ui->table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
|
||||
ui->group->setEnabled(false);
|
||||
|
@ -512,6 +619,20 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
ui->table->showColumn(columnNum);
|
||||
visibleColumns++;
|
||||
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':
|
||||
if (scanList != Q_NULLPTR)
|
||||
delete scanList;
|
||||
|
@ -521,6 +642,9 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
ui->table->showColumn(columnScan);
|
||||
visibleColumns++;
|
||||
break;
|
||||
#if defined __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
case 'd':
|
||||
if (splitList != Q_NULLPTR)
|
||||
delete splitList;
|
||||
|
@ -538,7 +662,14 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
visibleColumns++;
|
||||
visibleColumns++;
|
||||
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':
|
||||
if (vfoList != Q_NULLPTR)
|
||||
delete vfoList;
|
||||
|
@ -889,6 +1020,53 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
ui->table->showColumn(columnR2B);
|
||||
visibleColumns++;
|
||||
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':
|
||||
if (nameEditor != Q_NULLPTR)
|
||||
delete nameEditor;
|
||||
|
@ -898,6 +1076,8 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
ui->table->showColumn(columnName);
|
||||
visibleColumns++;
|
||||
break;
|
||||
case 'Z':
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -939,7 +1119,7 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
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()
|
||||
|
@ -962,7 +1142,7 @@ void memories::on_memoryMode_clicked()
|
|||
|
||||
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);
|
||||
// First, do we need to request the next memory?
|
||||
if ((lastMemoryRequested & 0xffff) < groupMemories)
|
||||
|
@ -978,7 +1158,7 @@ void memories::receiveMemory(memoryType mem)
|
|||
{
|
||||
timeoutTimer.stop();
|
||||
ui->group->setEnabled(true);
|
||||
ui->loadingMemories->setVisible(false);
|
||||
//ui->loadingMemories->setVisible(false);
|
||||
if (!ui->disableEditing->isChecked())
|
||||
{
|
||||
ui->table->setEditTriggers(QAbstractItemView::DoubleClicked);
|
||||
|
@ -1026,6 +1206,8 @@ void memories::receiveMemory(memoryType mem)
|
|||
|
||||
validData += updateCombo(split,row,columnSplit,mem.split);
|
||||
|
||||
validData += updateCombo(skip,row,columnSkip,mem.skip);
|
||||
|
||||
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,columnDataB,mem.datamodeB);
|
||||
|
||||
validData += updateCombo(toneModes,row,columnToneMode,mem.tonemode);
|
||||
|
||||
validData += updateCombo(toneModes,row,columnToneModeB,mem.tonemodeB);
|
||||
|
||||
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(dsql,row,columnDSQL,mem.dsql);
|
||||
|
||||
validData += updateCombo(dsql,row,columnDSQLB,mem.dsqlB);
|
||||
|
||||
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,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(dvsql,row,columnDVSquelch,QString::number(mem.dvsql).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,columnDTCSPolarityB,mem.dtcspB);
|
||||
|
||||
validData += updateCombo(dtcs,row,columnDTCS,QString::number(mem.dtcs).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));
|
||||
|
@ -1160,7 +1353,7 @@ void memories::receiveMemory(memoryType mem)
|
|||
else if (row != -1)
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
@ -1222,7 +1415,7 @@ void memories::timeout()
|
|||
timeoutCount++;
|
||||
} else {
|
||||
timeoutCount=0;
|
||||
ui->loadingMemories->setVisible(false);
|
||||
//ui->loadingMemories->setVisible(false);
|
||||
timeoutTimer.stop();
|
||||
ui->group->setEnabled(true);
|
||||
if (!ui->disableEditing->isChecked())
|
||||
|
@ -1258,6 +1451,8 @@ void memories::on_csvImport_clicked()
|
|||
|
||||
if (!file.isEmpty())
|
||||
{
|
||||
ui->table->blockSignals(true);
|
||||
|
||||
ui->table->sortByColumn(0,Qt::AscendingOrder); // Force natural order
|
||||
|
||||
QFile data(file);
|
||||
|
@ -1305,7 +1500,6 @@ void memories::on_csvImport_clicked()
|
|||
|
||||
int colnum=1;
|
||||
|
||||
ui->table->blockSignals(true);
|
||||
for (int i=0; i<row.size();i++)
|
||||
{
|
||||
while (colnum < ui->table->columnCount() && ui->table->isColumnHidden(colnum)) {
|
||||
|
@ -1353,14 +1547,18 @@ void memories::on_csvImport_clicked()
|
|||
break;
|
||||
}
|
||||
|
||||
if (colnum == lastcol)
|
||||
ui->table->blockSignals(false);
|
||||
|
||||
ui->table->model()->setData(ui->table->model()->index(rownum,colnum),data);
|
||||
|
||||
if (colnum == lastcol) {
|
||||
on_table_cellChanged(rownum,colnum); // store this row.
|
||||
}
|
||||
colnum++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ui->table->blockSignals(false);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1478,3 +1676,14 @@ void memories::on_disableEditing_toggled(bool dis)
|
|||
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_csvImport_clicked();
|
||||
void on_csvExport_clicked();
|
||||
void on_scanButton_toggled(bool scan);
|
||||
void on_disableEditing_toggled(bool dis);
|
||||
bool readCSVRow (QTextStream &in, QStringList *row);
|
||||
|
||||
|
@ -69,6 +70,7 @@ private:
|
|||
|
||||
QStringList split;
|
||||
QStringList scan;
|
||||
QStringList skip;
|
||||
QStringList vfos;
|
||||
QStringList duplexModes;
|
||||
QStringList modes;
|
||||
|
@ -80,6 +82,11 @@ private:
|
|||
QStringList dtcsp;
|
||||
QStringList dsql;
|
||||
QStringList dvsql;
|
||||
QStringList tuningSteps;
|
||||
QStringList preamps;
|
||||
QStringList attenuators;
|
||||
QStringList antennas;
|
||||
QStringList ipplus;
|
||||
|
||||
/*
|
||||
columnFrequencyB,
|
||||
|
@ -98,6 +105,7 @@ private:
|
|||
columnR2B,
|
||||
*/
|
||||
QStandardItemModel* splitModel = Q_NULLPTR;
|
||||
QStandardItemModel* skipModel = Q_NULLPTR;
|
||||
QStandardItemModel* scanModel = Q_NULLPTR;
|
||||
QStandardItemModel* filterModel = Q_NULLPTR;
|
||||
QStandardItemModel* vfoModel = Q_NULLPTR;
|
||||
|
@ -111,6 +119,11 @@ private:
|
|||
QStandardItemModel* dtcspModel = Q_NULLPTR;
|
||||
QStandardItemModel* dtcsModel = 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* modesModelB = Q_NULLPTR;
|
||||
|
@ -124,11 +137,17 @@ private:
|
|||
QStandardItemModel* duplexModelB = Q_NULLPTR;
|
||||
QStandardItemModel* dtcsModelB = 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;
|
||||
tableCombobox* splitList = Q_NULLPTR;
|
||||
tableCombobox* scanList = Q_NULLPTR;
|
||||
tableCombobox* skipList = Q_NULLPTR;
|
||||
tableCombobox* vfoList = Q_NULLPTR;
|
||||
tableEditor* nameEditor = Q_NULLPTR;
|
||||
tableEditor* freqEditor = Q_NULLPTR;
|
||||
|
@ -147,6 +166,12 @@ private:
|
|||
tableEditor* urEditor = Q_NULLPTR;
|
||||
tableEditor* r1Editor = 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;
|
||||
tableEditor* freqEditorB = Q_NULLPTR;
|
||||
|
@ -165,6 +190,12 @@ private:
|
|||
tableEditor* urEditorB = Q_NULLPTR;
|
||||
tableEditor* r1EditorB = 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;
|
||||
|
||||
|
@ -179,6 +210,7 @@ private:
|
|||
columnNum,
|
||||
columnName,
|
||||
columnSplit,
|
||||
columnSkip,
|
||||
columnScan,
|
||||
columnVFO,
|
||||
columnFrequency,
|
||||
|
@ -187,6 +219,12 @@ private:
|
|||
columnData,
|
||||
columnDuplex,
|
||||
columnToneMode,
|
||||
columnTuningStep,
|
||||
columnCustomTuningStep,
|
||||
columnAttenuator,
|
||||
columnPreamplifier,
|
||||
columnAntenna,
|
||||
columnIPPlus,
|
||||
columnDSQL,
|
||||
columnTone,
|
||||
columnTSQL,
|
||||
|
@ -204,6 +242,12 @@ private:
|
|||
columnDataB,
|
||||
columnDuplexB,
|
||||
columnToneModeB,
|
||||
columnTuningStepB,
|
||||
columnCustomTuningStepB,
|
||||
columnAttenuatorB,
|
||||
columnPreamplifierB,
|
||||
columnAntennaB,
|
||||
columnIPPlusB,
|
||||
columnDSQLB,
|
||||
columnToneB,
|
||||
columnTSQLB,
|
||||
|
|
58
memories.ui
58
memories.ui
|
@ -17,7 +17,7 @@
|
|||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMaximumSize</enum>
|
||||
<enum>QLayout::SizeConstraint::SetMaximumSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
|
@ -27,7 +27,7 @@
|
|||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
|
@ -50,7 +50,7 @@
|
|||
<item>
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
|
@ -61,56 +61,16 @@
|
|||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="loadingMemories">
|
||||
<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>
|
||||
<widget class="QPushButton" name="scanButton">
|
||||
<property name="text">
|
||||
<string>Loading Memories (this may take a while!)</string>
|
||||
<string>Start Scan</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
|
@ -137,7 +97,7 @@
|
|||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
|
@ -169,10 +129,10 @@
|
|||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::SingleSelection</enum>
|
||||
<enum>QAbstractItemView::SelectionMode::SingleSelection</enum>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectItems</enum>
|
||||
<enum>QAbstractItemView::SelectionBehavior::SelectItems</enum>
|
||||
</property>
|
||||
<property name="sortingEnabled">
|
||||
<bool>true</bool>
|
||||
|
|
Ładowanie…
Reference in New Issue