Skip to content

Commit a80cb5b

Browse files
authored
Hide unavailable view actions and improve filter cancellation (#1018)
1 parent 250b3c4 commit a80cb5b

7 files changed

Lines changed: 123 additions & 45 deletions

File tree

package.json

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,11 @@
372372
},
373373
{
374374
"command": "vscode-cmsis-debugger.liveWatch.enablePeriodicUpdate",
375-
"when": "!liveWatch.periodicUpdateEnabled"
375+
"when": "inDebugMode && liveWatch.canAccessWhileRunning && !liveWatch.periodicUpdateEnabled"
376376
},
377377
{
378378
"command": "vscode-cmsis-debugger.liveWatch.disablePeriodicUpdate",
379-
"when": "liveWatch.periodicUpdateEnabled"
379+
"when": "inDebugMode && liveWatch.canAccessWhileRunning && liveWatch.periodicUpdateEnabled"
380380
},
381381
{
382382
"command": "vscode-cmsis-debugger.liveWatch.setValue",
@@ -392,16 +392,20 @@
392392
},
393393
{
394394
"command": "vscode-cmsis-debugger.componentViewer.enablePeriodicUpdate",
395-
"when": "!componentViewer.periodicUpdateEnabled"
395+
"when": "inDebugMode && componentViewer.canAccessWhileRunning && !componentViewer.periodicUpdateEnabled"
396396
},
397397
{
398398
"command": "vscode-cmsis-debugger.componentViewer.disablePeriodicUpdate",
399-
"when": "componentViewer.periodicUpdateEnabled"
399+
"when": "inDebugMode && componentViewer.canAccessWhileRunning && componentViewer.periodicUpdateEnabled"
400400
},
401401
{
402402
"command": "vscode-cmsis-debugger.componentViewer.expandAll",
403403
"when": "false"
404404
},
405+
{
406+
"command": "vscode-cmsis-debugger.componentViewer.collapseAll",
407+
"when": "false"
408+
},
405409
{
406410
"command": "vscode-cmsis-debugger.componentViewer.filterTree",
407411
"when": "false"
@@ -420,11 +424,11 @@
420424
},
421425
{
422426
"command": "vscode-cmsis-debugger.corePeripherals.enablePeriodicUpdate",
423-
"when": "!corePeripherals.periodicUpdateEnabled"
427+
"when": "inDebugMode && corePeripherals.canAccessWhileRunning && !corePeripherals.periodicUpdateEnabled"
424428
},
425429
{
426430
"command": "vscode-cmsis-debugger.corePeripherals.disablePeriodicUpdate",
427-
"when": "corePeripherals.periodicUpdateEnabled"
431+
"when": "inDebugMode && corePeripherals.canAccessWhileRunning && corePeripherals.periodicUpdateEnabled"
428432
},
429433
{
430434
"command": "vscode-cmsis-debugger.corePeripherals.expandAll",
@@ -454,7 +458,7 @@
454458
},
455459
{
456460
"command": "vscode-cmsis-debugger.liveWatch.refresh",
457-
"when": "view == cmsis-debugger.liveWatch"
461+
"when": "inDebugMode && view == cmsis-debugger.liveWatch"
458462
},
459463
{
460464
"command": "vscode-cmsis-debugger.liveWatch.add",
@@ -468,42 +472,42 @@
468472
},
469473
{
470474
"command": "vscode-cmsis-debugger.liveWatch.refresh",
471-
"when": "view == cmsis-debugger.liveWatch",
475+
"when": "inDebugMode && view == cmsis-debugger.liveWatch",
472476
"group": "navigation@2"
473477
},
474478
{
475479
"command": "vscode-cmsis-debugger.liveWatch.disablePeriodicUpdate",
476-
"when": "view == cmsis-debugger.liveWatch && liveWatch.periodicUpdateEnabled",
480+
"when": "inDebugMode && view == cmsis-debugger.liveWatch && liveWatch.canAccessWhileRunning && liveWatch.periodicUpdateEnabled",
477481
"group": "navigation@3"
478482
},
479483
{
480484
"command": "vscode-cmsis-debugger.liveWatch.enablePeriodicUpdate",
481-
"when": "view == cmsis-debugger.liveWatch && !liveWatch.periodicUpdateEnabled",
485+
"when": "inDebugMode && view == cmsis-debugger.liveWatch && liveWatch.canAccessWhileRunning && !liveWatch.periodicUpdateEnabled",
482486
"group": "navigation@3"
483487
},
484488
{
485489
"command": "vscode-cmsis-debugger.componentViewer.expandAll",
486-
"when": "view == cmsis-debugger.componentViewer",
490+
"when": "inDebugMode && view == cmsis-debugger.componentViewer",
487491
"group": "navigation@3"
488492
},
489493
{
490494
"command": "vscode-cmsis-debugger.componentViewer.collapseAll",
491-
"when": "view == cmsis-debugger.componentViewer",
495+
"when": "inDebugMode && view == cmsis-debugger.componentViewer",
492496
"group": "navigation@4"
493497
},
494498
{
495499
"command": "vscode-cmsis-debugger.corePeripherals.expandAll",
496-
"when": "view == cmsis-debugger.corePeripherals",
500+
"when": "inDebugMode && view == cmsis-debugger.corePeripherals",
497501
"group": "navigation@3"
498502
},
499503
{
500504
"command": "vscode-cmsis-debugger.corePeripherals.collapseAll",
501-
"when": "view == cmsis-debugger.corePeripherals",
505+
"when": "inDebugMode && view == cmsis-debugger.corePeripherals",
502506
"group": "navigation@4"
503507
},
504508
{
505509
"command": "vscode-cmsis-debugger.componentViewer.filterTree",
506-
"when": "view == cmsis-debugger.componentViewer",
510+
"when": "inDebugMode && view == cmsis-debugger.componentViewer",
507511
"group": "navigation@1"
508512
},
509513
{
@@ -513,7 +517,7 @@
513517
},
514518
{
515519
"command": "vscode-cmsis-debugger.corePeripherals.filterTree",
516-
"when": "view == cmsis-debugger.corePeripherals",
520+
"when": "inDebugMode && view == cmsis-debugger.corePeripherals",
517521
"group": "navigation@1"
518522
},
519523
{
@@ -523,22 +527,22 @@
523527
},
524528
{
525529
"command": "vscode-cmsis-debugger.componentViewer.disablePeriodicUpdate",
526-
"when": "view == cmsis-debugger.componentViewer && componentViewer.periodicUpdateEnabled",
530+
"when": "inDebugMode && view == cmsis-debugger.componentViewer && componentViewer.canAccessWhileRunning && componentViewer.periodicUpdateEnabled",
527531
"group": "navigation@3"
528532
},
529533
{
530534
"command": "vscode-cmsis-debugger.componentViewer.enablePeriodicUpdate",
531-
"when": "view == cmsis-debugger.componentViewer && !componentViewer.periodicUpdateEnabled",
535+
"when": "inDebugMode && view == cmsis-debugger.componentViewer && componentViewer.canAccessWhileRunning && !componentViewer.periodicUpdateEnabled",
532536
"group": "navigation@3"
533537
},
534538
{
535539
"command": "vscode-cmsis-debugger.corePeripherals.disablePeriodicUpdate",
536-
"when": "view == cmsis-debugger.corePeripherals && corePeripherals.periodicUpdateEnabled",
540+
"when": "inDebugMode && view == cmsis-debugger.corePeripherals && corePeripherals.canAccessWhileRunning && corePeripherals.periodicUpdateEnabled",
537541
"group": "navigation@3"
538542
},
539543
{
540544
"command": "vscode-cmsis-debugger.corePeripherals.enablePeriodicUpdate",
541-
"when": "view == cmsis-debugger.corePeripherals && !corePeripherals.periodicUpdateEnabled",
545+
"when": "inDebugMode && view == cmsis-debugger.corePeripherals && corePeripherals.canAccessWhileRunning && !corePeripherals.periodicUpdateEnabled",
542546
"group": "navigation@3"
543547
}
544548
],
@@ -575,7 +579,7 @@
575579
},
576580
{
577581
"command": "vscode-cmsis-debugger.liveWatch.setValue",
578-
"when": "view == cmsis-debugger.liveWatch && inDebugMode && vscode-cmsis-debugger.setExpressionSupported",
582+
"when": "inDebugMode && view == cmsis-debugger.liveWatch && vscode-cmsis-debugger.setExpressionSupported",
579583
"group": "contextMenuG1@5"
580584
},
581585
{
@@ -595,12 +599,12 @@
595599
},
596600
{
597601
"command": "cdt.debug.setOutputRadixToDecimal",
598-
"when": "(view == cmsis-debugger.liveWatch) && inDebugMode && cdt.debug.outputRadix && cdt.debug.outputRadix != 'decimal' && (debugType == 'gdb' || debugType == 'gdbtarget')",
602+
"when": "inDebugMode && (view == cmsis-debugger.liveWatch) && cdt.debug.outputRadix && cdt.debug.outputRadix != 'decimal' && (debugType == 'gdb' || debugType == 'gdbtarget')",
599603
"group": "contextMenuG4@1"
600604
},
601605
{
602606
"command": "cdt.debug.setOutputRadixToHex",
603-
"when": "(view == cmsis-debugger.liveWatch) && inDebugMode && cdt.debug.outputRadix && cdt.debug.outputRadix != 'hexadecimal' && (debugType == 'gdb' || debugType == 'gdbtarget')",
607+
"when": "inDebugMode && (view == cmsis-debugger.liveWatch) && cdt.debug.outputRadix && cdt.debug.outputRadix != 'hexadecimal' && (debugType == 'gdb' || debugType == 'gdbtarget')",
604608
"group": "contextMenuG4@2"
605609
},
606610
{

src/features/cpu-states/cpu-states.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class CpuStates {
7272
tracker.onContinued(event => this.handleContinuedEvent(event));
7373
tracker.onStopped(event => this.handleStoppedEvent(event));
7474
tracker.onStackTrace(stackTrace => this.handleStackTrace(stackTrace));
75-
void vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', true);
75+
vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', true);
7676
}
7777

7878
protected handleOnWillStartSession(session: GDBTargetDebugSession): void {
@@ -101,7 +101,7 @@ export class CpuStates {
101101
this.activeSession = session;
102102
// Restore enabled/disabled state of CPU Time commands based on persisted settings
103103
const enabled = session ? (this.sessionCpuStates.get(session.session.id)?.enableCpuStatesFlag ?? true) : false;
104-
void vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', enabled);
104+
vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', enabled);
105105
this._onRefresh.fire(0);
106106
}
107107

@@ -115,7 +115,7 @@ export class CpuStates {
115115
cpuStates.configStateKey = configStateKey;
116116
cpuStates.enableCpuStatesFlag = readCpuStates(configStateKey) ?? true;
117117
if (this.activeSession?.session.id === session.session.id) {
118-
void vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', cpuStates.enableCpuStatesFlag);
118+
vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', cpuStates.enableCpuStatesFlag);
119119
}
120120
// Following call might fail if target not stopped on connect, returns undefined
121121
// Retry on first Stopped Event.
@@ -369,7 +369,7 @@ export class CpuStates {
369369
for (const states of this.sessionCpuStates.values()) {
370370
states.enableCpuStatesFlag = true;
371371
}
372-
void vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', true);
372+
vscode.commands.executeCommand('setContext', 'vscode-cmsis-debugger.cpuTimerEnabled', true);
373373
logger.info('CPU States: CPU Timer reset');
374374
}
375375
};

src/views/component-viewer/component-viewer-base.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export class ComponentViewerBase {
147147
clearFilterCommandDisposable
148148
);
149149
vscode.commands.executeCommand('setContext', `${this._viewId}.periodicUpdateEnabled`, true);
150+
vscode.commands.executeCommand('setContext', `${this._viewId}.canAccessWhileRunning`, false);
150151
return true;
151152
}
152153

@@ -201,44 +202,53 @@ export class ComponentViewerBase {
201202

202203
protected handleFilterTree(): void {
203204
const inputBox = vscode.window.createInputBox();
205+
const originalFilter = this._componentViewerTreeDataProvider.filterPattern;
206+
let accepted = false;
204207
inputBox.placeholder = 'Type a text pattern to filter nodes...';
205208
inputBox.prompt = `Filter ${this._viewName} tree`;
206-
inputBox.value = this._componentViewerTreeDataProvider.filterPattern ?? '';
209+
inputBox.value = originalFilter ?? '';
207210
inputBox.ignoreFocusOut = false;
208211
this._activeInputBox = inputBox;
209212

210213
const applyFilter = (value: string): void => {
211214
if (value === '') {
212-
this.handleClearFilter();
215+
this._componentViewerTreeDataProvider.setFilter(undefined);
216+
vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, false);
213217
} else {
214218
componentViewerLogger.info(`${this._viewName}: Filter set to '${value}'`);
215219
this._componentViewerTreeDataProvider.setFilter(value);
216-
void vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, true);
220+
vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, true);
217221
}
218222
// Reset the timer so the view state is saved only after the user stops typing for filterDebounceMs.
219223
if (this._filterDebounceTimer) {
220224
clearTimeout(this._filterDebounceTimer);
221225
}
222226
this._filterDebounceTimer = setTimeout(() => {
223227
this._filterDebounceTimer = undefined;
224-
void this.saveCurrentState();
228+
this.saveCurrentState();
225229
}, ComponentViewerBase.filterDebounceMs);
226230
};
227231

