@@ -63,12 +63,17 @@ const extension: JupyterFrontEndPlugin<void> = {
6363 languageRegistry : IEditorLanguageRegistry
6464 ) => {
6565 console . log ( 'JupyterLab extension URDF is activated!' ) ;
66- const { commands } = app ;
66+ const { commands, shell } = app ;
6767
6868 // Tracker
6969 const namespace = 'jupyterlab-urdf' ;
7070 const tracker = new WidgetTracker < URDFWidget > ( { namespace } ) ;
7171
72+ // Track split state
73+ let splitDone = false ;
74+ let leftEditorRefId : string | null = null ;
75+ let rightViewerRefId : string | null = null ;
76+
7277 // State restoration: reopen document if it was open previously
7378 if ( restorer ) {
7479 restorer . restore ( tracker , {
@@ -89,7 +94,7 @@ const extension: JupyterFrontEndPlugin<void> = {
8994 } ) ;
9095
9196 // Add widget to tracker when created
92- widgetFactory . widgetCreated . connect ( ( sender , widget ) => {
97+ widgetFactory . widgetCreated . connect ( async ( sender , widget ) => {
9398 widget . title . icon = urdf_icon ;
9499 widget . title . iconClass = 'jp-URDFIcon' ;
95100
@@ -98,6 +103,41 @@ const extension: JupyterFrontEndPlugin<void> = {
98103 tracker . save ( widget ) ;
99104 } ) ;
100105 tracker . add ( widget ) ;
106+
107+ // Reset split state when all widgets are closed
108+ widget . disposed . connect ( ( ) => {
109+ if ( tracker . size === 0 ) {
110+ splitDone = false ;
111+ leftEditorRefId = null ;
112+ rightViewerRefId = null ;
113+ }
114+ } ) ;
115+
116+ // Split layout on first open, then tab into panels
117+ if ( ! splitDone ) {
118+ const editor = await commands . execute ( 'docmanager:open' , {
119+ path : widget . context . path ,
120+ factory : 'Editor' ,
121+ options : { mode : 'split-left' , ref : widget . id }
122+ } ) ;
123+ splitDone = true ;
124+ leftEditorRefId = editor . id ;
125+ rightViewerRefId = widget . id ;
126+ } else {
127+ if ( rightViewerRefId ) {
128+ shell . add ( widget , 'main' , {
129+ mode : 'tab-after' ,
130+ ref : rightViewerRefId
131+ } ) ;
132+ }
133+ if ( leftEditorRefId ) {
134+ await commands . execute ( 'docmanager:open' , {
135+ path : widget . context . path ,
136+ factory : 'Editor' ,
137+ options : { mode : 'tab-after' , ref : leftEditorRefId }
138+ } ) ;
139+ }
140+ }
101141 } ) ;
102142
103143 // Register widget and model factories
0 commit comments