package jetbrains.mps.lang.editor.table.runtime; /*Generated by MPS */ import org.jetbrains.mps.openapi.language.SContainmentLink; import jetbrains.mps.util.annotation.ToRemove; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.adapter.MetaAdapterByDeclaration; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.internal.collections.runtime.ListSequence; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.action.SNodeFactoryOperations; import java.util.List; public class HierarchycalTableModelWithHeader extends HierarchycalTableModel { private SContainmentLink myHeaderColumnsLinkDeclaration; @Deprecated @ToRemove(version = 3.5) public HierarchycalTableModelWithHeader(@NotNull SNode tableNode, @NotNull SNode rowsLinkDeclaration, @NotNull SNode cellsLinkDeclaration, @NotNull SNode headerCellsLinkDeclaration) { this(tableNode, MetaAdapterByDeclaration.getContainmentLink(rowsLinkDeclaration), MetaAdapterByDeclaration.getContainmentLink(cellsLinkDeclaration), MetaAdapterByDeclaration.getContainmentLink(headerCellsLinkDeclaration)); } public HierarchycalTableModelWithHeader(@NotNull SNode tableNode, @NotNull SContainmentLink rowsLinkDeclaration, @NotNull SContainmentLink cellsLinkDeclaration, @NotNull SContainmentLink headerCellsLinkDeclaration) { super(tableNode, rowsLinkDeclaration, cellsLinkDeclaration); myHeaderColumnsLinkDeclaration = headerCellsLinkDeclaration; assert SNodeOperations.getConcept(getTableNode()).getContainmentLinks().contains(myHeaderColumnsLinkDeclaration); assert ListSequence.fromList(getHeaderColumns()).count() == getColumnCount(); } @Override public SNode getValueAt(int row, int column) { assert row >= 0; assert column >= 0; if (row == 0) { return ListSequence.fromList(getHeaderColumns()).getElement(column); } return super.getValueAt(row - 1, column); } @Override public int getRowCount() { return super.getRowCount() + 1; } @Override public void deleteRow(int rowNumber) { if (rowNumber == 0) { // it's not possible to delete header row return; } super.deleteRow(rowNumber - 1); } @Override public void insertRow(int rowNumber) { if (rowNumber == 0) { // it's not possible to insert row before header rowNumber = 1; } super.insertRow(rowNumber - 1); } @Override public void deleteColumn(int columnNumber) { deleteElementAt(getHeaderColumns(), columnNumber); super.deleteColumn(columnNumber); } @Override public void insertColumn(int columnNumber) { SAbstractConcept concept = myHeaderColumnsLinkDeclaration.getTargetConcept(); Utils.insertElementAt(getHeaderColumns(), SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(concept), null), columnNumber); super.insertColumn(columnNumber); } private List<SNode> getHeaderColumns() { return SNodeOperations.getChildren(getTableNode(), myHeaderColumnsLinkDeclaration); } }