/* * Copyright 2003-2015 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.ide.devkit.cellExplorer.cellsTree; import jetbrains.mps.icons.MPSIcons.CellExplorer; import jetbrains.mps.ide.ui.tree.MPSTreeNode; import jetbrains.mps.nodeEditor.cells.EditorCell_Collection; import jetbrains.mps.nodeEditor.cells.EditorCell_Component; import jetbrains.mps.nodeEditor.cells.EditorCell_Constant; import jetbrains.mps.nodeEditor.cells.EditorCell_Error; import jetbrains.mps.nodeEditor.cells.EditorCell_Property; import jetbrains.mps.openapi.editor.cells.EditorCell; import jetbrains.mps.openapi.editor.cells.EditorCell_Label; import org.jetbrains.annotations.NotNull; import javax.swing.Icon; import java.awt.Font; class CellNode extends MPSTreeNode { @NotNull private EditorCell myCell; private boolean myInitialized = false; public CellNode(@NotNull EditorCell cell) { super(cell); myCell = cell; setNodeIdentifier(calculateNodeIdentifier()); setToggleClickCount(-1); } @Override protected void doUpdatePresentation() { setIcon(calculateIcon()); setText(calculateText()); setFontStyle(calculateFontStyle()); } private Icon calculateIcon() { if (myCell.isErrorState()) { return CellExplorer.CellError; } if (myCell instanceof EditorCell_Collection) { return CellExplorer.Cells; } if (myCell instanceof EditorCell_Constant) { return CellExplorer.CellConst; } if (myCell instanceof EditorCell_Error) { return CellExplorer.CellError; } if (myCell instanceof EditorCell_Component) { return CellExplorer.CellComponent; } if (myCell instanceof EditorCell_Property) { return CellExplorer.CellProperty; } return CellExplorer.CellDefault; } private String calculateText() { StringBuilder result = new StringBuilder(); result.append(calculateNodeIdentifier()); String text = getCellText(); if (text != null) { result.append(" \"").append(text).append("\""); } return result.toString(); } private String getCellText() { if (myCell instanceof EditorCell_Label) { return ((EditorCell_Label) myCell).getText(); } return null; } private int calculateFontStyle() { return hasSameNodeAsParent() ? Font.PLAIN : Font.BOLD; } private boolean hasSameNodeAsParent() { if (!(getParent() instanceof CellNode)) { return false; } CellNode parentCellNode = (CellNode) getParent(); return parentCellNode.myCell.getSNode() == myCell.getSNode(); } @Override public boolean isInitialized() { return myInitialized; } @Override public boolean isLeaf() { return !(myCell instanceof jetbrains.mps.openapi.editor.cells.EditorCell_Collection) || ((jetbrains.mps.openapi.editor.cells.EditorCell_Collection) myCell).isEmpty(); } @Override public boolean getAllowsChildren() { return myCell instanceof EditorCell_Collection; } @Override protected void doInit() { removeAllChildren(); if (myCell instanceof EditorCell_Collection) { EditorCell_Collection cell = (EditorCell_Collection) myCell; for (EditorCell child : cell) { add(new CellNode(child)); } } myInitialized = true; } private String calculateNodeIdentifier() { String className = myCell.getClass().getSimpleName(); if (myCell.getRole() != null) { return String.format("%s[%s#%s]", className, myCell.getRole(), myCell.getCellId()); } else { return String.format("%s[%s]", className, myCell.getCellId()); } } }