Index: sources/gui/qml/components/RangeSlider.qml =================================================================== diff -u -r99e12314855a6b8dd46989b9c0e5263b74af5dc4 -rd0ae5a039ca37630c0911e1f9041b93b980e0431 --- sources/gui/qml/components/RangeSlider.qml (.../RangeSlider.qml) (revision 99e12314855a6b8dd46989b9c0e5263b74af5dc4) +++ sources/gui/qml/components/RangeSlider.qml (.../RangeSlider.qml) (revision d0ae5a039ca37630c0911e1f9041b93b980e0431) @@ -40,6 +40,13 @@ property alias minValue : _rangeRect.lowerBound ///< value of the minimum slider handler property alias maxValue : _rangeRect.upperBound ///< value of the maximum slider handler + property int gapValue : 0 ///< the gap between minValue and maxValue so the minValue shall always be gap value less than maxValue and vise versa. + property real minValueLowerBound : _root.minimum ///< min value can't be lower than this value + property real minValueUpperBound : _root.maximum ///< min value can't be higher than this value + property real maxValueLowerBound : _root.minimum ///< max value can't be lower than this value + property real maxValueUpperBound : _root.maximum ///< max value can't be higher than this value + + property int curHandler : RangeSlider.HandlerOption.None ///< current active slider handler property int diameter : Variables.progressbarHandler ///< handlers diameter @@ -133,26 +140,48 @@ /// \param x : mouse x position. function setBound(x) { var value = setValue(x) + console.debug( maxValue - minValue, minValue, value, maxValue ) + if ( maxValue - minValue <= gapValue ) { + // max correction if the values get too close together less than defined gap + if ( curHandler === RangeSlider.HandlerOption.Max ) { + maxValue = minValue + gapValue + } + // min correction if the values get too close together less than defined gap + if ( curHandler === RangeSlider.HandlerOption.Min ) { + minValue = maxValue - gapValue + } + // while value is between min and max do nothing and let the value gets out of the bound and then apply value. + if ( minValue <= value && value <= maxValue ) { + return + } + } var minDiff = Math.abs(minValue - value) var maxDiff = Math.abs(maxValue - value) - - if (minDiff === maxDiff) { - if (curHandler === RangeSlider.HandlerOption.Max) { + if ( minDiff === maxDiff ) { + if ( curHandler === RangeSlider.HandlerOption.Max ) { + if ( value < maxValueLowerBound ) return + if ( value > maxValueUpperBound ) return maxValue = value } else { curHandler = RangeSlider.HandlerOption.Min + if ( value < minValueLowerBound ) return + if ( value > minValueUpperBound ) return minValue = value } } else { - if (minDiff < maxDiff) { + if ( minDiff < maxDiff ) { curHandler = RangeSlider.HandlerOption.Min + if ( value < minValueLowerBound ) return + if ( value > minValueUpperBound ) return minValue = value } else { curHandler = RangeSlider.HandlerOption.Max + if ( value < maxValueLowerBound ) return + if ( value > maxValueUpperBound ) return maxValue = value } }