diff --git a/README.md b/README.md index e5cecc5..874a6ff 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,69 @@ -# Mind_Reader -The current editor options available lack the level of accessibility that is -required to allow students who are visually impaired to adequately edit, write, -and debug code. This tool would extend Visual Studio Code’s existing -accessibility options to allow everyone, primarily students K-12, to learn -programming with Lego Mindstorms. Our goal is to provide an enhanced experience -for students who are visually impaired that is transparent to sighted students. -This allows for everyone to use the same software solution, whether or not they -are vision impaired. + +

+Mind Reader Logo +

+

Mind_Reader

+ + + +The current editor options available lack the level of accessibility that is +required to allow people who are visually impaired to adequately write, edit, +and debug code. + +This tool extends Visual Studio Code’s existing +accessibility options to enable people with a visual impairment to learn +Python programming with LEGO Mindstorms. Our goal is to: + +- provide an accessible experience to people with a visual impairment + +- **not** change the editing workflow for people without a visual impairment + +## Major Features + +- Compatibility with major screen readers: + + - [NVDA](https://www.nvaccess.org/) + - [JAWS](https://www.freedomscientific.com/products/software/jaws/) + - [Apple VoiceOver](https://support.apple.com/guide/voiceover-guide/welcome/web/) + + +- Play audio alerts for syntax and runtime errors. + +- Present a summary of the scope for an individual line of code. + +- Save and load programs directly onto the LEGO Hub from within Visual Studio Code + +# For Developers ## Dependencies + + - [Git](https://git-scm.com/) - [Node.js](https://nodejs.org/en/) -See ["Your First -Extension"](https://code.visualstudio.com/api/get-started/your-first-extension) -API page if you need more help. - -## Cloning & Setup +## Development Quick Start Use the following to set up the extension for development. - git clone https://github.com/SingleSemesterSnobs/Mind_Reader.git - cd Mind_Reader - npm install +```console +$ git clone https://github.com/SingleSemesterSnobs/Mind_Reader.git +$ cd Mind_Reader +$ npm install +``` While inside the repository do - code . +```console +$ code . +``` to open the cloned repository in VS Code. Then, use "Run > Start Debugging" on the menu bar to start the [Extension Development Host](https://code.visualstudio.com/api/advanced-topics/extension-host) (F5 by default). + +--- + +See the Visual Studio Code [getting started](https://code.visualstudio.com/api/get-started/your-first-extension) +API page if you need more help. diff --git a/media/dep.svg b/media/dep.svg new file mode 100644 index 0000000..53e5be5 --- /dev/null +++ b/media/dep.svg @@ -0,0 +1,14 @@ + + + + Slice + Created with Sketch. + + + + + + + + + diff --git a/media/logo.png b/media/logo.png new file mode 100644 index 0000000..63fa136 Binary files /dev/null and b/media/logo.png differ diff --git a/package.json b/package.json index b7a7e4f..8fd1068 100644 --- a/package.json +++ b/package.json @@ -268,7 +268,26 @@ "markdownDescription": "Specifies the serial port path to use if `#mindreader.connectAutomatically#` is not set." } } - } + }, + "views": { + "accessActions": [ + { + "id": "accessActions", + "name": "Access Actions", + "icon": "media/dep.svg", + "contextualTitle": "Accessibility Menu Actions" + } + ] + }, + "viewsContainers": { + "activitybar": [ + { + "id": "accessActions", + "title": "Access Actions", + "icon": "media/dep.svg" + } + ] + } }, "scripts": { "vscode:prepublish": "npm run compile", diff --git a/src/accessNodeProvider.ts b/src/accessNodeProvider.ts new file mode 100644 index 0000000..9b0db83 --- /dev/null +++ b/src/accessNodeProvider.ts @@ -0,0 +1,47 @@ +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 { + public getTreeItem(a: AccessAction): vscode.TreeItem { + return a; + } + + public async getChildren(): Promise { + 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); + } +} diff --git a/src/extension.ts b/src/extension.ts index 5767437..ffeab0f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,6 +3,8 @@ import * as vscode from 'vscode'; import * as pl from './pylex'; import commands from './commands'; +import AccessNodeProvider from './accessNodeProvider' + let parser: pl.Parser = new pl.Parser(); export function activate(context: vscode.ExtensionContext) { @@ -19,6 +21,10 @@ export function activate(context: vscode.ExtensionContext) { ); context.subscriptions.push(disposable); }); + + let provider = new AccessNodeProvider(); + vscode.window.registerTreeDataProvider('accessActions', provider); + } export function deactivate() {}