Skip to content

Commit a7aff4d

Browse files
committed
More exploration
1 parent eff7197 commit a7aff4d

File tree

6 files changed

+72
-22
lines changed

6 files changed

+72
-22
lines changed

client/src/extension.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import { ExtensionContext, Terminal } from 'vscode';
2+
import { ExtensionContext, Terminal, window } from 'vscode';
33

44
import {
55
LanguageClient
@@ -8,6 +8,7 @@ import { setupSelectedVersion } from './setupSelectedVersion';
88
import { setupCommands } from './setupCommands';
99
import { setupLanguageServer } from './setupLanguageServer';
1010
import { setupSidebar } from './setupSidebar';
11+
import { PdeFileDecorationProvider, setupDecorators } from './setupDecorators';
1112

1213

1314
export interface ProcessingVersion {
@@ -30,6 +31,7 @@ export async function activate(context: ExtensionContext) {
3031
setupCommands(context);
3132
setupLanguageServer();
3233
setupSidebar();
34+
setupDecorators(context);
3335
}
3436

3537

client/src/setupCommands.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export function setupCommands(context: ExtensionContext) {
88
return;
99
}
1010

11+
// TODO: Save the current file, maybe settting?
12+
// TODO: Add a keyboard shortcut to run the sketch
13+
1114
let terminal = state.terminal;
1215
// Create a new terminal
1316
if (terminal === undefined || terminal.exitStatus) {

client/src/setupDecorators.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import * as vscode from 'vscode';
2+
3+
class PdeFileDecorationProvider implements vscode.FileDecorationProvider {
4+
onDidChangeFileDecorations?: vscode.Event<vscode.Uri | vscode.Uri[] | undefined>;
5+
6+
provideFileDecoration(uri: vscode.Uri): vscode.ProviderResult<vscode.FileDecoration> {
7+
// if (uri.path.endsWith('.pde')) {
8+
// return {
9+
// badge: '$(play)',
10+
// tooltip: 'Processing Sketch',
11+
// propagate: false
12+
// };
13+
// }
14+
return undefined;
15+
}
16+
}
17+
18+
19+
export function setupDecorators(context: vscode.ExtensionContext) {
20+
context.subscriptions.push(
21+
vscode.window.registerFileDecorationProvider(new PdeFileDecorationProvider())
22+
);
23+
}

client/src/setupSidebar.ts

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,54 @@
1-
import { CancellationToken, Event, ProviderResult, TreeDataProvider, TreeItem, window } from 'vscode';
1+
import { join } from 'path';
2+
import { ProviderResult, TreeDataProvider, TreeItem, TreeItemCollapsibleState, window } from 'vscode';
23

34

45

56
export function setupSidebar() {
67
const treeDataProvider = new ProcessingWindowDataProvider();
78
window.createTreeView('processingSidebarView', { treeDataProvider });
89

10+
{
11+
const treeDataProvider = new ProcessingWindowDataProvider();
12+
window.createTreeView('processingSidebarView2', { treeDataProvider });
13+
}
14+
915
}
1016

1117
class ProcessingTreeItem extends TreeItem {
12-
constructor() {
13-
super('Processing Item');
18+
constructor(
19+
public readonly label: string,
20+
private version: string,
21+
public readonly collapsibleState: TreeItemCollapsibleState,
22+
public readonly path = "",
23+
) {
24+
super(label, collapsibleState);
25+
this.tooltip = `${this.label}-${this.version}`;
26+
// this.iconPath = join(__dirname, "..", "..", "media/processing.svg");
1427
}
1528

16-
getTreeItem() {
17-
return this;
18-
}
1929

20-
getChildren() {
21-
return [];
22-
}
2330
}
2431

2532
// TODO: Top level items: [examples, sketchbook]
2633
// TODO: Add examples from libraries
2734
// TODO: Connect to Processing and request where the sketchbook is located
2835

2936
class ProcessingWindowDataProvider implements TreeDataProvider<ProcessingTreeItem> {
30-
onDidChangeTreeData?: Event<void | ProcessingTreeItem | ProcessingTreeItem[]>;
3137
getTreeItem(element: ProcessingTreeItem): TreeItem | Thenable<TreeItem> {
32-
throw new Error('getTreeItem not implemented.');
38+
return element;
3339
}
3440
getChildren(element?: ProcessingTreeItem): ProviderResult<ProcessingTreeItem[]> {
35-
throw new Error('getChildren not implemented.');
41+
if (element === undefined) {
42+
// return the examples and sketchbook items
43+
return [
44+
new ProcessingTreeItem('Sketchbook', '3.5.4', TreeItemCollapsibleState.Collapsed),
45+
new ProcessingTreeItem('Examples', '3.5.4', TreeItemCollapsibleState.Expanded),
46+
];
47+
} else {
48+
// Return the
49+
return [
50+
new ProcessingTreeItem('Example 1', '3.5.4', TreeItemCollapsibleState.None),
51+
];
52+
}
3653
}
37-
getParent?(element: ProcessingTreeItem): ProviderResult<ProcessingTreeItem> {
38-
throw new Error('getParent not implemented.');
39-
}
40-
resolveTreeItem?(item: TreeItem, element: ProcessingTreeItem, token: CancellationToken): ProviderResult<TreeItem> {
41-
throw new Error('resolveTreeItem not implemented.');
42-
}
43-
4454
}

client/tsconfig.tsbuildinfo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./src/compareversions.ts","./src/extension.ts","./src/setupcommands.ts","./src/setuplanguageserver.ts","./src/setupselectedversion.ts","./src/setupsidebar.ts"],"version":"5.8.3"}
1+
{"root":["./src/compareversions.ts","./src/extension.ts","./src/setupcommands.ts","./src/setupdecorators.ts","./src/setuplanguageserver.ts","./src/setupselectedversion.ts","./src/setupsidebar.ts"],"errors":true,"version":"5.8.3"}

package.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@
3434
}
3535
],
3636
"menus": {
37+
"explorer/context": [
38+
{
39+
"command": "processing.sketch.run",
40+
"when": "resourceExtname == .pde",
41+
"group": "navigation"
42+
}
43+
],
3744
"editor/title": [
3845
{
3946
"command": "processing.sketch.run",
@@ -82,7 +89,12 @@
8289
"processingSidebar": [
8390
{
8491
"id": "processingSidebarView",
85-
"name": "Processing",
92+
"name": "Sketchbook",
93+
"icon": "media/processing.svg"
94+
},
95+
{
96+
"id": "processingSidebarView2",
97+
"name": "Examples",
8698
"icon": "media/processing.svg"
8799
}
88100
]

0 commit comments

Comments
 (0)