1
1
import * as vscode from 'vscode' ;
2
2
import * as conf from '../utils/configuration' ;
3
- import { CommandInterface , utils } from 'emulators/dist/out/emulators ' ;
3
+ import { CommandInterface , utils } from 'emulators' ;
4
4
5
5
class JsdosTerminal implements vscode . Pseudoterminal {
6
6
onDidWrite : vscode . Event < string > ;
@@ -66,32 +66,49 @@ function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) {
66
66
67
67
68
68
class 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 ;
72
72
bar = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Left ) ;
73
- updateci ( hasCi :{ ci : CommandInterface } ) {
73
+ updateci ( hasCi : { ci : CommandInterface } ) {
74
74
this . bar . command = 'masmtasm.emulatorStatus' ;
75
75
this . bar . text = `jsdos` ;
76
76
this . bar . show ( ) ;
77
- this . bar . color = new vscode . ThemeColor ( "activityBar.activeBackground" )
77
+ this . bar . color = new vscode . ThemeColor ( "activityBar.activeBackground" )
78
78
79
79
this . hasCi = hasCi ;
80
80
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
+ } ) ;
83
92
}
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 ;
86
96
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
+
95
112
const currentTime = new Date ( ) . getTime ( ) ;
96
113
97
114
panel . webview . html = getWebviewContent ( panel . webview , context . extensionUri ) ;
@@ -102,13 +119,6 @@ class Manager {
102
119
width : ci ?. width ( ) ,
103
120
height : ci ?. height ( )
104
121
} ) ;
105
- ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
106
- panel . webview . postMessage ( {
107
- command : 'rgb' ,
108
- time : new Date ( ) . getTime ( ) ,
109
- data : rgb
110
- } ) ;
111
- } ) ;
112
122
panel . webview . onDidReceiveMessage (
113
123
message => {
114
124
console . log ( message ) ;
@@ -135,25 +145,25 @@ class Manager {
135
145
}
136
146
}
137
147
138
- export const manager = new Manager ( ) ;
148
+ export const manager = new Manager ( ) ;
139
149
140
150
141
151
142
152
export function activate ( context : vscode . ExtensionContext ) : void {
143
153
async function statusBarCommand ( ) {
144
- const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
145
-
154
+ const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
155
+
146
156
const placeHolder = 'manipulate emulator' ;
147
157
const seleted = await vscode . window . showQuickPick ( items , { placeHolder } ) ;
148
- if ( seleted === items [ 0 ] ) {
158
+ if ( seleted === items [ 0 ] ) {
149
159
manager . webview ( context ) ;
150
160
}
151
- if ( seleted === items [ 1 ] ) {
161
+ if ( seleted === items [ 1 ] ) {
152
162
manager . terminal ?. show ( ) ;
153
163
}
154
- if ( seleted === items [ 2 ] ) {
164
+ if ( seleted === items [ 2 ] ) {
155
165
manager . hasCi . ci ?. exit ( )
156
- manager . hasCi . ci = undefined
166
+ manager . hasCi . ci = undefined
157
167
manager . bar . hide ( )
158
168
manager . terminal ?. hide ( )
159
169
}
0 commit comments