11import * as vscode from 'vscode' ;
22import * as conf from '../utils/configuration' ;
3- import { CommandInterface , utils } from 'emulators/dist/out/emulators ' ;
3+ import { CommandInterface , utils } from 'emulators' ;
44
55class JsdosTerminal implements vscode . Pseudoterminal {
66 onDidWrite : vscode . Event < string > ;
@@ -66,32 +66,49 @@ function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) {
6666
6767
6868class Manager {
69- hasCi : { ci : CommandInterface | undefined } = { ci :undefined } ;
70- terminal :vscode . Terminal | undefined = undefined ;
71- shell :utils . Shell | undefined = undefined ;
69+ hasCi : { ci : CommandInterface | undefined } = { ci : undefined } ;
70+ terminal : vscode . Terminal | undefined = undefined ;
71+ shell : utils . Shell | undefined = undefined ;
7272 bar = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Left ) ;
73- updateci ( hasCi :{ ci : CommandInterface } ) {
73+ updateci ( hasCi : { ci : CommandInterface } ) {
7474 this . bar . command = 'masmtasm.emulatorStatus' ;
7575 this . bar . text = `jsdos` ;
7676 this . bar . show ( ) ;
77- this . bar . color = new vscode . ThemeColor ( "activityBar.activeBackground" )
77+ this . bar . color = new vscode . ThemeColor ( "activityBar.activeBackground" )
7878
7979 this . hasCi = hasCi ;
8080 const pty = new JsdosTerminal ( hasCi . ci ) ;
81- this . terminal = vscode . window . createTerminal ( { name : "jsdos" , pty, } ) ;
82- this . shell = pty . shell
81+ this . terminal = vscode . window . createTerminal ( { name : "jsdos" , pty, } ) ;
82+ this . shell = pty . shell
83+
84+ this . hasCi . ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
85+ if ( this . panel )
86+ this . panel . webview . postMessage ( {
87+ command : 'rgb' ,
88+ time : new Date ( ) . getTime ( ) ,
89+ data : rgb
90+ } ) ;
91+ } ) ;
8392 }
84- webview ( context :vscode . ExtensionContext ) {
85- let ci = this . hasCi . ci ;
93+ panel : vscode . WebviewPanel | undefined = undefined
94+ webview ( context : vscode . ExtensionContext ) {
95+ const ci = this . hasCi . ci ;
8696 if ( ci ) {
87- const panel = vscode . window . createWebviewPanel (
88- "jsdos" ,
89- "jsdos panel" ,
90- { viewColumn : vscode . ViewColumn . Beside } ,
91- {
92- enableScripts : true
93- }
94- )
97+ if ( ! this . panel ?. active ) {
98+ this . panel ?. reveal ( )
99+ }
100+ if ( this . panel === undefined ) {
101+ this . panel = vscode . window . createWebviewPanel (
102+ "jsdos" ,
103+ "jsdos panel" ,
104+ { viewColumn : vscode . ViewColumn . Beside } ,
105+ {
106+ enableScripts : true
107+ }
108+ )
109+ }
110+ const panel = this . panel as vscode . WebviewPanel
111+
95112 const currentTime = new Date ( ) . getTime ( ) ;
96113
97114 panel . webview . html = getWebviewContent ( panel . webview , context . extensionUri ) ;
@@ -102,13 +119,6 @@ class Manager {
102119 width : ci ?. width ( ) ,
103120 height : ci ?. height ( )
104121 } ) ;
105- ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
106- panel . webview . postMessage ( {
107- command : 'rgb' ,
108- time : new Date ( ) . getTime ( ) ,
109- data : rgb
110- } ) ;
111- } ) ;
112122 panel . webview . onDidReceiveMessage (
113123 message => {
114124 console . log ( message ) ;
@@ -135,25 +145,25 @@ class Manager {
135145 }
136146}
137147
138- export const manager = new Manager ( ) ;
148+ export const manager = new Manager ( ) ;
139149
140150
141151
142152export function activate ( context : vscode . ExtensionContext ) : void {
143153 async function statusBarCommand ( ) {
144- const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
145-
154+ const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
155+
146156 const placeHolder = 'manipulate emulator' ;
147157 const seleted = await vscode . window . showQuickPick ( items , { placeHolder } ) ;
148- if ( seleted === items [ 0 ] ) {
158+ if ( seleted === items [ 0 ] ) {
149159 manager . webview ( context ) ;
150160 }
151- if ( seleted === items [ 1 ] ) {
161+ if ( seleted === items [ 1 ] ) {
152162 manager . terminal ?. show ( ) ;
153163 }
154- if ( seleted === items [ 2 ] ) {
164+ if ( seleted === items [ 2 ] ) {
155165 manager . hasCi . ci ?. exit ( )
156- manager . hasCi . ci = undefined
166+ manager . hasCi . ci = undefined
157167 manager . bar . hide ( )
158168 manager . terminal ?. hide ( )
159169 }
0 commit comments