29 lines
965 B
TypeScript
29 lines
965 B
TypeScript
import * as vscode from 'vscode'
|
|
|
|
export class CteateItemOpt {
|
|
label: string;
|
|
context?: ItemContextValue;
|
|
state?: vscode.TreeItemCollapsibleState = vscode.TreeItemCollapsibleState.None;
|
|
icon?: string;
|
|
tooltip?: string;
|
|
}
|
|
|
|
export interface ItemContextValue {
|
|
type?: string;
|
|
data?: any;
|
|
}
|
|
|
|
export abstract class BaseProvider<T> implements vscode.TreeDataProvider<T> {
|
|
abstract onDidChangeTreeData?: vscode.Event<T | null | undefined> | undefined;
|
|
abstract getTreeItem(element: T): vscode.TreeItem | Thenable<vscode.TreeItem>;
|
|
abstract getChildren(element?: T | undefined): vscode.ProviderResult<T[]>;
|
|
|
|
createTreeItem(opts: CteateItemOpt) {
|
|
let item = new vscode.TreeItem(opts.label, opts.state);
|
|
item.contextValue = JSON.stringify(opts.context);
|
|
if (opts.icon) { item.iconPath = `src/images/${opts.icon}.svg` }
|
|
if (opts.tooltip) { item.tooltip = opts.tooltip; }
|
|
return item;
|
|
}
|
|
}
|