From 3a6b2f2bc8d41f240e28dca32732d1f5f71a4efe Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Fri, 17 Jul 2020 18:04:38 +0200 Subject: [PATCH] More refactoring. Splitting up code. Signed-off-by: Akos Kitta --- arduino-ide-extension/package.json | 2 +- .../browser/arduino-frontend-contribution.tsx | 2 +- .../browser/arduino-ide-frontend-module.ts | 105 +++++++++--------- .../src/browser/contributions/close-sketch.ts | 20 +++- .../browser/contributions/save-as-sketch.ts | 14 ++- .../about-dialog.ts} | 6 +- .../application-shell.ts} | 8 +- .../core/browser-main-menu-factory.ts} | 6 +- .../customization/core/browser-menu-module.ts | 13 +++ .../core/browser-menu-plugin.ts} | 0 .../connection-status-service.ts} | 12 +- .../frontend-application.ts} | 6 +- .../core/shell-layout-restorer.ts} | 4 +- .../core/tab-bar-decorator.ts} | 6 +- .../arduino-editor-contribution.ts | 0 .../editor/arduino-editor-manager.ts | 2 +- .../arduino-problem-contribution.ts | 2 +- .../markers/arduino-problem-manager.ts | 2 +- .../arduino-monaco-status-bar-contribution.ts | 0 .../arduino-navigator-contribution.ts | 2 +- .../arduino-outline-contribution.ts | 2 +- .../{ => scm}/arduino-scm-contribution.ts | 2 +- ...rduino-search-in-workspace-contribution.ts | 2 +- ...arduino-workspace-frontend-contribution.ts | 5 + .../workspace}/arduino-workspace-service.ts | 8 +- .../src/browser/editor-mode.ts | 3 +- .../menu/browser-arduino-menu-module.ts | 13 --- browser-app/package.json | 4 +- electron-app/package.json | 4 +- 29 files changed, 145 insertions(+), 110 deletions(-) rename arduino-ide-extension/src/browser/customization/{arduino-about-dialog.ts => core/about-dialog.ts} (77%) rename arduino-ide-extension/src/browser/customization/{arduino-application-shell.ts => core/application-shell.ts} (77%) rename arduino-ide-extension/src/browser/{menu/arduino-browser-main-menu-factory.ts => customization/core/browser-main-menu-factory.ts} (55%) create mode 100644 arduino-ide-extension/src/browser/customization/core/browser-menu-module.ts rename arduino-ide-extension/src/browser/{menu/arduino-menu-contribution.ts => customization/core/browser-menu-plugin.ts} (100%) rename arduino-ide-extension/src/browser/customization/{arduino-connection-status-service.ts => core/connection-status-service.ts} (75%) rename arduino-ide-extension/src/browser/customization/{arduino-frontend-application.ts => core/frontend-application.ts} (79%) rename arduino-ide-extension/src/browser/{shell/arduino-shell-layout-restorer.ts => customization/core/shell-layout-restorer.ts} (83%) rename arduino-ide-extension/src/browser/{shell/arduino-tab-bar-decorator.ts => customization/core/tab-bar-decorator.ts} (81%) rename arduino-ide-extension/src/browser/customization/{ => editor}/arduino-editor-contribution.ts (100%) rename arduino-ide-extension/src/browser/{ => customization}/editor/arduino-editor-manager.ts (94%) rename arduino-ide-extension/src/browser/customization/{ => markers}/arduino-problem-contribution.ts (96%) rename arduino-ide-extension/src/browser/{ => customization}/markers/arduino-problem-manager.ts (94%) rename arduino-ide-extension/src/browser/customization/{ => monaco}/arduino-monaco-status-bar-contribution.ts (100%) rename arduino-ide-extension/src/browser/customization/{ => navigator}/arduino-navigator-contribution.ts (92%) rename arduino-ide-extension/src/browser/customization/{ => outline}/arduino-outline-contribution.ts (92%) rename arduino-ide-extension/src/browser/customization/{ => scm}/arduino-scm-contribution.ts (93%) rename arduino-ide-extension/src/browser/customization/{ => search-in-workspace}/arduino-search-in-workspace-contribution.ts (92%) rename arduino-ide-extension/src/browser/customization/{ => workspace}/arduino-workspace-frontend-contribution.ts (86%) rename arduino-ide-extension/src/browser/{ => customization/workspace}/arduino-workspace-service.ts (91%) delete mode 100644 arduino-ide-extension/src/browser/menu/browser-arduino-menu-module.ts diff --git a/arduino-ide-extension/package.json b/arduino-ide-extension/package.json index fb932f95..59345c53 100644 --- a/arduino-ide-extension/package.json +++ b/arduino-ide-extension/package.json @@ -106,7 +106,7 @@ "frontend": "lib/browser/arduino-ide-frontend-module" }, { - "frontend": "lib/browser/menu/browser-arduino-menu-module", + "frontend": "lib/browser/customization/core/browser-menu-module", "frontendElectron": "lib/electron-browser/menu/electron-arduino-menu-module" }, { diff --git a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx index 78b01f9a..00df7799 100644 --- a/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx +++ b/arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx @@ -24,7 +24,7 @@ import { BoardsToolBarItem } from './boards/boards-toolbar-item'; import { BoardsConfig } from './boards/boards-config'; import { MonitorConnection } from './monitor/monitor-connection'; import { MonitorViewContribution } from './monitor/monitor-view-contribution'; -import { ArduinoWorkspaceService } from './arduino-workspace-service'; +import { ArduinoWorkspaceService } from './customization/workspace/arduino-workspace-service'; import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; import { OutputContribution } from '@theia/output/lib/browser/output-contribution'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; diff --git a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts index 255c9a4b..f667806b 100644 --- a/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts +++ b/arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts @@ -5,7 +5,7 @@ import { CommandContribution } from '@theia/core/lib/common/command'; import { bindViewContribution } from '@theia/core/lib/browser/shell/view-contribution'; import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar'; import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/ws-connection-provider'; -import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application' +import { FrontendApplicationContribution, FrontendApplication as TheiaFrontendApplication } from '@theia/core/lib/browser/frontend-application' import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate'; import { LanguageClientContribution } from '@theia/languages/lib/browser'; import { ArduinoLanguageClientContribution } from './language/arduino-language-client-contribution'; @@ -23,28 +23,28 @@ import { ToolOutputService } from '../common/protocol/tool-output-service'; import { ToolOutputServiceClientImpl } from './tool-output/client-service-impl'; import { BoardsServiceClientImpl } from './boards/boards-service-client-impl'; import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service'; -import { ArduinoWorkspaceService } from './arduino-workspace-service'; -import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; -import { ArduinoOutlineViewContribution } from './customization/arduino-outline-contribution'; -import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; -import { ArduinoProblemContribution } from './customization/arduino-problem-contribution'; -import { ArduinoNavigatorContribution } from './customization/arduino-navigator-contribution'; -import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; +import { ArduinoWorkspaceService } from './customization/workspace/arduino-workspace-service'; +import { OutlineViewContribution as TheiaOutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; +import { ArduinoOutlineViewContribution } from './customization/outline/arduino-outline-contribution'; +import { ProblemContribution as TheiaProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; +import { ArduinoProblemContribution } from './customization/markers/arduino-problem-contribution'; +import { ArduinoNavigatorContribution } from './customization/navigator/arduino-navigator-contribution'; +import { FileNavigatorContribution as TheiaFileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; import { ArduinoToolbarContribution } from './toolbar/arduino-toolbar-contribution'; -import { EditorContribution } from '@theia/editor/lib/browser/editor-contribution'; -import { ArduinoEditorContribution } from './customization/arduino-editor-contribution'; -import { MonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution'; -import { ArduinoMonacoStatusBarContribution } from './customization/arduino-monaco-status-bar-contribution'; -import { ApplicationShell, ShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser'; +import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution'; +import { ArduinoEditorContribution } from './customization/editor/arduino-editor-contribution'; +import { MonacoStatusBarContribution as TheiaMonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution'; +import { ArduinoMonacoStatusBarContribution } from './customization/monaco/arduino-monaco-status-bar-contribution'; +import { ApplicationShell as TheiaApplicationShell, ShellLayoutRestorer as TheiaShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser'; import { MenuContribution } from '@theia/core/lib/common/menu'; -import { ArduinoApplicationShell } from './customization/arduino-application-shell'; -import { ArduinoFrontendApplication } from './customization/arduino-frontend-application'; +import { ApplicationShell } from './customization/core/application-shell'; +import { FrontendApplication } from './customization/core/frontend-application'; import { BoardsConfigDialog, BoardsConfigDialogProps } from './boards/boards-config-dialog'; import { BoardsConfigDialogWidget } from './boards/boards-config-dialog-widget'; -import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution'; -import { ArduinoScmContribution } from './customization/arduino-scm-contribution'; -import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution'; -import { ArduinoSearchInWorkspaceContribution } from './customization/arduino-search-in-workspace-contribution'; +import { ScmContribution as TheiaScmContribution } from '@theia/scm/lib/browser/scm-contribution'; +import { ArduinoScmContribution } from './customization/scm/arduino-scm-contribution'; +import { SearchInWorkspaceFrontendContribution as TheiaSearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution'; +import { ArduinoSearchInWorkspaceContribution } from './customization/search-in-workspace/arduino-search-in-workspace-contribution'; import { LibraryListWidgetFrontendContribution } from './library/library-widget-frontend-contribution'; import { MonitorServiceClientImpl } from './monitor/monitor-service-client-impl'; import { MonitorServicePath, MonitorService, MonitorServiceClient } from '../common/protocol/monitor-service'; @@ -53,14 +53,14 @@ import { MonitorWidget } from './monitor/monitor-widget'; import { MonitorViewContribution } from './monitor/monitor-view-contribution'; import { MonitorConnection } from './monitor/monitor-connection'; import { MonitorModel } from './monitor/monitor-model'; -import { TabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator'; -import { ArduinoTabBarDecoratorService } from './shell/arduino-tab-bar-decorator'; +import { TabBarDecoratorService as TheiaTabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator'; +import { TabBarDecoratorService } from './customization/core/tab-bar-decorator'; import { ProblemManager } from '@theia/markers/lib/browser'; -import { ArduinoProblemManager } from './markers/arduino-problem-manager'; +import { ArduinoProblemManager } from './customization/markers/arduino-problem-manager'; import { BoardsAutoInstaller } from './boards/boards-auto-installer'; -import { AboutDialog } from '@theia/core/lib/browser/about-dialog'; -import { ArduinoAboutDialog } from './customization/arduino-about-dialog'; -import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer'; +import { AboutDialog as TheiaAboutDialog } from '@theia/core/lib/browser/about-dialog'; +import { AboutDialog } from './customization/core/about-dialog'; +import { ShellLayoutRestorer } from './customization/core/shell-layout-restorer'; import { EditorMode } from './editor-mode'; import { ListItemRenderer } from './components/component-list/list-item-renderer'; import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution'; @@ -68,17 +68,20 @@ import { MonacoThemingService } from '@theia/monaco/lib/browser/monaco-theming-s import { ArduinoDaemonClientImpl } from './arduino-daemon-client-impl'; import { ArduinoDaemonClient, ArduinoDaemonPath, ArduinoDaemon } from '../common/protocol/arduino-daemon'; import { EditorManager } from '@theia/editor/lib/browser'; -import { ArduinoEditorManager } from './editor/arduino-editor-manager'; -import { ArduinoFrontendConnectionStatusService, ArduinoApplicationConnectionStatusContribution } from './customization/arduino-connection-status-service'; -import { FrontendConnectionStatusService, ApplicationConnectionStatusContribution } from '@theia/core/lib/browser/connection-status-service'; +import { ArduinoEditorManager } from './customization/editor/arduino-editor-manager'; +import { FrontendConnectionStatusService, ApplicationConnectionStatusContribution } from './customization/core/connection-status-service'; +import { + FrontendConnectionStatusService as TheiaFrontendConnectionStatusService, + ApplicationConnectionStatusContribution as TheiaApplicationConnectionStatusContribution +} from '@theia/core/lib/browser/connection-status-service'; import { ConfigServiceClientImpl } from './config-service-client-impl'; import { CoreServiceClientImpl } from './core-service-client-impl'; import { BoardsDetailsMenuUpdater } from './boards/boards-details-menu-updater'; import { BoardsConfigStore } from './boards/boards-config-store'; import { ILogger } from '@theia/core'; import { FileSystemExt, FileSystemExtPath } from '../common/protocol/filesystem-ext'; -import { WorkspaceFrontendContribution, FileMenuContribution } from '@theia/workspace/lib/browser'; -import { ArduinoWorkspaceFrontendContribution, ArduinoFileMenuContribution } from './customization/arduino-workspace-frontend-contribution'; +import { WorkspaceFrontendContribution as TheiaWorkspaceFrontendContribution, FileMenuContribution as TheiaFileMenuContribution } from '@theia/workspace/lib/browser'; +import { ArduinoWorkspaceFrontendContribution, ArduinoFileMenuContribution } from './customization/workspace/arduino-workspace-frontend-contribution'; import { Contribution } from './contributions/contribution'; import { NewSketch } from './contributions/new-sketch'; import { OpenSketch } from './contributions/open-sketch'; @@ -253,43 +256,43 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un bind(FrontendApplicationContribution).toService(EditorMode); // Layout and shell customizations. - rebind(OutlineViewContribution).to(ArduinoOutlineViewContribution).inSingletonScope(); - rebind(ProblemContribution).to(ArduinoProblemContribution).inSingletonScope(); - rebind(FileNavigatorContribution).to(ArduinoNavigatorContribution).inSingletonScope(); - rebind(EditorContribution).to(ArduinoEditorContribution).inSingletonScope(); - rebind(MonacoStatusBarContribution).to(ArduinoMonacoStatusBarContribution).inSingletonScope(); - rebind(ApplicationShell).to(ArduinoApplicationShell).inSingletonScope(); - rebind(ScmContribution).to(ArduinoScmContribution).inSingletonScope(); - rebind(SearchInWorkspaceFrontendContribution).to(ArduinoSearchInWorkspaceContribution).inSingletonScope(); - rebind(FrontendApplication).to(ArduinoFrontendApplication).inSingletonScope(); - rebind(WorkspaceFrontendContribution).to(ArduinoWorkspaceFrontendContribution).inSingletonScope(); - rebind(FileMenuContribution).to(ArduinoFileMenuContribution).inSingletonScope(); + rebind(TheiaOutlineViewContribution).to(ArduinoOutlineViewContribution).inSingletonScope(); + rebind(TheiaProblemContribution).to(ArduinoProblemContribution).inSingletonScope(); + rebind(TheiaFileNavigatorContribution).to(ArduinoNavigatorContribution).inSingletonScope(); + rebind(TheiaEditorContribution).to(ArduinoEditorContribution).inSingletonScope(); + rebind(TheiaMonacoStatusBarContribution).to(ArduinoMonacoStatusBarContribution).inSingletonScope(); + rebind(TheiaApplicationShell).to(ApplicationShell).inSingletonScope(); + rebind(TheiaScmContribution).to(ArduinoScmContribution).inSingletonScope(); + rebind(TheiaSearchInWorkspaceFrontendContribution).to(ArduinoSearchInWorkspaceContribution).inSingletonScope(); + rebind(TheiaFrontendApplication).to(FrontendApplication).inSingletonScope(); + rebind(TheiaWorkspaceFrontendContribution).to(ArduinoWorkspaceFrontendContribution).inSingletonScope(); + rebind(TheiaFileMenuContribution).to(ArduinoFileMenuContribution).inSingletonScope(); // Show a disconnected status bar, when the daemon is not available - bind(ArduinoApplicationConnectionStatusContribution).toSelf().inSingletonScope(); - rebind(ApplicationConnectionStatusContribution).toService(ArduinoApplicationConnectionStatusContribution); - bind(ArduinoFrontendConnectionStatusService).toSelf().inSingletonScope(); - rebind(FrontendConnectionStatusService).toService(ArduinoFrontendConnectionStatusService); + bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope(); + rebind(TheiaApplicationConnectionStatusContribution).toService(ApplicationConnectionStatusContribution); + bind(FrontendConnectionStatusService).toSelf().inSingletonScope(); + rebind(TheiaFrontendConnectionStatusService).toService(FrontendConnectionStatusService); // Editor customizations. Sets the editor to `readOnly` if under the data dir. bind(ArduinoEditorManager).toSelf().inSingletonScope(); rebind(EditorManager).toService(ArduinoEditorManager); // Decorator customizations - bind(ArduinoTabBarDecoratorService).toSelf().inSingletonScope(); - rebind(TabBarDecoratorService).toService(ArduinoTabBarDecoratorService); + bind(TabBarDecoratorService).toSelf().inSingletonScope(); + rebind(TheiaTabBarDecoratorService).toService(TabBarDecoratorService); // Problem markers bind(ArduinoProblemManager).toSelf().inSingletonScope(); rebind(ProblemManager).toService(ArduinoProblemManager); // About dialog to show the CLI version - bind(ArduinoAboutDialog).toSelf().inSingletonScope(); - rebind(AboutDialog).toService(ArduinoAboutDialog); + bind(AboutDialog).toSelf().inSingletonScope(); + rebind(TheiaAboutDialog).toService(AboutDialog); // Customized layout restorer that can restore the state in async way: https://github.com/eclipse-theia/theia/issues/6579 - bind(ArduinoShellLayoutRestorer).toSelf().inSingletonScope(); - rebind(ShellLayoutRestorer).toService(ArduinoShellLayoutRestorer); + bind(ShellLayoutRestorer).toSelf().inSingletonScope(); + rebind(TheiaShellLayoutRestorer).toService(ShellLayoutRestorer); // Arduino daemon client. Receives notifications from the backend if the CLI daemon process has been restarted. bind(ArduinoDaemon).toDynamicValue(context => { diff --git a/arduino-ide-extension/src/browser/contributions/close-sketch.ts b/arduino-ide-extension/src/browser/contributions/close-sketch.ts index 751ab02a..1184bfe3 100644 --- a/arduino-ide-extension/src/browser/contributions/close-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/close-sketch.ts @@ -1,4 +1,5 @@ import { injectable } from 'inversify'; +import { remote } from 'electron'; import { WorkspaceCommands } from '@theia/workspace/lib/browser/workspace-commands'; import { ArduinoMenus } from '../menu/arduino-menus'; import { SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry } from './contribution'; @@ -16,9 +17,24 @@ export class CloseSketch extends SketchContribution { } const isTemp = await this.sketchService.isTemp(sketch); if (isTemp) { - await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { openAfterMove: false, execOnlyIfTemp: true }); - await this.commandService.executeCommand(WorkspaceCommands.CLOSE.id); + // TODO: check monaco model version. If `0` just close the app. + const { response } = await remote.dialog.showMessageBox({ + type: 'question', + buttons: ["Don't Save", 'Cancel', 'Save'], + message: 'Do you want to save changes to this sketch before closing?', + detail: "If you don't save, your changes will be lost." + }); + if (response === 1) { // Cancel + return; + } + if (response === 2) { // Save + const saved = await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { openAfterMove: false, execOnlyIfTemp: true }); + if (!saved) { // If it was not saved, do bail the close. + return; + } + } } + await this.commandService.executeCommand(WorkspaceCommands.CLOSE.id); } }); } diff --git a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts index 37922508..a9ac2ee9 100644 --- a/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts +++ b/arduino-ide-extension/src/browser/contributions/save-as-sketch.ts @@ -28,15 +28,18 @@ export class SaveAsSketch extends SketchContribution { }); } - async saveAs({ execOnlyIfTemp, openAfterMove }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise { + /** + * Resolves `true` if the sketch was successfully saved as something. + */ + async saveAs({ execOnlyIfTemp, openAfterMove }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise { const sketch = await this.getCurrentSketch(); if (!sketch) { - return; + return false; } const isTemp = await this.sketchService.isTemp(sketch); if (!isTemp && !!execOnlyIfTemp) { - return; + return false; } // If target does not exist, propose a `directories.user`/${sketch.name} path @@ -49,16 +52,17 @@ export class SaveAsSketch extends SketchContribution { const defaultPath = await this.fileSystem.getFsPath(defaultUri.toString())!; const { filePath, canceled } = await remote.dialog.showSaveDialog({ title: 'Save sketch folder as...', defaultPath }); if (!filePath || canceled) { - return; + return false; } const destinationUri = await this.fileSystemExt.getUri(filePath); if (!destinationUri) { - return; + return false; } const workspaceUri = await this.sketchService.copy(sketch, { destinationUri }); if (workspaceUri && openAfterMove) { this.workspaceService.open(new URI(workspaceUri)); } + return !!workspaceUri; } } diff --git a/arduino-ide-extension/src/browser/customization/arduino-about-dialog.ts b/arduino-ide-extension/src/browser/customization/core/about-dialog.ts similarity index 77% rename from arduino-ide-extension/src/browser/customization/arduino-about-dialog.ts rename to arduino-ide-extension/src/browser/customization/core/about-dialog.ts index e9f4ae3f..e4ec9962 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-about-dialog.ts +++ b/arduino-ide-extension/src/browser/customization/core/about-dialog.ts @@ -1,9 +1,9 @@ import { injectable, inject, postConstruct } from 'inversify'; -import { AboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog'; -import { ConfigService } from '../../common/protocol/config-service'; +import { AboutDialog as TheiaAboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog'; +import { ConfigService } from '../../../common/protocol/config-service'; @injectable() -export class ArduinoAboutDialog extends AboutDialog { +export class AboutDialog extends TheiaAboutDialog { @inject(ConfigService) protected readonly configService: ConfigService; diff --git a/arduino-ide-extension/src/browser/customization/arduino-application-shell.ts b/arduino-ide-extension/src/browser/customization/core/application-shell.ts similarity index 77% rename from arduino-ide-extension/src/browser/customization/arduino-application-shell.ts rename to arduino-ide-extension/src/browser/customization/core/application-shell.ts index 4dc4bcb7..9eed54e2 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-application-shell.ts +++ b/arduino-ide-extension/src/browser/customization/core/application-shell.ts @@ -1,13 +1,13 @@ import { injectable, inject } from 'inversify'; import { CommandService } from '@theia/core/lib/common/command'; -import { ApplicationShell, Widget } from '@theia/core/lib/browser'; -import { EditorMode } from '../editor-mode'; +import { ApplicationShell as TheiaApplicationShell, Widget } from '@theia/core/lib/browser'; +import { EditorMode } from '../../editor-mode'; import { EditorWidget } from '@theia/editor/lib/browser'; -import { SaveAsSketch } from '../contributions/save-as-sketch'; +import { SaveAsSketch } from '../../contributions/save-as-sketch'; @injectable() -export class ArduinoApplicationShell extends ApplicationShell { +export class ApplicationShell extends TheiaApplicationShell { @inject(EditorMode) protected readonly editorMode: EditorMode; diff --git a/arduino-ide-extension/src/browser/menu/arduino-browser-main-menu-factory.ts b/arduino-ide-extension/src/browser/customization/core/browser-main-menu-factory.ts similarity index 55% rename from arduino-ide-extension/src/browser/menu/arduino-browser-main-menu-factory.ts rename to arduino-ide-extension/src/browser/customization/core/browser-main-menu-factory.ts index e7970c79..65ae1813 100644 --- a/arduino-ide-extension/src/browser/menu/arduino-browser-main-menu-factory.ts +++ b/arduino-ide-extension/src/browser/customization/core/browser-main-menu-factory.ts @@ -1,9 +1,9 @@ import { injectable } from 'inversify'; -import { BrowserMainMenuFactory, MenuBarWidget } from '@theia/core/lib/browser/menu/browser-menu-plugin'; -import { MainMenuManager } from './main-menu-manager'; +import { BrowserMainMenuFactory as TheiaBrowserMainMenuFactory, MenuBarWidget } from '@theia/core/lib/browser/menu/browser-menu-plugin'; +import { MainMenuManager } from '../../menu/main-menu-manager'; @injectable() -export class ArduinoBrowserMainMenuFactory extends BrowserMainMenuFactory implements MainMenuManager { +export class BrowserMainMenuFactory extends TheiaBrowserMainMenuFactory implements MainMenuManager { protected menuBar: MenuBarWidget | undefined; diff --git a/arduino-ide-extension/src/browser/customization/core/browser-menu-module.ts b/arduino-ide-extension/src/browser/customization/core/browser-menu-module.ts new file mode 100644 index 00000000..a9220041 --- /dev/null +++ b/arduino-ide-extension/src/browser/customization/core/browser-menu-module.ts @@ -0,0 +1,13 @@ +import '../../../../src/browser/style/browser-menu.css'; +import { ContainerModule } from 'inversify'; +import { BrowserMenuBarContribution, BrowserMainMenuFactory as TheiaBrowserMainMenuFactory } from '@theia/core/lib/browser/menu/browser-menu-plugin'; +import { MainMenuManager } from '../../menu/main-menu-manager'; +import { ArduinoMenuContribution } from './browser-menu-plugin'; +import { BrowserMainMenuFactory } from './browser-main-menu-factory'; + +export default new ContainerModule((bind, unbind, isBound, rebind) => { + bind(BrowserMainMenuFactory).toSelf().inSingletonScope(); + bind(MainMenuManager).toService(BrowserMainMenuFactory); + rebind(TheiaBrowserMainMenuFactory).toService(BrowserMainMenuFactory); + rebind(BrowserMenuBarContribution).to(ArduinoMenuContribution).inSingletonScope(); +}); diff --git a/arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts b/arduino-ide-extension/src/browser/customization/core/browser-menu-plugin.ts similarity index 100% rename from arduino-ide-extension/src/browser/menu/arduino-menu-contribution.ts rename to arduino-ide-extension/src/browser/customization/core/browser-menu-plugin.ts diff --git a/arduino-ide-extension/src/browser/customization/arduino-connection-status-service.ts b/arduino-ide-extension/src/browser/customization/core/connection-status-service.ts similarity index 75% rename from arduino-ide-extension/src/browser/customization/arduino-connection-status-service.ts rename to arduino-ide-extension/src/browser/customization/core/connection-status-service.ts index addff7d7..eae61d39 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-connection-status-service.ts +++ b/arduino-ide-extension/src/browser/customization/core/connection-status-service.ts @@ -1,11 +1,15 @@ import { inject, injectable, postConstruct } from 'inversify'; import { Disposable } from '@theia/core/lib/common/disposable'; import { StatusBarAlignment } from '@theia/core/lib/browser/status-bar/status-bar'; -import { FrontendConnectionStatusService, ApplicationConnectionStatusContribution, ConnectionStatus } from '@theia/core/lib/browser/connection-status-service'; -import { ArduinoDaemonClientImpl } from '../arduino-daemon-client-impl'; +import { + FrontendConnectionStatusService as TheiaFrontendConnectionStatusService, + ApplicationConnectionStatusContribution as TheiaApplicationConnectionStatusContribution, + ConnectionStatus +} from '@theia/core/lib/browser/connection-status-service'; +import { ArduinoDaemonClientImpl } from '../../arduino-daemon-client-impl'; @injectable() -export class ArduinoFrontendConnectionStatusService extends FrontendConnectionStatusService { +export class FrontendConnectionStatusService extends TheiaFrontendConnectionStatusService { @inject(ArduinoDaemonClientImpl) protected readonly daemonClient: ArduinoDaemonClientImpl; @@ -23,7 +27,7 @@ export class ArduinoFrontendConnectionStatusService extends FrontendConnectionSt } @injectable() -export class ArduinoApplicationConnectionStatusContribution extends ApplicationConnectionStatusContribution { +export class ApplicationConnectionStatusContribution extends TheiaApplicationConnectionStatusContribution { @inject(ArduinoDaemonClientImpl) protected readonly daemonClient: ArduinoDaemonClientImpl; diff --git a/arduino-ide-extension/src/browser/customization/arduino-frontend-application.ts b/arduino-ide-extension/src/browser/customization/core/frontend-application.ts similarity index 79% rename from arduino-ide-extension/src/browser/customization/arduino-frontend-application.ts rename to arduino-ide-extension/src/browser/customization/core/frontend-application.ts index cb1ba47b..45b6ae5c 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-frontend-application.ts +++ b/arduino-ide-extension/src/browser/customization/core/frontend-application.ts @@ -2,11 +2,11 @@ import { injectable, inject } from 'inversify'; import { FileSystem } from '@theia/filesystem/lib/common/filesystem'; import { CommandService } from '@theia/core/lib/common/command'; import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service'; -import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; -import { ArduinoCommands } from '../arduino-commands'; +import { FrontendApplication as TheiaFrontendApplication } from '@theia/core/lib/browser/frontend-application'; +import { ArduinoCommands } from '../../arduino-commands'; @injectable() -export class ArduinoFrontendApplication extends FrontendApplication { +export class FrontendApplication extends TheiaFrontendApplication { @inject(FileSystem) protected readonly fileSystem: FileSystem; diff --git a/arduino-ide-extension/src/browser/shell/arduino-shell-layout-restorer.ts b/arduino-ide-extension/src/browser/customization/core/shell-layout-restorer.ts similarity index 83% rename from arduino-ide-extension/src/browser/shell/arduino-shell-layout-restorer.ts rename to arduino-ide-extension/src/browser/customization/core/shell-layout-restorer.ts index 8f2fed01..cd6c1825 100644 --- a/arduino-ide-extension/src/browser/shell/arduino-shell-layout-restorer.ts +++ b/arduino-ide-extension/src/browser/customization/core/shell-layout-restorer.ts @@ -1,9 +1,9 @@ import { injectable } from 'inversify'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; -import { ShellLayoutRestorer } from '@theia/core/lib/browser/shell/shell-layout-restorer'; +import { ShellLayoutRestorer as TheiaShellLayoutRestorer } from '@theia/core/lib/browser/shell/shell-layout-restorer'; @injectable() -export class ArduinoShellLayoutRestorer extends ShellLayoutRestorer { +export class ShellLayoutRestorer extends TheiaShellLayoutRestorer { // Workaround for https://github.com/eclipse-theia/theia/issues/6579. async storeLayoutAsync(app: FrontendApplication): Promise { diff --git a/arduino-ide-extension/src/browser/shell/arduino-tab-bar-decorator.ts b/arduino-ide-extension/src/browser/customization/core/tab-bar-decorator.ts similarity index 81% rename from arduino-ide-extension/src/browser/shell/arduino-tab-bar-decorator.ts rename to arduino-ide-extension/src/browser/customization/core/tab-bar-decorator.ts index ee171cbf..b774dc8d 100644 --- a/arduino-ide-extension/src/browser/shell/arduino-tab-bar-decorator.ts +++ b/arduino-ide-extension/src/browser/customization/core/tab-bar-decorator.ts @@ -3,12 +3,12 @@ import URI from '@theia/core/lib/common/uri'; import { Title, Widget } from '@phosphor/widgets'; import { ILogger } from '@theia/core'; import { WidgetDecoration } from '@theia/core/lib/browser/widget-decoration'; -import { TabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator'; -import { ConfigService } from '../../common/protocol/config-service'; +import { TabBarDecoratorService as TheiaTabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator'; +import { ConfigService } from '../../../common/protocol/config-service'; import { EditorWidget } from '@theia/editor/lib/browser'; @injectable() -export class ArduinoTabBarDecoratorService extends TabBarDecoratorService { +export class TabBarDecoratorService extends TheiaTabBarDecoratorService { @inject(ConfigService) protected readonly configService: ConfigService; diff --git a/arduino-ide-extension/src/browser/customization/arduino-editor-contribution.ts b/arduino-ide-extension/src/browser/customization/editor/arduino-editor-contribution.ts similarity index 100% rename from arduino-ide-extension/src/browser/customization/arduino-editor-contribution.ts rename to arduino-ide-extension/src/browser/customization/editor/arduino-editor-contribution.ts diff --git a/arduino-ide-extension/src/browser/editor/arduino-editor-manager.ts b/arduino-ide-extension/src/browser/customization/editor/arduino-editor-manager.ts similarity index 94% rename from arduino-ide-extension/src/browser/editor/arduino-editor-manager.ts rename to arduino-ide-extension/src/browser/customization/editor/arduino-editor-manager.ts index 30c33932..11b52496 100644 --- a/arduino-ide-extension/src/browser/editor/arduino-editor-manager.ts +++ b/arduino-ide-extension/src/browser/customization/editor/arduino-editor-manager.ts @@ -1,7 +1,7 @@ import { inject, injectable } from 'inversify'; import URI from '@theia/core/lib/common/uri'; import { EditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser/editor-manager'; -import { ConfigService } from '../../common/protocol/config-service'; +import { ConfigService } from '../../../common/protocol/config-service'; import { EditorWidget } from '@theia/editor/lib/browser'; import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor'; diff --git a/arduino-ide-extension/src/browser/customization/arduino-problem-contribution.ts b/arduino-ide-extension/src/browser/customization/markers/arduino-problem-contribution.ts similarity index 96% rename from arduino-ide-extension/src/browser/customization/arduino-problem-contribution.ts rename to arduino-ide-extension/src/browser/customization/markers/arduino-problem-contribution.ts index 9606dd1e..6edb7765 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-problem-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/markers/arduino-problem-contribution.ts @@ -3,7 +3,7 @@ import { KeybindingRegistry } from '@theia/core/lib/browser'; import { ProblemStat } from '@theia/markers/lib/browser/problem/problem-manager'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution'; -import { EditorMode } from '../editor-mode'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoProblemContribution extends ProblemContribution { diff --git a/arduino-ide-extension/src/browser/markers/arduino-problem-manager.ts b/arduino-ide-extension/src/browser/customization/markers/arduino-problem-manager.ts similarity index 94% rename from arduino-ide-extension/src/browser/markers/arduino-problem-manager.ts rename to arduino-ide-extension/src/browser/customization/markers/arduino-problem-manager.ts index a15535b1..8e411e92 100644 --- a/arduino-ide-extension/src/browser/markers/arduino-problem-manager.ts +++ b/arduino-ide-extension/src/browser/customization/markers/arduino-problem-manager.ts @@ -4,7 +4,7 @@ import URI from '@theia/core/lib/common/uri'; import { ILogger } from '@theia/core'; import { Marker } from '@theia/markers/lib/common/marker'; import { ProblemManager } from '@theia/markers/lib/browser/problem/problem-manager'; -import { ConfigService } from '../../common/protocol/config-service'; +import { ConfigService } from '../../../common/protocol/config-service'; @injectable() export class ArduinoProblemManager extends ProblemManager { diff --git a/arduino-ide-extension/src/browser/customization/arduino-monaco-status-bar-contribution.ts b/arduino-ide-extension/src/browser/customization/monaco/arduino-monaco-status-bar-contribution.ts similarity index 100% rename from arduino-ide-extension/src/browser/customization/arduino-monaco-status-bar-contribution.ts rename to arduino-ide-extension/src/browser/customization/monaco/arduino-monaco-status-bar-contribution.ts diff --git a/arduino-ide-extension/src/browser/customization/arduino-navigator-contribution.ts b/arduino-ide-extension/src/browser/customization/navigator/arduino-navigator-contribution.ts similarity index 92% rename from arduino-ide-extension/src/browser/customization/arduino-navigator-contribution.ts rename to arduino-ide-extension/src/browser/customization/navigator/arduino-navigator-contribution.ts index 5fb3e83b..4d9f5dae 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-navigator-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/navigator/arduino-navigator-contribution.ts @@ -1,7 +1,7 @@ import { injectable, inject } from 'inversify'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution'; -import { EditorMode } from '../editor-mode'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoNavigatorContribution extends FileNavigatorContribution { diff --git a/arduino-ide-extension/src/browser/customization/arduino-outline-contribution.ts b/arduino-ide-extension/src/browser/customization/outline/arduino-outline-contribution.ts similarity index 92% rename from arduino-ide-extension/src/browser/customization/arduino-outline-contribution.ts rename to arduino-ide-extension/src/browser/customization/outline/arduino-outline-contribution.ts index 20081a5b..a58e3d1e 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-outline-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/outline/arduino-outline-contribution.ts @@ -1,7 +1,7 @@ import { injectable, inject } from 'inversify'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution'; -import { EditorMode } from '../editor-mode'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoOutlineViewContribution extends OutlineViewContribution { diff --git a/arduino-ide-extension/src/browser/customization/arduino-scm-contribution.ts b/arduino-ide-extension/src/browser/customization/scm/arduino-scm-contribution.ts similarity index 93% rename from arduino-ide-extension/src/browser/customization/arduino-scm-contribution.ts rename to arduino-ide-extension/src/browser/customization/scm/arduino-scm-contribution.ts index f299c2c6..122be843 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-scm-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/scm/arduino-scm-contribution.ts @@ -1,7 +1,7 @@ import { inject, injectable } from 'inversify'; import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution'; import { StatusBarEntry } from '@theia/core/lib/browser/status-bar/status-bar'; -import { EditorMode } from '../editor-mode'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoScmContribution extends ScmContribution { diff --git a/arduino-ide-extension/src/browser/customization/arduino-search-in-workspace-contribution.ts b/arduino-ide-extension/src/browser/customization/search-in-workspace/arduino-search-in-workspace-contribution.ts similarity index 92% rename from arduino-ide-extension/src/browser/customization/arduino-search-in-workspace-contribution.ts rename to arduino-ide-extension/src/browser/customization/search-in-workspace/arduino-search-in-workspace-contribution.ts index 26677baa..0e5a6c2c 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-search-in-workspace-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/search-in-workspace/arduino-search-in-workspace-contribution.ts @@ -1,7 +1,7 @@ import { inject, injectable } from 'inversify'; import { FrontendApplication } from '@theia/core/lib/browser/frontend-application'; import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution'; -import { EditorMode } from '../editor-mode'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoSearchInWorkspaceContribution extends SearchInWorkspaceFrontendContribution { diff --git a/arduino-ide-extension/src/browser/customization/arduino-workspace-frontend-contribution.ts b/arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-frontend-contribution.ts similarity index 86% rename from arduino-ide-extension/src/browser/customization/arduino-workspace-frontend-contribution.ts rename to arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-frontend-contribution.ts index 4ebff12e..fdeed647 100644 --- a/arduino-ide-extension/src/browser/customization/arduino-workspace-frontend-contribution.ts +++ b/arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-frontend-contribution.ts @@ -26,6 +26,11 @@ export class ArduinoWorkspaceFrontendContribution extends WorkspaceFrontendContr // NOOP } + protected async closeWorkspace(): Promise { + // Do not ask to close the workspace, just close it. The dirty/temp state of the sketch is handled somewhere else. + await this.workspaceService.close(); + } + } @injectable() diff --git a/arduino-ide-extension/src/browser/arduino-workspace-service.ts b/arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-service.ts similarity index 91% rename from arduino-ide-extension/src/browser/arduino-workspace-service.ts rename to arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-service.ts index 7a334712..60223150 100644 --- a/arduino-ide-extension/src/browser/arduino-workspace-service.ts +++ b/arduino-ide-extension/src/browser/customization/workspace/arduino-workspace-service.ts @@ -2,10 +2,10 @@ import { injectable, inject } from 'inversify'; import { MessageService } from '@theia/core'; import { LabelProvider } from '@theia/core/lib/browser'; import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service'; -import { ConfigService } from '../common/protocol/config-service'; -import { SketchesService } from '../common/protocol/sketches-service'; -import { ArduinoWorkspaceRootResolver } from './arduino-workspace-resolver'; -import { EditorMode } from './editor-mode'; +import { ConfigService } from '../../../common/protocol/config-service'; +import { SketchesService } from '../../../common/protocol/sketches-service'; +import { ArduinoWorkspaceRootResolver } from '../../arduino-workspace-resolver'; +import { EditorMode } from '../../editor-mode'; @injectable() export class ArduinoWorkspaceService extends WorkspaceService { diff --git a/arduino-ide-extension/src/browser/editor-mode.ts b/arduino-ide-extension/src/browser/editor-mode.ts index 2b9afb7e..6f7e61be 100644 --- a/arduino-ide-extension/src/browser/editor-mode.ts +++ b/arduino-ide-extension/src/browser/editor-mode.ts @@ -5,7 +5,6 @@ import { OutputWidget } from '@theia/output/lib/browser/output-widget'; import { MainMenuManager } from './menu/main-menu-manager'; import { BoardsListWidget } from './boards/boards-list-widget'; import { LibraryListWidget } from './library/library-list-widget'; -import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer'; @injectable() export class EditorMode implements FrontendApplicationContribution { @@ -42,7 +41,7 @@ export class EditorMode implements FrontendApplicationContribution { // `storeLayout` has a sync API but the implementation is async, we store the layout manually before we reload the page. // See: https://github.com/eclipse-theia/theia/issues/6579 // XXX: hack instead of injecting the `ArduinoShellLayoutRestorer` we have to retrieve it from the application to avoid DI cycle. - const layoutRestorer = (this.app as any).layoutRestorer as ArduinoShellLayoutRestorer + const layoutRestorer = (this.app as any).layoutRestorer as { storeLayoutAsync(app: FrontendApplication): Promise }; await layoutRestorer.storeLayoutAsync(this.app); window.location.reload(true); } diff --git a/arduino-ide-extension/src/browser/menu/browser-arduino-menu-module.ts b/arduino-ide-extension/src/browser/menu/browser-arduino-menu-module.ts deleted file mode 100644 index 48ab2425..00000000 --- a/arduino-ide-extension/src/browser/menu/browser-arduino-menu-module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import '../../../src/browser/style/browser-menu.css' -import { ContainerModule } from 'inversify'; -import { BrowserMenuBarContribution, BrowserMainMenuFactory } from '@theia/core/lib/browser/menu/browser-menu-plugin'; -import { MainMenuManager } from './main-menu-manager'; -import { ArduinoMenuContribution } from './arduino-menu-contribution'; -import { ArduinoBrowserMainMenuFactory } from './arduino-browser-main-menu-factory'; - -export default new ContainerModule((bind, unbind, isBound, rebind) => { - bind(ArduinoBrowserMainMenuFactory).toSelf().inSingletonScope(); - bind(MainMenuManager).toService(ArduinoBrowserMainMenuFactory); - rebind(BrowserMainMenuFactory).toService(ArduinoBrowserMainMenuFactory); - rebind(BrowserMenuBarContribution).to(ArduinoMenuContribution).inSingletonScope(); -}); diff --git a/browser-app/package.json b/browser-app/package.json index cccdec00..31abaf94 100644 --- a/browser-app/package.json +++ b/browser-app/package.json @@ -37,7 +37,9 @@ "applicationName": "Arduino Pro IDE", "defaultTheme": "arduino-theme", "preferences": { - "editor.autoSave": "on" + "editor.autoSave": "on", + "editor.minimap.enabled": false, + "editor.scrollBeyondLastLine": false } } }, diff --git a/electron-app/package.json b/electron-app/package.json index 4d28cb37..f08ce8a8 100644 --- a/electron-app/package.json +++ b/electron-app/package.json @@ -40,7 +40,9 @@ "applicationName": "Arduino Pro IDE", "defaultTheme": "arduino-theme", "preferences": { - "editor.autoSave": "on" + "editor.autoSave": "on", + "editor.minimap.enabled": false, + "editor.scrollBeyondLastLine": false } } },