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);
}
}