UNPKG

sprotty-theia

Version:

Glue code for Sprotty diagrams in a Theia IDE

60 lines (51 loc) 2.52 kB
/******************************************************************************** * Copyright (c) 2018 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 { inject, injectable } from 'inversify'; import { ActionHandlerRegistry, IActionHandler, TYPES, ViewerOptions, IActionHandlerInitializer } from 'sprotty'; import { Action, RequestModelAction, SelectAction } from 'sprotty-protocol'; import { SelectionService } from '@theia/core'; export interface SprottySelection { selectedElementsIDs: string[] widgetId: string sourceUri?: string } export function isSprottySelection(object?: any): object is SprottySelection { return object !== undefined && (<SprottySelection>object).selectedElementsIDs !== undefined && (<SprottySelection>object).widgetId !== undefined; } @injectable() export class TheiaSprottySelectionForwarder implements IActionHandlerInitializer, IActionHandler { @inject(TYPES.ViewerOptions) protected viewerOptions: ViewerOptions; @inject(SelectionService) protected selectionService: SelectionService; protected sourceUri?: string; initialize(registry: ActionHandlerRegistry): any { registry.register(RequestModelAction.KIND, this); registry.register(SelectAction.KIND, this); } handle(action: Action): void { if (action.kind === SelectAction.KIND) { this.selectionService.selection = <SprottySelection>{ selectedElementsIDs: (action as SelectAction).selectedElementsIDs, widgetId: this.viewerOptions.baseDiv, sourceUri: this.sourceUri }; } else if (action.kind === RequestModelAction.KIND && (action as RequestModelAction).options !== undefined) { this.sourceUri = (action as RequestModelAction).options!.sourceUri as string; } } }