X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FcomponentTypeEditor%2FSCLModuleEditor.java;fp=bundles%2Forg.simantics.modeling.ui%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2Fui%2FcomponentTypeEditor%2FSCLModuleEditor.java;h=9fc4c16a34c0be151251b262daeb77e9ae8abb7d;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/SCLModuleEditor.java b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/SCLModuleEditor.java new file mode 100644 index 000000000..9fc4c16a3 --- /dev/null +++ b/bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/componentTypeEditor/SCLModuleEditor.java @@ -0,0 +1,139 @@ +/******************************************************************************* + * Copyright (c) 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.modeling.ui.componentTypeEditor; + +import java.util.function.Supplier; + +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.resource.LocalResourceManager; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.editors.text.TextEditor; +import org.eclipse.ui.texteditor.ITextEditorActionConstants; +import org.eclipse.ui.texteditor.StatusLineContributionItem; +import org.simantics.Simantics; +import org.simantics.db.Session; +import org.simantics.db.common.request.ParametrizedRead; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.request.combinations.Combinators; +import org.simantics.scl.ui.editor.SCLSourceViewerConfigurationNew; +import org.simantics.ui.workbench.IResourceEditorInput; +import org.simantics.ui.workbench.ResourceEditorSupport; +import org.simantics.ui.workbench.TitleUpdater; +import org.simantics.ui.workbench.TitleWithParentNameRequest; +import org.simantics.ui.workbench.ToolTipRequest; +import org.simantics.ui.workbench.editor.input.InputValidationCombinators; + + +/** + * @author Antti Villberg; + * @author Hannu Niemistö + */ +public class SCLModuleEditor extends TextEditor { + + private boolean disposed = false; + + private ParametrizedRead INPUT_VALIDATOR = + Combinators.compose( + InputValidationCombinators.hasURI(), + InputValidationCombinators.extractInputResource() + ); + + private ResourceEditorSupport support; + protected LocalResourceManager resourceManager; + + public SCLModuleEditor() { + super(); + resourceManager = new LocalResourceManager(JFaceResources.getResources()); + preInitialize(); + } + + @Override + public boolean isTabsToSpacesConversionEnabled() { + return true; + } + + protected void preInitialize() { + //showOverviewRuler(); + SCLSourceViewerConfigurationNew sourceViewerConfiguration = new SCLSourceViewerConfigurationNew(resourceManager); + setDocumentProvider(new SCLModuleEditorDocumentProvider(sourceViewerConfiguration)); + setSourceViewerConfiguration(sourceViewerConfiguration); + } + + protected ParametrizedRead getInputValidator() { + return INPUT_VALIDATOR; + } + + @Override + public void init(IEditorSite site, IEditorInput input) + throws PartInitException { + super.init(site, input); + + support = new ResourceEditorSupport(this, getInputValidator()); + support.activateValidation(); + try { + getResourceInput().init(null); + } catch (DatabaseException e) { + throw new PartInitException("Failed to initialize " + input, e); + } + } + + protected IResourceEditorInput getResourceInput() { + return (IResourceEditorInput) getEditorInput(); + } + + @Override + public void createPartControl(Composite parent) { + super.createPartControl(parent); + StatusLineContributionItem statusLineContribution = new StatusLineContributionItem( + ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION, + true, 14); + setStatusField(statusLineContribution, + ITextEditorActionConstants.STATUS_CATEGORY_INPUT_POSITION); + getEditorSite().getActionBars().getStatusLineManager().add(statusLineContribution); + getEditorSite().getActionBars().updateActionBars(); + updatePartName(); + } + + protected void updatePartName() { + setPartName(getEditorInput().getName()); + + Session session = Simantics.peekSession(); + if (session != null) { + Supplier disposedCallback = this::isDisposed; + session.asyncRequest( + new TitleWithParentNameRequest(getResourceInput()), + new TitleUpdater(getSite().getShell().getDisplay(), this::setPartName, disposedCallback)); + session.asyncRequest( + new ToolTipRequest(getSite().getId(), getResourceInput()), + new TitleUpdater(getSite().getShell().getDisplay(), this::setTitleToolTip, disposedCallback)); + } + } + + @Override + public void dispose() { + disposed = true; + if (support != null) { + support.dispose(); + support = null; + } + super.dispose(); + resourceManager.dispose(); + } + + public boolean isDisposed() { + return disposed; + } + +} \ No newline at end of file