Skip to content

Commit

Permalink
fix(radioset): make radio set scrollable (#5109)
Browse files Browse the repository at this point in the history
* fix(radioset): make radio set scrollable

* add snapshot test

* update changelog
  • Loading branch information
TomJGooding authored Oct 14, 2024
1 parent afc310a commit f7626e1
Show file tree
Hide file tree
Showing 4 changed files with 203 additions and 13 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## Unreleased

### Fixed

- Fixed `RadioSet` not being scrollable https://github.com/Textualize/textual/issues/5100

## [0.83.0] - 2024-10-10

### Added
Expand Down
13 changes: 10 additions & 3 deletions src/textual/widgets/_radio_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@

from textual import _widget_navigation
from textual.binding import Binding, BindingType
from textual.containers import Container
from textual.containers import VerticalScroll
from textual.events import Click, Mount
from textual.message import Message
from textual.reactive import var
from textual.widgets._radio_button import RadioButton


class RadioSet(Container, can_focus=True, can_focus_children=False):
class RadioSet(VerticalScroll, can_focus=True, can_focus_children=False):
"""Widget for grouping a collection of radio buttons into a set.
When a collection of [`RadioButton`][textual.widgets.RadioButton]s are
Expand All @@ -42,7 +42,7 @@ class RadioSet(Container, can_focus=True, can_focus_children=False):
* ToggleButton. If those styles ever get updated, these should be too.
*/
RadioSet > * {
RadioSet > RadioButton {
background: transparent;
border: none;
padding: 0 1;
Expand Down Expand Up @@ -188,6 +188,7 @@ def watch__selected(self) -> None:
self.query(RadioButton).remove_class("-selected")
if self._selected is not None:
self._nodes[self._selected].add_class("-selected")
self._scroll_to_selected()

def _on_radio_button_changed(self, event: RadioButton.Changed) -> None:
"""Respond to the value of a button in the set being changed.
Expand Down Expand Up @@ -276,3 +277,9 @@ def action_toggle_button(self) -> None:
button = self._nodes[self._selected]
assert isinstance(button, RadioButton)
button.toggle()

def _scroll_to_selected(self) -> None:
"""Ensure that the selected button is in view."""
if self._selected is not None:
button = self._nodes[self._selected]
self.call_after_refresh(self.scroll_to_widget, button, animate=False)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit f7626e1

Please sign in to comment.