228232
inputBox.onDidChangeValue(value => {
229-
if (value.length === 0) {
230-
this.handleClearFilter();
231-
} else {
232-
applyFilter(value);
233-
}
233+
applyFilter(value);
234234
});
235235

236236
inputBox.onDidAccept(() => {
237+
accepted = true;
237238
applyFilter(inputBox.value);
238239
inputBox.hide();
239240
});
240241

241242
inputBox.onDidHide(() => {
243+
if (!accepted && this._activeInputBox === inputBox) {
244+
if (this._filterDebounceTimer) {
245+
clearTimeout(this._filterDebounceTimer);
246+
this._filterDebounceTimer = undefined;
247+
}
248+
this._componentViewerTreeDataProvider.setFilter(originalFilter);
249+
vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, originalFilter !== undefined);
250+
this.saveCurrentState();
251+
}
242252
this._activeInputBox = undefined;
243253
inputBox.dispose();
244254
});
@@ -249,16 +259,18 @@ export class ComponentViewerBase {
249259
protected handleClearFilter(): void {
250260
componentViewerLogger.info(`${this._viewName}: Filter cleared`);
251261
this._componentViewerTreeDataProvider.setFilter(undefined);
252-
void vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, false);
262+
vscode.commands.executeCommand('setContext', `${this._viewId}.filterActive`, false);
253263
if (this._activeInputBox) {
254-
this._activeInputBox.hide();
264+
const activeInputBox = this._activeInputBox;
265+
this._activeInputBox = undefined;
266+
activeInputBox.hide();
255267
}
256268
// Cancel any pending debounced save and persist the cleared state immediately.
257269
if (this._filterDebounceTimer) {
258270
clearTimeout(this._filterDebounceTimer);
259271
this._filterDebounceTimer = undefined;
260272
}
261-
void this.saveCurrentState();
273+
this.saveCurrentState();
262274
}
263275

