/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package reportgen.gui.genepanel.formatpanel.dlg.main;
import java.awt.Window;
import java.util.ArrayList;
import java.util.List;
import reportgen.gui.genepanel.formatpanel.RangeParser;
import reportgen.gui.genepanel.formatpanel.dlg.TableListener;
import reportgen.ren.report.extendedformat.cell.CellValue;
import reportgen.ren.report.extendedformat.range.ColRowRange;
import reportgen.ren.report.extendedformat.range.ColRowRangeList;
import reportgen.ren.report.extendedformat.table.TableFormat;
import reportgen.utils.ReportException;
import simplesheet.model.defaults.SheetModelDefault;
import simplesheet.model.selection.CellPosition;
/**
*
* @author axe
*/
public class SheetModel extends SheetModelDefault {
private final TableFormat format;
private final Window parent;
private final TableListener tableListener;
public SheetModel(TableFormat format, TableListener tableListener, Window parent) throws ReportException {
super(format.getRows().getFlat(new ArrayList<ColRowRange>()).size()
+ RangeParserSheet.getDimensions(format.getCols().getList()).height,
format.getCols().getFlat(new ArrayList<ColRowRange>()).size()
+ RangeParserSheet.getDimensions(format.getRows().getList()).height);
this.parent = parent;
this.format = format;
this.tableListener = tableListener;
ColRowRangeList colsList = format.getCols();
ColRowRangeList rowsList = format.getRows();
RangeParserSheet parser = new RangeParserSheet(colsList.getList(), rowsList.getList(),
colsList.getFlat(new ArrayList<ColRowRange>()),
rowsList.getFlat(new ArrayList<ColRowRange>()));
parser.parse();
}
private class RangeParserSheet extends RangeParser<ColRowRange> {
private RangeParserSheet(List<ColRowRange> cols, List<ColRowRange> rows,
List<ColRowRange> colsFlat, List<ColRowRange> rowsFlat) {
super(cols, rows, colsFlat, rowsFlat);
}
@Override
protected void makeCornerCell() {
CellPosition corner = new CellPosition(0, 0);
initCell(corner, new CornerCell(parent, format, tableListener));
if(headHeight > 1 || leftHeadHeight > 1) {
combine(corner, headHeight, leftHeadHeight);
}
}
@Override
protected void makeHeadCell(ColRowRange range, int col, int row,
int colspan, int rowspan) throws ReportException {
CellPosition corner = new CellPosition(row, col);
initCell(corner, new RangeCell(parent, range, tableListener));
if(rowspan > 1 || colspan > 1) {
combine(corner, rowspan, colspan);
}
}
@Override
protected void buildRowBody(ColRowRange rowRange, int row, int col)
throws ReportException {
//шапка закончена - дорисовываем ячейки
for(ColRowRange colRange: colsFlat) {
CellValue cell = format.getCell(colRange, rowRange);
CellPosition corner = new CellPosition(row, col++);
initCell(corner, new SheetCell(parent, cell, tableListener));
}
}
}
}