mthb-offscreen-canvas-table-worker
Version:
Canvas Table Webworker offscreencanvas
198 lines • 8.82 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const CanvasTableColum_1 = require("../../share/CanvasTableColum");
exports.Align = CanvasTableColum_1.Align;
exports.Sort = CanvasTableColum_1.Sort;
const CanvasTableEditAction_1 = require("../../share/CanvasTableEditAction");
const CanvasTableMode_1 = require("../../share/CanvasTableMode");
exports.CanvasTableMode = CanvasTableMode_1.CanvasTableMode;
const CustomCanvasTable_1 = require("../../share/CustomCanvasTable");
exports.CustomCanvasTable = CustomCanvasTable_1.CustomCanvasTable;
const OffscreenCanvasTableMessage_1 = require("../../share/OffscreenCanvasTableMessage");
const ScrollView_1 = require("../../share/ScrollView");
class OffscreenCanvasTableWorker extends CustomCanvasTable_1.CustomCanvasTable {
constructor(offscreenCanvasTableId, col, config) {
super(config);
this.id = offscreenCanvasTableId;
this.updateColumns(col);
}
updateColumns(col) {
super.updateColumns(col);
const data = {
mthbCanvasTable: this.id,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.removeUpdateForEdit,
};
postMessage(data);
this.hasUpdateForEdit = undefined;
}
message(data) {
if (data.mthbCanvasTable !== this.id) {
return;
}
switch (data.type) {
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.create:
this.canvas = data.offscreen;
this.setR(data.r);
const context = this.canvas.getContext("2d");
if (context === null) {
return;
}
this.scrollView = new ScrollView_1.ScrollView(context, this, this.config ? this.config.scrollView : undefined, this.askForExtentedMouseMoveAndMaouseUp, this.askForNormalMouseMoveAndMaouseUp, this.scrollViewChange);
this.context = context;
this.doReize(data.width, data.height);
this.askForReDraw();
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.resize:
this.setR(data.r);
this.doReize(data.width, data.height);
this.askForReDraw();
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.collapseAll:
this.collapseAll();
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.expendAll:
this.expendAll();
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.setGroupBy:
this.setGroupBy(data.groupBy);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.focus:
this.setIsFocus(data.focus);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.scroll:
this.wheel(data.deltaMode, data.deltaX, data.deltaY);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseDown:
this.mouseDown(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseMove:
this.mouseMove(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseUp:
this.mouseUp(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseDblClick:
this.dblClick(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseMoveExtended:
this.mouseMoveExtended(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseUpExtended:
this.mouseUpExtended(data.x, data.y);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.mouseLeave:
this.mouseLeave();
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.touchStart:
this.TouchStart(data.event, data.offsetLeft, data.offsetTop);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.touchMove:
this.TouchMove(data.event, data.offsetLeft, data.offsetTop);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.touchEnd:
this.TouchEnd(data.event, data.offsetLeft, data.offsetTop);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.keyDown:
this.keydown(data.keycode);
break;
case OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.onEditRemoveUpdateForEdit:
this.onEditRemoveUpdateForEdit(data.action, data.cancel, data.col, data.newData, data.row);
break;
}
}
resize() {
/** */
}
drawCanvas() {
if (this.context === undefined || this.dataIndex === undefined) {
this.requestAnimationFrame = undefined;
this.askForReDraw(this.drawconf);
return;
}
super.drawCanvas();
}
scrollViewChange() {
if (this.hasUpdateForEdit) {
const rect = this.calcRect(this.hasUpdateForEdit.col, this.hasUpdateForEdit.row);
if (!rect) {
return;
}
const data = {
mthbCanvasTable: this.id,
rect,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.locationForEdit,
};
postMessage(data);
}
}
updateForEdit(col, row) {
const rect = this.calcRect(col, row);
if (!rect) {
return;
}
const value = this.getUpdateDataOrData(row, col.field);
const data = {
cellHeight: this.cellHeight,
col,
mthbCanvasTable: this.id,
rect,
row,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.updateForEdit,
value,
};
postMessage(data);
this.hasUpdateForEdit = { col, row };
}
setCanvasSize(width, height) {
if (this.canvas === undefined) {
return;
}
this.canvas.width = width;
this.canvas.height = height;
super.setCanvasSize(width, height);
}
setCursor(cursor) {
const data = { cursor, mthbCanvasTable: this.id,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.setCursor };
postMessage(data);
}
askForExtentedMouseMoveAndMaouseUp() {
const data = { mthbCanvasTable: this.id,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.askForExtentedMouseMoveAndMaouseUp };
postMessage(data);
}
askForNormalMouseMoveAndMaouseUp() {
const data = { mthbCanvasTable: this.id,
type: OffscreenCanvasTableMessage_1.OffscreenCanvasMesssageType.askForNormalMouseMoveAndMaouseUp };
postMessage(data);
}
onEditRemoveUpdateForEdit(action, cancel, col, newData, row) {
this.hasUpdateForEdit = undefined;
if (cancel || col === undefined || row === undefined) {
return;
}
if (String(this.getUpdateDataOrData(row, col.field)) !== String(newData)) {
this.setUpdateData(row, col.field, newData);
this.reCalcIndexIfNeed(col.field);
this.askForReDraw();
}
if (action !== undefined) {
switch (action) {
case CanvasTableEditAction_1.CanvasTableEditAction.moveNext:
if (this.column.length > col.index + 1) {
const column = this.column[col.index + 1];
this.updateForEdit(column, row);
}
break;
case CanvasTableEditAction_1.CanvasTableEditAction.movePrev:
if (0 < col.index) {
const column = this.column[col.index - 1];
this.updateForEdit(column, row);
}
break;
}
}
}
}
exports.OffscreenCanvasTableWorker = OffscreenCanvasTableWorker;
//# sourceMappingURL=OffscreenCanvasTableWorker.js.map