From 8afde29bce7ca248b45b38452ba29bb665be63d5 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Mon, 29 Oct 2018 19:09:34 +0100 Subject: [PATCH] test view --- tree-view-sample/package.json | 13 ++++- tree-view-sample/src/extension.ts | 6 +- tree-view-sample/src/testView.ts | 95 +++++++++++++++++++++++++++++++ 3 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 tree-view-sample/src/testView.ts diff --git a/tree-view-sample/package.json b/tree-view-sample/package.json index 8b4d43dd..dcceb077 100644 --- a/tree-view-sample/package.json +++ b/tree-view-sample/package.json @@ -7,7 +7,6 @@ "engines": { "vscode": "^1.25.0" }, - "enableProposedApi": true, "categories": [ "Other" ], @@ -16,8 +15,10 @@ "onView:ftpExplorer", "onView:jsonOutline", "onView:fileExplorer", + "onView:testView", "onLanguage:json", - "onLanguage:jsonc" + "onLanguage:jsonc", + "onCommand:sample.reveal" ], "main": "./out/extension", "contributes": { @@ -50,6 +51,10 @@ { "id": "fileExplorer", "name": "File Explorer" + }, + { + "id": "testView", + "name": "Test View" } ] }, @@ -117,6 +122,10 @@ { "command": "fileExplorer.openFile", "title": "Open File" + }, + { + "command": "testView.reveal", + "title": "Reveal" } ], "menus": { diff --git a/tree-view-sample/src/extension.ts b/tree-view-sample/src/extension.ts index 0b0103c6..a33554b4 100644 --- a/tree-view-sample/src/extension.ts +++ b/tree-view-sample/src/extension.ts @@ -6,6 +6,7 @@ import { DepNodeProvider } from './nodeDependencies' import { JsonOutlineProvider } from './jsonOutline' import { FtpExplorer } from './ftpExplorer' import { FileExplorer } from './fileExplorer'; +import { TestView } from './testView'; export function activate(context: vscode.ExtensionContext) { @@ -27,4 +28,7 @@ export function activate(context: vscode.ExtensionContext) { // Samples of `window.createView` new FtpExplorer(context); new FileExplorer(context); -} + + // Test View + new TestView(context); +} \ No newline at end of file diff --git a/tree-view-sample/src/testView.ts b/tree-view-sample/src/testView.ts new file mode 100644 index 00000000..6f864940 --- /dev/null +++ b/tree-view-sample/src/testView.ts @@ -0,0 +1,95 @@ +import * as vscode from 'vscode'; + +export class TestView { + + constructor(context: vscode.ExtensionContext) { + const view = vscode.window.createTreeView('testView', { treeDataProvider: aNodeWithIdTreeDataProvider() }); + vscode.commands.registerCommand('testView.reveal', async () => { + const key = await vscode.window.showInputBox(); + if (key) { + await view.reveal({ key }, { focus: true, select: false }); + } + }); + } +} + +const tree = { + 'a': { + 'aa': { + 'aaa': { + 'aaaa': { + 'aaaaa': { + 'aaaaaa': { + + } + } + } + } + }, + 'ab': {} + }, + 'b': { + 'ba': {}, + 'bb': {} + } +}; +let nodes = {}; + +function aNodeWithIdTreeDataProvider(): vscode.TreeDataProvider<{ key: string }> { + return { + getChildren: (element: { key: string }): { key: string }[] => { + return getChildren(element ? element.key : undefined).map(key => getNode(key)); + }, + getTreeItem: (element: { key: string }): vscode.TreeItem => { + const treeItem = getTreeItem(element.key); + treeItem.id = element.key; + return treeItem; + }, + getParent: ({ key }: { key: string }): { key: string } => { + const parentKey = key.substring(0, key.length - 1); + return parentKey ? new Key(parentKey) : void 0; + } + }; +} + +function getChildren(key: string): string[] { + if (!key) { + return Object.keys(tree); + } + let treeElement = getTreeElement(key); + if (treeElement) { + return Object.keys(treeElement); + } + return []; +} + +function getTreeItem(key: string): vscode.TreeItem { + const treeElement = getTreeElement(key); + return { + label: key, + tooltip: `Tooltip for ${key}`, + collapsibleState: treeElement && Object.keys(treeElement).length ? vscode.TreeItemCollapsibleState.Collapsed : vscode.TreeItemCollapsibleState.None + }; +} + +function getTreeElement(element): any { + let parent = tree; + for (let i = 0; i < element.length; i++) { + parent = parent[element.substring(0, i + 1)]; + if (!parent) { + return null; + } + } + return parent; +} + +function getNode(key: string): { key: string } { + if (!nodes[key]) { + nodes[key] = new Key(key); + } + return nodes[key]; +} + +class Key { + constructor(readonly key: string) { } +} \ No newline at end of file