sprotty-theia
Version:
Glue code for Sprotty diagrams in a Theia IDE
60 lines (51 loc) • 2.52 kB
text/typescript
/********************************************************************************
* 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;
}
()
export class TheiaSprottySelectionForwarder implements IActionHandlerInitializer, IActionHandler {
(TYPES.ViewerOptions) protected viewerOptions: ViewerOptions;
(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;
}
}
}