@@ -268,7 +268,110 @@ export class MPQEditorProvider implements vscode.CustomTextEditorProvider {
268
268
html = html . replace ( / \$ { codiconUri} / g, `${ codiconUri } ` ) ;
269
269
webview . html = html ;
270
270
271
- //TODO process messages
271
+ // Receive message from the webview.
272
+ webview . onDidReceiveMessage ( ( e ) => {
273
+ switch ( e . type ) {
274
+ case "requestDisplayMPQ" :
275
+ this . updateWebview ( document , webview ) ;
276
+ break ;
277
+ case "addSpecificLayerFromDialog" :
278
+ this . hadleAddSpecificLayerFromDialog ( document ) ;
279
+ break ;
280
+ case "updateLayers" :
281
+ this . _mpqDataMap [ document . uri . toString ( ) ] . setLayersSections (
282
+ e . names ,
283
+ e . quantization ,
284
+ e . granularity
285
+ ) ;
286
+ break ;
287
+ case "updateSpecificQuantization" :
288
+ this . _mpqDataMap [ document . uri . toString ( ) ] . updateSectionOfLayer (
289
+ e . name ,
290
+ "dtype" ,
291
+ e . value
292
+ ) ;
293
+ break ;
294
+ case "updateSpecificGranularity" :
295
+ this . _mpqDataMap [ document . uri . toString ( ) ] . updateSectionOfLayer (
296
+ e . name ,
297
+ "granularity" ,
298
+ e . value
299
+ ) ;
300
+ break ;
301
+ case "requestModelNodes" :
302
+ this . handleRequestModelNodes ( document , webview ) ;
303
+ break ;
304
+ case "updateSection" :
305
+ this . _mpqDataMap [ document . uri . toString ( ) ] . setSection (
306
+ e . section ,
307
+ e . value
308
+ ) ;
309
+ break ;
310
+ case "updateDocument" :
311
+ this . updateDocument ( document ) ;
312
+ break ;
313
+ case "removeLayer" :
314
+ this . handleRemoveLayerFromLayers ( e . name , document ) ;
315
+ break ;
316
+ default :
317
+ break ;
318
+ }
319
+ } ) ;
320
+ }
321
+
322
+ /**
323
+ * @brief Update document
324
+ */
325
+ private async updateDocument ( document : vscode . TextDocument ) {
326
+ if (
327
+ this . _mpqDataMap [ document . uri . toString ( ) ] . getAsString ( ) !==
328
+ document . getText ( )
329
+ ) {
330
+ MPQEditorProvider . updateDocumentBy (
331
+ document ,
332
+ this . _mpqDataMap [ document . uri . toString ( ) ] . getAsString ( )
333
+ ) ;
334
+ }
335
+ }
336
+
337
+ /**
338
+ * @brief Add layers to edit their quantization parameters
339
+ */
340
+ private hadleAddSpecificLayerFromDialog ( document : vscode . TextDocument ) {
341
+ const nodes =
342
+ this . _mpqDataMap [ document . uri . toString ( ) ] . getDefaultModelLayers ( ) ;
343
+ const pickOptions = {
344
+ title : "Add specific layers to edit their quantization parameters" ,
345
+ matchOnDescription : true ,
346
+ matchOnDetail : true ,
347
+ placeHolder : "Select layers" ,
348
+ ignoreFocusOut : true ,
349
+ canPickMany : true ,
350
+ } ;
351
+
352
+ vscode . window
353
+ . showQuickPick ( nodes , pickOptions )
354
+ . then ( ( values : string | undefined ) => {
355
+ if ( ! values ) {
356
+ return ;
357
+ }
358
+
359
+ this . _mpqDataMap [ document . uri . toString ( ) ] . addLayers ( values ) ;
360
+ this . updateDocument ( document ) ;
361
+ } ) ;
362
+ }
363
+
364
+ /**
365
+ * @brief Remove layer from specif layers (add it to 'default' layers)
366
+ */
367
+ private handleRemoveLayerFromLayers (
368
+ name : string ,
369
+ document : vscode . TextDocument
370
+ ) {
371
+ let curConf = this . _mpqDataMap [ document . uri . toString ( ) ] ;
372
+ curConf . setLayersToDefault ( [ name ] ) ;
373
+
374
+ this . updateDocument ( document ) ;
272
375
}
273
376
274
377
private initWebviewPanel (
0 commit comments