Skip to content

Commit

Permalink
Implement disabled parameter for editable sliders
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Jul 25, 2023
1 parent b3faebc commit 73ac959
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ This micro-release focuses on a small number of enhancements and rendering relat
- Treat `Tabulator` `row_contents` as real children ensuring layout behaves correctly ([#5292](https://github.com/holoviz/panel/pull/5292))
- Fix `Video` `min_height` and `max_height` ([#5296](https://github.com/holoviz/panel/pull/5296))
- Make `TextEditor` invisible until CSS is loaded ([#5297](https://github.com/holoviz/panel/pull/5297))
- Fix `disabled` parameter on editable sliders ([#5319]((https://github.com/holoviz/panel/pull/5319))

### Compatibility

Expand Down
1 change: 1 addition & 0 deletions doc/about/releases.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ This micro-release focuses on a small number of enhancements and rendering relat
- Treat `Tabulator` `row_contents` as real children ensuring layout behaves correctly ([#5292](https://github.com/holoviz/panel/pull/5292))
- Fix `Video` `min_height` and `max_height` ([#5296](https://github.com/holoviz/panel/pull/5296))
- Make `TextEditor` invisible until CSS is loaded ([#5297](https://github.com/holoviz/panel/pull/5297))
- Fix `disabled` parameter on editable sliders ([#5319]((https://github.com/holoviz/panel/pull/5319))

### Compatibility

Expand Down
23 changes: 22 additions & 1 deletion panel/tests/widgets/test_slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,6 @@ def test_discrete_slider_options_dict(document, comm):
discrete_slider.value = options['1']
assert widget.value == 1


@pytest.mark.parametrize(
'editableslider,start,end,step,val1,val2,val3,diff1',
[
Expand Down Expand Up @@ -476,6 +475,16 @@ def test_editable_slider(document, comm,
assert slider._slider.end == slider.fixed_end == slider_widget.end
slider.fixed_end = None

def test_editable_slider_disabled():
slider = EditableFloatSlider(disabled=True)

assert slider._slider.disabled
assert slider._value_edit.disabled

slider.disabled = False

assert not slider._slider.disabled
assert not slider._value_edit.disabled

@pytest.mark.parametrize(
'editableslider,start,end,step,val1,val2,val3,diff1',
Expand Down Expand Up @@ -545,6 +554,18 @@ def test_editable_rangeslider(document, comm,
assert slider._slider.end == slider.fixed_end == slider_widget.end
slider.fixed_end = None

def test_editable_range_slider_disabled():
slider = EditableRangeSlider(disabled=True)

assert slider._slider.disabled
assert slider._start_edit.disabled
assert slider._end_edit.disabled

slider.disabled = False

assert not slider._slider.disabled
assert not slider._start_edit.disabled
assert not slider._end_edit.disabled

@pytest.mark.parametrize(
"editableslider",
Expand Down
20 changes: 15 additions & 5 deletions panel/widgets/slider.py
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,7 @@ def __init__(self, **params):

label = Row(self._label, self._value_edit)
self._composite.extend([label, self._slider])
self._update_disabled()
self._update_editable()
self._update_layout()
self._update_name()
Expand Down Expand Up @@ -860,9 +861,13 @@ def _update_layout(self):
w = (self.width or 300)//4
self._value_edit.width = w

@param.depends('editable', watch=True)
@param.depends('disabled', 'editable', watch=True)
def _update_editable(self):
self._value_edit.disabled = not self.editable
self._value_edit.disabled = (not self.editable) or self.disabled

@param.depends('disabled', watch=True)
def _update_disabled(self):
self._slider.disabled = self.disabled

@param.depends('name', watch=True)
def _update_name(self):
Expand Down Expand Up @@ -1062,6 +1067,7 @@ def __init__(self, **params):
}
""")
self._update_editable()
self._update_disabled()
self._update_layout()
self._update_name()
self._update_slider()
Expand Down Expand Up @@ -1104,10 +1110,14 @@ def _validate_init_bounds(self, params):
start = params.get("start", end - params.get("step", 1))
params["value"] = (start, end)

@param.depends('editable', watch=True)
@param.depends('disabled', watch=True)
def _update_disabled(self):
self._slider.disabled = self.disabled

@param.depends('disabled', 'editable', watch=True)
def _update_editable(self):
self._start_edit.disabled = not self.editable[0]
self._end_edit.disabled = not self.editable[1]
self._start_edit.disabled = (not self.editable[0]) or self.disabled
self._end_edit.disabled = (not self.editable[1]) or self.disabled

@param.depends('name', watch=True)
def _update_name(self):
Expand Down

0 comments on commit 73ac959

Please sign in to comment.