@@ -8,8 +8,6 @@ import '@vaadin/tooltip';
88import '@qomponent/qui-code-block' ;
99import '@qomponent/qui-directory-tree' ;
1010import '@qomponent/qui-badge' ;
11- import '@vaadin/tabs' ;
12- import '@vaadin/tabsheet' ;
1311import '@vaadin/dialog' ;
1412import '@vaadin/confirm-dialog' ;
1513import '@vaadin/progress-bar' ;
@@ -43,6 +41,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
4341 display: flex;
4442 width: 100%;
4543 height: 100%;
44+ flex-direction: column;
4645 }
4746
4847 .split vaadin-split-layout {
@@ -74,6 +73,48 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
7473 height: 100vh;
7574 border: none;
7675 }
76+
77+ .sourcehalf {
78+ display: flex;
79+ flex-direction: column;
80+ height: 100%;
81+ justify-content: space-between;
82+ overflow:hidden !important;
83+ }
84+
85+ .mainMenuBar {
86+ display: flex;
87+ align-items: center;
88+ justify-content: space-between;
89+ border-bottom: 1px solid var(--lumo-contrast-20pct);
90+ }
91+
92+ .mainMenuBarButtons {
93+ display: flex;
94+ align-items: center;
95+ width: 100%;
96+ }
97+
98+ .mainMenuBarTitle {
99+ font-size: large;
100+ color: var(--lumo-contrast-50pct);
101+ user-select: none;
102+ cursor: pointer;
103+ }
104+
105+ .mainMenuBarActions {
106+ display: flex;
107+ align-items: center;
108+ gap: 0.5rem;
109+ width: 100%;
110+ justify-content: end;
111+ padding-right: 10px;
112+ }
113+
114+ .sourcehalfcontent {
115+ overflow: scroll;
116+ }
117+
77118 ` ;
78119
79120 static properties = {
@@ -85,7 +126,8 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
85126 _changeToWorkspaceItem : { state : true } ,
86127 _actionResult : { state : true } ,
87128 _showActionProgress : { state : true } ,
88- _confirmDialogOpened : { state : true }
129+ _confirmDialogOpened : { state : true } ,
130+ _isMaximized : { state : true }
89131 } ;
90132
91133 constructor ( ) {
@@ -98,6 +140,7 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
98140 this . _clearSelectedWorkspaceItem ( ) ;
99141 this . _clearActionResult ( ) ;
100142 this . _confirmDialogOpened = false ;
143+ this . _isMaximized = false ;
101144 }
102145
103146 connectedCallback ( ) {
@@ -157,9 +200,10 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
157200 render ( ) {
158201 if ( this . _workspaceItems ) {
159202 return html `< div class ="split ">
203+ ${ this . _renderMainMenuBar ( ) }
160204 < vaadin-split-layout >
161- < master-content style ="width: 25%; "> ${ this . _renderWorkspaceTree ( ) } </ master-content >
162- < detail-content style ="width: 75%; "> ${ this . _renderSelectedSource ( ) } </ detail-content >
205+ < master-content style ="width: ${ this . _isMaximized ? '0%' : ' 25%' } ; "> ${ this . _renderWorkspaceTree ( ) } </ master-content >
206+ < detail-content style ="width: ${ this . _isMaximized ? '100%' : ' 75%' } ; "> ${ this . _renderSelectedSource ( ) } </ detail-content >
163207 </ vaadin-split-layout >
164208 </ div >
165209 ${ this . _renderResultDialog ( ) }
@@ -182,39 +226,49 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
182226
183227 return html `< vaadin-split-layout >
184228 < master-content style ="width: 50%; ">
185- < vaadin-tabsheet >
186-
187- < vaadin-button title ="Save " slot ="prefix " theme ="icon " aria-label ="Save " @click ="${ this . _saveSelectedWorkspaceItem } ">
188- < vaadin-icon icon ="font-awesome-solid:floppy-disk "> </ vaadin-icon >
189- </ vaadin-button >
190- < vaadin-button title ="Copy " slot ="prefix " theme ="icon " aria-label ="Copy " @click ="${ this . _copySelectedWorkspaceItem } ">
191- < vaadin-icon icon ="font-awesome-solid:copy "> </ vaadin-icon >
192- </ vaadin-button >
193-
194-
195- ${ this . _renderActions ( ) }
196-
197- < qui-ide-link slot ="suffix " title ="Open in IDE " style ="cursor: pointer; "
198- fileName ="${ this . _selectedWorkspaceItem . path } "
199- lineNumber ="0 "
200- noCheck >
201- < vaadin-icon icon ="font-awesome-solid:up-right-from-square "> </ vaadin-icon >
202- </ qui-ide-link >
203-
204- < vaadin-tabs slot ="tabs ">
205- < vaadin-tab id ="${ this . _selectedWorkspaceItem . path } " title ="${ this . _selectedWorkspaceItem . path } "> ${ this . _selectedWorkspaceItem . name . split ( '/' ) . pop ( ) } </ vaadin-tab >
206- </ vaadin-tabs >
207-
208- < div tab ="${ this . _selectedWorkspaceItem . path } ">
209- ${ this . _renderContent ( ) }
210- </ div >
211- </ vaadin-tabsheet >
229+ < div class ="mainPart ">
230+ ${ this . _renderMainContent ( ) }
231+ </ div >
212232 </ master-content >
213233 ${ this . _renderResultSplitView ( ) }
214- </ vaadin-split-layout > ` ;
234+ </ vaadin-split-layout >
235+ ` ;
215236 }
216237 }
217238
239+ _renderMainMenuBar ( ) {
240+ const isHidden = ! this . _selectedWorkspaceItem . name ;
241+
242+ return html `
243+ < div class ="mainMenuBar " style ="${ isHidden ? 'visibility: hidden;' : '' } ">
244+ < div class ="mainMenuBarButtons ">
245+ < vaadin-button title ="Save " theme ="icon tertiary " aria-label ="Save " @click ="${ this . _saveSelectedWorkspaceItem } ">
246+ < vaadin-icon icon ="font-awesome-solid:floppy-disk "> </ vaadin-icon >
247+ </ vaadin-button >
248+ < vaadin-button title ="Copy " theme ="icon tertiary " aria-label ="Copy " @click ="${ this . _copySelectedWorkspaceItem } ">
249+ < vaadin-icon icon ="font-awesome-solid:copy "> </ vaadin-icon >
250+ </ vaadin-button >
251+ </ div >
252+
253+ < div class ="mainMenuBarTitle " @dblclick ="${ this . _toggleSplit } ">
254+ ${ this . _selectedWorkspaceItem ?. name ?. split ( '/' ) . pop ( ) }
255+ </ div >
256+
257+ < div class ="mainMenuBarActions ">
258+ ${ this . _renderActions ( ) }
259+ < qui-ide-link title ="Open in IDE "
260+ style ="cursor: pointer; "
261+ fileName ="${ this . _selectedWorkspaceItem ?. path } "
262+ lineNumber ="0 "
263+ noCheck >
264+ < vaadin-icon icon ="font-awesome-solid:up-right-from-square "> </ vaadin-icon >
265+ </ qui-ide-link >
266+ </ div >
267+ </ div >
268+ ` ;
269+
270+ }
271+
218272 _renderResultSplitView ( ) {
219273 if ( this . _actionResult && this . _actionResult . content && this . _actionResult . display === "split" ) {
220274 return html `< detail-content style ="width: 50%; ">
@@ -286,16 +340,16 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
286340 _renderActions ( ) {
287341 if ( this . _filteredActions ) {
288342 if ( this . _showActionProgress ) {
289- return html `< vaadin-progress-bar slot =" suffix " indeterminate > </ vaadin-progress-bar > ` ;
343+ return html `< vaadin-progress-bar indeterminate > </ vaadin-progress-bar > ` ;
290344 } else {
291- return html `< div class ="actions " slot =" suffix " >
292- < vaadin-menu-bar .items ="${ this . _filteredActions } " theme ="dropdown-indicators " @item-selected ="${ ( e ) => this . _actionSelected ( e ) } "> </ vaadin-menu-bar >
345+ return html `< div class ="actions ">
346+ < vaadin-menu-bar .items ="${ this . _filteredActions } " theme ="dropdown-indicators tertiary " @item-selected ="${ ( e ) => this . _actionSelected ( e ) } "> </ vaadin-menu-bar >
293347 </ div > ` ;
294348 }
295349 }
296350 }
297351
298- _renderContent ( ) {
352+ _renderMainContent ( ) {
299353 if ( this . _selectedWorkspaceItem . isBinary ) {
300354 return this . _renderBinaryContent ( ) ;
301355 } else {
@@ -354,6 +408,10 @@ export class QwcWorkspace extends observeState(QwcHotReloadElement) {
354408 </ vaadin-confirm-dialog > ` ;
355409 }
356410
411+ _toggleSplit ( ) {
412+ this . _isMaximized = ! this . _isMaximized ;
413+ }
414+
357415 _confirmOpenedChanged ( e ) {
358416 if ( this . _confirmDialogOpened !== e . detail . value ) {
359417 this . _confirmDialogOpened = e . detail . value ;
0 commit comments