-
Notifications
You must be signed in to change notification settings - Fork 788
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ensure styles applied in correct order in DataTable (#2272)
* Ensure styles applied in correct order in DataTable * Add snapshot regression test for datatable style ordering * Update CHANGELOG
- Loading branch information
1 parent
03fa641
commit 6369c37
Showing
6 changed files
with
298 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
from typing import TYPE_CHECKING | ||
|
||
from rich.measure import Measurement | ||
from rich.segment import Segment | ||
|
||
if TYPE_CHECKING: | ||
from rich.console import ( | ||
Console, | ||
ConsoleOptions, | ||
RenderableType, | ||
RenderResult, | ||
StyleType, | ||
) | ||
|
||
|
||
class Styled: | ||
"""A renderable which allows you to apply a style before and after another renderable. | ||
This can be used to layer styles on top of each other, like a style sandwich. This is used, | ||
for example, in the DataTable to layer default CSS styles + user renderables (e.g. Text objects | ||
stored in the cells of the table) + CSS component styles on top of each other.""" | ||
|
||
def __init__( | ||
self, | ||
renderable: "RenderableType", | ||
pre_style: "StyleType", | ||
post_style: "StyleType", | ||
) -> None: | ||
"""Construct a Styled. | ||
Args: | ||
renderable (RenderableType): Any renderable. | ||
pre_style (StyleType): A style to apply across the entire renderable. | ||
Will be applied before the styles from the renderable itself. | ||
post_style (StyleType): A style to apply across the entire renderable. | ||
Will be applied after the styles from the renderable itself. | ||
""" | ||
self.renderable = renderable | ||
self.pre_style = pre_style | ||
self.post_style = post_style | ||
|
||
def __rich_console__( | ||
self, console: "Console", options: "ConsoleOptions" | ||
) -> "RenderResult": | ||
pre_style = console.get_style(self.pre_style) | ||
post_style = console.get_style(self.post_style) | ||
rendered_segments = console.render(self.renderable, options) | ||
segments = Segment.apply_style( | ||
rendered_segments, style=pre_style, post_style=post_style | ||
) | ||
return segments | ||
|
||
def __rich_measure__( | ||
self, console: "Console", options: "ConsoleOptions" | ||
) -> Measurement: | ||
return Measurement.get(console, options, self.renderable) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.