Table support render_tr and stripe methods (#94)
This commit is contained in:
parent
35c3b13bdd
commit
c91f71ae21
1 changed files with 21 additions and 5 deletions
|
|
@ -7,9 +7,9 @@ use crate::{
|
||||||
v_flex, Icon, IconName,
|
v_flex, Icon, IconName,
|
||||||
};
|
};
|
||||||
use gpui::{
|
use gpui::{
|
||||||
actions, canvas, div, prelude::FluentBuilder as _, px, uniform_list, AppContext, Bounds, Div,
|
actions, canvas, div, prelude::FluentBuilder, px, uniform_list, AppContext, Bounds, Div,
|
||||||
DragMoveEvent, EntityId, EventEmitter, FocusHandle, FocusableView, InteractiveElement as _,
|
DragMoveEvent, EntityId, EventEmitter, FocusHandle, FocusableView, InteractiveElement,
|
||||||
IntoElement, KeyBinding, MouseButton, ParentElement as _, Pixels, Point, Render, ScrollHandle,
|
IntoElement, KeyBinding, MouseButton, ParentElement, Pixels, Point, Render, ScrollHandle,
|
||||||
SharedString, StatefulInteractiveElement as _, Styled, UniformListScrollHandle, ViewContext,
|
SharedString, StatefulInteractiveElement as _, Styled, UniformListScrollHandle, ViewContext,
|
||||||
VisualContext as _, WindowContext,
|
VisualContext as _, WindowContext,
|
||||||
};
|
};
|
||||||
|
|
@ -110,6 +110,9 @@ pub struct Table<D: TableDelegate> {
|
||||||
|
|
||||||
/// The column index that is being resized.
|
/// The column index that is being resized.
|
||||||
resizing_col: Option<usize>,
|
resizing_col: Option<usize>,
|
||||||
|
|
||||||
|
/// Set stripe style of the table.
|
||||||
|
stripe: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
|
|
@ -148,6 +151,11 @@ pub trait TableDelegate: Sized + 'static {
|
||||||
div().size_full().child(self.col_name(col_ix))
|
div().size_full().child(self.col_name(col_ix))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Render the row at the given row and column.
|
||||||
|
fn render_tr(&self, row_ix: usize, cx: &mut WindowContext) -> Div {
|
||||||
|
h_flex()
|
||||||
|
}
|
||||||
|
|
||||||
/// Render cell at the given row and column.
|
/// Render cell at the given row and column.
|
||||||
fn render_td(&self, row_ix: usize, col_ix: usize, cx: &mut WindowContext) -> impl IntoElement;
|
fn render_td(&self, row_ix: usize, col_ix: usize, cx: &mut WindowContext) -> impl IntoElement;
|
||||||
|
|
||||||
|
|
@ -186,6 +194,7 @@ where
|
||||||
selected_col: None,
|
selected_col: None,
|
||||||
resizing_col: None,
|
resizing_col: None,
|
||||||
bounds: Bounds::default(),
|
bounds: Bounds::default(),
|
||||||
|
stripe: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
this.prepare_col_groups(cx);
|
this.prepare_col_groups(cx);
|
||||||
|
|
@ -200,6 +209,11 @@ where
|
||||||
&mut self.delegate
|
&mut self.delegate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn stripe(mut self, stripe: bool) -> Self {
|
||||||
|
self.stripe = stripe;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
fn prepare_col_groups(&mut self, cx: &mut ViewContext<Self>) {
|
fn prepare_col_groups(&mut self, cx: &mut ViewContext<Self>) {
|
||||||
self.col_groups = (0..self.delegate.cols_count())
|
self.col_groups = (0..self.delegate.cols_count())
|
||||||
.map(|col_ix| ColGroup {
|
.map(|col_ix| ColGroup {
|
||||||
|
|
@ -701,13 +715,15 @@ where
|
||||||
move |table, visible_range, cx| {
|
move |table, visible_range, cx| {
|
||||||
visible_range
|
visible_range
|
||||||
.map(|row_ix| {
|
.map(|row_ix| {
|
||||||
tr(cx)
|
table
|
||||||
|
.delegate
|
||||||
|
.render_tr(row_ix, cx)
|
||||||
.id(("table-row", row_ix))
|
.id(("table-row", row_ix))
|
||||||
.w_full()
|
.w_full()
|
||||||
.when(row_ix > 0, |this| {
|
.when(row_ix > 0, |this| {
|
||||||
this.border_t_1().border_color(cx.theme().border)
|
this.border_t_1().border_color(cx.theme().border)
|
||||||
})
|
})
|
||||||
.when(row_ix % 2 != 0, |this| {
|
.when(table.stripe && row_ix % 2 != 0, |this| {
|
||||||
this.bg(cx.theme().table_even)
|
this.bg(cx.theme().table_even)
|
||||||
})
|
})
|
||||||
.hover(|this| {
|
.hover(|this| {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue