/*
* Copyright 2003-2011 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;
import jetbrains.mps.openapi.editor.assist.ContextAssistantManager;
import jetbrains.mps.openapi.editor.cells.EditorCell;
import jetbrains.mps.openapi.editor.cells.EditorCellFactory;
import jetbrains.mps.openapi.editor.selection.SelectionManager;
import jetbrains.mps.openapi.editor.update.UpdateSession;
import jetbrains.mps.smodel.IOperationContext;
import jetbrains.mps.util.Computable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SRepository;
import java.util.List;
/**
* evgeny, 11/17/11
*/
public interface EditorContext {
@NotNull
SRepository getRepository();
SNode getSelectedNode();
List<SNode> getSelectedNodes();
/**
* same as selectWRTFocusPolicy(node, true);
*/
void selectWRTFocusPolicy(SNode node);
/**
* Select one of available EditorCells representing passes SNode in the associated editor.
* If multiple EditorCells are representing same SNode in this editor then most applicable
* will be selected based on FocusPolicies specified on EditorCells.
*
* @param node one of EditorCells representing this SNode should be selected
* @param force change selection even if getSelectedNode() == node
*/
void selectWRTFocusPolicy(SNode node, boolean force);
void selectWRTFocusPolicy(EditorCell editorCell);
void select(SNode node);
void selectRange(SNode first, SNode last);
EditorCell getSelectedCell();
EditorCell getContextCell();
EditorInspector getInspector();
boolean isInspector();
void openInspector();
@NotNull
EditorComponent getEditorComponent();
IOperationContext getOperationContext();
void flushEvents();
SModel getModel();
boolean isEditable();
/**
* @deprecated Since MPS 3.4 use getState()
*/
@Deprecated
Object createMemento();
/**
* @deprecated Since MPS 3.4 use restoreState()
*/
@Deprecated
boolean setMemento(Object o);
EditorComponentState getEditorComponentState();
void restoreEditorComponentState(EditorComponentState state);
void runWithContextCell(EditorCell contextCell, Runnable r);
<T> T runWithContextCell(EditorCell contextCell, Computable<T> r);
/**
* @deprecated since MPS 3.5 use {@link UpdateSession#getCellFactory()}
*/
@Deprecated
EditorCellFactory getCellFactory();
SelectionManager getSelectionManager();
@NotNull
ContextAssistantManager getContextAssistantManager();
/**
* Returning {@link EditorPanelManager} instance allowing manipulations with
* other MPS editors if available.
*
* @return editor panel manager or null if there is no {@link EditorPanelManager}
* instance available in the current context
*/
@Nullable
EditorPanelManager getEditorPanelManager();
}