Skip to content

Commit 9859182

Browse files
authored
fixing collapsible state maintainence in tree view (#738)
1 parent 26a1ea5 commit 9859182

7 files changed

Lines changed: 19 additions & 55 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class ComponentViewerController {
180180
this.updateSymaphorFlag = false;
181181
return;
182182
}
183-
await this.componentViewerTreeDataProvider?.deleteModels();
183+
this.componentViewerTreeDataProvider?.resetModelCache();
184184
for (const instance of this.instances) {
185185
this.instanceUpdateCounter++;
186186
console.log(`Updating Component Viewer Instance #${this.instanceUpdateCounter}`);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ export class ComponentViewerInstance {
135135
this.statementEngine = new StatementEngine(this.model, executionContext);
136136
this.statementEngine.initialize();
137137
stats.push(this.getStats(' statementEngine.initialize'));
138-
this._guiTree = new ScvdGuiTree(undefined);
138+
this._guiTree = new ScvdGuiTree(undefined, 'component-viewer-root');
139139

140140
console.log('ComponentViewerInstance readModel stats:\n' + stats.join('\n '));
141141
}

src/views/component-viewer/component-viewer-tree-view.ts

Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,7 @@ export class ComponentViewerTreeDataProvider implements vscode.TreeDataProvider<
4444
this._scvdModel = { scvdGuiOut: [] };
4545
}
4646
public async activate(): Promise<void> {
47-
//public async activate(tracker: GDBTargetDebugTracker): Promise<void> {
48-
/*
49-
// Subscribe to the debug tracker relevant events
50-
const onDidChangeActiveDebugSessionDisposable = tracker.onDidChangeActiveDebugSession(
51-
async (session) => await this.handleOnDidChangeActiveDebugSession(session)
52-
);
53-
const onWillStartSessionDisposable = tracker.onWillStartSession(
54-
async (session) => await this.handleOnWillStartSession(session)
55-
);
56-
const onWillStopSessionDisposable = tracker.onWillStopSession(
57-
async (session) => await this.handleOnWillStopSession(session)
58-
);
59-
const onDidChangeActiveStackItemDisposable = tracker.onDidChangeActiveStackItem(
60-
async (stackFrame) => await this.handleOnDidChangeActiveStackItem(stackFrame)
61-
);
62-
// Extracts out data from objects inside of the scvd model
63-
if (!this._scvdModel) {
64-
console.warn('No SCVD model set in ComponentViewerTreeDataProvider');
65-
return;
66-
}
67-
*/
68-
this.addRootObject();
47+
await this.addRootObject();
6948
this.refresh();
7049
}
7150

@@ -78,6 +57,7 @@ export class ComponentViewerTreeDataProvider implements vscode.TreeDataProvider<
7857
// Needs fixing, getGuiValue() for ScvdNode returns 0 when undefined
7958
treeItem.description = element.getGuiValue() ?? '';
8059
treeItem.tooltip = element.getGuiLineInfo() ?? '';
60+
treeItem.id = (element as unknown as { nodeId: string }).nodeId;
8161
return treeItem;
8262
}
8363

@@ -86,33 +66,19 @@ export class ComponentViewerTreeDataProvider implements vscode.TreeDataProvider<
8666
return Promise.resolve(this._objectOutRoots);
8767
}
8868

89-
return Promise.resolve(element.getGuiChildren() || []);
90-
}
91-
/*
92-
private async handleOnDidChangeActiveDebugSession(session: GDBTargetDebugSession | undefined): Promise<void> {
93-
// Handle changes to the active debug session if needed
94-
this.refresh();
95-
}
96-
97-
private async handleOnWillStartSession(session: GDBTargetDebugSession): Promise<void> {
98-
// Handle actions before a debug session starts if needed
99-
this.refresh();
100-
}
101-
102-
private async handleOnWillStopSession(session: GDBTargetDebugSession): Promise<void> {
103-
// Handle actions before a debug session stops if needed
104-
this.refresh();
105-
}
106-
107-
private async handleOnDidChangeActiveStackItem(stackFrame: SessionStackItem): Promise<void> {
108-
// Handle changes to the active stack frame if needed
109-
this.refresh();
69+
const children = element.getGuiChildren() || [];
70+
return Promise.resolve(children);
11071
}
111-
*/
72+
11273
private refresh(): void {
11374
this._onDidChangeTreeData.fire();
11475
}
11576

77+
public resetModelCache(): void {
78+
this._scvdModel.scvdGuiOut = [];
79+
this._objectOutRoots = [];
80+
}
81+
11682
public async addGuiOut(guiOut: ScvdGuiInterface[] | undefined) {
11783
if (guiOut !== undefined) {
11884
guiOut.forEach(item => this._scvdModel.scvdGuiOut.push(item));
@@ -134,8 +100,6 @@ export class ComponentViewerTreeDataProvider implements vscode.TreeDataProvider<
134100
if (this._scvdModel?.scvdGuiOut.length === 0) {
135101
return;
136102
}
137-
this._scvdModel.scvdGuiOut.forEach(guiOut => {
138-
this._objectOutRoots.push(guiOut);
139-
});
103+
this._objectOutRoots = [...this._scvdModel.scvdGuiOut];
140104
}
141105
}

src/views/component-viewer/scvd-gui-tree.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ export class ScvdGuiTree implements ScvdGuiInterface {
2727

2828
constructor(
2929
parent: ScvdGuiTree | undefined,
30+
nodeId?: string,
3031
) {
3132
this._parent = parent;
3233
if (parent) {
3334
parent.addChild(this);
3435
}
35-
this._nodeId = ScvdGuiTree.idCnt.toString();
36-
ScvdGuiTree.idCnt++;
36+
this._nodeId = nodeId ?? `${this.classname}_${ScvdGuiTree.idCnt++}`;
3737
}
3838

3939
public get parent(): ScvdGuiTree | undefined {
@@ -45,7 +45,7 @@ export class ScvdGuiTree implements ScvdGuiInterface {
4545
}
4646

4747
public get nodeId(): string {
48-
return this.classname + '_' + this._nodeId.toString();
48+
return this._nodeId;
4949
}
5050

5151
public clear(): void {

src/views/component-viewer/statement-engine/statement-item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class StatementItem extends StatementBase {
3737
const guiName = await this.scvdItem.getGuiName();
3838

3939
//const childGuiTree = (guiName?.length) ? new ScvdGuiTree(guiTree) : guiTree;
40-
const childGuiTree = new ScvdGuiTree(guiTree);
40+
const childGuiTree = new ScvdGuiTree(guiTree, this.scvdItem.nodeId);
4141

4242
//if (guiName?.length) { // else nothing to execute
4343
const guiValue = await this.scvdItem.getGuiValue();

src/views/component-viewer/statement-engine/statement-out.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class StatementOut extends StatementBase {
3333
return;
3434
}
3535

36-
const childGuiTree = new ScvdGuiTree(guiTree);
36+
const childGuiTree = new ScvdGuiTree(guiTree, this.scvdItem.nodeId);
3737
await this.onExecute(executionContext, childGuiTree);
3838

3939
if (this.children.length > 0) {

src/views/component-viewer/statement-engine/statement-print.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class StatementPrint extends StatementBase {
3333
return;
3434
}
3535

36-
const childGuiTree = new ScvdGuiTree(guiTree);
36+
const childGuiTree = new ScvdGuiTree(guiTree, this.scvdItem.nodeId);
3737
const guiName = await this.scvdItem.getGuiName();
3838
const guiValue = await this.scvdItem.getGuiValue();
3939
childGuiTree.setGuiName(guiName);

0 commit comments

Comments
 (0)