mirror of
				https://github.com/We-Dont-Byte/Mind_Reader.git
				synced 2025-02-04 10:38:42 +00:00 
			
		
		
		
	Split MindReader view into accessability and hub sub-views
This commit is contained in:
		
							
								
								
									
										12
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								package.json
									
									
									
									
									
								
							| @@ -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" | ||||||
| 				} | 				} | ||||||
| 			] | 			] | ||||||
|   | |||||||
| @@ -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); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
							
								
								
									
										41
									
								
								src/commandNodeProvider.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/commandNodeProvider.ts
									
									
									
									
									
										Normal 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); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -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
									
								
							
							
						
						
									
										23
									
								
								src/log.ts
									
									
									
									
									
										Normal 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); | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user