mthb-canvas-table
Version:
320 lines (319 loc) • 12.2 kB
TypeScript
import { CanvasColor, ICanvasContext2D } from "./CanvasContext2D";
import { CustomFilter, CustomRowColStyle, CustomSort, ICanvasTableColumn, ICanvasTableColumnConf, ICanvasTableColumnSort, IEditRowItem, IUpdateRect } from "./CanvasTableColum";
import { CanvasTableMode } from "./CanvasTableMode";
import { ICanvasTableTouchEvent } from "./CanvasTableTouchEvent";
import { CanvasTableIndex, CanvasTableRowItem, CanvasTableRowItemSelect, ICanvasTableGroupItemColMode, ICanvasTableGroupItemRowMode, ICanvasTableIndexsRowMode, ICanvasTableRowItemSelectColMode } from "./CustomCanvasIndex";
import { IDrawable } from "./Drawable";
import { EventManagerClick, EventManagerClickHeader, EventManagerEdit, EventManagerReCalcForScrollView } from "./EventManager";
import { IScrollViewConfig, ScrollView } from "./ScrollView";
export interface IDrawConfig {
drawOnly?: number[];
}
export interface ICanvasTableGroup {
field: string;
aggregate?: (data: ICanvasTableGroupItemRowMode | ICanvasTableGroupItemRowMode | ICanvasTableGroupItemColMode) => string;
renderer?: (data: ICanvasTableGroupItemRowMode | ICanvasTableGroupItemColMode, canvasTable: CustomCanvasTable, context: ICanvasContext2D, left: number, top: number, right: number, bottom: number, width: number, height: number, r: number) => void;
}
export interface ICanvasRowTableGroup {
field: string;
aggregate?: (data: ICanvasTableIndexsRowMode) => string;
renderer?: (data: ICanvasTableIndexsRowMode, canvasTable: CustomCanvasTable, context: ICanvasContext2D, left: number, top: number, right: number, bottom: number, width: number, height: number, r: number) => void;
}
/**
* Interface to config style of CanvasTable
*/
export interface ICanvasTableConfig {
/**
* ScollView config
*/
scrollView?: IScrollViewConfig;
/**
* FontName
*/
font?: string;
/**
* Font Style
*/
fontStyle?: string;
/**
* Font size in px
*/
fontSize?: number;
/**
* Font color
*/
fontColor?: CanvasColor;
/**
* Header font name
*/
headerFont?: string;
/**
* Header font style
*/
headerFontStyle?: string;
/**
* Header font size in px
*/
headerFontSize?: number;
/**
* Header front color
*/
headerFontColor?: CanvasColor;
/**
* Header Draw sort arrow
*/
headerDrawSortArrow?: boolean;
/**
* Header draw sort arrow color
*/
headerDrawSortArrowColor?: CanvasColor;
/**
* Header: background color in header
*/
headerBackgroundColor?: CanvasColor;
/**
* Group item: font color
*/
groupItemFontColor?: CanvasColor;
/**
* Group item: arrow color
*/
groupItemArrowColor?: CanvasColor;
/**
* Group item: background color in group
*/
groupItemBackgroundColor?: CanvasColor;
/**
* Row group item: font color
*/
rowGroupItemFontColor?: CanvasColor;
/**
* Row group item: arrow color
*/
rowGroupItemArrowColor?: CanvasColor;
/**
* Row group item: background color in group
*/
rowGroupItemBackgroundColor?: CanvasColor;
/**
* Background color
*/
backgroundColor?: CanvasColor;
/**
* color line in grid in CanvasTable
*/
lineColor?: CanvasColor;
/**
* select line color in grid in CanvasTable
*/
selectLineColor: CanvasColor;
/**
* Backgroud color when mouse is hover the row
*/
howerBackgroundColor?: CanvasColor;
/**
* Every secound row can have another backgound color sepra
*/
sepraBackgroundColor?: CanvasColor;
}
interface ICanvasTableConf {
scrollView?: IScrollViewConfig;
font: string;
fontStyle: string;
fontSize: number;
fontColor: CanvasColor;
headerFont: string;
headerFontStyle: string;
headerFontSize: number;
headerFontColor: CanvasColor;
headerDrawSortArrow: boolean;
headerDrawSortArrowColor: CanvasColor;
headerBackgroundColor: CanvasColor;
groupItemFontColor: CanvasColor;
groupItemArrowColor: CanvasColor;
groupItemBackgroundColor: CanvasColor;
rowGroupItemFontColor: CanvasColor;
rowGroupItemArrowColor: CanvasColor;
rowGroupItemBackgroundColor: CanvasColor;
backgroundColor: CanvasColor;
lineColor: CanvasColor;
selectLineColor: CanvasColor;
howerBackgroundColor: CanvasColor;
sepraBackgroundColor: CanvasColor;
}
interface IColAndRowInRowMode<T> {
row: ICanvasTableGroupItemRowMode | ICanvasTableIndexsRowMode;
col: ICanvasTableColumn<T> | null;
}
export declare abstract class CustomCanvasTable<T = any> implements IDrawable {
protected context?: ICanvasContext2D;
protected requestAnimationFrame?: number;
protected drawconf?: IDrawConfig & {
fulldraw: boolean;
};
protected r: number;
protected data: T[];
protected allowEdit: boolean;
protected scrollView?: ScrollView;
protected headerHeight: number;
protected cellHeight: number;
protected dataIndex?: CanvasTableIndex;
protected config: ICanvasTableConf;
protected column: Array<ICanvasTableColumn<T>>;
private eventDblClick;
private eventClick;
private eventClickHeader;
private eventReCalcForScrollView;
private eventEdit;
private needToCalc;
private needToCalcFont;
private isFocus;
private minFontWidth;
private maxFontWidth;
private orgColum;
private customRowColStyle?;
private customFilter?;
private customSort?;
private sortCol?;
private groupByCol?;
private rowTableGroup?;
private overRowValue?;
private selectRowValue;
private selectColValue?;
private columnResize?;
private touchClick?;
private lastCursor;
private canvasHeight;
private canvasWidth;
private editData;
private tableMode;
constructor(config: ICanvasTableConfig | undefined);
getScrollView(): ScrollView | undefined;
/**
* To customize style of CanvasTable
* @param config config
*/
updateConfig(config: ICanvasTableConfig | undefined): void;
/**
* Is CanvasTable goging to redraw in next frame
*/
isPlanToRedraw(): boolean;
/**
* Let CanvasTable redraw
* @param config
*/
askForReDraw(config?: IDrawConfig): void;
/**
* Recalc index and then redraw
* You need to call this if size of the data was change or columns witch was change is in active groupby or sort
*/
askForReIndex(): void;
setAllowEdit(allowEdit: boolean): void;
setRowColStyle(style?: CustomRowColStyle<T> | null): void;
setFilter(filter?: CustomFilter<T> | null): void;
setCustomSort(customSort?: CustomSort<T> | null): void;
setSort(sortCol?: Array<ICanvasTableColumnSort<T>>): void;
/**
* Set group by data
* @param col
*/
setGroupBy(col?: Array<string | ICanvasTableGroup>): void;
setRowTableGroup(row?: string | ICanvasRowTableGroup): void;
setTableMode(tableMode: CanvasTableMode): void;
getTableMode(): CanvasTableMode;
/**
* Set new Data and then reindex and redraw
* @param data new Data
*/
setData(data?: T[]): void;
/**
* Change the visibility of the column
* @param col index of colum or the column it self
* @param visible show or hide the colum
*/
setColumnVisible(col: number | ICanvasTableColumnConf<T>, visible: boolean): void;
updateColumns(col: Array<ICanvasTableColumnConf<T>>): void;
/**
* Expend All data in tree mode
*/
expendAll(): void;
/**
* Collapse All data in tree mode
*/
collapseAll(): void;
addEvent(EventName: "edit", event: EventManagerEdit): void;
addEvent(eventName: "clickHeader", event: EventManagerClickHeader<T>): void;
addEvent(eventName: "click" | "dblClick", event: EventManagerClick<T>): void;
addEvent(eventName: "reCalcForScrollView", event: EventManagerReCalcForScrollView): void;
removeEvent(EventName: "edit", event: EventManagerEdit): void;
removeEvent(eventName: "clickHeader", event: EventManagerClickHeader<T>): void;
removeEvent(eventName: "click" | "dblClick", event: EventManagerClick<T>): void;
removeEvent(eventName: "reCalcForScrollView", event: EventManagerReCalcForScrollView): void;
setUpdateData(row: number, field: string, data: any): void;
getUpdateData(row: number, field: string): {
data: any;
} | undefined;
getUpdateDataOrData(row: number, field: string): any;
getEditData(): {
[index: number]: IEditRowItem;
};
clearEditData(): void;
abstract resize(): void;
protected logError(value: string, value2?: any, value3?: any): void;
protected setOverRow(value: number | undefined): void;
protected setR(r: number): void;
protected abstract setCursor(cusor: string): void;
protected abstract askForExtentedMouseMoveAndMaouseUp(): void;
protected abstract askForNormalMouseMoveAndMaouseUp(): void;
protected abstract scrollViewChange(): void;
protected getColumnByCanvasTableColumnConf(column: ICanvasTableColumnConf<T>): ICanvasTableColumn<T> | undefined;
protected setIsFocus(isFocus: boolean): void;
protected fireEdit(row: CanvasTableRowItem, col: string, newData: any, oldData: any): void;
protected fireDblClick(row: CanvasTableRowItem, col: ICanvasTableColumn<T> | null): void;
protected fireClick(row: CanvasTableRowItem, col: ICanvasTableColumn<T> | null): void;
protected fireClickHeader(col: ICanvasTableColumn<T> | null): void;
protected fireReCalcForScrollView(width: number, height: number): void;
protected clickOnHeader(col: ICanvasTableColumn<T> | null): void;
protected wheel(deltaMode: number, deltaX: number, deltaY: number): void;
protected dblClick(x: number, y: number): void;
protected abstract updateForEdit(orginalCol: ICanvasTableColumn<T>, row: number): void;
protected mouseDown(x: number, y: number): void;
protected mouseMove(x: number, y: number): void;
protected mouseUp(x: number, y: number): void;
protected mouseMoveExtended(x: number, y: number): void;
protected mouseUpExtended(x: number, y: number): void;
protected mouseLeave(): void;
protected keydown(keycode: number): void;
protected TouchStart(e: ICanvasTableTouchEvent, offsetLeft: number, offsetTop: number): void;
protected TouchMove(e: ICanvasTableTouchEvent, offsetLeft: number, offsetTop: number): void;
protected TouchEnd(e: ICanvasTableTouchEvent, offsetLeft: number, offsetTop: number): void;
protected calcRect(col: ICanvasTableColumn<T>, row: number): IUpdateRect | undefined;
protected findColSplit(x: number): number | null;
protected findColAndRowInRowMode(x: number, y: number): IColAndRowInRowMode<T> | null;
protected findColByPos(x: number): ICanvasTableColumn<T> | null;
protected findRowByPos(y: number): CanvasTableRowItemSelect;
protected findTopPosByRow(rowValue: number | ICanvasTableRowItemSelectColMode): number | undefined;
protected reCalcIndexIfNeed(field: string): void;
protected calcIndex(): void;
protected reCalcForScrollView(): void;
protected setCanvasSize(width: number, height: number): void;
protected doReize(width: number, height: number): void;
protected drawCanvas(): void;
private calcColum;
private updateCursor;
private getEvent;
private resizeColIfNeed;
private clearTouchClick;
private changeChildExpend;
private drawGroupItemObject;
private getGroupCaption;
private group;
private groupRow;
private groupRowItem;
private drawGroupRowsItem;
private drawGroupRowItem;
private drawGroupItem;
private getDrawData;
private drawRowItem;
}
export {};