1
- import { injectable } from 'inversify' ;
1
+ import { inject , injectable } from 'inversify' ;
2
2
import { Resource } from '@theia/core/lib/common/resource' ;
3
- import { MaybePromise } from '@theia/core/lib/common/types' ;
4
- import { Log , Loggable } from '@theia/core/lib/common/logger' ;
3
+ import { ILogger , Log , Loggable } from '@theia/core/lib/common/logger' ;
5
4
import { MonacoEditorModel } from '@theia/monaco/lib/browser/monaco-editor-model' ;
5
+ import { EditorPreferences } from '@theia/editor/lib/browser/editor-preferences' ;
6
+ import { MonacoToProtocolConverter } from '@theia/monaco/lib/browser/monaco-to-protocol-converter' ;
7
+ import { ProtocolToMonacoConverter } from '@theia/monaco/lib/browser/protocol-to-monaco-converter' ;
6
8
import { MonacoTextModelService as TheiaMonacoTextModelService } from '@theia/monaco/lib/browser/monaco-text-model-service' ;
9
+ import { SketchesServiceClientImpl } from '../../../common/protocol/sketches-service-client-impl' ;
7
10
8
11
@injectable ( )
9
12
export class MonacoTextModelService extends TheiaMonacoTextModelService {
10
13
11
- protected createModel ( resource : Resource ) : MaybePromise < MonacoEditorModel > {
14
+ @inject ( SketchesServiceClientImpl )
15
+ protected readonly sketchesServiceClient : SketchesServiceClientImpl ;
16
+
17
+ protected async createModel ( resource : Resource ) : Promise < MonacoEditorModel > {
12
18
const factory = this . factories . getContributions ( ) . find ( ( { scheme } ) => resource . uri . scheme === scheme ) ;
13
- return factory ? factory . createModel ( resource ) : new SilentMonacoEditorModel ( resource , this . m2p , this . p2m , this . logger ) ;
19
+ const readOnly = this . sketchesServiceClient . isReadOnly ( resource . uri ) ;
20
+ return factory ? factory . createModel ( resource ) : new MaybeReadonlyMonacoEditorModel ( resource , this . m2p , this . p2m , this . logger , undefined , readOnly ) ;
14
21
}
15
22
16
23
}
17
24
18
25
// https://github.com/eclipse-theia/theia/pull/8491
19
- export class SilentMonacoEditorModel extends MonacoEditorModel {
26
+ class SilentMonacoEditorModel extends MonacoEditorModel {
20
27
21
28
protected trace ( loggable : Loggable ) : void {
22
29
if ( this . logger ) {
@@ -27,3 +34,41 @@ export class SilentMonacoEditorModel extends MonacoEditorModel {
27
34
}
28
35
29
36
}
37
+
38
+ class MaybeReadonlyMonacoEditorModel extends SilentMonacoEditorModel {
39
+
40
+ constructor (
41
+ protected readonly resource : Resource ,
42
+ protected readonly m2p : MonacoToProtocolConverter ,
43
+ protected readonly p2m : ProtocolToMonacoConverter ,
44
+ protected readonly logger ?: ILogger ,
45
+ protected readonly editorPreferences ?: EditorPreferences ,
46
+ protected readonly _readOnly ?: boolean ,
47
+ ) {
48
+ super ( resource , m2p , p2m , logger , editorPreferences )
49
+ }
50
+
51
+ get readOnly ( ) : boolean {
52
+ if ( typeof this . _readOnly === 'boolean' ) {
53
+ return this . _readOnly ;
54
+ }
55
+ return this . resource . saveContents === undefined ;
56
+ }
57
+
58
+ protected setDirty ( dirty : boolean ) : void {
59
+ if ( this . _readOnly === true ) {
60
+ // NOOP
61
+ return ;
62
+ }
63
+ if ( dirty === this . _dirty ) {
64
+ return ;
65
+ }
66
+ this . _dirty = dirty ;
67
+ if ( dirty === false ) {
68
+ ( this as any ) . updateSavedVersionId ( ) ;
69
+ }
70
+ this . onDirtyChangedEmitter . fire ( undefined ) ;
71
+ }
72
+
73
+
74
+ }
0 commit comments