Use combobox for delta marker selection

This commit is contained in:
Jan Käberich 2022-07-09 15:39:25 +02:00
parent 17882c9d51
commit d57970d3ed
3 changed files with 32 additions and 12 deletions

View File

@ -708,9 +708,8 @@ void Marker::checkDeltaMarker()
// not a delta marker, nothing to do // not a delta marker, nothing to do
return; return;
} }
// Check if type of delta marker is still okay if(!canUseAsDelta(delta)) {
if(!delta || delta->getDomain() != getDomain()) { // incompatible delta marker, select best choice instead
// not the same domain anymore, adjust delta
assignDeltaMarker(bestDeltaCandidate()); assignDeltaMarker(bestDeltaCandidate());
} }
} }
@ -973,6 +972,20 @@ Marker *Marker::bestDeltaCandidate()
return match; 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) void Marker::assignDeltaMarker(Marker *m)
{ {
if(type != Type::Delta) { if(type != Type::Delta) {
@ -1285,14 +1298,19 @@ QWidget *Marker::getTypeEditor(QAbstractItemDelegate *delegate)
layout->setMargin(0); layout->setMargin(0);
layout->setSpacing(0); layout->setSpacing(0);
layout->addWidget(new QLabel("to")); layout->addWidget(new QLabel("to"));
auto spinbox = new QSpinBox; auto deltaChooser = new QComboBox;
if(delta) { for(auto m : model->getMarkers()) {
spinbox->setValue(delta->number); if(canUseAsDelta(m)) {
deltaChooser->addItem(QString::number(m->getNumber()));
} }
connect(spinbox, qOverload<int>(&QSpinBox::valueChanged), [=](int newval){ }
if(delta) {
deltaChooser->setCurrentText(QString::number(delta->number));
}
connect(deltaChooser, qOverload<int>(&QComboBox::currentIndexChanged), [=](int){
bool found = false; bool found = false;
for(auto m : model->getMarkers()) { for(auto m : model->getMarkers()) {
if(m->number == newval) { if(m->number == deltaChooser->currentText().toInt()) {
assignDeltaMarker(m); assignDeltaMarker(m);
found = true; found = true;
break; break;
@ -1303,8 +1321,8 @@ QWidget *Marker::getTypeEditor(QAbstractItemDelegate *delegate)
} }
update(); update();
}); });
spinbox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); deltaChooser->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout->addWidget(spinbox); layout->addWidget(deltaChooser);
w->setLayout(layout); w->setLayout(layout);
c->setObjectName("Type"); c->setObjectName("Type");
if(delegate){ if(delegate){
@ -1496,7 +1514,7 @@ bool Marker::isVisible()
return visible; return visible;
} }
bool Marker::setVisible(bool visible) void Marker::setVisible(bool visible)
{ {
if(this->visible != visible) { if(this->visible != visible) {
this->visible = visible; this->visible = visible;

View File

@ -98,7 +98,7 @@ public:
SIUnitEdit* getSettingsEditor(); SIUnitEdit* getSettingsEditor();
void adjustSettings(double value); void adjustSettings(double value);
bool isVisible(); bool isVisible();
bool setVisible(bool visible); void setVisible(bool visible);
QMenu *getContextMenu(); QMenu *getContextMenu();
@ -107,6 +107,7 @@ public:
Marker *getParent() const; Marker *getParent() const;
const std::vector<Marker *>& getHelperMarkers() const; const std::vector<Marker *>& getHelperMarkers() const;
Marker *helperMarker(unsigned int i); Marker *helperMarker(unsigned int i);
bool canUseAsDelta(Marker *m);
void assignDeltaMarker(Marker *m); void assignDeltaMarker(Marker *m);
QString getSuffix() const; QString getSuffix() const;

View File

@ -91,6 +91,7 @@ MarkerWidget::MarkerWidget(MarkerModel &model, QWidget *parent) :
connect(m, &Marker::typeChanged, this, &MarkerWidget::updatePersistentEditors); connect(m, &Marker::typeChanged, this, &MarkerWidget::updatePersistentEditors);
connect(m, &Marker::traceChanged, this, &MarkerWidget::updatePersistentEditors); connect(m, &Marker::traceChanged, this, &MarkerWidget::updatePersistentEditors);
connect(m, &Marker::assignedDeltaChanged, this, &MarkerWidget::updatePersistentEditors); connect(m, &Marker::assignedDeltaChanged, this, &MarkerWidget::updatePersistentEditors);
connect(m, &Marker::deleted, this, &MarkerWidget::updatePersistentEditors);
updatePersistentEditors(); updatePersistentEditors();
}); });
connect(&model, &MarkerModel::setupLoadComplete, this, &MarkerWidget::updatePersistentEditors); connect(&model, &MarkerModel::setupLoadComplete, this, &MarkerWidget::updatePersistentEditors);