Skip to content

Commit 77a6a49

Browse files
authored
Merge branch 'ppizarror:master' into get-scrollbar
2 parents 6b09e42 + ab251b5 commit 77a6a49

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

pygame_menu/widgets/widget/rangeslider.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,24 @@ def reset_value(self) -> 'Widget':
471471
self.set_value(self._default_value)
472472
return self
473473

474+
def set_default_value(self, value: RangeSliderValueType) -> 'RangeSlider':
475+
"""
476+
Set the RangeSlider default value.
477+
Ensures the default value is stored in the correct internal format.
478+
479+
:param value: Default range slider value, can be a number or a tuple/list of 2 elements.
480+
:return: Self reference
481+
"""
482+
# Call the existing set_value to handle validation and internal format conversion
483+
# This ensures 'value' is valid and updates self._value to the correct internal list format.
484+
self.set_value(value)
485+
486+
# Store the internally formatted _value (which is a list like [val, 0] or [min, max])
487+
# as the new _default_value. Convert to tuple for immutability and consistency with __init__.
488+
self._default_value = tuple(self._value)
489+
490+
return self
491+
474492
def set_value(self, value: RangeSliderValueType) -> None:
475493
if self._single:
476494
assert isinstance(value, NumberInstance)

test/test_widget_rangeslider.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,3 +503,49 @@ def test_keyrepeat(self) -> None:
503503
slider_off.update([])
504504
self.assertGreater(slider_on.get_value(), 0.1)
505505
self.assertEqual(slider_off.get_value(), 0.1)
506+
507+
def test_set_default_value(self) -> None:
508+
"""
509+
Test set_default_value method for RangeSlider.
510+
This specifically checks the fix for ensuring _default_value is always a tuple/list.
511+
"""
512+
# Test with a single slider (float default)
513+
slider_single = pygame_menu.widgets.RangeSlider('Single', default_value=0.5, range_values=(0, 1), increment=0.1)
514+
self.assertEqual(slider_single._default_value, [0.5])
515+
self.assertEqual(slider_single.get_value(), 0.5)
516+
517+
# Change value and reset
518+
slider_single.set_value(0.8)
519+
self.assertEqual(slider_single.get_value(), 0.8)
520+
slider_single.reset_value()
521+
self.assertEqual(slider_single.get_value(), 0.5)
522+
523+
# Test with a double slider (tuple default)
524+
slider_double = pygame_menu.widgets.RangeSlider('Double', default_value=(0.2, 0.7), range_values=(0, 1), increment=0.1)
525+
self.assertEqual(slider_double._default_value, [0.2, 0.7])
526+
self.assertEqual(slider_double.get_value(), (0.2, 0.7))
527+
528+
# Change values and reset
529+
slider_double.set_value((0.3, 0.9))
530+
self.assertEqual(slider_double.get_value(), (0.3, 0.9))
531+
slider_double.reset_value()
532+
self.assertEqual(slider_double.get_value(), (0.2, 0.7))
533+
534+
# Test setting a new default value after initialization
535+
slider_single.set_default_value(0.3)
536+
self.assertEqual(slider_single._default_value, [0.3])
537+
slider_single.reset_value()
538+
self.assertEqual(slider_single.get_value(), 0.3)
539+
540+
slider_double.set_default_value((0.1, 0.4))
541+
self.assertEqual(slider_double._default_value, [0.1, 0.4])
542+
slider_double.reset_value()
543+
self.assertEqual(slider_double.get_value(), (0.1, 0.4))
544+
545+
# Test invalid default value types for single slider
546+
self.assertRaises(AssertionError, lambda: slider_single.set_default_value([0.1, 0.2]))
547+
self.assertRaises(AssertionError, lambda: slider_single.set_default_value('invalid'))
548+
549+
# Test invalid default value types for double slider
550+
self.assertRaises(AssertionError, lambda: slider_double.set_default_value(0.5))
551+
self.assertRaises(AssertionError, lambda: slider_double.set_default_value((0.1, 0.2, 0.3)))

0 commit comments

Comments
 (0)