Skip to content

Commit 30ea087

Browse files
authored
fix: data overview default display when no schematic. (#395)
* fix: data overview default display when no schematic * fix: no schematic: 'Data overview' is in its tab with a '+' on the line
1 parent 52e116d commit 30ea087

File tree

1 file changed

+56
-11
lines changed
  • libs/elodin-editor/src/ui/schematic

1 file changed

+56
-11
lines changed

libs/elodin-editor/src/ui/schematic/load.rs

Lines changed: 56 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -805,20 +805,65 @@ impl LoadSchematicParams<'_, '_> {
805805
.expect("no primary window")
806806
.2;
807807

808-
// Only add if the tile tree is empty
809-
if window_state.tile_state.is_empty()
810-
&& let Some(tabs_id) = window_state.tile_state.tree.root()
811-
{
812-
let pane = Pane::DataOverview(DataOverviewPane::default());
813-
if let Some(tile_id) =
808+
// Only add if the tile tree is empty (no non-sidebar content)
809+
if !window_state.tile_state.is_empty() {
810+
return;
811+
}
812+
813+
let target_id = {
814+
let tree = &window_state.tile_state.tree;
815+
tree.root()
816+
.and_then(|root_id| match tree.tiles.get(root_id) {
817+
Some(Tile::Container(Container::Linear(linear))) => {
818+
let center_idx = linear.children.len() / 2;
819+
linear.children.get(center_idx).copied()
820+
}
821+
_ => Some(root_id),
822+
})
823+
};
824+
825+
let mut central_tabs_id = None;
826+
if let Some(target_id) = target_id {
827+
match window_state.tile_state.tree.tiles.get(target_id) {
828+
Some(Tile::Container(Container::Tabs(_))) => central_tabs_id = Some(target_id),
829+
Some(Tile::Container(_)) => {
830+
let tabs_container = Tile::Container(Container::new_tabs(vec![]));
831+
central_tabs_id =
832+
window_state
833+
.tile_state
834+
.insert_tile(tabs_container, Some(target_id), false);
835+
}
836+
_ => {}
837+
}
838+
}
839+
840+
if central_tabs_id.is_none() {
841+
let tabs_container = Tile::Container(Container::new_tabs(vec![]));
842+
central_tabs_id = window_state
843+
.tile_state
844+
.insert_tile(tabs_container, None, false);
845+
}
846+
847+
// The central tabs container is effectively invisible; nest a new Tabs container
848+
// so the tab bar (+) is visible, then add Data Overview inside it.
849+
if let Some(central_tabs_id) = central_tabs_id {
850+
let tabs_container = Tile::Container(Container::new_tabs(vec![]));
851+
if let Some(tabs_id) =
814852
window_state
815853
.tile_state
816-
.insert_tile(Tile::Pane(pane), Some(tabs_id), true)
854+
.insert_tile(tabs_container, Some(central_tabs_id), false)
817855
{
818-
window_state
819-
.tile_state
820-
.tree
821-
.make_active(|id, _| id == tile_id);
856+
let pane = Pane::DataOverview(DataOverviewPane::default());
857+
if let Some(tile_id) =
858+
window_state
859+
.tile_state
860+
.insert_tile(Tile::Pane(pane), Some(tabs_id), true)
861+
{
862+
window_state
863+
.tile_state
864+
.tree
865+
.make_active(|id, _| id == tile_id);
866+
}
822867
}
823868
}
824869
}

0 commit comments

Comments
 (0)