pub struct CellGrid<'a> {
pub entries: Vec<Entry<'a>>,
pub cols: Vec<Sizing>,
pub rows: Vec<Sizing>,
pub vlines: Vec<Vec<Line>>,
pub hlines: Vec<Vec<Line>>,
pub header: Option<Repeatable<Header>>,
pub footer: Option<Repeatable<Footer>>,
pub has_gutter: bool,
}
Expand description
A grid of cells, including the columns, rows, and cell data.
Fields§
§entries: Vec<Entry<'a>>
The grid cells.
cols: Vec<Sizing>
The column tracks including gutter tracks.
rows: Vec<Sizing>
The row tracks including gutter tracks.
vlines: Vec<Vec<Line>>
The vertical lines before each column, or on the end border. Gutter columns are not included. Contains up to ‘cols_without_gutter.len() + 1’ vectors of lines.
hlines: Vec<Vec<Line>>
The horizontal lines on top of each row, or on the bottom border. Gutter rows are not included. Contains up to ‘rows_without_gutter.len() + 1’ vectors of lines.
header: Option<Repeatable<Header>>
The repeatable header of this grid.
The repeatable footer of this grid.
has_gutter: bool
Whether this grid has gutters.
Implementations§
Source§impl<'a> CellGrid<'a>
impl<'a> CellGrid<'a>
Sourcepub fn new(
tracks: Axes<&[Sizing]>,
gutter: Axes<&[Sizing]>,
cells: impl IntoIterator<Item = Cell<'a>>,
) -> CellGrid<'a>
pub fn new( tracks: Axes<&[Sizing]>, gutter: Axes<&[Sizing]>, cells: impl IntoIterator<Item = Cell<'a>>, ) -> CellGrid<'a>
Generates the cell grid, given the tracks and cells.
Sourcepub fn resolve<T, C, I>(
tracks: Axes<&[Sizing]>,
gutter: Axes<&[Sizing]>,
locator: Locator<'a>,
children: C,
fill: &Celled<Option<Paint>>,
align: &Celled<Smart<Alignment>>,
inset: &Celled<Sides<Option<Rel>>>,
stroke: &ResolvedCelled<Sides<Option<Option<Arc<Stroke>>>>>,
engine: &mut Engine<'_>,
styles: StyleChain<'_>,
span: Span,
) -> Result<CellGrid<'a>, EcoVec<SourceDiagnostic>>where
T: ResolvableCell + Default,
I: Iterator<Item = ResolvableGridItem<T>>,
C: IntoIterator<Item = ResolvableGridChild<T, I>>,
<C as IntoIterator>::IntoIter: ExactSizeIterator,
pub fn resolve<T, C, I>(
tracks: Axes<&[Sizing]>,
gutter: Axes<&[Sizing]>,
locator: Locator<'a>,
children: C,
fill: &Celled<Option<Paint>>,
align: &Celled<Smart<Alignment>>,
inset: &Celled<Sides<Option<Rel>>>,
stroke: &ResolvedCelled<Sides<Option<Option<Arc<Stroke>>>>>,
engine: &mut Engine<'_>,
styles: StyleChain<'_>,
span: Span,
) -> Result<CellGrid<'a>, EcoVec<SourceDiagnostic>>where
T: ResolvableCell + Default,
I: Iterator<Item = ResolvableGridItem<T>>,
C: IntoIterator<Item = ResolvableGridChild<T, I>>,
<C as IntoIterator>::IntoIter: ExactSizeIterator,
Resolves and positions all cells in the grid before creating it. Allows them to keep track of their final properties and positions and adjust their fields accordingly. Cells must implement Clone as they will be owned. Additionally, they must implement Default in order to fill positions in the grid which weren’t explicitly specified by the user with empty cells.
Sourcepub fn new_internal(
tracks: Axes<&[Sizing]>,
gutter: Axes<&[Sizing]>,
vlines: Vec<Vec<Line>>,
hlines: Vec<Vec<Line>>,
header: Option<Repeatable<Header>>,
footer: Option<Repeatable<Footer>>,
entries: Vec<Entry<'a>>,
) -> CellGrid<'a>
pub fn new_internal( tracks: Axes<&[Sizing]>, gutter: Axes<&[Sizing]>, vlines: Vec<Vec<Line>>, hlines: Vec<Vec<Line>>, header: Option<Repeatable<Header>>, footer: Option<Repeatable<Footer>>, entries: Vec<Entry<'a>>, ) -> CellGrid<'a>
Generates the cell grid, given the tracks and resolved entries.
Sourcepub fn entry(&self, x: usize, y: usize) -> Option<&Entry<'a>>
pub fn entry(&self, x: usize, y: usize) -> Option<&Entry<'a>>
Get the grid entry in column x
and row y
.
Returns None
if it’s a gutter cell.
Sourcepub fn cell(&self, x: usize, y: usize) -> Option<&Cell<'a>>
pub fn cell(&self, x: usize, y: usize) -> Option<&Cell<'a>>
Get the content of the cell in column x
and row y
.
Returns None
if it’s a gutter cell or merged position.
Sourcepub fn parent_cell_position(&self, x: usize, y: usize) -> Option<Axes<usize>>
pub fn parent_cell_position(&self, x: usize, y: usize) -> Option<Axes<usize>>
Returns the position of the parent cell of the grid entry at the given position. It is guaranteed to have a non-gutter, non-merged cell at the returned position, due to how the grid is built.
- If the entry at the given position is a cell, returns the given position.
- If it is a merged cell, returns the parent cell’s position.
- If it is a gutter cell, returns None.
Sourcepub fn effective_parent_cell_position(
&self,
x: usize,
y: usize,
) -> Option<Axes<usize>>
pub fn effective_parent_cell_position( &self, x: usize, y: usize, ) -> Option<Axes<usize>>
Returns the position of the actual parent cell of a merged position,
even if the given position is gutter, in which case we return the
parent of the nearest adjacent content cell which could possibly span
the given gutter position. If the given position is not a gutter cell,
then this function will return the same as parent_cell_position
would.
If the given position is a gutter cell, but no cell spans it, returns
None
.
This is useful for lines. A line needs to check if a cell next to it has a stroke override - even at a gutter position there could be a stroke override, since a cell could be merged with two cells at both ends of the gutter cell (e.g. to its left and to its right), and thus that cell would impose a stroke under the gutter. This function allows getting the position of that cell (which spans the given gutter position, if it is gutter), if it exists; otherwise returns None (it’s gutter and no cell spans it).
Sourcepub fn is_gutter_track(&self, index: usize) -> bool
pub fn is_gutter_track(&self, index: usize) -> bool
Checks if the track with the given index is gutter. Does not check if the index is a valid track.
Sourcepub fn effective_colspan_of_cell(&self, cell: &Cell<'_>) -> usize
pub fn effective_colspan_of_cell(&self, cell: &Cell<'_>) -> usize
Returns the effective colspan of a cell, considering the gutters it might span if the grid has gutters.
Sourcepub fn effective_rowspan_of_cell(&self, cell: &Cell<'_>) -> usize
pub fn effective_rowspan_of_cell(&self, cell: &Cell<'_>) -> usize
Returns the effective rowspan of a cell, considering the gutters it might span if the grid has gutters.
pub fn non_gutter_column_count(&self) -> usize
Auto Trait Implementations§
impl<'a> Freeze for CellGrid<'a>
impl<'a> !RefUnwindSafe for CellGrid<'a>
impl<'a> Send for CellGrid<'a>
impl<'a> Sync for CellGrid<'a>
impl<'a> Unpin for CellGrid<'a>
impl<'a> !UnwindSafe for CellGrid<'a>
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more