UNPKG

mthb-canvas-table

Version:
320 lines (319 loc) 12.2 kB
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 {};