Add ability to clone DBC signals. F2 will also do this from the

keyboard (very handy!)
This commit is contained in:
Collin Kidder
2019-03-11 21:42:19 -04:00
parent c9880be2c5
commit f16660ba52
3 changed files with 46 additions and 1 deletions
+1
View File
@@ -94,6 +94,7 @@ void CANConManager::refreshCanList()
if (mConns.count() == 0) if (mConns.count() == 0)
{ {
//TODO: Seems to crash under heavy load. Find out why.
if(buslessFrames.size()) { if(buslessFrames.size()) {
tempFrames.clear(); tempFrames.clear();
tempFrames.append(buslessFrames); //make a copy and pass that copy tempFrames.append(buslessFrames); //make a copy and pass that copy
+43
View File
@@ -232,6 +232,9 @@ bool DBCSignalEditor::eventFilter(QObject *obj, QEvent *event)
case Qt::Key_F1: case Qt::Key_F1:
HelpWindow::getRef()->showHelp("signaleditor.html"); HelpWindow::getRef()->showHelp("signaleditor.html");
break; break;
case Qt::Key_F2:
cloneSignal();
break;
} }
return true; return true;
} else { } else {
@@ -324,7 +327,11 @@ void DBCSignalEditor::onCustomMenuSignals(QPoint point)
menu->setAttribute(Qt::WA_DeleteOnClose); menu->setAttribute(Qt::WA_DeleteOnClose);
menu->addAction(tr("Add a new signal"), this, SLOT(addNewSignal())); menu->addAction(tr("Add a new signal"), this, SLOT(addNewSignal()));
if (ui->signalsList->currentRow() != -1)
{
menu->addAction(tr("Clone currently selected signal"), this, SLOT(cloneSignal()));
menu->addAction(tr("Delete currently selected signal"), this, SLOT(deleteCurrentSignal())); menu->addAction(tr("Delete currently selected signal"), this, SLOT(deleteCurrentSignal()));
}
menu->popup(ui->signalsList->mapToGlobal(point)); menu->popup(ui->signalsList->mapToGlobal(point));
} }
@@ -365,7 +372,43 @@ void DBCSignalEditor::addNewSignal()
/* this will call clickSignalList */ /* this will call clickSignalList */
ui->signalsList->addItem(newName); ui->signalsList->addItem(newName);
ui->signalsList->setCurrentRow(ui->signalsList->count()-1); ui->signalsList->setCurrentRow(ui->signalsList->count()-1);
}
void DBCSignalEditor::cloneSignal()
{
int num = qrand() % 100;
int idx = ui->signalsList->currentRow();
if (idx < 0) return;
DBC_SIGNAL *oldSig = dbcMessage->sigHandler->findSignalByIdx(idx);
if (!oldSig) return;
QString newName = oldSig->name + QString::number(num);
DBC_SIGNAL newSig;
newSig.name = newName;
newSig.bias = oldSig->bias;
newSig.factor = oldSig->factor;
newSig.intelByteOrder = oldSig->intelByteOrder;
newSig.max = oldSig->max;
newSig.min = oldSig->min;
newSig.receiver = oldSig->receiver;
newSig.signalSize = oldSig->signalSize;
newSig.startBit = oldSig->startBit;
newSig.valType = oldSig->valType;
newSig.valList.append(oldSig->valList);
newSig.isMultiplexed = oldSig->isMultiplexed;
newSig.isMultiplexor = oldSig->isMultiplexor; //maybe should force this false since you can't have two or more!
newSig.multiplexValue = oldSig->multiplexValue;
newSig.parentMessage = dbcMessage;
dbcMessage->sigHandler->addSignal(newSig);
/* add item at the end of the list */
ui->signalsList->addItem(newName);
//unlike adding a signal we don't want to select the new signal here.
//ui->signalsList->setCurrentRow(ui->signalsList->count()-1);
} }
void DBCSignalEditor::deleteCurrentSignal() void DBCSignalEditor::deleteCurrentSignal()
+1
View File
@@ -27,6 +27,7 @@ private slots:
void onCustomMenuSignals(QPoint); void onCustomMenuSignals(QPoint);
void onCustomMenuValues(QPoint); void onCustomMenuValues(QPoint);
void addNewSignal(); void addNewSignal();
void cloneSignal();
void deleteCurrentSignal(); void deleteCurrentSignal();
void deleteCurrentValue(); void deleteCurrentValue();