mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
eof
This commit is contained in:
@@ -8,7 +8,7 @@ from rich.style import Style
|
||||
|
||||
from ..geometry import Offset, Spacing, SpacingDimensions
|
||||
from .constants import NULL_SPACING, VALID_EDGE
|
||||
from .errors import StyleValueError
|
||||
from .errors import StyleTypeError, StyleValueError
|
||||
from ._error_tools import friendly_list
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -215,12 +215,15 @@ class DockEdgeProperty:
|
||||
|
||||
class IntegerProperty:
|
||||
def __set_name__(self, owner: Styles, name: str) -> None:
|
||||
self._name = name
|
||||
self._internal_name = f"_{name}"
|
||||
|
||||
def __get__(self, obj: Styles, objtype: type[Styles] | None = None) -> int:
|
||||
return getattr(obj, self._internal_name, 0)
|
||||
|
||||
def __set__(self, obj: Styles, value: int | None) -> int | None:
|
||||
if not isinstance(value, int):
|
||||
raise StyleTypeError(f"{self._name} must be a str")
|
||||
setattr(obj, self._internal_name, value)
|
||||
return value
|
||||
|
||||
@@ -235,7 +238,7 @@ class StringProperty:
|
||||
self._internal_name = f"_{name}"
|
||||
|
||||
def __get__(self, obj: Styles, objtype: type[Styles] | None = None) -> str:
|
||||
return getattr(obj, self._internal_name, self._default)
|
||||
return getattr(obj, self._internal_name, None) or self._default
|
||||
|
||||
def __set__(self, obj: Styles, value: str | None = None) -> str | None:
|
||||
if value is not None:
|
||||
@@ -245,3 +248,42 @@ class StringProperty:
|
||||
)
|
||||
setattr(obj, self._internal_name, value)
|
||||
return value
|
||||
|
||||
|
||||
class NameProperty:
|
||||
def __set_name__(self, owner: Styles, name: str) -> None:
|
||||
self._name = name
|
||||
self._internal_name = f"_{name}"
|
||||
|
||||
def __get__(self, obj: Styles, objtype: type[Styles] | None) -> str:
|
||||
return getattr(obj, self._internal_name, None) or ""
|
||||
|
||||
def __set__(self, obj: Styles, name: str | None) -> str | None:
|
||||
if not isinstance(name, str):
|
||||
raise StyleTypeError(f"{self._name} must be a str")
|
||||
setattr(obj, self._internal_name, name)
|
||||
return name
|
||||
|
||||
|
||||
class NameListProperty:
|
||||
def __set_name__(self, owner: Styles, name: str) -> None:
|
||||
self._name = name
|
||||
self._internal_name = f"_{name}"
|
||||
|
||||
def __get__(
|
||||
self, obj: Styles, objtype: type[Styles] | None = None
|
||||
) -> tuple[str, ...]:
|
||||
return getattr(obj, self._internal_name, None) or ()
|
||||
|
||||
def __set__(
|
||||
self, obj: Styles, names: str | tuple[str] | None = None
|
||||
) -> str | tuple[str] | None:
|
||||
names_value: tuple[str, ...] | None = None
|
||||
if isinstance(names, str):
|
||||
names_value = tuple(name.strip().lower() for name in names.split(" "))
|
||||
elif isinstance(names, tuple):
|
||||
names_value = names
|
||||
elif names is None:
|
||||
names_value = None
|
||||
setattr(obj, self._internal_name, names_value)
|
||||
return names
|
||||
|
||||
@@ -7,6 +7,10 @@ class DeclarationError(Exception):
|
||||
super().__init__(message)
|
||||
|
||||
|
||||
class StyleTypeError(TypeError):
|
||||
pass
|
||||
|
||||
|
||||
class StyleValueError(ValueError):
|
||||
pass
|
||||
|
||||
|
||||
@@ -1,26 +1,23 @@
|
||||
|
||||
view.buttons {
|
||||
layout: dock
|
||||
layout: dock;
|
||||
}
|
||||
|
||||
.buttons .button {
|
||||
dock: top
|
||||
size: 10px
|
||||
dock: top;
|
||||
size: 10px;
|
||||
}
|
||||
|
||||
|
||||
#widget {
|
||||
visibility: visible;
|
||||
text-style: bold;
|
||||
visibility: visible;
|
||||
text-style: bold;
|
||||
|
||||
border: dashed !important;
|
||||
border-top: dashed green;
|
||||
border-bottom: red;
|
||||
border: dashed !important;
|
||||
border-top: dashed green;
|
||||
border-bottom: red;
|
||||
|
||||
padding: 1 0;
|
||||
margin: 1;
|
||||
|
||||
layout: dock
|
||||
dock-edge: left;
|
||||
padding: 1 0;
|
||||
margin: 1;
|
||||
|
||||
layout: dock;
|
||||
dock-edge: left;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,8 @@ from ._style_properties import (
|
||||
DockGroupProperty,
|
||||
IntegerProperty,
|
||||
OffsetProperty,
|
||||
NameProperty,
|
||||
NameListProperty,
|
||||
SpacingProperty,
|
||||
StringProperty,
|
||||
StyleProperty,
|
||||
@@ -61,6 +63,9 @@ class Styles:
|
||||
_dock_edge: str | None = None
|
||||
_docks: tuple[str, ...] | None = None
|
||||
|
||||
_layers: str | None = None
|
||||
_layer: tuple[str, ...] | None = None
|
||||
|
||||
important: set[str] = field(default_factory=set)
|
||||
|
||||
display = StringProperty(VALID_DISPLAY, "block")
|
||||
@@ -93,6 +98,9 @@ class Styles:
|
||||
docks = DocksProperty()
|
||||
dock_edge = DockEdgeProperty()
|
||||
|
||||
layer = NameProperty()
|
||||
layers = NameListProperty()
|
||||
|
||||
@property
|
||||
def has_border(self) -> bool:
|
||||
"""Check in a border is present."""
|
||||
@@ -117,6 +125,8 @@ class Styles:
|
||||
yield "padding", self.padding, NULL_SPACING
|
||||
yield "text", self.text, ""
|
||||
yield "visibility", self.visibility, "visible"
|
||||
yield "layers", self.layers, ()
|
||||
yield "layer", self.layer, ""
|
||||
|
||||
if self.important:
|
||||
yield "important", self.important
|
||||
@@ -196,6 +206,11 @@ class Styles:
|
||||
append_declaration("docks", " ".join(self._docks))
|
||||
if self._dock_edge:
|
||||
append_declaration("dock-edge", self._dock_edge)
|
||||
if self._layers is not None:
|
||||
append_declaration("layers", " ".join(self.layers))
|
||||
if self._layer is not None:
|
||||
append_declaration("layer", self.layer)
|
||||
|
||||
lines.sort()
|
||||
return lines
|
||||
|
||||
@@ -214,6 +229,7 @@ if __name__ == "__main__":
|
||||
styles.docks = "foo bar"
|
||||
styles.text = "italic blue"
|
||||
styles.dock_group = "bar"
|
||||
styles.layers = "foo bar"
|
||||
|
||||
from rich import inspect, print
|
||||
|
||||
|
||||
@@ -6,18 +6,25 @@ from operator import itemgetter
|
||||
from logging import getLogger
|
||||
from itertools import cycle, product
|
||||
import sys
|
||||
from typing import Iterable, NamedTuple
|
||||
from typing import Iterable, NamedTuple, TYPE_CHECKING
|
||||
|
||||
from .._layout_resolve import layout_resolve
|
||||
from ..geometry import Size, Offset, Region
|
||||
from ..layout import Layout, WidgetPlacement
|
||||
from ..widget import Widget
|
||||
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..widget import Widget
|
||||
from ..view import View
|
||||
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
from typing import Literal
|
||||
else:
|
||||
from typing_extensions import Literal
|
||||
|
||||
|
||||
log = getLogger("rich")
|
||||
|
||||
GridAlign = Literal["start", "end", "center", "stretch"]
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Iterable
|
||||
from typing import Iterable, TYPE_CHECKING
|
||||
|
||||
from ..geometry import Offset, Region, Size, Spacing, SpacingDimensions
|
||||
from ..layout import Layout, WidgetPlacement
|
||||
from ..widget import Widget
|
||||
from .._loop import loop_last
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..widget import Widget
|
||||
from ..view import View
|
||||
|
||||
|
||||
class VerticalLayout(Layout):
|
||||
def __init__(
|
||||
|
||||
Reference in New Issue
Block a user