Skip to content

Commit b6f90bf

Browse files
authored
Merge pull request #132 from tintinweb/131-api-expose-display-options
API - Allow caller to define view options (preserveFocus, vieColumn) and fix panel matching when "openAutomatically"
2 parents 0526d66 + ef4b00d commit b6f90bf

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

src/extension.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ function onActivate(context: vscode.ExtensionContext) {
6767
allowMultiplePanels?: boolean,
6868
title?: string,
6969
search?: any,
70+
displayColumn?: vscode.ViewColumn | {
71+
viewColumn: vscode.ViewColumn;
72+
preserveFocus?: boolean | undefined;
73+
}
7074
} = {
7175
document: args.document,
7276
uri: args.uri,
@@ -75,6 +79,10 @@ function onActivate(context: vscode.ExtensionContext) {
7579
allowMultiplePanels: args.allowMultiplePanels,
7680
title: args.title,
7781
search: args.search,
82+
displayColumn: args.displayColumn || {
83+
viewColumn: vscode.ViewColumn.Beside,
84+
preserveFocus: settings.extensionConfig().get("preserveFocus"),
85+
},
7886
};
7987

8088
if (!options.content
@@ -88,12 +96,13 @@ function onActivate(context: vscode.ExtensionContext) {
8896
options.uri = options.document.uri;
8997
}
9098

99+
if (typeof options.displayColumn === "object" && options.displayColumn.preserveFocus === undefined) {
100+
options.displayColumn.preserveFocus = settings.extensionConfig().get("preserveFocus"); // default to user settings
101+
}
102+
91103
const execute = (o:any) => {
92104
graphvizView.revealOrCreatePreview(
93-
{
94-
viewColumn: vscode.ViewColumn.Beside,
95-
preserveFocus: settings.extensionConfig().get("preserveFocus"),
96-
},
105+
o.displayColumn,
97106
o.uri,
98107
o,
99108
)

src/features/interactiveWebview.ts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ const webviewPanelContent = require("../../content/index.html").default;
2121
export default class InteractiveWebviewGenerator {
2222
private context: vscode.ExtensionContext;
2323

24-
private webviewPanels: Map<vscode.Uri, PreviewPanel>;
24+
private webviewPanels: Map<String, PreviewPanel>;
2525

2626
constructor(context: vscode.ExtensionContext) {
2727
this.context = context;
2828
this.webviewPanels = new Map();
2929
}
3030

3131
setNeedsRebuild(uri: vscode.Uri, needsRebuild: boolean) {
32-
const panel = this.webviewPanels.get(uri);
32+
const panel = this.webviewPanels.get(uri.toString());
3333

3434
if (panel) {
3535
panel.setNeedsRebuild(needsRebuild);
@@ -38,7 +38,7 @@ export default class InteractiveWebviewGenerator {
3838
}
3939

4040
getPanel(uri: vscode.Uri) {
41-
return this.webviewPanels.get(uri);
41+
return this.webviewPanels.get(uri.toString());
4242
}
4343

4444
// eslint-disable-next-line class-methods-use-this
@@ -68,10 +68,14 @@ export default class InteractiveWebviewGenerator {
6868
const that = this;
6969

7070
return new Promise((resolve, reject) => {
71-
let previewPanel = (uri) ? that.webviewPanels.get(uri) : undefined;
71+
let previewPanel = (uri) ? that.webviewPanels.get(uri.toString()) : undefined;
7272

7373
if (previewPanel && !options.allowMultiplePanels) {
74-
previewPanel.reveal(isObject(displayColumn) ? displayColumn.viewColumn : displayColumn);
74+
if (!isObject(displayColumn)) {
75+
previewPanel.reveal(displayColumn);
76+
} else {
77+
previewPanel.reveal(displayColumn.viewColumn, displayColumn.preserveFocus);
78+
}
7579
} else {
7680
previewPanel = that.createPreviewPanel(uri, displayColumn, options.title);
7781

@@ -80,13 +84,15 @@ export default class InteractiveWebviewGenerator {
8084
return;
8185
}
8286
if (uri) {
83-
that.webviewPanels.set(uri, previewPanel);
87+
that.webviewPanels.set(uri.toString(), previewPanel);
8488
}
8589
// when the user closes the tab, remove the panel
8690
previewPanel.getPanel().onDidDispose(() => {
8791
previewPanel?.dispose();
88-
// eslint-disable-next-line no-sequences
89-
if (uri) return that.webviewPanels.delete(uri), undefined, that.context.subscriptions;
92+
if (uri) {
93+
// eslint-disable-next-line no-sequences
94+
return that.webviewPanels.delete(uri.toString()), undefined, that.context.subscriptions;
95+
}
9096
return that.context.subscriptions;
9197
});
9298
// when the pane becomes visible again, refresh it

src/features/previewPanel.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ export default class PreviewPanel {
8383
: 0;
8484
}
8585

86-
reveal(displayColumn: vscode.ViewColumn) {
87-
this.panel.reveal(displayColumn);
86+
reveal(displayColumn: vscode.ViewColumn, preserveFocus?: boolean) {
87+
this.panel.reveal(displayColumn, preserveFocus);
8888
}
8989

9090
setNeedsRebuild(needsRebuild : boolean) {

0 commit comments

Comments
 (0)