Split MindReader view into accessability and hub sub-views

This commit is contained in:
jakergrossman 2021-11-18 15:59:04 -06:00
parent 90af5cba4a
commit c2f159bbe6
5 changed files with 106 additions and 53 deletions

View File

@ -216,20 +216,26 @@
} }
}, },
"views": { "views": {
"accessActions": [ "MindReader": [
{ {
"id": "accessActions", "id": "accessActions",
"name": "Access Actions", "name": "Access Actions",
"icon": "media/dep.svg", "icon": "media/dep.svg",
"contextualTitle": "Accessibility Menu Actions" "contextualTitle": "Accessibility Menu Actions"
},
{
"id": "hubActions",
"name": "Hub Actions",
"icon": "media/dep.svg",
"contextualTitle": "Hub Connection Actions"
} }
] ]
}, },
"viewsContainers": { "viewsContainers": {
"activitybar": [ "activitybar": [
{ {
"id": "accessActions", "id": "MindReader",
"title": "Access Actions", "title": "MindReader Actions",
"icon": "media/dep.svg" "icon": "media/dep.svg"
} }
] ]

View File

@ -1,47 +0,0 @@
import * as vscode from 'vscode';
// list of all actions
let actions: AccessAction[] = [];
class AccessAction extends vscode.TreeItem {
constructor(
public readonly label: string,
public readonly command: vscode.Command
) {
super(label, vscode.TreeItemCollapsibleState.None);
}
};
export default class AccessNodeProvider implements vscode.TreeDataProvider<AccessAction> {
public getTreeItem(a: AccessAction): vscode.TreeItem {
return a;
}
public async getChildren(): Promise<AccessAction[]> {
if (actions.length === 0) {
// fetch and cache mind-reader options
let cmds: string[] = await vscode.commands.getCommands(true); // get non-builtin commands
cmds = cmds.filter(x => x.startsWith('mind-reader')); // filter mind-reader commands
cmds.forEach(c => {
let humanReadable = c.replace(/^mind-reader\./, ''); // strip extensions name
// Convert camelCaseText to Title Case Text
humanReadable = humanReadable.replace(/([A-Z])/g, ' $1');
humanReadable = humanReadable.charAt(0).toUpperCase() + humanReadable.slice(1);
// add item to actions
actions.push(new AccessAction(
humanReadable,
{
title: humanReadable,
command: c,
tooltip: humanReadable
}
));
});
}
return Promise.resolve(actions);
}
}

View File

@ -0,0 +1,41 @@
import * as vscode from 'vscode';
export class CommandItem extends vscode.TreeItem {
constructor(
public readonly label: string,
public readonly command: vscode.Command
) {
super(label, vscode.TreeItemCollapsibleState.None);
}
};
export default class CommandNodeProvider implements vscode.TreeDataProvider<CommandItem> {
private items: CommandItem[] = [];
public constructor(commands: string[]) {
// build and cache command items
for (const c of commands) {
console.log(commands.length);
// Convert camelCaseText to Title Case Text
let humanReadable = c.replace(/([A-Z])/g, ' $1');
humanReadable = humanReadable.charAt(0).toUpperCase() + humanReadable.slice(1);
this.items.push(new CommandItem(
humanReadable,
{
title: humanReadable,
command: 'mind-reader.' + c,
tooltip: humanReadable
}
));
}
}
public getTreeItem(item: CommandItem): vscode.TreeItem {
return item;
}
public async getChildren(): Promise<CommandItem[]> {
return Promise.resolve(this.items);
}
}

View File

@ -3,7 +3,7 @@ import * as pl from './pylex';
import commands from './commands'; import commands from './commands';
import AccessNodeProvider from './accessNodeProvider'; import CommandNodeProvider from './commandNodeProvider';
import Logger from './log'; import Logger from './log';
// Output Logger // Output Logger
@ -27,8 +27,38 @@ export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(disposable); context.subscriptions.push(disposable);
}); });
let provider = new AccessNodeProvider(); // list of all commands to present in the access pane
vscode.window.registerTreeDataProvider('accessActions', provider); const accessActions: string[] = [
'increaseFontScale',
'decreaseFontScale',
'resetFontScale',
'increaseEditorScale',
'decreaseEditorScale',
'resetEditorScale',
'selectTheme',
'runLineContext',
'runCursorContext',
];
let accessProvider = new CommandNodeProvider(accessActions);
vscode.window.registerTreeDataProvider('accessActions', accessProvider);
// list of all commands to present in the hub pane
const hubCommands: string[] = [
'connectHub',
'diconnectHub',
'uploadCurrentFile',
'runProgram',
'stopExecution',
'deleteProgram',
];
let hubProvider = new CommandNodeProvider(hubCommands);
vscode.window.registerTreeDataProvider('hubActions', hubProvider);
} }
export function deactivate() {} export function deactivate() {}

23
src/log.ts Normal file
View File

@ -0,0 +1,23 @@
import * as vscode from 'vscode';
export default class Logger {
constructor(
public readonly outputChannel: vscode.OutputChannel
) { }
public log(text: string): void {
this.outputChannel.appendLine(text);
}
public info(text: string): void {
this.outputChannel.appendLine('[INFO]\r' + text);
}
public warn(text: string): void {
this.outputChannel.appendLine('[WARNING]\r' + text);
}
public error(text: string): void {
this.outputChannel.appendLine('[ERROR]\r' + text);
}
}