Skip to content

Commit 3a6b2f2

Browse files
author
Akos Kitta
committed
More refactoring. Splitting up code.
Signed-off-by: Akos Kitta <kittaakos@typefox.io>
1 parent cfde197 commit 3a6b2f2

29 files changed

+145
-110
lines changed

arduino-ide-extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
"frontend": "lib/browser/arduino-ide-frontend-module"
107107
},
108108
{
109-
"frontend": "lib/browser/menu/browser-arduino-menu-module",
109+
"frontend": "lib/browser/customization/core/browser-menu-module",
110110
"frontendElectron": "lib/electron-browser/menu/electron-arduino-menu-module"
111111
},
112112
{

arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { BoardsToolBarItem } from './boards/boards-toolbar-item';
2424
import { BoardsConfig } from './boards/boards-config';
2525
import { MonitorConnection } from './monitor/monitor-connection';
2626
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
27-
import { ArduinoWorkspaceService } from './arduino-workspace-service';
27+
import { ArduinoWorkspaceService } from './customization/workspace/arduino-workspace-service';
2828
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
2929
import { OutputContribution } from '@theia/output/lib/browser/output-contribution';
3030
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';

arduino-ide-extension/src/browser/arduino-ide-frontend-module.ts

Lines changed: 54 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { CommandContribution } from '@theia/core/lib/common/command';
55
import { bindViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
66
import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
77
import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/ws-connection-provider';
8-
import { FrontendApplicationContribution, FrontendApplication } from '@theia/core/lib/browser/frontend-application'
8+
import { FrontendApplicationContribution, FrontendApplication as TheiaFrontendApplication } from '@theia/core/lib/browser/frontend-application'
99
import { LanguageGrammarDefinitionContribution } from '@theia/monaco/lib/browser/textmate';
1010
import { LanguageClientContribution } from '@theia/languages/lib/browser';
1111
import { ArduinoLanguageClientContribution } from './language/arduino-language-client-contribution';
@@ -23,28 +23,28 @@ import { ToolOutputService } from '../common/protocol/tool-output-service';
2323
import { ToolOutputServiceClientImpl } from './tool-output/client-service-impl';
2424
import { BoardsServiceClientImpl } from './boards/boards-service-client-impl';
2525
import { WorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
26-
import { ArduinoWorkspaceService } from './arduino-workspace-service';
27-
import { OutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
28-
import { ArduinoOutlineViewContribution } from './customization/arduino-outline-contribution';
29-
import { ProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
30-
import { ArduinoProblemContribution } from './customization/arduino-problem-contribution';
31-
import { ArduinoNavigatorContribution } from './customization/arduino-navigator-contribution';
32-
import { FileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
26+
import { ArduinoWorkspaceService } from './customization/workspace/arduino-workspace-service';
27+
import { OutlineViewContribution as TheiaOutlineViewContribution } from '@theia/outline-view/lib/browser/outline-view-contribution';
28+
import { ArduinoOutlineViewContribution } from './customization/outline/arduino-outline-contribution';
29+
import { ProblemContribution as TheiaProblemContribution } from '@theia/markers/lib/browser/problem/problem-contribution';
30+
import { ArduinoProblemContribution } from './customization/markers/arduino-problem-contribution';
31+
import { ArduinoNavigatorContribution } from './customization/navigator/arduino-navigator-contribution';
32+
import { FileNavigatorContribution as TheiaFileNavigatorContribution } from '@theia/navigator/lib/browser/navigator-contribution';
3333
import { ArduinoToolbarContribution } from './toolbar/arduino-toolbar-contribution';
34-
import { EditorContribution } from '@theia/editor/lib/browser/editor-contribution';
35-
import { ArduinoEditorContribution } from './customization/arduino-editor-contribution';
36-
import { MonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution';
37-
import { ArduinoMonacoStatusBarContribution } from './customization/arduino-monaco-status-bar-contribution';
38-
import { ApplicationShell, ShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser';
34+
import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution';
35+
import { ArduinoEditorContribution } from './customization/editor/arduino-editor-contribution';
36+
import { MonacoStatusBarContribution as TheiaMonacoStatusBarContribution } from '@theia/monaco/lib/browser/monaco-status-bar-contribution';
37+
import { ArduinoMonacoStatusBarContribution } from './customization/monaco/arduino-monaco-status-bar-contribution';
38+
import { ApplicationShell as TheiaApplicationShell, ShellLayoutRestorer as TheiaShellLayoutRestorer, KeybindingContribution } from '@theia/core/lib/browser';
3939
import { MenuContribution } from '@theia/core/lib/common/menu';
40-
import { ArduinoApplicationShell } from './customization/arduino-application-shell';
41-
import { ArduinoFrontendApplication } from './customization/arduino-frontend-application';
40+
import { ApplicationShell } from './customization/core/application-shell';
41+
import { FrontendApplication } from './customization/core/frontend-application';
4242
import { BoardsConfigDialog, BoardsConfigDialogProps } from './boards/boards-config-dialog';
4343
import { BoardsConfigDialogWidget } from './boards/boards-config-dialog-widget';
44-
import { ScmContribution } from '@theia/scm/lib/browser/scm-contribution';
45-
import { ArduinoScmContribution } from './customization/arduino-scm-contribution';
46-
import { SearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
47-
import { ArduinoSearchInWorkspaceContribution } from './customization/arduino-search-in-workspace-contribution';
44+
import { ScmContribution as TheiaScmContribution } from '@theia/scm/lib/browser/scm-contribution';
45+
import { ArduinoScmContribution } from './customization/scm/arduino-scm-contribution';
46+
import { SearchInWorkspaceFrontendContribution as TheiaSearchInWorkspaceFrontendContribution } from '@theia/search-in-workspace/lib/browser/search-in-workspace-frontend-contribution';
47+
import { ArduinoSearchInWorkspaceContribution } from './customization/search-in-workspace/arduino-search-in-workspace-contribution';
4848
import { LibraryListWidgetFrontendContribution } from './library/library-widget-frontend-contribution';
4949
import { MonitorServiceClientImpl } from './monitor/monitor-service-client-impl';
5050
import { MonitorServicePath, MonitorService, MonitorServiceClient } from '../common/protocol/monitor-service';
@@ -53,32 +53,35 @@ import { MonitorWidget } from './monitor/monitor-widget';
5353
import { MonitorViewContribution } from './monitor/monitor-view-contribution';
5454
import { MonitorConnection } from './monitor/monitor-connection';
5555
import { MonitorModel } from './monitor/monitor-model';
56-
import { TabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator';
57-
import { ArduinoTabBarDecoratorService } from './shell/arduino-tab-bar-decorator';
56+
import { TabBarDecoratorService as TheiaTabBarDecoratorService } from '@theia/core/lib/browser/shell/tab-bar-decorator';
57+
import { TabBarDecoratorService } from './customization/core/tab-bar-decorator';
5858
import { ProblemManager } from '@theia/markers/lib/browser';
59-
import { ArduinoProblemManager } from './markers/arduino-problem-manager';
59+
import { ArduinoProblemManager } from './customization/markers/arduino-problem-manager';
6060
import { BoardsAutoInstaller } from './boards/boards-auto-installer';
61-
import { AboutDialog } from '@theia/core/lib/browser/about-dialog';
62-
import { ArduinoAboutDialog } from './customization/arduino-about-dialog';
63-
import { ArduinoShellLayoutRestorer } from './shell/arduino-shell-layout-restorer';
61+
import { AboutDialog as TheiaAboutDialog } from '@theia/core/lib/browser/about-dialog';
62+
import { AboutDialog } from './customization/core/about-dialog';
63+
import { ShellLayoutRestorer } from './customization/core/shell-layout-restorer';
6464
import { EditorMode } from './editor-mode';
6565
import { ListItemRenderer } from './components/component-list/list-item-renderer';
6666
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
6767
import { MonacoThemingService } from '@theia/monaco/lib/browser/monaco-theming-service';
6868
import { ArduinoDaemonClientImpl } from './arduino-daemon-client-impl';
6969
import { ArduinoDaemonClient, ArduinoDaemonPath, ArduinoDaemon } from '../common/protocol/arduino-daemon';
7070
import { EditorManager } from '@theia/editor/lib/browser';
71-
import { ArduinoEditorManager } from './editor/arduino-editor-manager';
72-
import { ArduinoFrontendConnectionStatusService, ArduinoApplicationConnectionStatusContribution } from './customization/arduino-connection-status-service';
73-
import { FrontendConnectionStatusService, ApplicationConnectionStatusContribution } from '@theia/core/lib/browser/connection-status-service';
71+
import { ArduinoEditorManager } from './customization/editor/arduino-editor-manager';
72+
import { FrontendConnectionStatusService, ApplicationConnectionStatusContribution } from './customization/core/connection-status-service';
73+
import {
74+
FrontendConnectionStatusService as TheiaFrontendConnectionStatusService,
75+
ApplicationConnectionStatusContribution as TheiaApplicationConnectionStatusContribution
76+
} from '@theia/core/lib/browser/connection-status-service';
7477
import { ConfigServiceClientImpl } from './config-service-client-impl';
7578
import { CoreServiceClientImpl } from './core-service-client-impl';
7679
import { BoardsDetailsMenuUpdater } from './boards/boards-details-menu-updater';
7780
import { BoardsConfigStore } from './boards/boards-config-store';
7881
import { ILogger } from '@theia/core';
7982
import { FileSystemExt, FileSystemExtPath } from '../common/protocol/filesystem-ext';
80-
import { WorkspaceFrontendContribution, FileMenuContribution } from '@theia/workspace/lib/browser';
81-
import { ArduinoWorkspaceFrontendContribution, ArduinoFileMenuContribution } from './customization/arduino-workspace-frontend-contribution';
83+
import { WorkspaceFrontendContribution as TheiaWorkspaceFrontendContribution, FileMenuContribution as TheiaFileMenuContribution } from '@theia/workspace/lib/browser';
84+
import { ArduinoWorkspaceFrontendContribution, ArduinoFileMenuContribution } from './customization/workspace/arduino-workspace-frontend-contribution';
8285
import { Contribution } from './contributions/contribution';
8386
import { NewSketch } from './contributions/new-sketch';
8487
import { OpenSketch } from './contributions/open-sketch';
@@ -253,43 +256,43 @@ export default new ContainerModule((bind: interfaces.Bind, unbind: interfaces.Un
253256
bind(FrontendApplicationContribution).toService(EditorMode);
254257

255258
// Layout and shell customizations.
256-
rebind(OutlineViewContribution).to(ArduinoOutlineViewContribution).inSingletonScope();
257-
rebind(ProblemContribution).to(ArduinoProblemContribution).inSingletonScope();
258-
rebind(FileNavigatorContribution).to(ArduinoNavigatorContribution).inSingletonScope();
259-
rebind(EditorContribution).to(ArduinoEditorContribution).inSingletonScope();
260-
rebind(MonacoStatusBarContribution).to(ArduinoMonacoStatusBarContribution).inSingletonScope();
261-
rebind(ApplicationShell).to(ArduinoApplicationShell).inSingletonScope();
262-
rebind(ScmContribution).to(ArduinoScmContribution).inSingletonScope();
263-
rebind(SearchInWorkspaceFrontendContribution).to(ArduinoSearchInWorkspaceContribution).inSingletonScope();
264-
rebind(FrontendApplication).to(ArduinoFrontendApplication).inSingletonScope();
265-
rebind(WorkspaceFrontendContribution).to(ArduinoWorkspaceFrontendContribution).inSingletonScope();
266-
rebind(FileMenuContribution).to(ArduinoFileMenuContribution).inSingletonScope();
259+
rebind(TheiaOutlineViewContribution).to(ArduinoOutlineViewContribution).inSingletonScope();
260+
rebind(TheiaProblemContribution).to(ArduinoProblemContribution).inSingletonScope();
261+
rebind(TheiaFileNavigatorContribution).to(ArduinoNavigatorContribution).inSingletonScope();
262+
rebind(TheiaEditorContribution).to(ArduinoEditorContribution).inSingletonScope();
263+
rebind(TheiaMonacoStatusBarContribution).to(ArduinoMonacoStatusBarContribution).inSingletonScope();
264+
rebind(TheiaApplicationShell).to(ApplicationShell).inSingletonScope();
265+
rebind(TheiaScmContribution).to(ArduinoScmContribution).inSingletonScope();
266+
rebind(TheiaSearchInWorkspaceFrontendContribution).to(ArduinoSearchInWorkspaceContribution).inSingletonScope();
267+
rebind(TheiaFrontendApplication).to(FrontendApplication).inSingletonScope();
268+
rebind(TheiaWorkspaceFrontendContribution).to(ArduinoWorkspaceFrontendContribution).inSingletonScope();
269+
rebind(TheiaFileMenuContribution).to(ArduinoFileMenuContribution).inSingletonScope();
267270

268271
// Show a disconnected status bar, when the daemon is not available
269-
bind(ArduinoApplicationConnectionStatusContribution).toSelf().inSingletonScope();
270-
rebind(ApplicationConnectionStatusContribution).toService(ArduinoApplicationConnectionStatusContribution);
271-
bind(ArduinoFrontendConnectionStatusService).toSelf().inSingletonScope();
272-
rebind(FrontendConnectionStatusService).toService(ArduinoFrontendConnectionStatusService);
272+
bind(ApplicationConnectionStatusContribution).toSelf().inSingletonScope();
273+
rebind(TheiaApplicationConnectionStatusContribution).toService(ApplicationConnectionStatusContribution);
274+
bind(FrontendConnectionStatusService).toSelf().inSingletonScope();
275+
rebind(TheiaFrontendConnectionStatusService).toService(FrontendConnectionStatusService);
273276

274277
// Editor customizations. Sets the editor to `readOnly` if under the data dir.
275278
bind(ArduinoEditorManager).toSelf().inSingletonScope();
276279
rebind(EditorManager).toService(ArduinoEditorManager);
277280

278281
// Decorator customizations
279-
bind(ArduinoTabBarDecoratorService).toSelf().inSingletonScope();
280-
rebind(TabBarDecoratorService).toService(ArduinoTabBarDecoratorService);
282+
bind(TabBarDecoratorService).toSelf().inSingletonScope();
283+
rebind(TheiaTabBarDecoratorService).toService(TabBarDecoratorService);
281284

282285
// Problem markers
283286
bind(ArduinoProblemManager).toSelf().inSingletonScope();
284287
rebind(ProblemManager).toService(ArduinoProblemManager);
285288

286289
// About dialog to show the CLI version
287-
bind(ArduinoAboutDialog).toSelf().inSingletonScope();
288-
rebind(AboutDialog).toService(ArduinoAboutDialog);
290+
bind(AboutDialog).toSelf().inSingletonScope();
291+
rebind(TheiaAboutDialog).toService(AboutDialog);
289292

290293
// Customized layout restorer that can restore the state in async way: https://github.com/eclipse-theia/theia/issues/6579
291-
bind(ArduinoShellLayoutRestorer).toSelf().inSingletonScope();
292-
rebind(ShellLayoutRestorer).toService(ArduinoShellLayoutRestorer);
294+
bind(ShellLayoutRestorer).toSelf().inSingletonScope();
295+
rebind(TheiaShellLayoutRestorer).toService(ShellLayoutRestorer);
293296

294297
// Arduino daemon client. Receives notifications from the backend if the CLI daemon process has been restarted.
295298
bind(ArduinoDaemon).toDynamicValue(context => {

arduino-ide-extension/src/browser/contributions/close-sketch.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { injectable } from 'inversify';
2+
import { remote } from 'electron';
23
import { WorkspaceCommands } from '@theia/workspace/lib/browser/workspace-commands';
34
import { ArduinoMenus } from '../menu/arduino-menus';
45
import { SketchContribution, Command, CommandRegistry, MenuModelRegistry, KeybindingRegistry } from './contribution';
@@ -16,9 +17,24 @@ export class CloseSketch extends SketchContribution {
1617
}
1718
const isTemp = await this.sketchService.isTemp(sketch);
1819
if (isTemp) {
19-
await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { openAfterMove: false, execOnlyIfTemp: true });
20-
await this.commandService.executeCommand(WorkspaceCommands.CLOSE.id);
20+
// TODO: check monaco model version. If `0` just close the app.
21+
const { response } = await remote.dialog.showMessageBox({
22+
type: 'question',
23+
buttons: ["Don't Save", 'Cancel', 'Save'],
24+
message: 'Do you want to save changes to this sketch before closing?',
25+
detail: "If you don't save, your changes will be lost."
26+
});
27+
if (response === 1) { // Cancel
28+
return;
29+
}
30+
if (response === 2) { // Save
31+
const saved = await this.commandService.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { openAfterMove: false, execOnlyIfTemp: true });
32+
if (!saved) { // If it was not saved, do bail the close.
33+
return;
34+
}
35+
}
2136
}
37+
await this.commandService.executeCommand(WorkspaceCommands.CLOSE.id);
2238
}
2339
});
2440
}

arduino-ide-extension/src/browser/contributions/save-as-sketch.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,18 @@ export class SaveAsSketch extends SketchContribution {
2828
});
2929
}
3030

31-
async saveAs({ execOnlyIfTemp, openAfterMove }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise<void> {
31+
/**
32+
* Resolves `true` if the sketch was successfully saved as something.
33+
*/
34+
async saveAs({ execOnlyIfTemp, openAfterMove }: SaveAsSketch.Options = SaveAsSketch.Options.DEFAULT): Promise<boolean> {
3235
const sketch = await this.getCurrentSketch();
3336
if (!sketch) {
34-
return;
37+
return false;
3538
}
3639

3740
const isTemp = await this.sketchService.isTemp(sketch);
3841
if (!isTemp && !!execOnlyIfTemp) {
39-
return;
42+
return false;
4043
}
4144

4245
// If target does not exist, propose a `directories.user`/${sketch.name} path
@@ -49,16 +52,17 @@ export class SaveAsSketch extends SketchContribution {
4952
const defaultPath = await this.fileSystem.getFsPath(defaultUri.toString())!;
5053
const { filePath, canceled } = await remote.dialog.showSaveDialog({ title: 'Save sketch folder as...', defaultPath });
5154
if (!filePath || canceled) {
52-
return;
55+
return false;
5356
}
5457
const destinationUri = await this.fileSystemExt.getUri(filePath);
5558
if (!destinationUri) {
56-
return;
59+
return false;
5760
}
5861
const workspaceUri = await this.sketchService.copy(sketch, { destinationUri });
5962
if (workspaceUri && openAfterMove) {
6063
this.workspaceService.open(new URI(workspaceUri));
6164
}
65+
return !!workspaceUri;
6266
}
6367

6468
}

arduino-ide-extension/src/browser/customization/arduino-about-dialog.ts renamed to arduino-ide-extension/src/browser/customization/core/about-dialog.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { injectable, inject, postConstruct } from 'inversify';
2-
import { AboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog';
3-
import { ConfigService } from '../../common/protocol/config-service';
2+
import { AboutDialog as TheiaAboutDialog, ABOUT_CONTENT_CLASS } from '@theia/core/lib/browser/about-dialog';
3+
import { ConfigService } from '../../../common/protocol/config-service';
44

55
@injectable()
6-
export class ArduinoAboutDialog extends AboutDialog {
6+
export class AboutDialog extends TheiaAboutDialog {
77

88
@inject(ConfigService)
99
protected readonly configService: ConfigService;

arduino-ide-extension/src/browser/customization/arduino-application-shell.ts renamed to arduino-ide-extension/src/browser/customization/core/application-shell.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

22
import { injectable, inject } from 'inversify';
33
import { CommandService } from '@theia/core/lib/common/command';
4-
import { ApplicationShell, Widget } from '@theia/core/lib/browser';
5-
import { EditorMode } from '../editor-mode';
4+
import { ApplicationShell as TheiaApplicationShell, Widget } from '@theia/core/lib/browser';
5+
import { EditorMode } from '../../editor-mode';
66
import { EditorWidget } from '@theia/editor/lib/browser';
7-
import { SaveAsSketch } from '../contributions/save-as-sketch';
7+
import { SaveAsSketch } from '../../contributions/save-as-sketch';
88

99
@injectable()
10-
export class ArduinoApplicationShell extends ApplicationShell {
10+
export class ApplicationShell extends TheiaApplicationShell {
1111

1212
@inject(EditorMode)
1313
protected readonly editorMode: EditorMode;

0 commit comments

Comments
 (0)