Skip to content

Commit

Permalink
Merge pull request #2638 from freakboy3742/splitcontainer-sequence
Browse files Browse the repository at this point in the history
Correct the typing of SplitContainer content to be list/Sequence
  • Loading branch information
freakboy3742 authored Jun 11, 2024
2 parents ae2d60d + 8a0886f commit cd7ca2f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 24 deletions.
1 change: 1 addition & 0 deletions changes/2638.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The type of SplitContainer's content was modified to be a list, rather than a tuple.
21 changes: 9 additions & 12 deletions core/src/toga/widgets/splitcontainer.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import sys
from collections.abc import Sequence
from typing import TYPE_CHECKING

from toga.app import App
Expand All @@ -27,7 +28,7 @@ def __init__(
id: str | None = None,
style: StyleT | None = None,
direction: Direction = Direction.VERTICAL,
content: tuple[SplitContainerContentT, SplitContainerContentT] = (None, None),
content: Sequence[SplitContainerContentT] | None = None,
):
"""Create a new SplitContainer.
Expand All @@ -42,15 +43,13 @@ def __init__(
of the container. Defaults to both panels being empty.
"""
super().__init__(id=id, style=style)
self._content: tuple[SplitContainerContentT, SplitContainerContentT] = (
None,
None,
)
self._content: list[SplitContainerContentT] = [None, None]

# Create a platform specific implementation of a SplitContainer
self._impl = self.factory.SplitContainer(interface=self)

self.content = content
if content:
self.content = content
self.direction = direction

@property
Expand All @@ -71,7 +70,7 @@ def focus(self) -> None:
pass

@property
def content(self) -> tuple[SplitContainerContentT, SplitContainerContentT]:
def content(self) -> list[SplitContainerContentT]:
"""The widgets displayed in the SplitContainer.
This property accepts a sequence of exactly 2 elements, each of which can be
Expand All @@ -89,9 +88,7 @@ def content(self) -> tuple[SplitContainerContentT, SplitContainerContentT]:
return self._content

@content.setter
def content(
self, content: tuple[SplitContainerContentT, SplitContainerContentT]
) -> None:
def content(self, content: Sequence[SplitContainerContentT]) -> None:
try:
if len(content) != 2:
raise TypeError()
Expand Down Expand Up @@ -128,10 +125,10 @@ def content(
widget.window = self.window

self._impl.set_content(
tuple(w._impl if w is not None else None for w in _content),
list(w._impl if w is not None else None for w in _content),
flex,
)
self._content = tuple(_content)
self._content = list(_content)
self.refresh()

@Widget.app.setter
Expand Down
18 changes: 9 additions & 9 deletions core/tests/widgets/test_splitcontainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def test_widget_created():
assert splitcontainer._impl.interface == splitcontainer
assert_action_performed(splitcontainer, "create SplitContainer")

assert splitcontainer.content == (None, None)
assert splitcontainer.content == [None, None]
assert splitcontainer.direction == toga.SplitContainer.VERTICAL


Expand All @@ -52,14 +52,14 @@ def test_widget_created_with_values(content1, content2):
assert splitcontainer._impl.interface == splitcontainer
assert_action_performed(splitcontainer, "create SplitContainer")

assert splitcontainer.content == (content1, content2)
assert splitcontainer.content == [content1, content2]
assert splitcontainer.direction == toga.SplitContainer.HORIZONTAL

# The content has been assigned to the widget
assert_action_performed_with(
splitcontainer,
"set content",
content=(content1._impl, content2._impl),
content=[content1._impl, content2._impl],
flex=[1, 1],
)

Expand Down Expand Up @@ -212,10 +212,10 @@ def test_set_content_widgets(
assert_action_performed_with(
splitcontainer,
"set content",
content=(
content=[
content2._impl if include_left else None,
content3._impl if include_right else None,
),
],
flex=[1, 1],
)

Expand Down Expand Up @@ -248,10 +248,10 @@ def test_set_content_flex(
assert_action_performed_with(
splitcontainer,
"set content",
content=(
content=[
content2._impl if include_left else None,
content3._impl if include_right else None,
),
],
flex=[2, 3],
)

Expand Down Expand Up @@ -284,10 +284,10 @@ def test_set_content_flex_mixed(
assert_action_performed_with(
splitcontainer,
"set content",
content=(
content=[
content2._impl if include_left else None,
content3._impl if include_right else None,
),
],
flex=[1, 3],
)

Expand Down
6 changes: 3 additions & 3 deletions docs/reference/api/containers/splitcontainer.rst
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ Usage
left_container = toga.Box()
right_container = toga.ScrollContainer()
split = toga.SplitContainer(content=(left_container, right_container))
split = toga.SplitContainer(content=[left_container, right_container])
Content can be specified when creating the widget, or after creation by assigning
the ``content`` attribute. The direction of the split can also be configured, either
Expand All @@ -65,7 +65,7 @@ at time of creation, or by setting the ``direction`` attribute:
left_container = toga.Box()
right_container = toga.ScrollContainer()
split.content = (left_container, right_container)
split.content = [left_container, right_container]
By default, the space of the SplitContainer will be evenly divided between the
two panels. To specify an uneven split, you can provide a flex value when specifying
Expand All @@ -80,7 +80,7 @@ and right panels.
left_container = toga.Box()
right_container = toga.ScrollContainer()
split.content = ((left_container, 3), (right_container, 2))
split.content = [(left_container, 3), (right_container, 2)]
This only specifies the initial split; the split can be modified by the user
once it is displayed.
Expand Down

0 comments on commit cd7ca2f

Please sign in to comment.