Skip to content

Commit

Permalink
Scroll cursor into view. (#2464)
Browse files Browse the repository at this point in the history
* Scroll cursor into view.

Related issues: #2459.

* Add regression test.

* Update changelog.
  • Loading branch information
rodrigogiraoserrao authored May 3, 2023
1 parent e5c54a3 commit 3728555
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 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

### Changed

- The DataTable cursor is now scrolled into view when the cursor coordinate is changed programmatically https://github.com/Textualize/textual/issues/2459

## [0.23.0] - 2023-05-03

### Fixed
Expand Down
1 change: 1 addition & 0 deletions src/textual/widgets/_data_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -950,6 +950,7 @@ def watch_cursor_coordinate(
elif self.cursor_type == "column":
self.refresh_column(old_coordinate.column)
self._highlight_column(new_coordinate.column)
self._scroll_cursor_into_view()

def _highlight_coordinate(self, coordinate: Coordinate) -> None:
"""Apply highlighting to the cell at the coordinate, and post event."""
Expand Down
25 changes: 25 additions & 0 deletions tests/test_data_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -991,3 +991,28 @@ def test_key_string_lookup():
assert dictionary[RowKey("foo")] == "bar"
assert dictionary["hello"] == "world"
assert dictionary[RowKey("hello")] == "world"


async def test_scrolling_cursor_into_view():
"""Regression test for https://github.com/Textualize/textual/issues/2459"""

class TableApp(App):
CSS = "DataTable { height: 100%; }"

def compose(self):
yield DataTable()

def on_mount(self) -> None:
table = self.query_one(DataTable)
table.add_column("n")
table.add_rows([(n,) for n in range(300)])

def key_c(self):
self.query_one(DataTable).cursor_coordinate = Coordinate(200, 0)

app = TableApp()

async with app.run_test() as pilot:
await pilot.press("c")
await pilot.pause()
assert app.query_one(DataTable).scroll_y > 100

0 comments on commit 3728555

Please sign in to comment.