Skip to content

Commit b1204a2

Browse files
committed
generic: disable increment / decrement buttons for max / min values reached
Signed-off-by: IonutMuthi <[email protected]>
1 parent 06dd2e6 commit b1204a2

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

gui/src/widgets/menuspinbox.cpp

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ namespace gui {
2828

2929
MenuSpinbox::MenuSpinbox(QString name, double val, QString unit, double min, double max, bool vertical, bool left,
3030
bool large_widget, QWidget *parent)
31-
: QWidget(parent)
31+
: m_min(min)
32+
, m_max(max)
33+
, QWidget(parent)
3234
{
3335
m_large_widget = large_widget;
3436
m_label = new QLabel(name, parent);
@@ -82,7 +84,19 @@ MenuSpinbox::MenuSpinbox(QString name, double val, QString unit, double min, dou
8284
setValue(-1 * scale);
8385
}
8486
} else {
85-
setValue(m_incrementStrategy->decrement(m_value));
87+
double newValue = m_incrementStrategy->decrement(m_value);
88+
// If decrement would result in 0 and there is a lower scale, scale down instead
89+
if(qFuzzyCompare(newValue, 0.0)) {
90+
int idx = m_scaleCb->currentIndex();
91+
if(idx > 0) {
92+
double lowerScale = m_scaleCb->itemData(idx - 1).toDouble();
93+
double currentScale = m_scaleCb->itemData(idx).toDouble();
94+
double maxLower = (currentScale / lowerScale) - 1;
95+
setValue(maxLower * lowerScale);
96+
return;
97+
}
98+
}
99+
setValue(newValue);
86100
}
87101
});
88102

@@ -368,11 +382,10 @@ void MenuSpinbox::populateWidgets()
368382
}
369383
}
370384

371-
372-
// only chnage the scale for non 0 values
373-
if(m_value != 0) {
385+
// only change the scale for non 0 values
386+
if(!qFuzzyCompare(m_value, 0.0)) {
374387
m_edit->setText(QString::number(m_value / scale)); // reduce number to a meaningful value
375-
m_scaleCb->setCurrentIndex(i); // set apropriate scale in combobox
388+
m_scaleCb->setCurrentIndex(i); // set appropriate scale in combobox
376389
m_incrementStrategy->setScale(m_scaleCb->currentData().toDouble());
377390
} else {
378391
m_edit->setText(QString::number(m_value));
@@ -407,6 +420,21 @@ double MenuSpinbox::clamp(double val, double min, double max)
407420
{
408421
val = std::max(val, min);
409422
val = std::min(val, max);
423+
424+
// disable decrement button if min is reached
425+
if((val == m_min) && (m_scaleCb->currentIndex() == 0)) {
426+
m_minus->setEnabled(false);
427+
} else {
428+
m_minus->setEnabled(true);
429+
}
430+
431+
// disable increment button if max is reached
432+
if(val == m_max) {
433+
m_plus->setEnabled(false);
434+
} else {
435+
m_plus->setEnabled(true);
436+
}
437+
410438
return val;
411439
}
412440

0 commit comments

Comments
 (0)