var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { Emitter } from '../../../base/common/event.js'; import { Disposable, toDisposable } from '../../../base/common/lifecycle.js'; import { LinkedList } from '../../../base/common/linkedList.js'; import { IThemeService } from '../../../platform/theme/common/themeService.js'; let AbstractCodeEditorService = class AbstractCodeEditorService extends Disposable { constructor(_themeService) { super(); this._themeService = _themeService; this._onCodeEditorAdd = this._register(new Emitter()); this.onCodeEditorAdd = this._onCodeEditorAdd.event; this._onCodeEditorRemove = this._register(new Emitter()); this.onCodeEditorRemove = this._onCodeEditorRemove.event; this._onDiffEditorAdd = this._register(new Emitter()); this.onDiffEditorAdd = this._onDiffEditorAdd.event; this._onDiffEditorRemove = this._register(new Emitter()); this.onDiffEditorRemove = this._onDiffEditorRemove.event; this._decorationOptionProviders = new Map(); this._codeEditorOpenHandlers = new LinkedList(); this._modelProperties = new Map(); this._codeEditors = Object.create(null); this._diffEditors = Object.create(null); this._globalStyleSheet = null; } addCodeEditor(editor) { this._codeEditors[editor.getId()] = editor; this._onCodeEditorAdd.fire(editor); } removeCodeEditor(editor) { if (delete this._codeEditors[editor.getId()]) { this._onCodeEditorRemove.fire(editor); } } listCodeEditors() { return Object.keys(this._codeEditors).map(id => this._codeEditors[id]); } addDiffEditor(editor) { this._diffEditors[editor.getId()] = editor; this._onDiffEditorAdd.fire(editor); } removeDiffEditor(editor) { if (delete this._diffEditors[editor.getId()]) { this._onDiffEditorRemove.fire(editor); } } listDiffEditors() { return Object.keys(this._diffEditors).map(id => this._diffEditors[id]); } getFocusedCodeEditor() { let editorWithWidgetFocus = null; const editors = this.listCodeEditors(); for (const editor of editors) { if (editor.hasTextFocus()) { // bingo! return editor; } if (editor.hasWidgetFocus()) { editorWithWidgetFocus = editor; } } return editorWithWidgetFocus; } removeDecorationType(key) { const provider = this._decorationOptionProviders.get(key); if (provider) { provider.refCount--; if (provider.refCount <= 0) { this._decorationOptionProviders.delete(key); provider.dispose(); this.listCodeEditors().forEach((ed) => ed.removeDecorationsByType(key)); } } } setModelProperty(resource, key, value) { const key1 = resource.toString(); let dest; if (this._modelProperties.has(key1)) { dest = this._modelProperties.get(key1); } else { dest = new Map(); this._modelProperties.set(key1, dest); } dest.set(key, value); } getModelProperty(resource, key) { const key1 = resource.toString(); if (this._modelProperties.has(key1)) { const innerMap = this._modelProperties.get(key1); return innerMap.get(key); } return undefined; } openCodeEditor(input, source, sideBySide) { return __awaiter(this, void 0, void 0, function* () { for (const handler of this._codeEditorOpenHandlers) { const candidate = yield handler(input, source, sideBySide); if (candidate !== null) { return candidate; } } return null; }); } registerCodeEditorOpenHandler(handler) { const rm = this._codeEditorOpenHandlers.unshift(handler); return toDisposable(rm); } }; AbstractCodeEditorService = __decorate([ __param(0, IThemeService) ], AbstractCodeEditorService); export { AbstractCodeEditorService }; export class GlobalStyleSheet { constructor(styleSheet) { this._styleSheet = styleSheet; } }