UNPKG

@eclipse-glsp/theia-integration

Version:

Glue code to integrate GLSP clients into Eclipse Theia

66 lines (58 loc) 2.78 kB
/******************************************************************************** * Copyright (c) 2023-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 { EditorContextService, ExportSvgAction, IActionHandler, MaybePromise } from '@eclipse-glsp/client'; import { MessageService, URI } from '@theia/core'; import { inject, injectable } from '@theia/core/shared/inversify'; import { FileDialogService } from '@theia/filesystem/lib/browser/file-dialog/file-dialog-service'; import { FileService } from '@theia/filesystem/lib/browser/file-service'; import { FileStat } from '@theia/filesystem/lib/common/files'; /** * Default {@link IActionHandler} for {@link ExportSvgAction}s in Theia * (bound in Diagram child DI container) */ @injectable() export class TheiaExportSvgActionHandler implements IActionHandler { @inject(FileService) protected fileService: FileService; @inject(FileDialogService) protected fileDialogService: FileDialogService; @inject(MessageService) protected messageService: MessageService; @inject(EditorContextService) protected editorContextService: EditorContextService; handle(action: ExportSvgAction): void { this.export(action); } async export(action: ExportSvgAction): Promise<void> { const folder = await this.getExportFolder(); let file = await this.fileDialogService.showSaveDialog({ title: 'Export Diagram', filters: { 'Images (*.svg)': ['svg'] } }, folder); if (file) { try { if (!file.path.ext) { file = new URI(file.path.fsPath() + '.svg'); } await this.fileService.write(file, action.svg); this.messageService.info(`Diagram exported to '${file.path.name}'`); } catch (error) { this.messageService.info(`Error exporting diagram '${error}'`); } } } protected getExportFolder(): MaybePromise<FileStat> { const uri = this.editorContextService.sourceUri; return this.fileService.resolve(new URI(uri)); } }