Skip to content

Commit 96af544

Browse files
Jonathan ZakJonathan Zak
authored andcommitted
Add codicons into graph
1 parent 2243ca8 commit 96af544

File tree

4 files changed

+31
-27
lines changed

4 files changed

+31
-27
lines changed

src/views/cytoscape/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ViewColumn, window } from "vscode";
22
import * as vscode from 'vscode';
33
import { ContextProvider } from "../../contextProvider";
4+
import { icons } from "../results/explain/icons";
45

56
export type Styles = {[key: string]: string};
67

@@ -40,7 +41,7 @@ export class CytoscapeGraph {
4041
this.elements.push({
4142
data: {id, label: node.label},
4243
style: node.styles || {},
43-
classes: ".l1"
44+
classes: "l1"
4445
});
4546

4647
if (node.parent) {
@@ -68,8 +69,10 @@ export class CytoscapeGraph {
6869

6970
private getHtml(webview: vscode.Webview): string {
7071
const data = JSON.stringify([...this.elements, ...this.edges])
72+
const iconMap = JSON.stringify(icons);
7173
const context = ContextProvider.getContext()
7274
const cssUri = webview.asWebviewUri(vscode.Uri.joinPath(context.extensionUri,'src', 'views', 'cytoscape', 'media', 'explain.css'))
75+
const codiconsUri = webview.asWebviewUri(vscode.Uri.joinPath(context.extensionUri,'src', 'views', 'cytoscape', 'media', 'codicons', 'dist', 'codicon.css'))
7376
const cytoscapeUri = webview.asWebviewUri(vscode.Uri.joinPath(context.extensionUri,'src', 'views', 'cytoscape', 'media', 'cytoscape.min.js'))
7477
const cytoscapeHtmlLabelUri = webview.asWebviewUri(vscode.Uri.joinPath(context.extensionUri,'src', 'views', 'cytoscape', 'media', 'cytoscape-node-html-label.min.js'))
7578
const explainUri = webview.asWebviewUri(vscode.Uri.joinPath(context.extensionUri,'src', 'views', 'cytoscape', 'media', 'explain.js'))
@@ -83,11 +86,13 @@ export class CytoscapeGraph {
8386
<meta charset="UTF-8">
8487
<meta name="viewport" content="width=device-width, initial-scale=1.0">
8588
<link href="${cssUri}" rel="stylesheet" />
89+
<link href="${codiconsUri}" rel="stylesheet" />
8690
<script src="${cytoscapeUri}"></script>
8791
<script src="${cytoscapeHtmlLabelUri}"></script>
8892
<script src="${explainUri}" defer></script>
8993
<script>
9094
window.data = ${data};
95+
window.iconMap = ${iconMap}
9196
</script>
9297
</head>
9398
<body>

src/views/cytoscape/media/explain.js

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// Initialize Cytoscape
22

3-
// const vscode = acquireVsCodeApi();
4-
console.log("IN EXPLAIN.JS!!!")
53
// @ts-ignore
6-
const vscode = window.acquireVsCodeApi()
4+
const iconMap = window.iconMap;
5+
// @ts-ignore
6+
const vscode = window.acquireVsCodeApi();
77
// @ts-ignore
88
const cy = cytoscape({
99
container: document.getElementById("diagramContainer"),
@@ -38,10 +38,9 @@ const cy = cytoscape({
3838

3939
// Layout options
4040
layout: {
41-
name: "breadthfirst",
42-
directed: true, // Directional tree
43-
padding: 10, // Padding around the graph
44-
spacingFactor: 1.5, // Spacing between nodes
41+
name: "grid",
42+
padding: 100, // Padding around the graph
43+
spacingFactor: 0.4, // Spacing between nodes
4544
},
4645
});
4746

@@ -50,26 +49,26 @@ cy.on("tap", "node", function (evt) {
5049
const id = evt.target.id();
5150
// @ts-ignore
5251
vscode.postMessage({
53-
command: 'selected',
54-
nodeId: id
52+
command: "selected",
53+
nodeId: id,
5554
});
5655
});
5756

5857
const getCodiconClass = (label) => {
59-
const codiconClass = new Map([["d", "d"]]);
60-
return codiconClass.get(label);
58+
const className = iconMap[label];
59+
return className !== undefined ? `codicon-${className}` : "";
6160
};
6261

63-
// cy.nodeHtmlLabel([
64-
// {
65-
// query: ".l1",
66-
// valign: "top",
67-
// halign: "center",
68-
// valignBox: "top",
69-
// halignBox: "center",
70-
// tpl: function (data) {
71-
// const className = getCodiconClass(data.label);
72-
// return `<div><div class="icon"><i class="codicon ${className}"></i></div>`;
73-
// },
74-
// },
75-
// ]);
62+
cy.nodeHtmlLabel([
63+
{
64+
query: ".l1",
65+
valign: "top",
66+
halign: "center",
67+
valignBox: "top",
68+
halignBox: "center",
69+
tpl: function (data) {
70+
const className = getCodiconClass(data.label);
71+
return `<div><div class="icon"><i class="codicon ${className}"></i></div>`;
72+
},
73+
},
74+
]);

src/views/results/explain/icons.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* @see https://www.ibm.com/docs/en/i/7.5?topic=ssw_ibm_i_75/apis/qqqvexpl.html#icon_labels
77
* @see https://code.visualstudio.com/api/references/icons-in-labels
88
*/
9-
const icons = {
9+
export const icons = {
1010
"Bitmap Merge": `merge`,
1111
"Cache": ``,
1212
"Cache Probe": ``,

src/views/results/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ async function runHandler(options?: StatementInfo) {
389389

390390
function addNode(node: ExplainNode, parent?: string) {
391391
const id = graph.addNode({
392-
label: ` ${node.title}`,
392+
label: node.title,
393393
parent: parent,
394394
data: node,
395395
styles: node.styles

0 commit comments

Comments
 (0)