mirror of
https://github.com/arduino/arduino-ide.git
synced 2025-11-08 09:58:34 +00:00
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
import { inject, injectable } from 'inversify';
|
|
import URI from '@theia/core/lib/common/uri';
|
|
import { EditorManager as TheiaEditorManager, EditorOpenerOptions } from '@theia/editor/lib/browser/editor-manager';
|
|
import { ConfigService } from '../../../common/protocol/config-service';
|
|
import { EditorWidget } from '@theia/editor/lib/browser';
|
|
import { MonacoEditor } from '@theia/monaco/lib/browser/monaco-editor';
|
|
|
|
@injectable()
|
|
export class EditorManager extends TheiaEditorManager {
|
|
|
|
@inject(ConfigService)
|
|
protected readonly configService: ConfigService;
|
|
|
|
async open(uri: URI, options?: EditorOpenerOptions): Promise<EditorWidget> {
|
|
const [widget, readOnly] = await Promise.all([super.open(uri, options), this.isReadOnly(uri)]);
|
|
if (readOnly) {
|
|
const { editor } = widget;
|
|
if (editor instanceof MonacoEditor) {
|
|
const codeEditor = editor.getControl();
|
|
codeEditor.updateOptions({ readOnly });
|
|
}
|
|
}
|
|
return widget;
|
|
}
|
|
|
|
protected async isReadOnly(uri: URI): Promise<boolean> {
|
|
const [config, configFileUri] = await Promise.all([
|
|
this.configService.getConfiguration(),
|
|
this.configService.getCliConfigFileUri()
|
|
]);
|
|
if (new URI(configFileUri).toString(true) === uri.toString(true)) {
|
|
return false;
|
|
}
|
|
return new URI(config.dataDirUri).isEqualOrParent(uri)
|
|
}
|
|
|
|
}
|