keymap_ui: Fix various keymap editor issues (#34647)
This PR tackles miscellaneous nits for the new keymap editor UI. Release Notes: - N/A --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
This commit is contained in:
parent
29030a243c
commit
6c741292df
2 changed files with 246 additions and 158 deletions
|
@ -40,6 +40,10 @@ impl<const COLS: usize> TableContents<COLS> {
|
|||
TableContents::UniformList(data) => data.row_count,
|
||||
}
|
||||
}
|
||||
|
||||
fn is_empty(&self) -> bool {
|
||||
self.len() == 0
|
||||
}
|
||||
}
|
||||
|
||||
pub struct TableInteractionState {
|
||||
|
@ -375,6 +379,7 @@ pub struct Table<const COLS: usize = 3> {
|
|||
interaction_state: Option<WeakEntity<TableInteractionState>>,
|
||||
column_widths: Option<[Length; COLS]>,
|
||||
map_row: Option<Rc<dyn Fn((usize, Div), &mut Window, &mut App) -> AnyElement>>,
|
||||
empty_table_callback: Option<Rc<dyn Fn(&mut Window, &mut App) -> AnyElement>>,
|
||||
}
|
||||
|
||||
impl<const COLS: usize> Table<COLS> {
|
||||
|
@ -388,6 +393,7 @@ impl<const COLS: usize> Table<COLS> {
|
|||
interaction_state: None,
|
||||
column_widths: None,
|
||||
map_row: None,
|
||||
empty_table_callback: None,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -460,6 +466,15 @@ impl<const COLS: usize> Table<COLS> {
|
|||
self.map_row = Some(Rc::new(callback));
|
||||
self
|
||||
}
|
||||
|
||||
/// Provide a callback that is invoked when the table is rendered without any rows
|
||||
pub fn empty_table_callback(
|
||||
mut self,
|
||||
callback: impl Fn(&mut Window, &mut App) -> AnyElement + 'static,
|
||||
) -> Self {
|
||||
self.empty_table_callback = Some(Rc::new(callback));
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
fn base_cell_style(width: Option<Length>, cx: &App) -> Div {
|
||||
|
@ -582,6 +597,7 @@ impl<const COLS: usize> RenderOnce for Table<COLS> {
|
|||
};
|
||||
|
||||
let width = self.width;
|
||||
let no_rows_rendered = self.rows.is_empty();
|
||||
|
||||
let table = div()
|
||||
.when_some(width, |this, width| this.w(width))
|
||||
|
@ -662,6 +678,21 @@ impl<const COLS: usize> RenderOnce for Table<COLS> {
|
|||
})
|
||||
}),
|
||||
)
|
||||
.when_some(
|
||||
no_rows_rendered
|
||||
.then_some(self.empty_table_callback)
|
||||
.flatten(),
|
||||
|this, callback| {
|
||||
this.child(
|
||||
h_flex()
|
||||
.size_full()
|
||||
.p_3()
|
||||
.items_start()
|
||||
.justify_center()
|
||||
.child(callback(window, cx)),
|
||||
)
|
||||
},
|
||||
)
|
||||
.when_some(
|
||||
width.and(interaction_state.as_ref()),
|
||||
|this, interaction_state| {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue