From 5674b4b62802043b2e171327ed9e20b414b6af51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Gir=C3=A3o=20Serr=C3=A3o?= <5621605+rodrigogiraoserrao@users.noreply.github.com> Date: Thu, 9 Mar 2023 15:38:31 +0000 Subject: [PATCH] Add 'Vertical'. Related issues: #1957. --- CHANGELOG.md | 5 +++-- src/textual/containers.py | 12 ++++++++++++ tests/test_containers.py | 38 +++++++++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12cd78bd75..a6ece47c74 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,14 +9,15 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Changed -- Renamed `Vertical` to `VerticalScroll` https://github.com/Textualize/textual/issues/1957 -- Default `overflow` style for `Horizontal` changed to `hidden hidden` https://github.com/Textualize/textual/issues/1957 +- Breaking change: changed default behaviour of `Vertical` (see `VerticalScroll`) https://github.com/Textualize/textual/issues/1957 +- The default `overflow` style for `Horizontal` was changed to `hidden hidden` https://github.com/Textualize/textual/issues/1957 ### Added - Added `HorizontalScroll` https://github.com/Textualize/textual/issues/1957 - Added `Center` https://github.com/Textualize/textual/issues/1957 - Added `Middle` https://github.com/Textualize/textual/issues/1957 +- Added `VerticalScroll` (mimicking the old behaviour of `Vertical`) https://github.com/Textualize/textual/issues/1957 ## [0.14.0] - 2023-03-09 diff --git a/src/textual/containers.py b/src/textual/containers.py index 59a07fef45..e94cb19faa 100644 --- a/src/textual/containers.py +++ b/src/textual/containers.py @@ -13,6 +13,18 @@ class Container(Widget): """ +class Vertical(Widget): + """A container which lays children vertically.""" + + DEFAULT_CSS = """ + Vertical { + width: 1fr; + layout: vertical; + overflow: hidden hidden; + } + """ + + class VerticalScroll(Widget): """A container which aligns children vertically and overflows automatically.""" diff --git a/tests/test_containers.py b/tests/test_containers.py index 866e628004..22a4ad0ec7 100644 --- a/tests/test_containers.py +++ b/tests/test_containers.py @@ -1,7 +1,14 @@ """Test basic functioning of some containers.""" from textual.app import App, ComposeResult -from textual.containers import Center, Horizontal, HorizontalScroll, Middle +from textual.containers import ( + Center, + Horizontal, + HorizontalScroll, + Middle, + Vertical, + VerticalScroll, +) from textual.widgets import Label @@ -34,6 +41,35 @@ def compose(self) -> ComposeResult: assert horizontal_scroll.scrollbars_enabled == (False, True) +async def test_vertical_vs_verticalscroll_scrolling(): + """Check the default scrollbar behaviours for `Vertical` and `VerticalScroll`.""" + + class VerticalsApp(App[None]): + CSS = """ + Screen { + layout: horizontal; + } + """ + + def compose(self) -> ComposeResult: + with Vertical(): + for _ in range(10): + yield Label("How is life going?\n" * 3 + "\n\n") + with VerticalScroll(): + for _ in range(10): + yield Label("How is life going?\n" * 3 + "\n\n") + + WIDTH = 80 + HEIGHT = 24 + app = VerticalsApp() + async with app.run_test(size=(WIDTH, HEIGHT)): + vertical = app.query_one(Vertical) + vertical_scroll = app.query_one(VerticalScroll) + assert vertical.size.width == vertical_scroll.size.width + assert vertical.scrollbars_enabled == (False, False) + assert vertical_scroll.scrollbars_enabled == (True, False) + + async def test_center_container(): """Check the size of the container `Center`."""