@@ -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