UNPKG

@eclipse-glsp/client

Version:

A sprotty-based client for GLSP

154 lines (135 loc) 7.95 kB
/******************************************************************************** * 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 ********************************************************************************/ import { ActionHandlerRegistry, FeatureModule, KeyTool, LocationPostprocessor, MousePositionTracker, MouseTool, MoveCommand, SetDirtyStateAction, SetEditModeAction, SetModelCommand, TYPES, bindAsService, bindLazyInjector, bindOrRebind, configureActionHandler, configureCommand, sprottyDefaultModule } from '@eclipse-glsp/sprotty'; import '@vscode/codicons/dist/codicon.css'; import '../../css/glsp-sprotty.css'; import { GLSPActionDispatcher } from './action-dispatcher'; import { GLSPActionHandlerRegistry } from './action-handler-registry'; import { GLSPCommandStack } from './command-stack'; import { EditorContextService } from './editor-context-service'; import { ModifyCssFeedbackCommand } from './feedback/css-feedback'; import { FeedbackActionDispatcher } from './feedback/feedback-action-dispatcher'; import { FeedbackAwareSetModelCommand } from './feedback/set-model-command'; import { FeedbackAwareUpdateModelCommand } from './feedback/update-model-command'; import { FocusStateChangedAction } from './focus/focus-state-change-action'; import { FocusTracker } from './focus/focus-tracker'; import { DiagramLoader } from './model/diagram-loader'; import { GLSPModelSource } from './model/glsp-model-source'; import { DefaultModelInitializationConstraint, ModelInitializationConstraint } from './model/model-initialization-constraint'; import { GModelRegistry } from './model/model-registry'; import { GLSPMousePositionTracker } from './mouse-position-tracker'; import { SelectionClearingMouseListener } from './selection-clearing-mouse-listener'; import { SelectionService } from './selection-service'; import { ShortcutManager } from './shortcuts/shortcuts-manager'; import { EnableDefaultToolsAction, EnableToolsAction } from './tool-manager/tool'; import { DefaultToolsEnablingKeyListener, ToolManager, ToolManagerActionHandler } from './tool-manager/tool-manager'; import { GLSPUIExtensionRegistry } from './ui-extension/ui-extension-registry'; import { GLSPKeyTool } from './view/key-tool'; import { GLSPMouseTool } from './view/mouse-tool'; import { GViewRegistry } from './view/view-registry'; /** * The default module provides all of GLSP's base functionality and services. * It builds on top of sprotty's default module {@link `sprottyDefaultModule`}. */ export const defaultModule = new FeatureModule( (bind, unbind, isBound, rebind, ...rest) => { // load bindings from sprotty's default module to avoid code duplication sprottyDefaultModule.registry(bind, unbind, isBound, rebind, ...rest); const context = { bind, unbind, isBound, rebind }; bindLazyInjector(context); bind(EditorContextService).toSelf().inSingletonScope(); bind(TYPES.IDiagramStartup).toService(EditorContextService); // eslint-disable-next-line deprecation/deprecation bind(TYPES.IEditorContextServiceProvider).toProvider<EditorContextService>( ctx => async () => ctx.container.get(EditorContextService) ); configureActionHandler(context, SetEditModeAction.KIND, EditorContextService); configureActionHandler(context, SetDirtyStateAction.KIND, EditorContextService); bind(FocusTracker).toSelf().inSingletonScope(); bind(TYPES.IDiagramStartup).toService(FocusTracker); configureActionHandler(context, FocusStateChangedAction.KIND, FocusTracker); // Model update initialization ------------------------------------ bind(TYPES.IFeedbackActionDispatcher).to(FeedbackActionDispatcher).inSingletonScope(); configureCommand(context, FeedbackAwareUpdateModelCommand); rebind(SetModelCommand).to(FeedbackAwareSetModelCommand); bind(GLSPMouseTool).toSelf().inSingletonScope(); bindOrRebind(context, MouseTool).toService(GLSPMouseTool); bind(TYPES.IDiagramStartup).toService(GLSPMouseTool); bind(GLSPMousePositionTracker).toSelf().inSingletonScope(); bindOrRebind(context, MousePositionTracker).toService(GLSPMousePositionTracker); bind(GLSPKeyTool).toSelf().inSingletonScope(); bindOrRebind(context, KeyTool).toService(GLSPKeyTool); bind(TYPES.IDiagramStartup).toService(GLSPKeyTool); bindAsService(context, TYPES.MouseListener, SelectionClearingMouseListener); bindOrRebind(context, TYPES.ICommandStack).to(GLSPCommandStack).inSingletonScope(); bind(GLSPActionDispatcher).toSelf().inSingletonScope(); bind(TYPES.IGModelRootListener).toService(GLSPActionDispatcher); bindOrRebind(context, TYPES.IActionDispatcher).toService(GLSPActionDispatcher); bindOrRebind(context, ActionHandlerRegistry).to(GLSPActionHandlerRegistry).inSingletonScope(); bindAsService(context, TYPES.ModelSource, GLSPModelSource); bind(DiagramLoader).toSelf().inSingletonScope(); bind(ModelInitializationConstraint).to(DefaultModelInitializationConstraint).inSingletonScope(); // support re-registration of model elements and views bindOrRebind(context, TYPES.SModelRegistry).to(GModelRegistry).inSingletonScope(); bindOrRebind(context, TYPES.ViewRegistry).to(GViewRegistry).inSingletonScope(); bind(SelectionService).toSelf().inSingletonScope(); bind(TYPES.IGModelRootListener).toService(SelectionService); bind(TYPES.IDiagramStartup).toService(SelectionService); // Feedback Support ------------------------------------ // Generic re-usable feedback modifying css classes configureCommand(context, ModifyCssFeedbackCommand); // We support using sprotty's MoveCommand as client-side visual feedback configureCommand(context, MoveCommand); bindAsService(context, TYPES.IVNodePostprocessor, LocationPostprocessor); bind(TYPES.HiddenVNodePostprocessor).toService(LocationPostprocessor); // Tool manager initialization ------------------------------------ bind(TYPES.IToolManager).to(ToolManager).inSingletonScope(); bind(TYPES.IDiagramStartup).toService(TYPES.IToolManager); bind(TYPES.IEditModeListener).toService(TYPES.IToolManager); bind(DefaultToolsEnablingKeyListener).toSelf().inSingletonScope(); bind(TYPES.KeyListener).toService(DefaultToolsEnablingKeyListener); bind(ToolManagerActionHandler).toSelf().inSingletonScope(); configureActionHandler(context, EnableDefaultToolsAction.KIND, ToolManagerActionHandler); configureActionHandler(context, EnableToolsAction.KIND, ToolManagerActionHandler); bind(GLSPUIExtensionRegistry).toSelf().inSingletonScope(); bindOrRebind(context, TYPES.UIExtensionRegistry).toService(GLSPUIExtensionRegistry); bind(TYPES.IDiagramStartup).toService(GLSPUIExtensionRegistry); bind(TYPES.EmptyArray).toDynamicValue(() => []); // Shortcut manager initialization ------------------------------------ bindAsService(context, TYPES.IShortcutManager, ShortcutManager); }, { featureId: Symbol('default') } );