Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
112 строки
3.0 KiB
112 строки
3.0 KiB
/**
|
|
* Created by Jacky.Gao on 2017-01-25.
|
|
*/
|
|
import {alert} from './MsgBox.js';
|
|
|
|
export default class Context{
|
|
constructor(reportTable){
|
|
this.reportTable=reportTable;
|
|
this.reportDef=reportTable.reportDef;
|
|
this.hot=reportTable.hot;
|
|
this.hot.context=this;
|
|
this._initLetters();
|
|
this.cellsMap=reportTable.cellsMap;
|
|
this.rowHeaders=[];
|
|
}
|
|
|
|
_initLetters(){
|
|
const letters=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
|
|
this.LETTERS=letters.concat([]);
|
|
for(let i=0;i<letters.length;i++){
|
|
let name=letters[i];
|
|
for(let j=0;j<letters.length;j++){
|
|
this.LETTERS.push(name+letters[j]);
|
|
}
|
|
}
|
|
}
|
|
|
|
adjustInsertRowHeaders(row){
|
|
for(let header of this.rowHeaders){
|
|
if(header.rowNumber>=row){
|
|
header.rowNumber+=1;
|
|
}
|
|
}
|
|
}
|
|
|
|
adjustDelRowHeaders(row){
|
|
let targetHeader=null;
|
|
for(let header of this.rowHeaders){
|
|
if(header.rowNumber===row){
|
|
targetHeader=header;
|
|
break;
|
|
}
|
|
}
|
|
if(targetHeader){
|
|
const index=this.rowHeaders.indexOf(targetHeader);
|
|
this.rowHeaders.splice(index,1);
|
|
}
|
|
}
|
|
|
|
addRowHeader(row,band){
|
|
let targetHeader=null;
|
|
for(let header of this.rowHeaders){
|
|
if(header.rowNumber===row){
|
|
targetHeader=header;
|
|
break;
|
|
}
|
|
}
|
|
if(targetHeader){
|
|
targetHeader.band=band;
|
|
}else{
|
|
const newHeader={band,rowNumber:row};
|
|
this.rowHeaders.push(newHeader);
|
|
}
|
|
}
|
|
|
|
getCellName(rowIndex,colIndex){
|
|
if(rowIndex!=null){
|
|
return this.LETTERS[colIndex]+(rowIndex+1);
|
|
}else{
|
|
return this.LETTERS[colIndex];
|
|
}
|
|
}
|
|
|
|
getCell(rowIndex,colIndex){
|
|
let key=(rowIndex+1) + ',' + (colIndex+1);
|
|
return this.cellsMap.get(key);
|
|
}
|
|
|
|
addCell(cell){
|
|
let key=cell.rowNumber+','+cell.columnNumber;
|
|
this.cellsMap.set(key,cell);
|
|
}
|
|
|
|
removeCell(cell){
|
|
let key=cell.rowNumber+','+cell.columnNumber;
|
|
this.cellsMap.delete(key);
|
|
}
|
|
|
|
deleteCell(rowNumber,columnNumber){
|
|
let key=rowNumber+','+columnNumber;
|
|
this.cellsMap.delete(key);
|
|
}
|
|
|
|
getSelectedCells(){
|
|
const selected=this.hot.getSelected();
|
|
if(!selected){
|
|
return null;
|
|
}
|
|
const startRow=selected[0], startCol=selected[1], endRow=selected[2], endCol=selected[3];
|
|
const cells=[];
|
|
for(let i=startRow;i<=endRow;i++){
|
|
for(let j=startCol;j<=endCol;j++){
|
|
const cell=this.hot.getCell(i,j,true);
|
|
const exist=cells.indexOf(cell);
|
|
if(exist===-1){
|
|
cells.push(cell);
|
|
}
|
|
}
|
|
}
|
|
return cells;
|
|
}
|
|
}
|