@@ -63,12 +63,17 @@ const extension: JupyterFrontEndPlugin<void> = {
63
63
languageRegistry : IEditorLanguageRegistry
64
64
) => {
65
65
console . log ( 'JupyterLab extension URDF is activated!' ) ;
66
- const { commands } = app ;
66
+ const { commands, shell } = app ;
67
67
68
68
// Tracker
69
69
const namespace = 'jupyterlab-urdf' ;
70
70
const tracker = new WidgetTracker < URDFWidget > ( { namespace } ) ;
71
71
72
+ // Track split state
73
+ let splitDone = false ;
74
+ let leftEditorRefId : string | null = null ;
75
+ let rightViewerRefId : string | null = null ;
76
+
72
77
// State restoration: reopen document if it was open previously
73
78
if ( restorer ) {
74
79
restorer . restore ( tracker , {
@@ -89,7 +94,7 @@ const extension: JupyterFrontEndPlugin<void> = {
89
94
} ) ;
90
95
91
96
// Add widget to tracker when created
92
- widgetFactory . widgetCreated . connect ( ( sender , widget ) => {
97
+ widgetFactory . widgetCreated . connect ( async ( sender , widget ) => {
93
98
widget . title . icon = urdf_icon ;
94
99
widget . title . iconClass = 'jp-URDFIcon' ;
95
100
@@ -98,6 +103,41 @@ const extension: JupyterFrontEndPlugin<void> = {
98
103
tracker . save ( widget ) ;
99
104
} ) ;
100
105
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
+ }
101
141
} ) ;
102
142
103
143
// Register widget and model factories
0 commit comments