264276
protected async readScvdFiles(tracker: GDBTargetDebugTracker, session?: GDBTargetDebugSession): Promise<void> {
@@ -400,6 +412,7 @@ export class ComponentViewerBase {
400412
// Clear active session if it is the one being stopped
401413
if (this._activeSession?.session.id === session.session.id) {
402414
this._activeSession = undefined;
415+
vscode.commands.executeCommand('setContext', `${this._viewId}.canAccessWhileRunning`, false);
403416
this._webviewProvider?.setEmptyMessage('');
404417
this._webviewProvider?.setLoading(false);
405418
}
@@ -456,6 +469,7 @@ export class ComponentViewerBase {
456469
private async handleOnDidChangeActiveDebugSession(session: GDBTargetDebugSession | undefined): Promise<void> {
457470
// Update debug session
458471
this._activeSession = session;
472+
vscode.commands.executeCommand('setContext', `${this._viewId}.canAccessWhileRunning`, session?.canAccessWhileRunning === true);
459473
if (session) {
460474
this._webviewProvider?.setLoading(true);
461475
await this.restorePeriodicUpdateAndFilter(session);
@@ -473,7 +487,7 @@ export class ComponentViewerBase {
473487
}
474488
this._pendingUpdateTimer = setTimeout(() => {
475489
this._pendingUpdateTimer = undefined;
476-
void this.runUpdate(updateReason);
490+
this.runUpdate(updateReason);
477491
}, ComponentViewerBase.pendingUpdateDelayMs);
478492
}
479493

src/views/component-viewer/component-viewer-webview-provider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export class ComponentViewerWebviewProvider implements vscode.WebviewViewProvide
158158
return;
159159
}
160160
this._renderScheduled = true;
161-
void Promise.resolve().then(() => {
161+
Promise.resolve().then(() => {
162162
this._renderScheduled = false;
163163
this.flushRender();
164164
});
@@ -188,7 +188,7 @@ export class ComponentViewerWebviewProvider implements vscode.WebviewViewProvide
188188
resetViewState: this._pendingViewStateReset,
189189
};
190190
this._pendingViewStateReset = false;
191-
void this._view.webview.postMessage(message);
191+
this._view.webview.postMessage(message);
192192
}
193193

194194
/**

0 commit comments

Comments
 (0)