/* * Copyright 2003-2013 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.editor.cells; import jetbrains.mps.openapi.editor.descriptor.ConceptEditor; import jetbrains.mps.openapi.editor.menus.transformation.SNodeLocation; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import java.util.Collection; import java.util.Set; /** * User: shatalin * Date: 4/24/13 */ public interface EditorCellFactory { EditorCell createEditorCell(SNode node, boolean isInspector); EditorCell createEditorCell(SNode node, boolean isInspector, @NotNull Class<? extends ConceptEditor> excludedEditor); EditorCell createEditorComponentCell(SNode node, String editorComponentId); /** * Retrieve current EditorCellContext * * @return current EditorCellContext */ EditorCellContext getCellContext(); /** * If there is active EditorCellContext * * @return if there is active EditorCellContext in the stack */ boolean hasCellContext(); /** * Set new instance of EditorCellContext as currently active one. New EditorCellContext * will inherit all context hints specified in previously active EditorCellContext. * All modifications performed by addCellContextHints()/removeCellContextHints() methods * will modify only currently active instance of EditorCellContext. * <p/> * Previously active instance of EditorCellContext will be preserved and can be activated * again by calling popCellContext() method. */ void pushCellContext(); /** * Throwing away currently active instance of EditorCellContext and activating previously * active instance instead. Previously active instance means instance of EditorCellContext * which was active before calling pushCellContext() method. * * @throws IllegalStateException if there is no EditorCellContext available in the stack - * "twin" pushCellContext() method was not called. */ void popCellContext(); /** * Add new context hints to the current EditorCellContext * * @param hints to add * @throws IllegalStateException if pushCellContext() was not called before. */ void addCellContextHints(String... hints); /** * Remove context hints from the current EditorCellContext * * @param hints to remove * @throws IllegalStateException if pushCellContext() was not called before. */ void removeCellContextHints(String... hints); /** * Set node location to the current EditorCellContext * * @param location to set * @throws IllegalStateException if pushCellContext() was not called before. */ default void setNodeLocation(SNodeLocation location) { } }