/* * 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.nodeEditor.cells; import jetbrains.mps.editor.runtime.style.Padding; import jetbrains.mps.editor.runtime.style.StyleAttributes; import jetbrains.mps.openapi.editor.EditorContext; import org.jetbrains.mps.openapi.model.SNode; /** * Author: Sergey Dmitriev * Created Oct 2, 2003 */ public class EditorCell_Error extends EditorCell_Label { private String myDefaultText; private boolean myEditable; public EditorCell_Error(EditorContext editorContext, SNode node, String errorText) { this(editorContext, node, errorText, false); } /** * @param editable - there are two different kinds of CEll_Error in MPS: * - one (!editable) intended to show error text and then substitute it completely then user type * something e.g. list<|<no type>> * - another (editable) allows editing error text directly without replacing it with first types character * e.g. myVariable.|field - in case "field" is not resolved, it should be highlighted as error, but should * be still completely editable */ public EditorCell_Error(EditorContext editorContext, SNode node, String errorText, boolean editable) { super(editorContext, node, editable ? errorText : null); myDefaultText = errorText; setDefaultText(errorText); setErrorState(true); myEditable = editable; getStyle().set(StyleAttributes.PADDING_LEFT, new Padding(0.0)); getStyle().set(StyleAttributes.PADDING_RIGHT, new Padding(0.0)); } @Override public boolean canPasteText() { return isEditable(); } @Override public boolean isValidText(String text) { return text.equals(myDefaultText); } @Override public void synchronizeViewWithModel() { setText(myEditable ? myDefaultText : ""); setDefaultText(myDefaultText); } }