diff --git a/arduino-ide-extension/build/arduino-cli.darwin b/arduino-ide-extension/build/arduino-cli.darwin index ac7cb2d5..7edace27 100755 Binary files a/arduino-ide-extension/build/arduino-cli.darwin and b/arduino-ide-extension/build/arduino-cli.darwin differ diff --git a/arduino-ide-extension/build/arduino-cli.linux b/arduino-ide-extension/build/arduino-cli.linux index 7a5c9cc4..b59e24cd 100755 Binary files a/arduino-ide-extension/build/arduino-cli.linux and b/arduino-ide-extension/build/arduino-cli.linux differ diff --git a/arduino-ide-extension/build/arduino-cli.win32 b/arduino-ide-extension/build/arduino-cli.win32 index 407e4e0d..100dc0b5 100755 Binary files a/arduino-ide-extension/build/arduino-cli.win32 and b/arduino-ide-extension/build/arduino-cli.win32 differ diff --git a/arduino-ide-extension/src/browser/arduino-commands.ts b/arduino-ide-extension/src/browser/arduino-commands.ts index 7945e93a..00af4c47 100644 --- a/arduino-ide-extension/src/browser/arduino-commands.ts +++ b/arduino-ide-extension/src/browser/arduino-commands.ts @@ -3,11 +3,13 @@ import { Command } from '@theia/core/lib/common/command'; export namespace ArduinoCommands { export const VERIFY: Command = { - id: 'arduino-verify' + id: 'arduino-verify', + label: 'Verify Sketch' } export const UPLOAD: Command = { - id: 'arduino-upload' + id: 'arduino-upload', + label: 'Upload Sketch' } } diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 415aeb61..b653f452 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -13,6 +13,7 @@ import { CoreService } from '../common/protocol/core-service'; import { WorkspaceServiceExt } from './workspace-service-ext'; import { ToolOutputServiceClient } from '../common/protocol/tool-output-service'; import { ConfirmDialog } from '@theia/core/lib/browser'; +import { QuickPickService } from '@theia/core/lib/common/quick-pick-service'; @injectable() @@ -33,6 +34,9 @@ export class ArduinoFrontendContribution extends DefaultFrontendApplicationContr @inject(ToolOutputServiceClient) protected readonly toolOutputServiceClient: ToolOutputServiceClient; + @inject(QuickPickService) + protected readonly quickPickService: QuickPickService; + @postConstruct() protected async init(): Promise { // This is a hack. Otherwise, the backend services won't bind. @@ -56,7 +60,7 @@ export class ArduinoFrontendContribution extends DefaultFrontendApplicationContr }); registry.registerItem({ id: ConnectedBoards.TOOLBAR_ID, - render: () => , + render: () => , isVisible: widget => this.isArduinoEditor(widget) }) } diff --git a/arduino-ide-extension/src/browser/components/connected-boards.tsx b/arduino-ide-extension/src/browser/components/connected-boards.tsx index 51137995..7a95765f 100644 --- a/arduino-ide-extension/src/browser/components/connected-boards.tsx +++ b/arduino-ide-extension/src/browser/components/connected-boards.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { BoardsService, Board } from '../../common/protocol/boards-service'; -import { SelectBoardDialog } from './select-board-dialog'; +// import { SelectBoardDialog } from './select-board-dialog'; +import { QuickPickService } from '@theia/core/lib/common/quick-pick-service'; export class ConnectedBoards extends React.Component { static TOOLBAR_ID: 'connected-boards-toolbar'; @@ -25,7 +26,9 @@ export class ConnectedBoards extends React.Component - { content } @@ -57,7 +60,7 @@ export class ConnectedBoards extends React.Component { + const {items} = await this.props.boardsService.search({}); + + const idx = new Map(); + items.filter(pkg => !!pkg.installedVersion).forEach(pkg => pkg.boards.forEach(brd => idx.set(`${brd.name}`, brd) )); + + const selection = await this.props.quickPickService.show(Array.from(idx.keys())); + if (!selection) { + return; + } + + return idx.get(selection); + } + } export namespace ConnectedBoards { export interface Props { readonly boardsService: BoardsService; + readonly quickPickService: QuickPickService; } export interface State { diff --git a/arduino-ide-extension/src/browser/components/select-board-dialog.tsx b/arduino-ide-extension/src/browser/components/select-board-dialog.tsx deleted file mode 100644 index 13de977a..00000000 --- a/arduino-ide-extension/src/browser/components/select-board-dialog.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { AbstractDialog, ReactRenderer, Message } from "@theia/core/lib/browser"; -import { Board, BoardsService } from "../../common/protocol/boards-service"; -import * as React from 'react'; - -interface BoardGroup { - name: string - boards: Board[] -} - -class DialogContentRenderer extends ReactRenderer { - protected availableBoards: BoardGroup[] = [ ]; - protected searchTerm = ""; - - constructor(protected readonly boardsService: BoardsService, protected readonly onSelect: (b: Board) => void) { - super(); - this.search(); - } - - doRender(): React.ReactNode { - return - - - ; - } - - protected onChange(evt: React.ChangeEvent) { - const [grp, brd] = evt.target.value.split("::"); - - const grpidx = parseInt(grp, 10); - const brdidx = parseInt(brd, 10); - - const board = this.availableBoards[grpidx].boards[brdidx]; - this.onSelect(board); - } - - protected onSearchChange(evt: React.ChangeEvent) { - this.searchTerm = evt.target.value; - this.search(); - } - - protected async search() { - const { items } = await this.boardsService.search({query: this.searchTerm }); - this.availableBoards = items.map(pkg => { - const result: BoardGroup = { - name: pkg.name, - boards: pkg.boards.filter(b => b.name.toLocaleLowerCase().includes(this.searchTerm.toLocaleLowerCase())) - } - return result; - }).filter(grp => !!grp.boards).sort((a, b) => { - if (a.name < b.name) return -1; - if (a.name === b.name) return 0; - return 1; - }); - - this.render(); - } - -} - -export class SelectBoardDialog extends AbstractDialog { - protected result: Board; - protected readonly contentRenderer: DialogContentRenderer; - - constructor(boardsService: BoardsService) { - super({ title: 'Select other board' }); - - this.contentNode.classList.add(SelectBoardDialog.Styles.DIALOG_CLASS); - this.contentRenderer = new DialogContentRenderer(boardsService, b => this.result = b); - this.contentRenderer.render(); - this.contentNode.appendChild(this.contentRenderer.host); - - this.appendCloseButton(); - this.appendAcceptButton("Select"); - } - - get value(): Board { - return this.result; - } - - onUpdateRequest(msg: Message) { - super.onUpdateRequest(msg); - this.contentRenderer.render(); - } - - dispose() { - this.contentRenderer.dispose(); - super.dispose(); - } - -} - -export namespace SelectBoardDialog { - export namespace Styles { - export const DIALOG_CLASS = "select-board-dialog"; - export const SELECTOR_CLASS = "selector"; - } -} diff --git a/arduino-ide-extension/src/node/library-service-impl.ts b/arduino-ide-extension/src/node/library-service-impl.ts index b771713a..b23677b7 100644 --- a/arduino-ide-extension/src/node/library-service-impl.ts +++ b/arduino-ide-extension/src/node/library-service-impl.ts @@ -24,15 +24,6 @@ export class LibraryServiceImpl implements LibraryService { const installedLibsIdx = new Map(); installedLibs.forEach(l => installedLibsIdx.set(l.getName(), l)); - if (!options.query || options.query.length < 2) { - const items: Library[] = Array.from(installedLibsIdx.values()).map(lib => toLibrary({ - name: lib.getName(), - installable: false, - installedVersion: lib.getInstalled()!.getVersion(), - }, lib.getInstalled()!)); - return { items }; - } - const req = new LibrarySearchReq(); req.setQuery(options.query || ''); req.setInstance(instance);