UNPKG

@eclipse-glsp/client

Version:

A sprotty-based client for GLSP

155 lines 6.36 kB
"use strict"; /******************************************************************************** * Copyright (c) 2019-2024 EclipseSource and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0. * * This Source Code may also be made available under the following Secondary * Licenses when the conditions for such availability set forth in the Eclipse * Public License v. 2.0 are satisfied: GNU General Public License, version 2 * with the GNU Classpath Exception which is available at * https://www.gnu.org/software/classpath/license.html. * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ 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 __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultToolsEnablingKeyListener = exports.ToolManagerActionHandler = exports.ToolManager = void 0; const sprotty_1 = require("@eclipse-glsp/sprotty"); const inversify_1 = require("inversify"); const editor_context_service_1 = require("../editor-context-service"); const ranked_1 = require("../ranked"); const tool_1 = require("./tool"); /** * The default {@link IToolManager} implementation. Allows * registration of tools via Dependency Injection. */ let ToolManager = class ToolManager { constructor() { this.actives = []; this.tools = []; this.defaultTools = []; this._defaultToolsEnabled = false; } get defaultToolsEnabled() { return this._defaultToolsEnabled; } preLoadDiagram() { const tools = this.lazyInjector.getAll(sprotty_1.TYPES.ITool); const defaultTools = this.lazyInjector.getAll(sprotty_1.TYPES.IDefaultTool); this.registerTools(...tools); this.registerDefaultTools(...defaultTools); this.enableDefaultTools(); } get managedTools() { return this.defaultTools.concat(this.tools); } get activeTools() { return this.actives; } get rank() { return ranked_1.Ranked.DEFAULT_RANK - 100; } registerDefaultTools(...tools) { (0, sprotty_1.distinctAdd)(this.defaultTools, ...tools); } registerTools(...tools) { (0, sprotty_1.distinctAdd)(this.tools, ...tools); } disableActiveTools() { this._defaultToolsEnabled = false; this.actives.forEach(tool => tool.disable()); this.actives.splice(0, this.actives.length); } enableDefaultTools() { if (this.defaultToolsEnabled) { return; } this.enable((0, sprotty_1.pluck)(this.defaultTools, 'id')); this._defaultToolsEnabled = true; } enable(toolIds) { this.disableActiveTools(); let tools = toolIds.map(id => this.tool(id)); if (this.editorContext && this.editorContext.isReadonly) { tools = tools.filter(tool => !(tool === null || tool === void 0 ? void 0 : tool.isEditTool)); } tools.forEach(tool => { if (tool !== undefined) { tool.enable(); this.actives.push(tool); } }); } tool(toolId) { return this.managedTools.find(tool => tool.id === toolId); } disableEditTools() { this.disableActiveTools(); this.enable(this.defaultTools.filter(tool => !tool.isEditTool).map(tool => tool.id)); } editModeChanged(newValue, oldValue) { if (oldValue === newValue) { return; } if (newValue === sprotty_1.EditMode.READONLY) { this.disableEditTools(); } else if (newValue === sprotty_1.EditMode.EDITABLE) { this.enableDefaultTools(); } } }; exports.ToolManager = ToolManager; __decorate([ (0, inversify_1.inject)(editor_context_service_1.EditorContextService), __metadata("design:type", editor_context_service_1.EditorContextService) ], ToolManager.prototype, "editorContext", void 0); __decorate([ (0, inversify_1.inject)(sprotty_1.LazyInjector), __metadata("design:type", Object) ], ToolManager.prototype, "lazyInjector", void 0); exports.ToolManager = ToolManager = __decorate([ (0, inversify_1.injectable)() ], ToolManager); let ToolManagerActionHandler = class ToolManagerActionHandler { handle(action) { if (tool_1.EnableDefaultToolsAction.is(action)) { this.toolManager.enableDefaultTools(); } else if (tool_1.EnableToolsAction.is(action)) { this.toolManager.enable(action.toolIds); } } }; exports.ToolManagerActionHandler = ToolManagerActionHandler; __decorate([ (0, inversify_1.inject)(sprotty_1.TYPES.IToolManager), __metadata("design:type", Object) ], ToolManagerActionHandler.prototype, "toolManager", void 0); exports.ToolManagerActionHandler = ToolManagerActionHandler = __decorate([ (0, inversify_1.injectable)() ], ToolManagerActionHandler); let DefaultToolsEnablingKeyListener = class DefaultToolsEnablingKeyListener extends sprotty_1.KeyListener { keyDown(element, event) { if ((0, sprotty_1.matchesKeystroke)(event, 'Escape')) { return [tool_1.EnableDefaultToolsAction.create()]; } return []; } }; exports.DefaultToolsEnablingKeyListener = DefaultToolsEnablingKeyListener; exports.DefaultToolsEnablingKeyListener = DefaultToolsEnablingKeyListener = __decorate([ (0, inversify_1.injectable)() ], DefaultToolsEnablingKeyListener); //# sourceMappingURL=tool-manager.js.map