Merge branch 'master' into hub-communication

This commit is contained in:
jakergrossman 2021-12-01 09:03:52 -06:00
commit 9d41e5c9be
8 changed files with 296 additions and 90 deletions

View File

@ -1,35 +1,69 @@
# Mind_Reader <!-- header with logo -->
The current editor options available lack the level of accessibility that is <p align="center">
required to allow students who are visually impaired to adequately edit, write, <img alt="Mind Reader Logo" src="./media/logo.png"></img>
and debug code. This tool would extend Visual Studio Codes existing </p>
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.
<h1>Mind_Reader</h1>
<!-- overview description -->
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 Codes 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/)
<!-- TODO: still need this -->
- 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 ## Dependencies
<!-- TODO: version information -->
<!-- TODO: how to support native-usb functionality? -->
- [Git](https://git-scm.com/) - [Git](https://git-scm.com/)
- [Node.js](https://nodejs.org/en/) - [Node.js](https://nodejs.org/en/)
See ["Your First ## Development Quick Start
Extension"](https://code.visualstudio.com/api/get-started/your-first-extension)
API page if you need more help.
## Cloning & Setup
Use the following to set up the extension for development. Use the following to set up the extension for development.
git clone https://github.com/SingleSemesterSnobs/Mind_Reader.git ```console
cd Mind_Reader $ git clone https://github.com/SingleSemesterSnobs/Mind_Reader.git
npm install $ cd Mind_Reader
$ npm install
```
While inside the repository do While inside the repository do
code . ```console
$ code .
```
to open the cloned repository in VS Code. to open the cloned repository in VS Code.
Then, use "Run > Start Debugging" on the menu bar to start the [Extension Then, use "Run > Start Debugging" on the menu bar to start the [Extension
Development Host](https://code.visualstudio.com/api/advanced-topics/extension-host) Development Host](https://code.visualstudio.com/api/advanced-topics/extension-host)
(<kbd>F5</kbd> by default). (<kbd>F5</kbd> 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.

33
media/html/mackeys.html Normal file
View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mind Reader Key Bindings for Mac</title>
</head>
<body>
<h2> Here is a list of all the Mind Reader commands and their keybindings on Mac systems </h2>
<p>
<h2> Editor Settings </h2>
Increase Font Scale - <br>
Decrease Font Scale - <br>
Increase Editor Scale - <br>
Decrease Editor Scale - <br>
Reset Editor Scale - <br>
Select Theme - <br>
<h2>Navigation</h2>
Get Indent - <br>
Show All Symbols - <br>
Go To Line - <br>
Quick Open - <br>
Go To Symbol - <br>
Show Problems - <br>
Next In File - <br>
Previous In File - <br>
Open Previous Editor Group - <br>
Navigate Forward - <br>
Navigate Back - <br>
Get Quick Input Back -
</p>
</body>
</html>

43
media/html/main.html Normal file
View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mind Reader</title>
</head>
<body>
<img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcT6a4XaqHkKcxJ6ZFms1RNrRurcOfl-diW90DAdpAx0Kv-rtrLJXovIhcUpayqFHATkrQ&usqp=CAU" width="600" />
<p></p>
<h1>Welcome to Mind_Reader!</h1>
<p>We are the Single Semester Snobs and this is our tool to Help Blind Students Program Lego Mindstorms Robots in Python.</p>
<ul>
<li>
This tool includes features such as a hotkey that says how many spaces in the text starts, an Accessibility Pane,
Audio Alerts, and an advanced settings window.
<br>
The tool has hotkeys for both PC and Mac commands.
</li>
<li>This system is intended for everyone, but primarily for students K-12 who are visually impaired. </li>
<li>
Our goal is to provide an enhanced experience for students who are visually impaired that is transparent to
sighted students.
<br>
This allows for everyone to use the same software solution, whether or not they are
vision impaired.
</li>
</ul>
<p>Use the following key binding to bring up a page for all key bindings for windows
<br>
Control and Shift and 8
</p>
<p>Use this key binding to do the same for mac computers:
<br>
Command and Shift and 9
</p>
<h2>This is the Lego Spike Prime!</h2z>
<p></p>
<img src="https://cdn.vox-cdn.com/thumbor/qoaa6N2ppl7oj97MR-aj43qPy0w=/0x0:1024x576/920x613/filters:focal(431x207:593x369):format(webp)/cdn.vox-cdn.com/uploads/chorus_image/image/63339099/lego_spike.0.png" width="300" />
<p></p>
<a href="https://www.lego.com/en-us/product/lego-education-spike-prime-set-45678">Get the robot!</a>
</body>
</html>

33
media/html/winkeys.html Normal file
View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mind Reader Key Bindings for Windows</title>
</head>
<body>
<h2> Here is a list of all Mind Reader's commands and their keybindings on windows and linux systems </h2>
<p>
<h2> Editor Settings </h2>
Increase Font Scale - Number Pad Add<br>
Decrease Font Scale - Number Pad Subtract<br>
Increase Editor Scale - Shift and Number Pad Add<br>
Decrease Editor Scale - Shift and Number Pad Subtract<br>
Reset Editor Scale - Shift and Enter<br>
Select Theme - Control and Shift and 1<br>
<h2>Navigation</h2>
Get Indent - Shift and Tab<br>
Show All Symbols - Control and T<br>
Go To Line - Control and G<br>
Quick Open - Control and P<br>
Go To Symbol - Control and Shift and 0<br>
Show Problems - Control and Shift and M<br>
Next In File - F8<br>
Previous In File - Shift and F8<br>
Open Previous Editor Group - Control and Tab<br>
Navigate Forward - Control and Shift and Minus<br>
Navigate Back - Control and Alt and Minus<br>
Get Quick Input Back - Control and Alt and Minus
</p>
</body>
</html>

BIN
media/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

20
package-lock.json generated
View File

@ -13,13 +13,13 @@
"devDependencies": { "devDependencies": {
"@types/glob": "^7.1.3", "@types/glob": "^7.1.3",
"@types/mocha": "^8.2.2", "@types/mocha": "^8.2.2",
"@types/node": "14.x", "@types/node": "16.x",
"@types/serialport": "^8.0.2", "@types/serialport": "^8.0.2",
"@types/vscode": "^1.60.0", "@types/vscode": "^1.60.0",
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"@vscode/test-electron": "^1.6.2", "@vscode/test-electron": "^1.6.2",
"electron": "^13.5.2", "electron": "^16.0.3",
"electron-rebuild": "^3.2.5", "electron-rebuild": "^3.2.5",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"glob": "^7.1.7", "glob": "^7.1.7",
@ -1600,13 +1600,13 @@
"dev": true "dev": true
}, },
"node_modules/electron": { "node_modules/electron": {
"version": "13.5.2", "version": "16.0.3",
"resolved": "https://registry.npmjs.org/electron/-/electron-13.5.2.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.3.tgz",
"integrity": "sha512-CPakwDpy5m8dL0383F5uJboQcVtn9bT/+6/wdDKo8LuTUO9aER1TF41v7feZgZW2c+UwoGPWa814ElSQ3qta2A==", "integrity": "sha512-MzCYuEqrvyEtPSUWQwr88xWBrsbhmyOKp4wqP9WfAJTEDeUfBcrQYswHuYe17Gi00gRirQb9htoC/anYfaw20w==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@electron/get": "^1.0.1", "@electron/get": "^1.13.0",
"@types/node": "^14.6.2", "@types/node": "^14.6.2",
"extract-zip": "^1.0.3" "extract-zip": "^1.0.3"
}, },
@ -6329,12 +6329,12 @@
"dev": true "dev": true
}, },
"electron": { "electron": {
"version": "13.5.2", "version": "16.0.3",
"resolved": "https://registry.npmjs.org/electron/-/electron-13.5.2.tgz", "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.3.tgz",
"integrity": "sha512-CPakwDpy5m8dL0383F5uJboQcVtn9bT/+6/wdDKo8LuTUO9aER1TF41v7feZgZW2c+UwoGPWa814ElSQ3qta2A==", "integrity": "sha512-MzCYuEqrvyEtPSUWQwr88xWBrsbhmyOKp4wqP9WfAJTEDeUfBcrQYswHuYe17Gi00gRirQb9htoC/anYfaw20w==",
"dev": true, "dev": true,
"requires": { "requires": {
"@electron/get": "^1.0.1", "@electron/get": "^1.13.0",
"@types/node": "^14.6.2", "@types/node": "^14.6.2",
"extract-zip": "^1.0.3" "extract-zip": "^1.0.3"
}, },

View File

@ -1,6 +1,7 @@
{ {
"name": "mind-reader", "name": "mind-reader",
"displayName": "Mind_Reader", "displayName": "Mind_Reader",
"repository": "https://github.com/SingleSemesterSnobs/Mind_Reader",
"description": "", "description": "",
"version": "0.0.1", "version": "0.0.1",
"engines": { "engines": {
@ -47,6 +48,18 @@
"command": "mind-reader.selectTheme", "command": "mind-reader.selectTheme",
"title": "Select Theme" "title": "Select Theme"
}, },
{
"command": "mind-reader.openWebview",
"title": "Mind Reader Webview"
},
{
"command": "mind-reader.openKeyBindWin",
"title": "Key Bindings for Windows"
},
{
"command": "mind-reader.openKeyBindMac",
"title": "Key Bindings for Mac"
},
{ {
"command": "mind-reader.runLineContext", "command": "mind-reader.runLineContext",
"title": "Run Line Context" "title": "Run Line Context"
@ -55,38 +68,30 @@
"command": "mind-reader.runCursorContext", "command": "mind-reader.runCursorContext",
"title": "Run Cursor Context" "title": "Run Cursor Context"
}, },
{ {
"command": "mind-reader.getIndent", "command": "mind-reader.getIndent",
"title": "Get Line Indentation" "title": "Get Line Indentation"
}, },
{ {
"command": "mind-reader.connectHub", "command": "mind-reader.connectHub",
"title": "Connect LEGO Hub" "title": "Connect LEGO Hub"
}, },
{ {
"command": "mind-reader.disconnectHub", "command": "mind-reader.disconnectHub",
"title": "Disconnect LEGO Hub" "title": "Disconnect LEGO Hub"
}, },
{ {
"command": "mind-reader.uploadCurrentFile", "command": "mind-reader.uploadCurrentFile",
"title": "Upload current file to LEGO Hub" "title": "Upload current file to LEGO Hub"
}, },
{ {
"command": "mind-reader.runProgram", "command": "mind-reader.runProgram",
"title": "Run a program from the LEGO Hub" "title": "Run a program from the LEGO Hub"
}, },
{ {
"command": "mind-reader.stopExecution", "command": "mind-reader.stopExecution",
"title": "Stop running program on the LEGO Hub" "title": "Stop running program on the LEGO Hub"
}, },
{ {
"command": "mind-reader.deleteProgram", "command": "mind-reader.deleteProgram",
"title": "Delete a program from the LEGO Hub" "title": "Delete a program from the LEGO Hub"
@ -96,104 +101,102 @@
{ {
"command": "mind-reader.decreaseFontScale", "command": "mind-reader.decreaseFontScale",
"key": "numpad_subtract", "key": "numpad_subtract",
"mac": "" "mac": "d"
}, },
{ {
"command": "mind-reader.increaseFontScale", "command": "mind-reader.increaseFontScale",
"key": "numpad_add", "key": "numpad_add",
"mac": "" "mac": "[NumpadAdd]"
}, },
{ {
"command": "mind-reader.increaseEditorScale", "command": "mind-reader.increaseEditorScale",
"key": "shift+numpad_add" "key": "shift+numpad_add",
"mac": "Shift+[NumpadAdd]"
}, },
{ {
"command": "mind-reader.decreaseEditorScale", "command": "mind-reader.decreaseEditorScale",
"key": "shift+numpad_subtract", "key": "shift+numpad_subtract",
"mac": "" "mac": "Shift+[NumpadSubtract]"
}, },
{ {
"command": "mind-reader.resetEditorScale", "command": "mind-reader.resetEditorScale",
"key": "shift+enter", "key": "shift+enter",
"mac": "" "mac": "Shift+[Enter]"
}, },
{ {
"command": "mind-reader.showAllSymbols", "command": "mind-reader.showAllSymbols",
"key": "Ctrl+T", "key": "Ctrl+T",
"mac": "" "mac": "Cmd+[KeyT]"
}, },
{ {
"command": "mind-reader.gotoLine", "command": "mind-reader.gotoLine",
"key": "CTRL+G", "key": "CTRL+G",
"mac": "" "mac": "Cmd+[KeyG]"
}, },
{ {
"command": "mind-reader.quickOpen", "command": "mind-reader.quickOpen",
"key": "CTRL+P", "key": "CTRL+P",
"mac": "" "mac": "Cmd+[KeyP]"
}, },
{ {
"command": "mind-reader.gotoSymbol", "command": "mind-reader.gotoSymbol",
"key": "Ctrl+Shift+O", "key": "Ctrl+Shift+O",
"mac": "" "mac": "Cmd+Shift+[KeyO]"
}, },
{ {
"command": "mind-reader.showProblems", "command": "mind-reader.showProblems",
"key": "Ctrl+Shift+M", "key": "Ctrl+Shift+M",
"mac": "" "mac": "Cmd+Shift+[KeyM]"
}, },
{ {
"command": "mind-reader.nextInFiles", "command": "mind-reader.nextInFiles",
"key": "F8", "key": "F8",
"mac": "" "mac": "[F8]"
}, },
{ {
"command": "mind-reader.prevInFiles", "command": "mind-reader.prevInFiles",
"key": "Shift+F8", "key": "Shift+F8",
"mac": "" "mac": "Shift+[F8]"
}, },
{ {
"command": "mind-reader.quickOpenPreviousRecentlyUsedEditorInGroup", "command": "mind-reader.quickOpenPreviousRecentlyUsedEditorInGroup",
"key": "Ctrl+Tab", "key": "Ctrl+Tab",
"mac": "" "mac": "Cmd+[Tab]"
}, },
{ {
"command": "mind-reader.navigateBack", "command": "mind-reader.navigateBack",
"key": "Ctrl+Alt+-", "key": "Ctrl+Alt+-",
"mac": "" "mac": "Cmd+Alt+[Minus]"
}, },
{ {
"command": "mind-reader.getQuickInputBack", "command": "mind-reader.getQuickInputBack",
"key": "Ctrl+Alt+-", "key": "Ctrl+Alt+-",
"mac": "" "mac": "Cmd+Alt+[Minus]"
}, },
{ {
"command": "mind-reader.navigateForward", "command": "mind-reader.navigateForward",
"key": "Ctrl+Shift+-", "key": "Ctrl+Shift+-",
"mac": "" "mac": "Cmd+Shift+[Minus]"
}, },
{ {
"command": "mind-reader.selectTheme", "command": "mind-reader.selectTheme",
"key": "Ctrl+Shift+1", "key": "Ctrl+Shift+1",
"mac": "" "mac": "Cmd+Shift+[Digit1]"
}, },
{ {
"command": "mind-reader.getIndent", "command": "mind-reader.getIndent",
"key": "Shift+Tab", "key": "Shift+Tab",
"mac": "" "mac": "Shift+[Tab]"
},
{
"command": "mind-reader.openKeyBindWin",
"key": "Ctrl+Shift+8",
"mac": "Cmd+Shift+8"
},
{
"command": "mind-reader.openKeyBindMac",
"key": "Ctrl+Shift+9",
"mac": "Cmd+Shift+9"
} }
], ],
"menus": { "menus": {
@ -238,6 +241,21 @@
"command": "mind-reader.selectTheme", "command": "mind-reader.selectTheme",
"group": "mind-reader", "group": "mind-reader",
"when": "activeEditor" "when": "activeEditor"
},
{
"command": "mind-reader.openWebview",
"group": "mind-reader",
"when": "activeEditor"
},
{
"command": "mind-reader.openKeyBindWin",
"group": "mind-reader",
"when": "activeEditor"
},
{
"command": "mind-reader.openKeyBindMac",
"group": "mind-reader",
"when": "activeEditor"
} }
] ]
}, },
@ -342,8 +360,6 @@
"@typescript-eslint/eslint-plugin": "^4.26.0", "@typescript-eslint/eslint-plugin": "^4.26.0",
"@typescript-eslint/parser": "^4.26.0", "@typescript-eslint/parser": "^4.26.0",
"@vscode/test-electron": "^1.6.2", "@vscode/test-electron": "^1.6.2",
"electron": "^13.5.2",
"electron-rebuild": "^3.2.5",
"eslint": "^7.27.0", "eslint": "^7.27.0",
"glob": "^7.1.7", "glob": "^7.1.7",
"mocha": "^8.4.0", "mocha": "^8.4.0",

View File

@ -1,6 +1,7 @@
import * as vscode from 'vscode'; import * as vscode from 'vscode';
import * as pl from './pylex'; import * as pl from './pylex';
import * as path from 'path'; import * as path from 'path';
import * as fs from 'fs';
import HubManager from './hubManager'; import HubManager from './hubManager';
@ -60,6 +61,20 @@ export const accessCommands: CommandEntry[] = [
]; ];
export const navCommands: CommandEntry[] = [ export const navCommands: CommandEntry[] = [
{
name: 'mind-reader.openWebview',
callback: openWebview,
},
{
name: 'mind-reader.openKeyBindWin',
callback: () => openKeyBindWin('Windows')
},
{
name: 'mind-reader.openKeyBindMac',
callback: () => openKeyBindWin('Mac'),
},
//Navigation Keys...... //Navigation Keys......
{ {
name: 'mind-reader.showAllSymbols', name: 'mind-reader.showAllSymbols',
@ -189,6 +204,38 @@ function resetEditorScale(): void {
vscode.commands.executeCommand('workbench.action.zoomReset'); vscode.commands.executeCommand('workbench.action.zoomReset');
} }
function openWebview(): void {
//vscode.commands.executeCommand('workbench.action.zoomOut');
const panel = vscode.window.createWebviewPanel(
'mindReader', // Identifies the type of the webview. Used internally
'Mind Reader', // Title of the panel displayed to the user
vscode.ViewColumn.One, // Editor column to show the new webview panel in.
{}
); // Webview options. More on these later.
panel.webview.html = getWebviewContent('media/html/main.html');
}
function getWebviewContent(filepath: string) {
return fs.readFileSync(filepath, {encoding: 'utf-8'});
}
function openKeyBindWin(os: 'Mac' | 'Windows'): void {
//vscode.commands.executeCommand('workbench.action.zoomOut');
const panel = vscode.window.createWebviewPanel(
'mindReader', // Identifies the type of the webview. Used internally
'MR Key Bindings', // Title of the panel displayed to the user
vscode.ViewColumn.One, // Editor column to show the new webview panel in.
{}
); // Webview options. More on these later.
if (os === 'Windows') {
panel.webview.html = getWebviewContent('media/html/winkeys.html');
} else if (os === 'Mac') {
panel.webview.html = getWebviewContent('media/html/mackeys.html');
}
}
function getIndent(): void { function getIndent(): void {
let editor = vscode.window.activeTextEditor; let editor = vscode.window.activeTextEditor;
if(editor) if(editor)