Воркед
This commit is contained in:
1 parent
ac32c55ab9
commit
ee94d8e529
1138 files changed
+55771
-77901
No files matched your search
@@ -2,11 +2,12 @@ from typing import TYPE_CHECKING, Optional
|
||||
|
||||
from .align import AlignMethod
|
||||
from .box import ROUNDED, Box
|
||||
from .cells import cell_len
|
||||
from .jupyter import JupyterMixin
|
||||
from .measure import Measurement, measure_renderables
|
||||
from .padding import Padding, PaddingDimensions
|
||||
from .segment import Segment
|
||||
from .style import StyleType
|
||||
from .style import Style, StyleType
|
||||
from .text import Text, TextType
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -21,11 +22,13 @@ class Panel(JupyterMixin):
|
||||
|
||||
Args:
|
||||
renderable (RenderableType): A console renderable object.
|
||||
box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`.
|
||||
Defaults to box.ROUNDED.
|
||||
box (Box, optional): A Box instance that defines the look of the border (see :ref:`appendix_box`. Defaults to box.ROUNDED.
|
||||
title (Optional[TextType], optional): Optional title displayed in panel header. Defaults to None.
|
||||
title_align (AlignMethod, optional): Alignment of title. Defaults to "center".
|
||||
subtitle (Optional[TextType], optional): Optional subtitle displayed in panel footer. Defaults to None.
|
||||
subtitle_align (AlignMethod, optional): Alignment of subtitle. Defaults to "center".
|
||||
safe_box (bool, optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True.
|
||||
expand (bool, optional): If True the panel will stretch to fill the console
|
||||
width, otherwise it will be sized to fit the contents. Defaults to True.
|
||||
expand (bool, optional): If True the panel will stretch to fill the console width, otherwise it will be sized to fit the contents. Defaults to True.
|
||||
style (str, optional): The style of the panel (border and contents). Defaults to "none".
|
||||
border_style (str, optional): The style of the border. Defaults to "none".
|
||||
width (Optional[int], optional): Optional width of panel. Defaults to None to auto-detect.
|
||||
@@ -81,7 +84,9 @@ class Panel(JupyterMixin):
|
||||
style: StyleType = "none",
|
||||
border_style: StyleType = "none",
|
||||
width: Optional[int] = None,
|
||||
height: Optional[int] = None,
|
||||
padding: PaddingDimensions = (0, 1),
|
||||
highlight: bool = False,
|
||||
) -> "Panel":
|
||||
"""An alternative constructor that sets expand=False."""
|
||||
return cls(
|
||||
@@ -95,7 +100,9 @@ class Panel(JupyterMixin):
|
||||
style=style,
|
||||
border_style=border_style,
|
||||
width=width,
|
||||
height=height,
|
||||
padding=padding,
|
||||
highlight=highlight,
|
||||
expand=False,
|
||||
)
|
||||
|
||||
@@ -139,7 +146,8 @@ class Panel(JupyterMixin):
|
||||
Padding(self.renderable, _padding) if any(_padding) else self.renderable
|
||||
)
|
||||
style = console.get_style(self.style)
|
||||
border_style = style + console.get_style(self.border_style)
|
||||
partial_border_style = console.get_style(self.border_style)
|
||||
border_style = style + partial_border_style
|
||||
width = (
|
||||
options.max_width
|
||||
if self.width is None
|
||||
@@ -149,9 +157,56 @@ class Panel(JupyterMixin):
|
||||
safe_box: bool = console.safe_box if self.safe_box is None else self.safe_box
|
||||
box = self.box.substitute(options, safe=safe_box)
|
||||
|
||||
def align_text(
|
||||
text: Text, width: int, align: str, character: str, style: Style
|
||||
) -> Text:
|
||||
"""Gets new aligned text.
|
||||
|
||||
Args:
|
||||
text (Text): Title or subtitle text.
|
||||
width (int): Desired width.
|
||||
align (str): Alignment.
|
||||
character (str): Character for alignment.
|
||||
style (Style): Border style
|
||||
|
||||
Returns:
|
||||
Text: New text instance
|
||||
"""
|
||||
text = text.copy()
|
||||
text.truncate(width)
|
||||
excess_space = width - cell_len(text.plain)
|
||||
if text.style:
|
||||
text.stylize(console.get_style(text.style))
|
||||
|
||||
if excess_space:
|
||||
if align == "left":
|
||||
return Text.assemble(
|
||||
text,
|
||||
(character * excess_space, style),
|
||||
no_wrap=True,
|
||||
end="",
|
||||
)
|
||||
elif align == "center":
|
||||
left = excess_space // 2
|
||||
return Text.assemble(
|
||||
(character * left, style),
|
||||
text,
|
||||
(character * (excess_space - left), style),
|
||||
no_wrap=True,
|
||||
end="",
|
||||
)
|
||||
else:
|
||||
return Text.assemble(
|
||||
(character * excess_space, style),
|
||||
text,
|
||||
no_wrap=True,
|
||||
end="",
|
||||
)
|
||||
return text
|
||||
|
||||
title_text = self._title
|
||||
if title_text is not None:
|
||||
title_text.style = border_style
|
||||
title_text.stylize_before(partial_border_style)
|
||||
|
||||
child_width = (
|
||||
width - 2
|
||||
@@ -180,7 +235,13 @@ class Panel(JupyterMixin):
|
||||
if title_text is None or width <= 4:
|
||||
yield Segment(box.get_top([width - 2]), border_style)
|
||||
else:
|
||||
title_text.align(self.title_align, width - 4, character=box.top)
|
||||
title_text = align_text(
|
||||
title_text,
|
||||
width - 4,
|
||||
self.title_align,
|
||||
box.top,
|
||||
border_style,
|
||||
)
|
||||
yield Segment(box.top_left + box.top, border_style)
|
||||
yield from console.render(title_text, child_options.update_width(width - 4))
|
||||
yield Segment(box.top + box.top_right, border_style)
|
||||
@@ -194,12 +255,18 @@ class Panel(JupyterMixin):
|
||||
|
||||
subtitle_text = self._subtitle
|
||||
if subtitle_text is not None:
|
||||
subtitle_text.style = border_style
|
||||
subtitle_text.stylize_before(partial_border_style)
|
||||
|
||||
if subtitle_text is None or width <= 4:
|
||||
yield Segment(box.get_bottom([width - 2]), border_style)
|
||||
else:
|
||||
subtitle_text.align(self.subtitle_align, width - 4, character=box.bottom)
|
||||
subtitle_text = align_text(
|
||||
subtitle_text,
|
||||
width - 4,
|
||||
self.subtitle_align,
|
||||
box.bottom,
|
||||
border_style,
|
||||
)
|
||||
yield Segment(box.bottom_left + box.bottom, border_style)
|
||||
yield from console.render(
|
||||
subtitle_text, child_options.update_width(width - 4)
|
||||
|
||||
Reference in new issue
Block a user