diff --git a/Software/PC_Application/Traces/Marker/marker.cpp b/Software/PC_Application/Traces/Marker/marker.cpp index 98587d3..7e8e970 100644 --- a/Software/PC_Application/Traces/Marker/marker.cpp +++ b/Software/PC_Application/Traces/Marker/marker.cpp @@ -708,9 +708,8 @@ void Marker::checkDeltaMarker() // not a delta marker, nothing to do return; } - // Check if type of delta marker is still okay - if(!delta || delta->getDomain() != getDomain()) { - // not the same domain anymore, adjust delta + if(!canUseAsDelta(delta)) { + // incompatible delta marker, select best choice instead assignDeltaMarker(bestDeltaCandidate()); } } @@ -973,6 +972,20 @@ Marker *Marker::bestDeltaCandidate() return match; } +bool Marker::canUseAsDelta(Marker *m) +{ + if(type != Type::Delta) { + // not a delta marker, nothing to do + return false; + } + if(m->getDomain() != getDomain()) { + // not the same domain anymore, unusable + return false; + } + + return true; +} + void Marker::assignDeltaMarker(Marker *m) { if(type != Type::Delta) { @@ -1285,14 +1298,19 @@ QWidget *Marker::getTypeEditor(QAbstractItemDelegate *delegate) layout->setMargin(0); layout->setSpacing(0); layout->addWidget(new QLabel("to")); - auto spinbox = new QSpinBox; - if(delta) { - spinbox->setValue(delta->number); + auto deltaChooser = new QComboBox; + for(auto m : model->getMarkers()) { + if(canUseAsDelta(m)) { + deltaChooser->addItem(QString::number(m->getNumber())); + } } - connect(spinbox, qOverload(&QSpinBox::valueChanged), [=](int newval){ + if(delta) { + deltaChooser->setCurrentText(QString::number(delta->number)); + } + connect(deltaChooser, qOverload(&QComboBox::currentIndexChanged), [=](int){ bool found = false; for(auto m : model->getMarkers()) { - if(m->number == newval) { + if(m->number == deltaChooser->currentText().toInt()) { assignDeltaMarker(m); found = true; break; @@ -1303,8 +1321,8 @@ QWidget *Marker::getTypeEditor(QAbstractItemDelegate *delegate) } update(); }); - spinbox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - layout->addWidget(spinbox); + deltaChooser->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + layout->addWidget(deltaChooser); w->setLayout(layout); c->setObjectName("Type"); if(delegate){ @@ -1496,7 +1514,7 @@ bool Marker::isVisible() return visible; } -bool Marker::setVisible(bool visible) +void Marker::setVisible(bool visible) { if(this->visible != visible) { this->visible = visible; diff --git a/Software/PC_Application/Traces/Marker/marker.h b/Software/PC_Application/Traces/Marker/marker.h index 8c22b2f..3aab71b 100644 --- a/Software/PC_Application/Traces/Marker/marker.h +++ b/Software/PC_Application/Traces/Marker/marker.h @@ -98,7 +98,7 @@ public: SIUnitEdit* getSettingsEditor(); void adjustSettings(double value); bool isVisible(); - bool setVisible(bool visible); + void setVisible(bool visible); QMenu *getContextMenu(); @@ -107,6 +107,7 @@ public: Marker *getParent() const; const std::vector& getHelperMarkers() const; Marker *helperMarker(unsigned int i); + bool canUseAsDelta(Marker *m); void assignDeltaMarker(Marker *m); QString getSuffix() const; diff --git a/Software/PC_Application/Traces/Marker/markerwidget.cpp b/Software/PC_Application/Traces/Marker/markerwidget.cpp index 516eecc..da6a187 100644 --- a/Software/PC_Application/Traces/Marker/markerwidget.cpp +++ b/Software/PC_Application/Traces/Marker/markerwidget.cpp @@ -91,6 +91,7 @@ MarkerWidget::MarkerWidget(MarkerModel &model, QWidget *parent) : connect(m, &Marker::typeChanged, this, &MarkerWidget::updatePersistentEditors); connect(m, &Marker::traceChanged, this, &MarkerWidget::updatePersistentEditors); connect(m, &Marker::assignedDeltaChanged, this, &MarkerWidget::updatePersistentEditors); + connect(m, &Marker::deleted, this, &MarkerWidget::updatePersistentEditors); updatePersistentEditors(); }); connect(&model, &MarkerModel::setupLoadComplete, this, &MarkerWidget::updatePersistentEditors);