/* * Copyright 2003-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package jetbrains.mps.openapi.navigation; import jetbrains.mps.components.CoreComponent; import jetbrains.mps.openapi.editor.Editor; import jetbrains.mps.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SNodeReference; import org.jetbrains.mps.openapi.module.SModule; /** * Facility to reveal different aspects of an mps project, either in a project tree or in an editor. * FIXME it's odd to require external methods to wrap into read/write/EDT if we can do it ourselves here (with project and its model access available) * FIXME it's odd this class lives in [editor-api], why not in platform/ui? */ public abstract class NavigationSupport implements CoreComponent { private static NavigationSupport INSTANCE; public static NavigationSupport getInstance() { return INSTANCE; } @Override public void init() { if (INSTANCE != null) { throw new IllegalStateException("double initialization"); } INSTANCE = this; } @Override public void dispose() { INSTANCE = null; } /** * Opens node in the editor. Requires: model write, EDT. * * Model write is required because saveAll() will be called by implementation * of this method (IDEA API calls). * * Unless you care about return value or do some extra stuff with the node, use {@link EditorNavigator#open(SNodeReference)} instead * * @param mpsProject project where node is looked up and where editor is opened * @param node alive node from model repository * @param focus move focus if needed - to editor or to inspector * @param select select node (or its parent) in editor and inspector (if exist) */ public abstract Editor openNode(@NotNull Project mpsProject, @NotNull SNode node, boolean focus, boolean select); /** * Opens project tree tool and selects the node. Requires: model read, EDT. * * @param project where the node is looked up and where it gets revealed * @param node node to select * @param focus focus on project tree tool */ public abstract void selectInTree(@NotNull Project project, @NotNull SNode node, boolean focus); /** * Activates project tree tool and selects the model. Requires: model read, EDT. * * @param project where the model is looked up and where it gets revealed * @param model model to select * @param focus focus on project tree tool */ public abstract void selectInTree(@NotNull Project project, @NotNull SModel model, boolean focus); /** * Activates project tree tool and selects the module. Requires: module read, EDT. * * @param project where the module is looked up and where it gets revealed * @param module module to select * @param focus focus on project tree tool */ public abstract void selectInTree(@NotNull Project project, @NotNull SModule module, boolean focus); }