@visactor/vtable 0.9.1 → 0.9.2-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/core/BaseTable.d.ts +1 -1
- package/cjs/core/BaseTable.js +10 -8
- package/cjs/core/BaseTable.js.map +1 -1
- package/cjs/event/event.js +1 -1
- package/cjs/event/event.js.map +1 -1
- package/cjs/index.d.ts +1 -1
- package/cjs/index.js +1 -1
- package/cjs/index.js.map +1 -1
- package/cjs/layout/pivot-header-layout.d.ts +2 -0
- package/cjs/layout/pivot-header-layout.js +26 -0
- package/cjs/layout/pivot-header-layout.js.map +1 -1
- package/cjs/layout/pivot-layout.d.ts +2 -0
- package/cjs/layout/pivot-layout.js +26 -0
- package/cjs/layout/pivot-layout.js.map +1 -1
- package/cjs/layout/simple-header-layout.d.ts +2 -0
- package/cjs/layout/simple-header-layout.js +6 -0
- package/cjs/layout/simple-header-layout.js.map +1 -1
- package/cjs/render/layout/container.js +13 -0
- package/cjs/render/layout/container.js.map +1 -1
- package/cjs/scenegraph/graphic/text.js +5 -5
- package/cjs/scenegraph/graphic/text.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.d.ts +1 -1
- package/cjs/scenegraph/group-creater/cell-helper.js +14 -10
- package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/chart-cell.d.ts +2 -1
- package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +4 -4
- package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/image-cell.d.ts +1 -1
- package/cjs/scenegraph/group-creater/cell-type/image-cell.js +1 -2
- package/cjs/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.d.ts +2 -1
- package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js +2 -3
- package/cjs/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/text-cell.d.ts +1 -2
- package/cjs/scenegraph/group-creater/cell-type/text-cell.js +6 -18
- package/cjs/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/cell-type/video-cell.d.ts +1 -1
- package/cjs/scenegraph/group-creater/cell-type/video-cell.js +1 -2
- package/cjs/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
- package/cjs/scenegraph/group-creater/column-helper.js +9 -30
- package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
- package/cjs/scenegraph/group-creater/progress/proxy.d.ts +31 -12
- package/cjs/scenegraph/group-creater/progress/proxy.js +118 -123
- package/cjs/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-x.d.ts +2 -0
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-x.js +112 -0
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-x.js.map +1 -0
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-y.d.ts +2 -0
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-y.js +109 -0
- package/cjs/scenegraph/group-creater/progress/update-position/dynamic-set-y.js.map +1 -0
- package/cjs/scenegraph/group-creater/progress/update-position/update-auto-row.d.ts +2 -0
- package/cjs/scenegraph/group-creater/progress/update-position/update-auto-row.js +24 -0
- package/cjs/scenegraph/group-creater/progress/update-position/update-auto-row.js.map +1 -0
- package/cjs/scenegraph/layout/compute-col-width.d.ts +9 -1
- package/cjs/scenegraph/layout/compute-col-width.js +11 -9
- package/cjs/scenegraph/layout/compute-col-width.js.map +1 -1
- package/cjs/scenegraph/layout/compute-row-height.d.ts +3 -0
- package/cjs/scenegraph/layout/compute-row-height.js +162 -0
- package/cjs/scenegraph/layout/compute-row-height.js.map +1 -0
- package/cjs/scenegraph/layout/update-height.js +3 -2
- package/cjs/scenegraph/layout/update-height.js.map +1 -1
- package/cjs/scenegraph/layout/update-width.js +3 -2
- package/cjs/scenegraph/layout/update-width.js.map +1 -1
- package/cjs/scenegraph/scenegraph.d.ts +4 -5
- package/cjs/scenegraph/scenegraph.js +23 -42
- package/cjs/scenegraph/scenegraph.js.map +1 -1
- package/cjs/scenegraph/stick-text/index.d.ts +1 -0
- package/cjs/scenegraph/stick-text/index.js +16 -2
- package/cjs/scenegraph/stick-text/index.js.map +1 -1
- package/cjs/scenegraph/utils/text-icon-layout.d.ts +2 -1
- package/cjs/scenegraph/utils/text-icon-layout.js +6 -5
- package/cjs/scenegraph/utils/text-icon-layout.js.map +1 -1
- package/cjs/state/hover/col.js +4 -4
- package/cjs/state/hover/col.js.map +1 -1
- package/cjs/tools/NumberMap.d.ts +1 -0
- package/cjs/tools/NumberMap.js +3 -0
- package/cjs/tools/NumberMap.js.map +1 -1
- package/cjs/ts-types/base-table.d.ts +12 -0
- package/cjs/ts-types/base-table.js.map +1 -1
- package/cjs/ts-types/list-table/layout-map/api.d.ts +2 -0
- package/cjs/ts-types/list-table/layout-map/api.js.map +1 -1
- package/dist/vtable.js +7621 -7036
- package/dist/vtable.min.js +2 -2
- package/es/core/BaseTable.d.ts +1 -1
- package/es/core/BaseTable.js +10 -8
- package/es/core/BaseTable.js.map +1 -1
- package/es/event/event.js +2 -2
- package/es/event/event.js.map +1 -1
- package/es/index.d.ts +1 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/layout/pivot-header-layout.d.ts +2 -0
- package/es/layout/pivot-header-layout.js +26 -0
- package/es/layout/pivot-header-layout.js.map +1 -1
- package/es/layout/pivot-layout.d.ts +2 -0
- package/es/layout/pivot-layout.js +26 -0
- package/es/layout/pivot-layout.js.map +1 -1
- package/es/layout/simple-header-layout.d.ts +2 -0
- package/es/layout/simple-header-layout.js +6 -0
- package/es/layout/simple-header-layout.js.map +1 -1
- package/es/render/layout/container.js +13 -0
- package/es/render/layout/container.js.map +1 -1
- package/es/scenegraph/graphic/text.js +5 -5
- package/es/scenegraph/graphic/text.js.map +1 -1
- package/es/scenegraph/group-creater/cell-helper.d.ts +1 -1
- package/es/scenegraph/group-creater/cell-helper.js +14 -9
- package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/chart-cell.d.ts +2 -1
- package/es/scenegraph/group-creater/cell-type/chart-cell.js +3 -5
- package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/image-cell.d.ts +1 -1
- package/es/scenegraph/group-creater/cell-type/image-cell.js +0 -3
- package/es/scenegraph/group-creater/cell-type/image-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/spark-line-cell.d.ts +2 -1
- package/es/scenegraph/group-creater/cell-type/spark-line-cell.js +1 -4
- package/es/scenegraph/group-creater/cell-type/spark-line-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/text-cell.d.ts +1 -2
- package/es/scenegraph/group-creater/cell-type/text-cell.js +3 -17
- package/es/scenegraph/group-creater/cell-type/text-cell.js.map +1 -1
- package/es/scenegraph/group-creater/cell-type/video-cell.d.ts +1 -1
- package/es/scenegraph/group-creater/cell-type/video-cell.js +0 -3
- package/es/scenegraph/group-creater/cell-type/video-cell.js.map +1 -1
- package/es/scenegraph/group-creater/column-helper.js +8 -29
- package/es/scenegraph/group-creater/column-helper.js.map +1 -1
- package/es/scenegraph/group-creater/progress/proxy.d.ts +31 -12
- package/es/scenegraph/group-creater/progress/proxy.js +124 -123
- package/es/scenegraph/group-creater/progress/proxy.js.map +1 -1
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-x.d.ts +2 -0
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-x.js +104 -0
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-x.js.map +1 -0
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-y.d.ts +2 -0
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-y.js +102 -0
- package/es/scenegraph/group-creater/progress/update-position/dynamic-set-y.js.map +1 -0
- package/es/scenegraph/group-creater/progress/update-position/update-auto-row.d.ts +2 -0
- package/es/scenegraph/group-creater/progress/update-position/update-auto-row.js +18 -0
- package/es/scenegraph/group-creater/progress/update-position/update-auto-row.js.map +1 -0
- package/es/scenegraph/layout/compute-col-width.d.ts +9 -1
- package/es/scenegraph/layout/compute-col-width.js +9 -8
- package/es/scenegraph/layout/compute-col-width.js.map +1 -1
- package/es/scenegraph/layout/compute-row-height.d.ts +3 -0
- package/es/scenegraph/layout/compute-row-height.js +164 -0
- package/es/scenegraph/layout/compute-row-height.js.map +1 -0
- package/es/scenegraph/layout/update-height.js +3 -1
- package/es/scenegraph/layout/update-height.js.map +1 -1
- package/es/scenegraph/layout/update-width.js +3 -1
- package/es/scenegraph/layout/update-width.js.map +1 -1
- package/es/scenegraph/scenegraph.d.ts +4 -5
- package/es/scenegraph/scenegraph.js +24 -44
- package/es/scenegraph/scenegraph.js.map +1 -1
- package/es/scenegraph/stick-text/index.d.ts +1 -0
- package/es/scenegraph/stick-text/index.js +14 -0
- package/es/scenegraph/stick-text/index.js.map +1 -1
- package/es/scenegraph/utils/text-icon-layout.d.ts +2 -1
- package/es/scenegraph/utils/text-icon-layout.js +4 -4
- package/es/scenegraph/utils/text-icon-layout.js.map +1 -1
- package/es/state/hover/col.js +4 -4
- package/es/state/hover/col.js.map +1 -1
- package/es/tools/NumberMap.d.ts +1 -0
- package/es/tools/NumberMap.js +3 -0
- package/es/tools/NumberMap.js.map +1 -1
- package/es/ts-types/base-table.d.ts +12 -0
- package/es/ts-types/base-table.js.map +1 -1
- package/es/ts-types/list-table/layout-map/api.d.ts +2 -0
- package/es/ts-types/list-table/layout-map/api.js.map +1 -1
- package/package.json +4 -4
- package/dist/vtable.es5.js +0 -53155
- package/dist/vtable.es5.min.js +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { IStage, IRect, ITextCache } from '@visactor/vrender';\nimport { createStage, createRect, IContainPointMode, container } from '@visactor/vrender';\nimport { type CellAddress, type CellType, type ColumnIconOption, type SortOrder, IconFuncTypeEnum } from '../ts-types';\nimport { isArray, isString } from '@visactor/vutils';\nimport { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport {\n createBodyColGroup,\n createColHeaderColGroup,\n createCornerHeaderColGroup,\n createRowHeaderColGroup\n} from './group-creater/column';\nimport type { WrapText } from './graphic/text';\nimport { updateAutoRowHeight } from './layout/auto-height';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport { ResizeColumnHotSpotSize } from '../tools/global';\nimport splitModule from './graphic/contributions';\nimport { getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport { deleteAllSelectBorder, deleteLastSelectedRangeComponents } from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { emptyGroup } from './utils/empty-group';\nimport { updateChartSize } from './refresh-node/update-chart';\nimport { dealFrozen, resetFrozen } from './layout/frozen';\n\ncontainer.load(splitModule);\n\nexport type MergeMap = Map<\n string,\n {\n x: number;\n y: number;\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map<string, { rect: IRect; role: CellType }>;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map<string, { rect: IRect; role: CellType }>;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number;\n frozenRowCount: number;\n clear: boolean;\n\n mergeMap: MergeMap;\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n this.stage = createStage({\n canvas: table.canvas,\n width: table.canvas.width,\n height: table.canvas.height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n if (this.transpose || this.isPivot) {\n return this.table.columnHeaderLevelCount;\n }\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n if (this.transpose || this.isPivot) {\n return this.table.rowCount - 1;\n }\n return this.proxy.rowEnd ?? 0;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n this.transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n\n const width = this.table.tableNoFrameWidth;\n const height = this.table.tableNoFrameHeight;\n\n this.tableGroup = new Group({ x: 0, y: 0, width, height, clip: true, pickable: false });\n this.tableGroup.role = 'table';\n\n const colHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n colHeaderGroup.role = 'col-header';\n this.colHeaderGroup = colHeaderGroup;\n\n const cornerHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n cornerHeaderGroup.role = 'corner-header';\n this.cornerHeaderGroup = cornerHeaderGroup;\n\n const rowHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n rowHeaderGroup.role = 'row-header';\n this.rowHeaderGroup = rowHeaderGroup;\n\n const bodyGroup = new Group({\n x: 0,\n y: 0,\n width,\n height: 0,\n clip: false,\n pickable: false\n });\n bodyGroup.role = 'body';\n this.bodyGroup = bodyGroup;\n\n const componentGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false,\n childrenPickable: true\n });\n componentGroup.role = 'component';\n this.componentGroup = componentGroup;\n\n this.tableGroup.addChild(bodyGroup);\n this.tableGroup.addChild(rowHeaderGroup);\n this.tableGroup.addChild(colHeaderGroup);\n this.tableGroup.addChild(cornerHeaderGroup);\n this.tableGroup.addChild(componentGroup);\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n this.rowHeaderGroup.clear();\n this.cornerHeaderGroup.clear();\n this.bodyGroup.clear();\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.tableGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph() {\n this.clear = false;\n computeColsWidth(this.table);\n\n this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenRowCount = this.table.columnHeaderLevelCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n // 首屏表头全量\n this.createHeaderSceneGraph();\n // body生成首屏\n if (this.transpose || this.isPivot) {\n this.createBodySceneGraph();\n } else {\n this.createBodySceneGraphForFirstScreen();\n }\n }\n\n createHeaderSceneGraph() {\n createCornerHeaderColGroup(this.cornerHeaderGroup, 0, 0, this.table);\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n createColHeaderColGroup(this.colHeaderGroup, 0, 0, this.table);\n }\n\n createBodySceneGraph() {\n // 依据列表头高度更新行表头Group y\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height);\n createRowHeaderColGroup(this.rowHeaderGroup, 0, 0, this.table);\n\n // 依据列表头高度和行表头宽度,更新内容Group xy\n this.bodyGroup.setAttributes({\n y: this.colHeaderGroup.attribute.height,\n x: this.rowHeaderGroup.attribute.width\n });\n createBodyColGroup(this.bodyGroup, 0, 0, this.table);\n this.afterScenegraphCreated();\n }\n\n createBodySceneGraphForFirstScreen() {\n // 依据列表头高度更新行表头Group y\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height);\n // createRowHeaderColGroup(this.rowHeaderGroup, 0, 0, this.table);\n // this.proxy.createBodyColGroupForFirstScreen(this.rowHeaderGroup, 0, 0, this.table, 'rowHeader');\n\n // 依据列表头高度和行表头宽度,更新内容Group xy\n this.bodyGroup.setAttributes({\n y: this.colHeaderGroup.attribute.height,\n x: this.rowHeaderGroup.attribute.width\n });\n console.log('before-createBodyColGroupForFirstScreen');\n this.proxy.createColGroupForFirstScreen(this.rowHeaderGroup, this.bodyGroup, 0, 0, this.table);\n console.log('after-createBodyColGroupForFirstScreen');\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellOld(col: number, row: number): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n let element: Group;\n if (this.hasFrozen && col < this.table.frozenColCount && row < this.table.frozenRowCount) {\n element = this.cornerHeaderGroup.getChildAt(col)?.getChildAt(row) as Group;\n } else if (row < this.table.frozenRowCount) {\n // element = (this as any).tableGroup.children[0]?.children[col]?.children[row];\n element = this.colHeaderGroup\n .getChildAt(this.hasFrozen ? col - this.table.frozenColCount : col)\n ?.getChildAt(row) as Group;\n } else if (col < this.table.frozenColCount) {\n // element = (this as any).tableGroup.children[1]?.children[col]?.children[\n // row - this.table.frozenRowCount\n // ];\n element = this.rowHeaderGroup.getChildAt(col)?.getChildAt(row - this.table.frozenRowCount) as Group;\n } else {\n // element = (this as any).tableGroup.children[2]?.children[col - this.table.frozenColCount]\n // ?.children[row - this.table.frozenRowCount];\n element = this.bodyGroup\n .getChildAt(col - this.table.frozenColCount)\n ?.getChildAt(row - this.table.frozenRowCount) as Group;\n }\n\n if (element && element.role === 'shadow-cell') {\n const range = this.table.getCellRange(col, row);\n element = this.getCell(range.start.col, range.start.row);\n }\n\n return element || undefined;\n }\n\n getColGroupOld(col: number, isHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isHeader) {\n element = this.cornerHeaderGroup.getChildAt(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getChildAt(col) as Group;\n } else if (isHeader) {\n element = this.rowHeaderGroup.getChildAt(col - this.frozenColCount) as Group;\n } else {\n element = this.bodyGroup.getChildAt(col - this.frozenColCount) as Group;\n }\n return element || undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n let cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n cell = this.getCell(range.start.col, range.start.row);\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number): Group {\n if (!this.isPivot && !this.transpose && !this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, 0, this.table.rowCount - 1);\n }\n return this.getCell(col, row);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n // to do\n // this.table.invalidate();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n updateAllSelectComponent(this);\n }\n\n hideHoverIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n hideIcon(this, cellGroup, 'mouseenter_cell');\n }\n showHoverIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n showIcon(this, cellGroup, 'mouseenter_cell');\n }\n hideClickIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n hideIcon(this, cellGroup, 'click_cell');\n }\n showClickIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n showIcon(this, cellGroup, 'click_cell');\n }\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.deactivate?.();\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellType,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n }\n\n updateCellSelectBorder(newStartCol: number, newStartRow: number, newEndCol: number, newEndRow: number) {\n updateCellSelectBorder(this, newStartCol, newStartRow, newEndCol, newEndRow);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n const cellGroup = this.getCell(col, row);\n let pickMark;\n cellGroup.forEachChildren((mark: Icon) => {\n if (mark.role === 'icon' && mark.containsPoint(x, y, IContainPointMode.GLOBAL)) {\n pickMark = mark;\n }\n });\n return pickMark;\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n // hover展示背景\n if (icon.attribute.backgroundColor) {\n let iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttributes({\n x: (icon.attribute.x ?? 0) + (icon.attribute.dx ?? 0) + (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n visible: true\n });\n } else {\n iconBack = createRect({\n x: (icon.attribute.x ?? 0) + (icon.attribute.dx ?? 0) + (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n pickable: false,\n visible: true\n }) as IRect;\n iconBack.name = 'icon-back';\n // cellGroup.appendChild(iconBack);\n }\n icon.parent.insertBefore(iconBack, icon);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.hoverImage) {\n icon.image = icon.attribute.hoverImage;\n }\n\n // hover展示tooltip\n if (icon.tooltip) {\n const { x1: left, x2: right, y1: top, y2: bottom } = icon.globalAABBBounds;\n const tooltipOptions: TooltipOptions = {\n content: icon.tooltip.title,\n referencePosition: {\n rect: {\n left: left - this.table.tableX,\n right: right - this.table.tableX,\n top: top - this.table.tableY,\n bottom: bottom - this.table.tableY,\n width: icon.globalAABBBounds.width(),\n height: icon.globalAABBBounds.height()\n },\n placement: icon.tooltip.placement\n },\n style: Object.assign({}, this.table.internalProps.theme?.tooltipStyle, icon.tooltip?.style)\n };\n if (!this.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n this.table.showTooltip(col, row, tooltipOptions);\n }\n }\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.originImage) {\n icon.image = icon.attribute.originImage;\n }\n }\n\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number) {\n updateColWidth(this, col, detaX);\n // this.updateContainerWidth(col, detaX);\n this.updateContainer();\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSize(col: number) {\n updateChartSize(this, col);\n }\n\n updateAutoColWidth(col: number) {\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n computeColsWidth(this.table, true);\n }\n\n resize() {\n this.recalculateColWidths();\n if (this.table.internalProps.autoRowHeight) {\n updateAutoRowHeight(this, true);\n }\n this.dealWidthMode();\n this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroup.setAttributes({\n width: Math.min(\n this.table.tableNoFrameWidth,\n Math.max(this.colHeaderGroup.attribute.width, this.bodyGroup.attribute.width, 0) +\n Math.max(this.cornerHeaderGroup.attribute.width, this.rowHeaderGroup.attribute.width, 0)\n ),\n height: Math.min(\n this.table.tableNoFrameHeight,\n (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n )\n } as any);\n\n if (this.tableGroup.border) {\n this.tableGroup.border.setAttributes({\n width: this.tableGroup.attribute.width + this.tableGroup.border.attribute.lineWidth,\n height: this.tableGroup.attribute.height + this.tableGroup.border.attribute.lineWidth\n });\n }\n }\n\n updateRowHeight(row: number, detaY: number) {\n updateRowHeight(this, row, detaY);\n this.updateContainerHeight(row, detaY);\n }\n\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n // 更新table/header/border高度\n if (row < this.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n this.updateRowHeight(row, height - oldHeight);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number) {\n if (this.colHeaderGroup.attribute.width + x === this.bodyGroup.attribute.x) {\n return;\n }\n // this.tableGroup.setAttribute('x', x);\n // this.tableGroup.setAttribute('width', this.table.tableNoFrameWidth - x);\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n this.colHeaderGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number) {\n if (this.transpose || this.isPivot) {\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n } else if (this.table.scenegraph.proxy) {\n this.table.scenegraph.proxy.setY(-y);\n }\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // 对齐auto列宽\n // updateAutoColWidth(this);\n // 对齐autoWrapText\n const { autoRowHeight } = this.table.internalProps;\n if (autoRowHeight) {\n updateAutoRowHeight(this);\n }\n\n this.dealWidthMode();\n\n // 处理冻结\n this.dealFrozen();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n // 处理单元格内容需要textStick的情况\n handleTextStick(this.table);\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n // 处理adaptive宽度\n // table._colRangeWidthsMap = new Map();\n // const canvasWidth = this.internalProps.canvas.width;\n const totalDrawWidth = table.tableNoFrameWidth;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n actualWidth += table.getColWidth(col);\n }\n const factor = totalDrawWidth / actualWidth;\n for (let col = 0; col < table.colCount; col++) {\n let colWidth;\n if (col === table.colCount - 1) {\n colWidth = totalDrawWidth - table.getColsWidth(0, table.colCount - 2);\n } else {\n colWidth = Math.round(table.getColWidth(col) * factor);\n }\n this.setColWidth(col, colWidth);\n }\n } else if (table.widthMode === 'standard-aeolus' && this.transpose) {\n // 处理风神列宽特殊逻辑\n // table._colRangeWidthsMap = new Map();\n const canvasWidth = table.tableNoFrameWidth;\n let actualWidth = 0;\n let actualHeaderWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (col < table.frozenColCount) {\n actualHeaderWidth += colWidth;\n }\n\n actualWidth += colWidth;\n }\n\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth - actualHeaderWidth > 0) {\n const factor = (canvasWidth - actualHeaderWidth) / (actualWidth - actualHeaderWidth);\n for (let col = table.frozenColCount; col < table.colCount; col++) {\n this.setColWidth(col, table.getColWidth(col) * factor);\n }\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as WrapText;\n const text = cellGroup.getChildByName('text') as WrapText;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(colSource: number, rowSource: number, colTarget: number, rowTarget: number) {\n moveHeaderPosition(colSource, rowSource, colTarget, rowTarget, this.table);\n }\n\n updateContainer() {\n // 更新各列x&col\n let cornerX = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', cornerX);\n cornerX += column.attribute.width;\n });\n let rowHeaderX = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', rowHeaderX);\n rowHeaderX += column.attribute.width;\n });\n let colHeaderX = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', colHeaderX);\n colHeaderX += column.attribute.width;\n });\n let bodyX = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', bodyX);\n bodyX += column.attribute.width;\n });\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n\n this.updateTableSize();\n\n // 记录滚动条原位置\n const oldHorizontalBarPos = this.table.stateManeger.scroll.horizontalBarPos;\n const oldVerticalBarPos = this.table.stateManeger.scroll.verticalBarPos;\n this.component.updateScrollBar();\n this.table.stateManeger.setScrollLeft(oldHorizontalBarPos);\n this.table.stateManeger.setScrollTop(oldVerticalBarPos);\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const type = this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot ? this.table.theme.rowHeaderStyle.frameStyle : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group,\n offset = ResizeColumnHotSpotSize / 2\n ): { col: number; row: number; x?: number } {\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n return { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n }\n if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n return { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateIcon(icon: Icon, iconConfig: ColumnIconOption) {\n // 直接更新mark attribute\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n this.updateNextFrame();\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle, [true, true, true, true]);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle, [true, true, true, false]);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle, [true, true, true, true]);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle, [true, true, true, false]);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n }\n\n updateSortIcon(\n col: number,\n row: number,\n iconMark: Icon,\n order: SortOrder,\n oldSortCol: number,\n oldSortRow: number,\n oldIconMark: Icon | undefined\n ) {\n // 更新icon\n const icon = this.table.internalProps.headerHelper.getSortIcon(order, this.table, col, row);\n if (iconMark) {\n this.updateIcon(iconMark, icon);\n }\n\n // 更新旧frozen icon\n if (oldIconMark !== iconMark) {\n const oldIcon = this.table.internalProps.headerHelper.getSortIcon('normal', this.table, oldSortCol, oldSortRow);\n if (oldIconMark) {\n this.updateIcon(oldIconMark, oldIcon);\n } else {\n const oldSortCell = this.getCell(oldSortCol, oldSortRow);\n let oldIconMark;\n oldSortCell.forEachChildren((mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n if (oldIconMark) {\n this.updateIcon(oldIconMark, oldIcon);\n }\n }\n }\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n // 依据新旧冻结列确定更新范围\n const updateCol = Math.max(col, oldFrozenCol);\n\n // 遍历表头单元格,更新icon\n this.colHeaderGroup.forEachChildrenSkipChild((colGroup: Group) => {\n if (colGroup.col <= updateCol) {\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((icon: Icon) => {\n if (icon.attribute.funcType === 'frozen') {\n const iconConfig = this.table.internalProps.headerHelper.getFrozenIcon(cellGroup.col, cellGroup.row);\n this.updateIcon(icon, iconConfig);\n return true;\n }\n return false;\n });\n });\n return false;\n }\n return true;\n });\n this.cornerHeaderGroup.forEachChildrenSkipChild((colGroup: Group) => {\n if (colGroup.col <= updateCol) {\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((icon: Icon) => {\n if (icon.attribute.funcType === 'frozen') {\n const iconConfig = this.table.internalProps.headerHelper.getFrozenIcon(cellGroup.col, cellGroup.row);\n this.updateIcon(icon, iconConfig);\n return true;\n }\n return false;\n });\n });\n return false;\n }\n return true;\n });\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if (this.transpose) {\n setTimeout(() => {\n // 清空单元格内容\n this.clearCells();\n // 生成单元格场景树\n this.createSceneGraph();\n }, 10);\n } else {\n this.proxy.sortCell();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as WrapText;\n // if (text && text.cache?.clipedText !== text.attribute.text) {\n // return text.attribute.text as string;\n // }\n if (text) {\n const textAttributeStr = isArray(text.attribute.text)\n ? text.attribute.text.join('')\n : (text.attribute.text as string);\n let cacheStr = '';\n if (isString(text.cache.clipedText)) {\n cacheStr = text.cache.clipedText;\n } else {\n (text.cache as ITextCache).layoutData.lines.forEach((line: any) => {\n cacheStr += line.str;\n });\n }\n if (cacheStr !== textAttributeStr) {\n return textAttributeStr;\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number) {\n if (this.clear) {\n return;\n }\n updateCell(col, row, this.table);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateHierarchyIcon(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n let iconConfig;\n if (this.table.isHeader(col, row)) {\n iconConfig = this.table.internalProps.headerHelper.getHierarchyIcon(cellGroup.col, cellGroup.row);\n } else {\n iconConfig = this.table.internalProps.bodyHelper.getHierarchyIcon(cellGroup.col, cellGroup.row);\n }\n this.findAndUpdateIcon(cellGroup, [IconFuncTypeEnum.collapse, IconFuncTypeEnum.expand], iconConfig);\n }\n\n updateRow(removeCells: CellAddress[], addCells: CellAddress[]) {\n // add or move rows\n updateRow(removeCells, addCells, this.table);\n\n // update column width and row height\n this.recalculateColWidths();\n if (this.table.internalProps.autoRowHeight) {\n updateAutoRowHeight(this, true);\n }\n\n // check frozen status\n this.table.stateManeger.checkFrozen();\n\n // rerender\n this.updateNextFrame();\n }\n\n findAndUpdateIcon(group: Group, funcTypeArr: IconFuncTypeEnum[], iconConfig: ColumnIconOption) {\n group.forEachChildren((icon: Icon | Group) => {\n if (icon.type === 'group') {\n this.findAndUpdateIcon(icon, funcTypeArr, iconConfig);\n } else if (funcTypeArr.indexOf((icon as Icon).attribute.funcType as IconFuncTypeEnum) !== -1) {\n this.updateIcon(icon as Icon, iconConfig);\n return true;\n }\n return false;\n });\n }\n}\n\nfunction showIcon(scene: Scenegraph, cellGroup: Group, visibleTime: 'mouseenter_cell' | 'click_cell') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n showIcon(scene, child, visibleTime);\n } else if (child.attribute.visibleTime === visibleTime) {\n child.attribute.visible = true;\n scene.updateNextFrame();\n }\n });\n}\n\nfunction hideIcon(scene: Scenegraph, cellGroup: Group, visibleTime: 'mouseenter_cell' | 'click_cell') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n hideIcon(scene, child, visibleTime);\n } else if (child.attribute.visibleTime === visibleTime) {\n child.attribute.visible = false;\n scene.updateNextFrame();\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["scenegraph/scenegraph.ts"],"names":[],"mappings":"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","file":"scenegraph.js","sourcesContent":["import type { IStage, IRect, ITextCache } from '@visactor/vrender';\nimport { createStage, createRect, IContainPointMode, container } from '@visactor/vrender';\nimport { type CellAddress, type CellType, type ColumnIconOption, type SortOrder, IconFuncTypeEnum } from '../ts-types';\nimport { isArray, isString } from '@visactor/vutils';\nimport { Group } from './graphic/group';\nimport type { Icon } from './graphic/icon';\nimport {\n createBodyColGroup,\n createColHeaderColGroup,\n createCornerHeaderColGroup,\n createRowHeaderColGroup\n} from './group-creater/column';\nimport type { WrapText } from './graphic/text';\nimport { updateAutoRowHeight } from './layout/auto-height';\nimport { getCellMergeInfo } from './utils/get-cell-merge';\nimport { updateColWidth } from './layout/update-width';\nimport { TableComponent } from './component/table-component';\nimport { updateRowHeight } from './layout/update-height';\nimport { updateImageCellContentWhileResize } from './group-creater/cell-type/image-cell';\nimport { getQuadProps } from './utils/padding';\nimport { createFrameBorder, updateFrameBorder, updateFrameBorderSize } from './style/frame-border';\nimport { ResizeColumnHotSpotSize } from '../tools/global';\nimport splitModule from './graphic/contributions';\nimport { getProp } from './utils/get-prop';\nimport { dealWithIcon } from './utils/text-icon-layout';\nimport { SceneProxy } from './group-creater/progress/proxy';\nimport type { TooltipOptions } from '../ts-types/tooltip';\nimport { computeColWidth, computeColsWidth } from './layout/compute-col-width';\nimport { moveHeaderPosition } from './layout/move-cell';\nimport { updateCell } from './group-creater/cell-helper';\nimport type { BaseTableAPI } from '../ts-types/base-table';\nimport { updateAllSelectComponent, updateCellSelectBorder } from './select/update-select-border';\nimport { createCellSelectBorder } from './select/create-select-border';\nimport { moveSelectingRangeComponentsToSelectedRangeComponents } from './select/move-select-border';\nimport { deleteAllSelectBorder, deleteLastSelectedRangeComponents } from './select/delete-select-border';\nimport { updateRow } from './layout/update-row';\nimport { handleTextStick } from './stick-text';\nimport { computeRowsHeight } from './layout/compute-row-height';\nimport { emptyGroup } from './utils/empty-group';\nimport { updateChartSize } from './refresh-node/update-chart';\nimport { dealFrozen, resetFrozen } from './layout/frozen';\n\ncontainer.load(splitModule);\n\nexport type MergeMap = Map<\n string,\n {\n x: number;\n y: number;\n cellWidth: number;\n cellHeight: number;\n }\n>;\n\n/**\n * @description: 表格场景树,存储和管理表格全部的场景图元\n * @return {*}\n */\nexport class Scenegraph {\n proxy: SceneProxy;\n tableGroup: Group; // 表格全局Group\n colHeaderGroup: Group; // 列表头Group\n cornerHeaderGroup: Group; // 列表头冻结列Group\n rowHeaderGroup: Group; // 行表头Group\n bodyGroup: Group; // 内容Group\n componentGroup: Group; // 表格外组件Group\n /** 所有选中区域对应的选框组件 */\n selectedRangeComponents: Map<string, { rect: IRect; role: CellType }>;\n /** 当前正在选择区域对应的选框组件 为什么是map 以为可能一个选中区域会被拆分为多个rect组件 三块表头和body都分别对应不同组件*/\n selectingRangeComponents: Map<string, { rect: IRect; role: CellType }>;\n lastSelectId: string;\n component: TableComponent;\n stage: IStage;\n table: BaseTableAPI;\n isPivot: boolean;\n transpose: boolean;\n hasFrozen: boolean; // 是否已经处理冻结列,用在getCell判断是否从cornerHeaderGroup获取cellGroup\n frozenColCount: number;\n frozenRowCount: number;\n clear: boolean;\n\n mergeMap: MergeMap;\n\n constructor(table: BaseTableAPI) {\n this.table = table;\n this.hasFrozen = false;\n this.clear = true;\n this.mergeMap = new Map();\n\n this.stage = createStage({\n canvas: table.canvas,\n width: table.canvas.width,\n height: table.canvas.height,\n disableDirtyBounds: false,\n background: table.theme.underlayBackgroundColor,\n dpr: table.internalProps.pixelRatio\n });\n\n this.stage.defaultLayer.setTheme({\n group: {\n boundsPadding: 0,\n strokeBoundsBuffer: 0,\n lineJoin: 'round'\n }\n });\n this.initSceneGraph();\n this.stage.defaultLayer.add(this.tableGroup);\n\n (this.stage as any).table = this.table;\n\n this.createComponent();\n }\n\n get width(): number {\n return this.tableGroup.attribute?.width ?? 0;\n }\n\n get height(): number {\n return this.tableGroup.attribute?.height ?? 0;\n }\n\n get x(): number {\n return this.tableGroup.attribute?.x ?? 0;\n }\n\n get y(): number {\n return this.tableGroup.attribute?.y ?? 0;\n }\n\n get bodyRowStart(): number {\n if (this.transpose || this.isPivot) {\n return this.table.columnHeaderLevelCount;\n }\n return this.proxy.rowStart ?? 0;\n }\n\n get bodyRowEnd(): number {\n if (this.transpose || this.isPivot) {\n return this.table.rowCount - 1;\n }\n return this.proxy.rowEnd ?? 0;\n }\n\n /**\n * @description: 初始化场景树结构\n * @return {*}\n */\n initSceneGraph() {\n this.isPivot = this.table.isPivotTable();\n this.transpose = (this.table.options as any).transpose; // 初始化时this.table.transpose还未赋值\n\n const width = this.table.tableNoFrameWidth;\n const height = this.table.tableNoFrameHeight;\n\n this.tableGroup = new Group({ x: 0, y: 0, width, height, clip: true, pickable: false });\n this.tableGroup.role = 'table';\n\n const colHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n colHeaderGroup.role = 'col-header';\n this.colHeaderGroup = colHeaderGroup;\n\n const cornerHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n cornerHeaderGroup.role = 'corner-header';\n this.cornerHeaderGroup = cornerHeaderGroup;\n\n const rowHeaderGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false\n });\n rowHeaderGroup.role = 'row-header';\n this.rowHeaderGroup = rowHeaderGroup;\n\n const bodyGroup = new Group({\n x: 0,\n y: 0,\n width,\n height: 0,\n clip: false,\n pickable: false\n });\n bodyGroup.role = 'body';\n this.bodyGroup = bodyGroup;\n\n const componentGroup = new Group({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n clip: false,\n pickable: false,\n childrenPickable: true\n });\n componentGroup.role = 'component';\n this.componentGroup = componentGroup;\n\n this.tableGroup.addChild(bodyGroup);\n this.tableGroup.addChild(rowHeaderGroup);\n this.tableGroup.addChild(colHeaderGroup);\n this.tableGroup.addChild(cornerHeaderGroup);\n this.tableGroup.addChild(componentGroup);\n }\n\n /**\n * @description: 清空全部单元格内容,用于setRecord\n * @return {*}\n */\n clearCells() {\n this.clear = true;\n this.hasFrozen = false;\n this.mergeMap.clear();\n\n this.colHeaderGroup.clear();\n this.rowHeaderGroup.clear();\n this.cornerHeaderGroup.clear();\n this.bodyGroup.clear();\n\n this.colHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.rowHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.cornerHeaderGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.bodyGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n this.tableGroup.setAttributes({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n });\n\n if ((this.tableGroup as any).border) {\n (this.tableGroup.parent as Group).removeChild((this.tableGroup as any).border);\n delete (this.tableGroup as any).border;\n }\n }\n\n /**\n * @description: 初始化表格外组件\n * @return {*}\n */\n createComponent() {\n this.component = new TableComponent(this.table);\n this.component.addToGroup(this.componentGroup);\n this.selectedRangeComponents = new Map();\n this.selectingRangeComponents = new Map();\n }\n\n /**\n * @description: 依据数据创建表格场景树\n * @return {*}\n */\n createSceneGraph() {\n this.clear = false;\n this.frozenColCount = this.table.rowHeaderLevelCount;\n this.frozenRowCount = this.table.columnHeaderLevelCount;\n\n this.proxy = new SceneProxy(this.table);\n\n // update table group position for cell group global position, not create border yet.\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined, true);\n\n this.proxy.createGroupForFirstScreen(\n this.cornerHeaderGroup,\n this.colHeaderGroup,\n this.rowHeaderGroup,\n this.bodyGroup,\n 0,\n 0\n );\n this.afterScenegraphCreated();\n }\n\n /**\n * @description: 绘制场景树\n * @param {any} element\n * @param {CellRange} visibleCoord\n * @return {*}\n */\n renderSceneGraph() {\n this.stage.render();\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellOld(col: number, row: number): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n let element: Group;\n if (this.hasFrozen && col < this.table.frozenColCount && row < this.table.frozenRowCount) {\n element = this.cornerHeaderGroup.getChildAt(col)?.getChildAt(row) as Group;\n } else if (row < this.table.frozenRowCount) {\n // element = (this as any).tableGroup.children[0]?.children[col]?.children[row];\n element = this.colHeaderGroup\n .getChildAt(this.hasFrozen ? col - this.table.frozenColCount : col)\n ?.getChildAt(row) as Group;\n } else if (col < this.table.frozenColCount) {\n // element = (this as any).tableGroup.children[1]?.children[col]?.children[\n // row - this.table.frozenRowCount\n // ];\n element = this.rowHeaderGroup.getChildAt(col)?.getChildAt(row - this.table.frozenRowCount) as Group;\n } else {\n // element = (this as any).tableGroup.children[2]?.children[col - this.table.frozenColCount]\n // ?.children[row - this.table.frozenRowCount];\n element = this.bodyGroup\n .getChildAt(col - this.table.frozenColCount)\n ?.getChildAt(row - this.table.frozenRowCount) as Group;\n }\n\n if (element && element.role === 'shadow-cell') {\n const range = this.table.getCellRange(col, row);\n element = this.getCell(range.start.col, range.start.row);\n }\n\n return element || undefined;\n }\n\n getColGroupOld(col: number, isHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isHeader) {\n element = this.cornerHeaderGroup.getChildAt(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getChildAt(col) as Group;\n } else if (isHeader) {\n element = this.rowHeaderGroup.getChildAt(col - this.frozenColCount) as Group;\n } else {\n element = this.bodyGroup.getChildAt(col - this.frozenColCount) as Group;\n }\n return element || undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell group\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCell(col: number, row: number, getShadow?: boolean): Group {\n // hasFrozen处理前,列表头的冻结部分在colHeaderGroup中\n // hasFrozen处理后,列表头的冻结部分在cornerHeaderGroup中\n // 因此在获取cell时需要区别hasFrozen时机\n let cell = this.getColGroup(col, row < this.frozenRowCount)?.getRowGroup(row);\n if (cell && cell.role === 'shadow-cell' && !getShadow) {\n const range = this.table.getCellRange(col, row);\n cell = this.getCell(range.start.col, range.start.row);\n }\n\n return cell || emptyGroup;\n }\n\n highPerformanceGetCell(col: number, row: number, getShadow?: boolean): Group {\n if (!this.table.isHeader(col, row)) {\n return this.proxy.highPerformanceGetCell(col, row, 0, this.table.rowCount - 1, getShadow);\n }\n return this.getCell(col, row, getShadow);\n }\n\n getColGroup(col: number, isCornerOrColHeader = false): Group {\n let element: Group;\n if (col < this.frozenColCount && isCornerOrColHeader) {\n element = this.cornerHeaderGroup.getColGroup(col) as Group;\n } else if (col < this.frozenColCount) {\n element = this.rowHeaderGroup.getColGroup(col) as Group;\n } else if (isCornerOrColHeader) {\n element = this.colHeaderGroup.getColGroup(col) as Group;\n } else {\n element = this.bodyGroup.getColGroup(col) as Group;\n }\n return element || undefined;\n }\n\n /**\n * @description: 获取指定行列位置的cell的宽高,主要处理merge情况\n * @param {number} col\n * @param {number} row\n * @return {Group}\n */\n getCellSize(col: number, row: number): { width: number; height: number } {\n const cell = this.getCell(col, row);\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n let width = cell.attribute.width;\n let height = cell.attribute.height;\n if (mergeInfo) {\n width = width / (mergeInfo.end.col - mergeInfo.start.col + 1);\n height = height / (mergeInfo.end.row - mergeInfo.start.row + 1);\n }\n return { width, height };\n }\n\n /**\n * @description: 触发下一帧渲染\n * @return {*}\n */\n updateNextFrame() {\n // to do\n // this.table.invalidate();\n this.resetAllSelectComponent();\n\n this.stage.renderNextFrame();\n }\n resetAllSelectComponent() {\n updateAllSelectComponent(this);\n }\n\n hideHoverIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n hideIcon(this, cellGroup, 'mouseenter_cell');\n }\n showHoverIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n showIcon(this, cellGroup, 'mouseenter_cell');\n }\n hideClickIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n hideIcon(this, cellGroup, 'click_cell');\n }\n showClickIcon(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n showIcon(this, cellGroup, 'click_cell');\n }\n /**\n * 单元格失焦 失效该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n deactivateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.deactivate?.();\n }\n /**\n * hover 到单元格上 激活该单元格对应的图表实例\n * @param col\n * @param row\n * @returns\n */\n activateChart(col: number, row: number) {\n if (col === -1 || row === -1) {\n return;\n }\n const cellGroup = this.getCell(col, row);\n (cellGroup?.firstChild as any)?.activate?.(this.table);\n }\n\n removeInteractionBorder(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n cellGroup.setAttribute('highlightStroke', undefined);\n cellGroup.setAttribute('highlightStrokeArrayWidth', undefined);\n cellGroup.setAttribute('highlightStrokeArrayColor', undefined);\n }\n\n createCellSelectBorder(\n start_Col: number,\n start_Row: number,\n end_Col: number,\n end_Row: number,\n selectRangeType: CellType,\n selectId: string, //整体区域${endRow}-${startCol}${startRow}${endCol}${endRow}作为其编号\n strokes?: boolean[]\n ) {\n createCellSelectBorder(this, start_Col, start_Row, end_Col, end_Row, selectRangeType, selectId, strokes);\n }\n moveSelectingRangeComponentsToSelectedRangeComponents() {\n moveSelectingRangeComponentsToSelectedRangeComponents(this);\n }\n /** 按住shift 则继续上次选中范围 需要将现有的删除掉 */\n deleteLastSelectedRangeComponents() {\n deleteLastSelectedRangeComponents(this);\n }\n deleteAllSelectBorder() {\n deleteAllSelectBorder(this);\n }\n\n updateCellSelectBorder(newStartCol: number, newStartRow: number, newEndCol: number, newEndRow: number) {\n updateCellSelectBorder(this, newStartCol, newStartRow, newEndCol, newEndRow);\n }\n\n /**\n * @description: 获取指定单元格指定位置的icon mark\n * @param {number} col\n * @param {number} row\n * @param {number} x\n * @param {number} y\n * @return {*}\n */\n getIcon(col: number, row: number, x: number, y: number): Icon | undefined {\n const cellGroup = this.getCell(col, row);\n let pickMark;\n cellGroup.forEachChildren((mark: Icon) => {\n if (mark.role === 'icon' && mark.containsPoint(x, y, IContainPointMode.GLOBAL)) {\n pickMark = mark;\n }\n });\n return pickMark;\n }\n\n /**\n * @description: 将指定icon mark设置为Hover样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconHoverStyle(icon: Icon, col: number, row: number, cellGroup: Group) {\n // hover展示背景\n if (icon.attribute.backgroundColor) {\n let iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttributes({\n x: (icon.attribute.x ?? 0) + (icon.attribute.dx ?? 0) + (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n visible: true\n });\n } else {\n iconBack = createRect({\n x: (icon.attribute.x ?? 0) + (icon.attribute.dx ?? 0) + (icon.AABBBounds.width() - icon.backgroundWidth) / 2,\n y: (icon.attribute.y ?? 0) + (icon.AABBBounds.height() - icon.backgroundHeight) / 2,\n width: icon.backgroundWidth,\n height: icon.backgroundHeight,\n fill: icon.attribute.backgroundColor,\n cornerRadius: 5,\n pickable: false,\n visible: true\n }) as IRect;\n iconBack.name = 'icon-back';\n // cellGroup.appendChild(iconBack);\n }\n icon.parent.insertBefore(iconBack, icon);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.hoverImage) {\n icon.image = icon.attribute.hoverImage;\n }\n\n // hover展示tooltip\n if (icon.tooltip) {\n const { x1: left, x2: right, y1: top, y2: bottom } = icon.globalAABBBounds;\n const tooltipOptions: TooltipOptions = {\n content: icon.tooltip.title,\n referencePosition: {\n rect: {\n left: left - this.table.tableX,\n right: right - this.table.tableX,\n top: top - this.table.tableY,\n bottom: bottom - this.table.tableY,\n width: icon.globalAABBBounds.width(),\n height: icon.globalAABBBounds.height()\n },\n placement: icon.tooltip.placement\n },\n style: Object.assign({}, this.table.internalProps.theme?.tooltipStyle, icon.tooltip?.style)\n };\n if (!this.table.internalProps.tooltipHandler.isBinded(tooltipOptions)) {\n this.table.showTooltip(col, row, tooltipOptions);\n }\n }\n }\n\n /**\n * @description: 将指定icon mark设置为Normal样式\n * @param {Icon} icon\n * @param {number} col\n * @param {number} row\n * @return {*}\n */\n setIconNormalStyle(icon: Icon, col: number, row: number) {\n const iconBack = icon.parent.getChildByName('icon-back') as IRect;\n if (iconBack) {\n iconBack.setAttribute('visible', false);\n }\n\n // hover更换图片\n if (icon.attribute.hoverImage && icon.attribute.image !== icon.attribute.originImage) {\n icon.image = icon.attribute.originImage;\n }\n }\n\n /**\n * @description: 列宽调整结果更新列宽\n * @param {number} col\n * @param {number} detaX 改变的宽度值\n * @return {*}\n */\n updateColWidth(col: number, detaX: number) {\n updateColWidth(this, col, detaX);\n // this.updateContainerWidth(col, detaX);\n this.updateContainer();\n }\n\n /**\n * @description: 列宽调整需要修改Chart的尺寸\n * @param {number} col\n * @return {*}\n */\n updateChartSize(col: number) {\n updateChartSize(this, col);\n }\n\n updateAutoColWidth(col: number) {\n const oldWidth = this.table.getColWidth(col);\n const newWidth = computeColWidth(col, 0, this.table.rowCount - 1, this.table, true);\n if (newWidth !== oldWidth) {\n this.updateColWidth(col, newWidth - oldWidth);\n }\n }\n\n /*\n * recalculates column width in all autowidth columns\n */\n recalculateColWidths() {\n computeColsWidth(this.table, 0, this.table.colCount - 1, true);\n }\n\n recalculateRowHeights() {\n computeRowsHeight(this.table, 0, this.table.rowCount - 1);\n }\n\n resize() {\n this.recalculateColWidths();\n if (this.table.internalProps.autoRowHeight) {\n this.recalculateRowHeights();\n }\n this.dealWidthMode();\n this.dealFrozen();\n this.updateTableSize();\n this.updateBorderSizeAndPosition();\n this.component.updateScrollBar();\n\n // this.stage.window.resize(width, height);\n this.updateNextFrame();\n }\n\n updateTableSize() {\n this.tableGroup.setAttributes({\n width: Math.min(\n this.table.tableNoFrameWidth,\n Math.max(this.colHeaderGroup.attribute.width, this.bodyGroup.attribute.width, 0) +\n Math.max(this.cornerHeaderGroup.attribute.width, this.rowHeaderGroup.attribute.width, 0)\n ),\n height: Math.min(\n this.table.tableNoFrameHeight,\n (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n )\n } as any);\n\n if (this.tableGroup.border) {\n this.tableGroup.border.setAttributes({\n width: this.tableGroup.attribute.width + this.tableGroup.border.attribute.lineWidth,\n height: this.tableGroup.attribute.height + this.tableGroup.border.attribute.lineWidth\n });\n }\n }\n\n updateRowHeight(row: number, detaY: number) {\n updateRowHeight(this, row, detaY);\n this.updateContainerHeight(row, detaY);\n }\n\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerWidth(col: number, detaX: number) {\n // 更新table/header/border宽度\n if (col < this.frozenColCount) {\n this.rowHeaderGroup.setDeltaWidth(detaX);\n this.cornerHeaderGroup.setDeltaWidth(detaX);\n this.colHeaderGroup.setDeltaX(detaX);\n this.bodyGroup.setDeltaX(detaX);\n } else {\n this.colHeaderGroup.setDeltaWidth(detaX);\n this.bodyGroup.setDeltaWidth(detaX);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新table&header&body高度\n * @return {*}\n */\n updateContainerHeight(row: number, detaY: number) {\n // 更新table/header/border高度\n if (row < this.frozenRowCount) {\n this.colHeaderGroup.setDeltaHeight(detaY);\n this.cornerHeaderGroup.setDeltaHeight(detaY);\n this.rowHeaderGroup.setDeltaY(detaY);\n this.bodyGroup.setDeltaY(detaY);\n } else {\n this.rowHeaderGroup.setDeltaHeight(detaY);\n this.bodyGroup.setDeltaHeight(detaY);\n }\n\n this.updateTableSize();\n this.component.updateScrollBar();\n\n this.updateNextFrame();\n }\n setColWidth(col: number, width: number) {\n const oldWidth = this.table.getColWidth(col);\n if (oldWidth === width) {\n return;\n }\n this.updateColWidth(col, width - oldWidth);\n }\n\n setRowHeight(row: number, height: number) {\n const oldHeight = this.table.getRowHeight(row);\n this.updateRowHeight(row, height - oldHeight);\n }\n\n /**\n * @description: 设置表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setX(x: number) {\n // if (this.colHeaderGroup.attribute.width + x === this.bodyGroup.attribute.x) {\n // return;\n // }\n // // this.tableGroup.setAttribute('x', x);\n // // this.tableGroup.setAttribute('width', this.table.tableNoFrameWidth - x);\n // this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n // this.colHeaderGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n\n // // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n // this.updateNextFrame();\n this.table.scenegraph.proxy.setX(-x);\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setY(y: number) {\n // if (this.transpose || this.isPivot) {\n // if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n // return;\n // }\n // this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n // this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n // // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n // this.updateNextFrame();\n // } else if (this.table.scenegraph.proxy) {\n this.table.scenegraph.proxy.setY(-y);\n // }\n }\n\n /**\n * @description: 更新表格的y位置,滚动中使用\n * @param {number} y\n * @return {*}\n */\n setBodyAndRowHeaderY(y: number) {\n if (this.colHeaderGroup.attribute.height + y === this.bodyGroup.attribute.y) {\n return;\n }\n this.bodyGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height + y);\n // this.tableGroup.setAttribute('height', this.table.tableNoFrameHeight - y);\n // (this.tableGroup.lastChild as any).setAttribute('width', this.table.tableNoFrameWidth - x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 更新表格的x位置,滚动中使用\n * @param {number} x\n * @return {*}\n */\n setBodyAndColHeaderX(x: number) {\n if (this.rowHeaderGroup.attribute.width + x === this.bodyGroup.attribute.x) {\n return;\n }\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n this.colHeaderGroup.setAttribute('x', this.rowHeaderGroup.attribute.width + x);\n this.updateNextFrame();\n }\n\n /**\n * @description: 完成创建场景树节点后,处理自动行高列宽\n * @return {*}\n */\n afterScenegraphCreated() {\n // 对齐auto列宽\n // updateAutoColWidth(this);\n // 对齐autoWrapText\n // const { autoRowHeight } = this.table.internalProps;\n // if (autoRowHeight) {\n // updateAutoRowHeight(this);\n // }\n\n this.dealWidthMode();\n\n // 处理冻结\n this.dealFrozen();\n\n // 处理frame border\n this.createFrameBorder();\n this.updateBorderSizeAndPosition();\n\n // 更新滚动条状态\n this.component.updateScrollBar();\n // 处理单元格内容需要textStick的情况\n handleTextStick(this.table);\n\n this.updateNextFrame();\n }\n\n /**\n * @description: 处理宽度模式\n * @return {*}\n */\n dealWidthMode() {\n const table = this.table;\n if (table.widthMode === 'adaptive') {\n // 处理adaptive宽度\n // table._colRangeWidthsMap = new Map();\n // const canvasWidth = this.internalProps.canvas.width;\n const totalDrawWidth = table.tableNoFrameWidth;\n let actualWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n actualWidth += table.getColWidth(col);\n }\n const factor = totalDrawWidth / actualWidth;\n for (let col = 0; col < table.colCount; col++) {\n let colWidth;\n if (col === table.colCount - 1) {\n colWidth = totalDrawWidth - table.getColsWidth(0, table.colCount - 2);\n } else {\n colWidth = Math.round(table.getColWidth(col) * factor);\n }\n this.setColWidth(col, colWidth);\n }\n } else if (table.widthMode === 'standard-aeolus' && this.transpose) {\n // 处理风神列宽特殊逻辑\n // table._colRangeWidthsMap = new Map();\n const canvasWidth = table.tableNoFrameWidth;\n let actualWidth = 0;\n let actualHeaderWidth = 0;\n for (let col = 0; col < table.colCount; col++) {\n const colWidth = table.getColWidth(col);\n if (col < table.frozenColCount) {\n actualHeaderWidth += colWidth;\n }\n\n actualWidth += colWidth;\n }\n\n // 如果内容宽度小于canvas宽度,执行adaptive放大\n if (actualWidth < canvasWidth && actualWidth - actualHeaderWidth > 0) {\n const factor = (canvasWidth - actualHeaderWidth) / (actualWidth - actualHeaderWidth);\n for (let col = table.frozenColCount; col < table.colCount; col++) {\n this.setColWidth(col, table.getColWidth(col) * factor);\n }\n }\n }\n\n // 更新容器宽度\n let bodyWidth = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group) => {\n bodyWidth += column.attribute.width;\n });\n this.bodyGroup.setAttribute('width', bodyWidth);\n let colHeaderWidth = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n colHeaderWidth += column.attribute.width;\n });\n this.colHeaderGroup.setAttribute('width', colHeaderWidth);\n let rowHeaderWidth = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n rowHeaderWidth += column.attribute.width;\n });\n this.rowHeaderGroup.setAttribute('width', rowHeaderWidth);\n let cornerHeaderWidth = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group) => {\n cornerHeaderWidth += column.attribute.width;\n });\n this.cornerHeaderGroup.setAttribute('width', cornerHeaderWidth);\n\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.rowHeaderGroup.setAttribute('y', this.colHeaderGroup.attribute.height);\n this.bodyGroup.setAttributes({\n x: this.rowHeaderGroup.attribute.width,\n y: this.colHeaderGroup.attribute.height\n });\n }\n\n /**\n * @description: 处理冻结\n * @return {*}\n */\n dealFrozen() {\n dealFrozen(this);\n }\n\n /**\n * @description: 还原冻结\n * @return {*}\n */\n resetFrozen() {\n resetFrozen(this);\n }\n\n /**\n * @description: 判断指定列更新宽度时,其中单元格是否会更新宽度;如果更新宽度,返回true\n * @param {Group} columnGroup\n * @param {number} detaRow columnGroup内的index与row的差值,列表头为0;行表头和内容为table.frozenRowCount\n * @param {number} col\n * @return {*}\n */\n updateCellLayoutWidthCertainWidth(columnGroup: Group, detaRow: number, col: number) {\n const width = columnGroup.attribute.width;\n let isUpdate = false;\n columnGroup.forEachChildren((cellGroup: Group, row: number) => {\n row += detaRow;\n const mergeInfo = getCellMergeInfo(this.table, col, row);\n if (mergeInfo) {\n cellGroup = this.getCell(mergeInfo.start.col, mergeInfo.start.row);\n // cellGroup.setAttribute('width', width);\n } else {\n cellGroup.setAttribute('width', width);\n }\n const headerStyle = this.table._getCellStyle(col, row);\n const padding = getQuadProps(getProp('padding', headerStyle, col, row, this.table));\n\n // const text = cellGroup.getChildAt(1) as WrapText;\n const text = cellGroup.getChildByName('text') as WrapText;\n let oldCellHeight = 0;\n let newCellHeight = 0;\n if (text) {\n oldCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n text.setAttribute('maxLineWidth', width - (padding[1] + padding[3]));\n newCellHeight = text.AABBBounds.height() + (padding[0] + padding[2]);\n } else {\n const group = cellGroup.getChildAt(1) as any;\n oldCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n group._cellWidth = width - (padding[1] + padding[3]);\n group.layout();\n newCellHeight = group.AABBBounds.height() + (padding[0] + padding[2]);\n }\n const rowHeight = this.table.getRowHeight(row);\n\n if (cellGroup.attribute.height !== newCellHeight) {\n cellGroup.setAttribute('height', newCellHeight);\n if (rowHeight === oldCellHeight) {\n // 当前行由本单元格高度撑起,更新本行行高\n isUpdate = true;\n } else if (newCellHeight > rowHeight) {\n // 当前行不由本单元格高度撑起,只在本单元格高度高于当前行高度时更新本行行高\n isUpdate = true;\n }\n }\n });\n return isUpdate;\n }\n\n /**\n * @description: 更新某列到其他列位置\n * @param {number} colSource 原始列col\n * @param {number} colTarget 目标列col\n * @return {*}\n */\n updateHeaderPosition(colSource: number, rowSource: number, colTarget: number, rowTarget: number) {\n moveHeaderPosition(colSource, rowSource, colTarget, rowTarget, this.table);\n }\n\n updateContainer() {\n // 更新各列x&col\n let cornerX = 0;\n this.cornerHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', cornerX);\n cornerX += column.attribute.width;\n });\n let rowHeaderX = 0;\n this.rowHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', rowHeaderX);\n rowHeaderX += column.attribute.width;\n });\n let colHeaderX = 0;\n this.colHeaderGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', colHeaderX);\n colHeaderX += column.attribute.width;\n });\n let bodyX = 0;\n this.bodyGroup.forEachChildrenSkipChild((column: Group, index) => {\n column.setAttribute('x', bodyX);\n bodyX += column.attribute.width;\n });\n // 更新容器\n this.cornerHeaderGroup.setDeltaWidth(cornerX - this.cornerHeaderGroup.attribute.width);\n this.colHeaderGroup.setDeltaWidth(colHeaderX - this.colHeaderGroup.attribute.width);\n this.rowHeaderGroup.setDeltaWidth(rowHeaderX - this.rowHeaderGroup.attribute.width);\n this.bodyGroup.setDeltaWidth(bodyX - this.bodyGroup.attribute.width);\n\n this.colHeaderGroup.setAttribute('x', this.cornerHeaderGroup.attribute.width);\n this.bodyGroup.setAttribute('x', this.rowHeaderGroup.attribute.width);\n\n this.updateTableSize();\n\n // 记录滚动条原位置\n const oldHorizontalBarPos = this.table.stateManeger.scroll.horizontalBarPos;\n const oldVerticalBarPos = this.table.stateManeger.scroll.verticalBarPos;\n this.component.updateScrollBar();\n this.table.stateManeger.setScrollLeft(oldHorizontalBarPos);\n this.table.stateManeger.setScrollTop(oldVerticalBarPos);\n this.updateNextFrame();\n }\n\n updateCellContentWhileResize(col: number, row: number) {\n const type = this.table.getBodyColumnType(col, row);\n const cellGroup = this.getCell(col, row);\n if (type === 'image' || type === 'video') {\n updateImageCellContentWhileResize(cellGroup, col, row, this.table);\n }\n }\n\n /**\n * @description: 创建table&header&body的border\n * @return {*}\n */\n createFrameBorder() {\n // 更新宽高\n this.updateTableSize();\n // this.tableGroup.setAttributes({\n // width: Math.min(\n // this.table.tableNoFrameWidth,\n // (this.colHeaderGroup.attribute.width ?? 0) + (this.cornerHeaderGroup.attribute.width ?? 0)\n // ),\n // height: Math.min(\n // this.table.tableNoFrameHeight,\n // (this.colHeaderGroup.attribute.height ?? 0) + (this.bodyGroup.attribute.height ?? 0)\n // ),\n // } as any);\n\n const isListTableWithFrozen = !this.isPivot;\n\n // 设置border\n createFrameBorder(\n this.bodyGroup,\n this.table.theme.bodyStyle.frameStyle,\n this.bodyGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.rowHeaderGroup,\n this.isPivot ? this.table.theme.rowHeaderStyle.frameStyle : this.table.theme.bodyStyle.frameStyle,\n this.rowHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(\n this.colHeaderGroup,\n this.table.theme.headerStyle.frameStyle, // 透视表的主题中没有colHeaderStyle,直接使用headerStyle\n this.colHeaderGroup.role,\n isListTableWithFrozen ? [true, true, true, false] : undefined\n );\n createFrameBorder(\n this.cornerHeaderGroup,\n this.isPivot ? this.table.theme.cornerHeaderStyle.frameStyle : this.table.theme.headerStyle.frameStyle,\n this.cornerHeaderGroup.role,\n isListTableWithFrozen ? [true, false, true, true] : undefined\n );\n createFrameBorder(this.tableGroup, this.table.theme.frameStyle, this.tableGroup.role, undefined);\n }\n\n /**\n * @description: 获取当前位置的列宽调整信息\n * @param {number} abstractX\n * @param {number} abstractY\n * @param {Group} cellGroup\n * @param {*} offset\n * @return {*}\n */\n getResizeColAt(\n abstractX: number,\n abstractY: number,\n cellGroup?: Group,\n offset = ResizeColumnHotSpotSize / 2\n ): { col: number; row: number; x?: number } {\n if (!cellGroup) {\n // to do: 处理最后一列外调整列宽\n } else {\n if (abstractX < cellGroup.globalAABBBounds.x1 + offset) {\n return { col: cellGroup.col - 1, row: cellGroup.row, x: cellGroup.globalAABBBounds.x1 };\n }\n if (cellGroup.globalAABBBounds.x2 - offset < abstractX) {\n return { col: cellGroup.col, row: cellGroup.row, x: cellGroup.globalAABBBounds.x2 };\n }\n }\n return { col: -1, row: -1 };\n }\n\n updateIcon(icon: Icon, iconConfig: ColumnIconOption) {\n // 直接更新mark attribute\n dealWithIcon(iconConfig, icon);\n icon.name = iconConfig.name;\n this.updateNextFrame();\n }\n\n updateFrozen() {\n if (this.clear) {\n return;\n }\n this.resetFrozen();\n this.dealFrozen();\n this.component.updateScrollBar();\n }\n\n updateBorderSizeAndPosition() {\n if (this.bodyGroup.border) {\n this.bodyGroup.appendChild(this.bodyGroup.border);\n updateFrameBorderSize(this.bodyGroup);\n if (this.rowHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle, [true, true, true, true]);\n } else {\n updateFrameBorder(this.bodyGroup, this.table.theme.bodyStyle.frameStyle, [true, true, true, false]);\n }\n }\n if (this.colHeaderGroup.border) {\n this.colHeaderGroup.appendChild(this.colHeaderGroup.border);\n updateFrameBorderSize(this.colHeaderGroup);\n if (this.cornerHeaderGroup.attribute.width === 0) {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle, [true, true, true, true]);\n } else {\n updateFrameBorder(this.colHeaderGroup, this.table.theme.headerStyle.frameStyle, [true, true, true, false]);\n }\n }\n if (this.rowHeaderGroup.border) {\n this.rowHeaderGroup.appendChild(this.rowHeaderGroup.border);\n updateFrameBorderSize(this.rowHeaderGroup);\n }\n if (this.cornerHeaderGroup.border) {\n this.cornerHeaderGroup.appendChild(this.cornerHeaderGroup.border);\n updateFrameBorderSize(this.cornerHeaderGroup);\n }\n }\n\n updateSortIcon(\n col: number,\n row: number,\n iconMark: Icon,\n order: SortOrder,\n oldSortCol: number,\n oldSortRow: number,\n oldIconMark: Icon | undefined\n ) {\n // 更新icon\n const icon = this.table.internalProps.headerHelper.getSortIcon(order, this.table, col, row);\n if (iconMark) {\n this.updateIcon(iconMark, icon);\n }\n\n // 更新旧frozen icon\n if (oldIconMark !== iconMark) {\n const oldIcon = this.table.internalProps.headerHelper.getSortIcon('normal', this.table, oldSortCol, oldSortRow);\n if (oldIconMark) {\n this.updateIcon(oldIconMark, oldIcon);\n } else {\n const oldSortCell = this.getCell(oldSortCol, oldSortRow);\n let oldIconMark;\n oldSortCell.forEachChildren((mark: Icon) => {\n if (mark.attribute.funcType === 'sort') {\n oldIconMark = mark;\n return true;\n }\n return false;\n });\n if (oldIconMark) {\n this.updateIcon(oldIconMark, oldIcon);\n }\n }\n }\n }\n\n updateFrozenIcon(col: number, oldFrozenCol: number) {\n // 依据新旧冻结列确定更新范围\n const updateCol = Math.max(col, oldFrozenCol);\n\n // 遍历表头单元格,更新icon\n this.colHeaderGroup.forEachChildrenSkipChild((colGroup: Group) => {\n if (colGroup.col <= updateCol) {\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((icon: Icon) => {\n if (icon.attribute.funcType === 'frozen') {\n const iconConfig = this.table.internalProps.headerHelper.getFrozenIcon(cellGroup.col, cellGroup.row);\n this.updateIcon(icon, iconConfig);\n return true;\n }\n return false;\n });\n });\n return false;\n }\n return true;\n });\n this.cornerHeaderGroup.forEachChildrenSkipChild((colGroup: Group) => {\n if (colGroup.col <= updateCol) {\n colGroup.forEachChildren((cellGroup: Group) => {\n cellGroup.forEachChildren((icon: Icon) => {\n if (icon.attribute.funcType === 'frozen') {\n const iconConfig = this.table.internalProps.headerHelper.getFrozenIcon(cellGroup.col, cellGroup.row);\n this.updateIcon(icon, iconConfig);\n return true;\n }\n return false;\n });\n });\n return false;\n }\n return true;\n });\n }\n\n sortCell() {\n if (this.isPivot) {\n // 透视表外部处理排序\n } else if (this.transpose) {\n setTimeout(() => {\n // 清空单元格内容\n this.clearCells();\n // 生成单元格场景树\n this.createSceneGraph();\n }, 10);\n } else {\n this.proxy.sortCell();\n }\n }\n\n getCellOverflowText(col: number, row: number): string | null {\n const cellGroup = this.getCell(col, row);\n const text = cellGroup.getChildByName('text', true) as unknown as WrapText;\n // if (text && text.cache?.clipedText !== text.attribute.text) {\n // return text.attribute.text as string;\n // }\n if (text) {\n const textAttributeStr = isArray(text.attribute.text)\n ? text.attribute.text.join('')\n : (text.attribute.text as string);\n let cacheStr = '';\n if (isString(text.cache.clipedText)) {\n cacheStr = text.cache.clipedText;\n } else {\n (text.cache as ITextCache).layoutData.lines.forEach((line: any) => {\n cacheStr += line.str;\n });\n }\n if (cacheStr !== textAttributeStr) {\n return textAttributeStr;\n }\n }\n return null;\n }\n\n updateDrill(visible: boolean, x: number, y: number, drillDown: boolean, drillUp: boolean) {\n this.component.drillIcon.update(visible, x, y, drillDown, drillUp, this);\n }\n\n updateCellContent(col: number, row: number) {\n if (this.clear) {\n return undefined;\n }\n return updateCell(col, row, this.table);\n }\n\n setPixelRatio(pixelRatio: number) {\n // this.stage.setDpr(pixelRatio);\n // 这里因为本时刻部分节点有更新bounds标记,直接render回导致开启DirtyBounds,无法完整重绘画布;\n // 所以这里先关闭DirtyBounds,等待下一帧再开启\n this.stage.disableDirtyBounds();\n this.stage.window.setDpr(pixelRatio);\n this.stage.render();\n this.stage.enableDirtyBounds();\n }\n\n updateHierarchyIcon(col: number, row: number) {\n const cellGroup = this.getCell(col, row);\n let iconConfig;\n if (this.table.isHeader(col, row)) {\n iconConfig = this.table.internalProps.headerHelper.getHierarchyIcon(cellGroup.col, cellGroup.row);\n } else {\n iconConfig = this.table.internalProps.bodyHelper.getHierarchyIcon(cellGroup.col, cellGroup.row);\n }\n this.findAndUpdateIcon(cellGroup, [IconFuncTypeEnum.collapse, IconFuncTypeEnum.expand], iconConfig);\n }\n\n updateRow(removeCells: CellAddress[], addCells: CellAddress[]) {\n // add or move rows\n updateRow(removeCells, addCells, this.table);\n\n // update column width and row height\n this.recalculateColWidths();\n if (this.table.internalProps.autoRowHeight) {\n this.recalculateRowHeights();\n }\n\n // check frozen status\n this.table.stateManeger.checkFrozen();\n\n // rerender\n this.updateNextFrame();\n }\n\n findAndUpdateIcon(group: Group, funcTypeArr: IconFuncTypeEnum[], iconConfig: ColumnIconOption) {\n group.forEachChildren((icon: Icon | Group) => {\n if (icon.type === 'group') {\n this.findAndUpdateIcon(icon, funcTypeArr, iconConfig);\n } else if (funcTypeArr.indexOf((icon as Icon).attribute.funcType as IconFuncTypeEnum) !== -1) {\n this.updateIcon(icon as Icon, iconConfig);\n return true;\n }\n return false;\n });\n }\n}\n\nfunction showIcon(scene: Scenegraph, cellGroup: Group, visibleTime: 'mouseenter_cell' | 'click_cell') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n showIcon(scene, child, visibleTime);\n } else if (child.attribute.visibleTime === visibleTime) {\n child.attribute.visible = true;\n scene.updateNextFrame();\n }\n });\n}\n\nfunction hideIcon(scene: Scenegraph, cellGroup: Group, visibleTime: 'mouseenter_cell' | 'click_cell') {\n cellGroup.forEachChildren((child: any) => {\n if (child.type === 'group') {\n hideIcon(scene, child, visibleTime);\n } else if (child.attribute.visibleTime === visibleTime) {\n child.attribute.visible = false;\n scene.updateNextFrame();\n }\n });\n}\n"]}
|
|
@@ -73,4 +73,18 @@ function adjustCellContentHorizontalLayout(cellGroup, minLeft, maxLeft) {
|
|
|
73
73
|
}));
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
+
|
|
77
|
+
export function checkHaveTextStick(table) {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const headerObjects = table.internalProps.layoutMap.headerObjects, columnObjects = table.internalProps.layoutMap.columnObjects;
|
|
80
|
+
for (let i = 0; i < headerObjects.length; i++) {
|
|
81
|
+
const header = headerObjects[i];
|
|
82
|
+
if (header && (null === (_a = header.define.headerStyle) || void 0 === _a ? void 0 : _a.textStick)) return !0;
|
|
83
|
+
}
|
|
84
|
+
for (let i = 0; i < columnObjects.length; i++) {
|
|
85
|
+
const column = columnObjects[i];
|
|
86
|
+
if (column && (null === (_b = column.define.style) || void 0 === _b ? void 0 : _b.textStick)) return !0;
|
|
87
|
+
}
|
|
88
|
+
return !1;
|
|
89
|
+
}
|
|
76
90
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["scenegraph/stick-text/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IGraphic } from '@visactor/vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport type { Group } from '../graphic/group';\nimport type { WrapText } from '../graphic/text';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nconst changedCells: { col: number; row: number }[] = [];\nexport function handleTextStick(table: BaseTableAPI) {\n changedCells.forEach(cellPos => {\n const cellGroup = table.scenegraph.getCell(cellPos.col, cellPos.row);\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dy: 0,\n dx: 0\n });\n });\n });\n changedCells.length = 0;\n\n const { scrollTop, scrollLeft, frozenRowCount, frozenColCount } = table;\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const frozenColsWidth = table.getFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = table.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = table.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n table.getAllRowsHeight() > table.tableNoFrameHeight\n ? table.getRowAt(scrollTop + table.tableNoFrameHeight - 1).row\n : table.rowCount - 1;\n const colEnd =\n table.getAllColsWidth() > table.tableNoFrameWidth\n ? table.getColAt(scrollLeft + table.tableNoFrameWidth - 1).col\n : table.colCount - 1;\n // 列表头单元格\n for (let row = 0; row < frozenRowCount; row++) {\n for (let col = 0; col <= colEnd; col++) {\n if (table._getCellStyle(col, row)?.textStick) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(cellGroup, 0, table.tableNoFrameWidth);\n changedCells.push({ col, row });\n }\n }\n }\n\n if (rowStart === -1) {\n return;\n }\n // 行表头单元格\n for (let row = rowStart; row <= rowEnd; row++) {\n for (let col = 0; col < frozenColCount; col++) {\n if (\n table._getCellStyle(col, row)?.textStick &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'tree'\n ) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(cellGroup, frozenRowsHeight, table.tableNoFrameHeight);\n changedCells.push({ col, row });\n }\n }\n }\n // body单元格\n for (let row = rowStart; row <= rowEnd; row++) {\n for (let col = colStart; col <= colEnd; col++) {\n if (table._getCellStyle(col, row)?.textStick) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(cellGroup, frozenRowsHeight, table.tableNoFrameHeight);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(cellGroup, frozenColsWidth, table.tableNoFrameWidth);\n changedCells.push({ col, row });\n }\n }\n }\n}\n\n/*\n * adjust cell content vertical layout\n * @param {Group} cellGroup\n * @param {number} scrollTop\n */\nfunction adjustCellContentVerticalLayout(cellGroup: Group, minTop: number, maxTop: number) {\n // get text element\n const text = cellGroup.getChildByName('text', true) as WrapText;\n if (!text) {\n return;\n }\n text.AABBBounds.width();\n const textTop = text.globalAABBBounds.y1;\n const textBottom = text.globalAABBBounds.y2;\n\n if (textTop < minTop) {\n const deltaHeight = textTop - minTop;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', -deltaHeight + 2); // 2 is the buffer\n });\n } else if (textBottom > maxTop) {\n const deltaHeight = textBottom - maxTop;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', -deltaHeight); // 2 is the buffer\n });\n }\n}\n\n/*\n * adjust cell content horizontal layout\n * @param {Group} cellGroup\n * @param {number} scrollLeft\n */\nfunction adjustCellContentHorizontalLayout(cellGroup: Group, minLeft: number, maxLeft: number) {\n // get text element\n const text = cellGroup.getChildByName('text', true) as WrapText;\n if (!text) {\n return;\n }\n text.AABBBounds.width();\n const textLeft = text.globalAABBBounds.x1;\n const textRight = text.globalAABBBounds.x2;\n if (textLeft < minLeft) {\n const deltaWidth = textLeft - minLeft;\n // text is out of view, move all elements right\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', -deltaWidth + 2); // 2 is the buffer\n });\n } else if (textRight > maxLeft) {\n const deltaWidth = textRight - maxLeft;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', -deltaWidth); // 2 is the buffer\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["scenegraph/stick-text/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IGraphic } from '@visactor/vrender';\nimport type { BaseTableAPI } from '../../ts-types/base-table';\nimport { PIVOT_TABLE_EVENT_TYPE } from '../../ts-types/pivot-table/PIVOT_TABLE_EVENT_TYPE';\nimport type { Group } from '../graphic/group';\nimport type { WrapText } from '../graphic/text';\nimport type { PivotHeaderLayoutMap } from '../../layout/pivot-header-layout';\nimport type { ITextStyleOption } from '../../ts-types';\nconst changedCells: { col: number; row: number }[] = [];\nexport function handleTextStick(table: BaseTableAPI) {\n changedCells.forEach(cellPos => {\n const cellGroup = table.scenegraph.getCell(cellPos.col, cellPos.row);\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttributes({\n dy: 0,\n dx: 0\n });\n });\n });\n changedCells.length = 0;\n\n const { scrollTop, scrollLeft, frozenRowCount, frozenColCount } = table;\n const frozenRowsHeight = table.getFrozenRowsHeight();\n const frozenColsWidth = table.getFrozenColsWidth();\n // 计算非冻结\n const { row: rowStart } = table.getRowAt(scrollTop + frozenRowsHeight + 1);\n const { col: colStart } = table.getColAt(scrollLeft + frozenColsWidth + 1);\n const rowEnd =\n table.getAllRowsHeight() > table.tableNoFrameHeight\n ? table.getRowAt(scrollTop + table.tableNoFrameHeight - 1).row\n : table.rowCount - 1;\n const colEnd =\n table.getAllColsWidth() > table.tableNoFrameWidth\n ? table.getColAt(scrollLeft + table.tableNoFrameWidth - 1).col\n : table.colCount - 1;\n // 列表头单元格\n for (let row = 0; row < frozenRowCount; row++) {\n for (let col = 0; col <= colEnd; col++) {\n if (table._getCellStyle(col, row)?.textStick) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(cellGroup, 0, table.tableNoFrameWidth);\n changedCells.push({ col, row });\n }\n }\n }\n\n if (rowStart === -1) {\n return;\n }\n // 行表头单元格\n for (let row = rowStart; row <= rowEnd; row++) {\n for (let col = 0; col < frozenColCount; col++) {\n if (\n table._getCellStyle(col, row)?.textStick &&\n (table.internalProps.layoutMap as PivotHeaderLayoutMap).rowHierarchyType !== 'tree'\n ) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(cellGroup, frozenRowsHeight, table.tableNoFrameHeight);\n changedCells.push({ col, row });\n }\n }\n }\n // body单元格\n for (let row = rowStart; row <= rowEnd; row++) {\n for (let col = colStart; col <= colEnd; col++) {\n if (table._getCellStyle(col, row)?.textStick) {\n const cellGroup = table.scenegraph.getCell(col, row);\n // adjust cell vertical\n adjustCellContentVerticalLayout(cellGroup, frozenRowsHeight, table.tableNoFrameHeight);\n // adjust cell Horizontal\n adjustCellContentHorizontalLayout(cellGroup, frozenColsWidth, table.tableNoFrameWidth);\n changedCells.push({ col, row });\n }\n }\n }\n}\n\n/*\n * adjust cell content vertical layout\n * @param {Group} cellGroup\n * @param {number} scrollTop\n */\nfunction adjustCellContentVerticalLayout(cellGroup: Group, minTop: number, maxTop: number) {\n // get text element\n const text = cellGroup.getChildByName('text', true) as WrapText;\n if (!text) {\n return;\n }\n text.AABBBounds.width();\n const textTop = text.globalAABBBounds.y1;\n const textBottom = text.globalAABBBounds.y2;\n\n if (textTop < minTop) {\n const deltaHeight = textTop - minTop;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', -deltaHeight + 2); // 2 is the buffer\n });\n } else if (textBottom > maxTop) {\n const deltaHeight = textBottom - maxTop;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dy', -deltaHeight); // 2 is the buffer\n });\n }\n}\n\n/*\n * adjust cell content horizontal layout\n * @param {Group} cellGroup\n * @param {number} scrollLeft\n */\nfunction adjustCellContentHorizontalLayout(cellGroup: Group, minLeft: number, maxLeft: number) {\n // get text element\n const text = cellGroup.getChildByName('text', true) as WrapText;\n if (!text) {\n return;\n }\n text.AABBBounds.width();\n const textLeft = text.globalAABBBounds.x1;\n const textRight = text.globalAABBBounds.x2;\n if (textLeft < minLeft) {\n const deltaWidth = textLeft - minLeft;\n // text is out of view, move all elements right\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', -deltaWidth + 2); // 2 is the buffer\n });\n } else if (textRight > maxLeft) {\n const deltaWidth = textRight - maxLeft;\n // text is out of view, move all elements down\n cellGroup.forEachChildren((child: IGraphic) => {\n child.setAttribute('dx', -deltaWidth); // 2 is the buffer\n });\n }\n}\n\nexport function checkHaveTextStick(table: BaseTableAPI) {\n const headerObjects = table.internalProps.layoutMap.headerObjects;\n const columnObjects = table.internalProps.layoutMap.columnObjects;\n for (let i = 0; i < headerObjects.length; i++) {\n const header = headerObjects[i];\n if (header && (header.define.headerStyle as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n for (let i = 0; i < columnObjects.length; i++) {\n const column = columnObjects[i];\n if (column && (column.define.style as ITextStyleOption)?.textStick) {\n return true;\n }\n }\n return false;\n}\n"]}
|
|
@@ -4,7 +4,8 @@ import type { Group } from '../graphic/group';
|
|
|
4
4
|
import { Icon } from '../graphic/icon';
|
|
5
5
|
import type { Scenegraph } from '../scenegraph';
|
|
6
6
|
import type { BaseTableAPI } from '../../ts-types/base-table';
|
|
7
|
-
export declare function createCellContent(cellGroup: Group, icons: ColumnIconOption[] | null, textStr: string, padding: [number, number, number, number], autoColWidth: boolean, autoRowHeight: boolean, autoWrapText: boolean, lineClamp: number | undefined, cellWidth: number, cellHeight: number, textAlign: CanvasTextAlign, textBaseline: CanvasTextBaseline, table: BaseTableAPI, cellTheme
|
|
7
|
+
export declare function createCellContent(cellGroup: Group, icons: ColumnIconOption[] | null, textStr: string, padding: [number, number, number, number], autoColWidth: boolean, autoRowHeight: boolean, autoWrapText: boolean, lineClamp: number | undefined, cellWidth: number, cellHeight: number, textAlign: CanvasTextAlign, textBaseline: CanvasTextBaseline, table: BaseTableAPI, cellTheme: IThemeSpec): void;
|
|
8
8
|
export declare function dealWithIcon(icon: ColumnIconOption, mark?: Icon, col?: number, row?: number, table?: BaseTableAPI): Icon;
|
|
9
|
+
export declare function dealWithRichTextIcon(icon: ColumnIconOption): any;
|
|
9
10
|
export declare function updateCellContentWidth(cellGroup: Group, distWidth: number, detaX: number, autoRowHeight: boolean, padding: [number, number, number, number], textAlign: CanvasTextAlign, textBaseline: CanvasTextBaseline, scene: Scenegraph): boolean;
|
|
10
11
|
export declare function updateCellContentHeight(cellGroup: Group, distHeight: number, detaY: number, autoRowHeight: boolean, padding: [number, number, number, number], textAlign: CanvasTextAlign, textBaseline: CanvasTextBaseline): void;
|
|
@@ -84,13 +84,13 @@ export function createCellContent(cellGroup, icons, textStr, padding, autoColWid
|
|
|
84
84
|
pickable: !1,
|
|
85
85
|
autoWrapText: autoWrapText,
|
|
86
86
|
lineClamp: lineClamp
|
|
87
|
-
}, wrapText = new WrapText(cellTheme
|
|
87
|
+
}, wrapText = new WrapText(cellTheme.text ? Object.assign({}, cellTheme.text, attribute) : attribute);
|
|
88
88
|
wrapText.name = "text", textMark = wrapText;
|
|
89
89
|
} else {
|
|
90
90
|
const textOption = Object.assign({
|
|
91
91
|
text: null == textStr ? void 0 : textStr.toString()
|
|
92
92
|
}, (null === (_c = null === (_b = null === (_a = cellGroup.parent) || void 0 === _a ? void 0 : _a.theme) || void 0 === _b ? void 0 : _b.userTheme) || void 0 === _c ? void 0 : _c.text) || {});
|
|
93
|
-
cellTheme
|
|
93
|
+
cellTheme.text && Object.assign(textOption, cellTheme.text), textOption.textBaseline = "middle";
|
|
94
94
|
const textConfig = [ ...inlineFrontIcons.map((icon => dealWithRichTextIcon(icon))), textOption, ...inlineEndIcons.map((icon => dealWithRichTextIcon(icon))) ];
|
|
95
95
|
textConfig[0].textAlign = textAlign;
|
|
96
96
|
const text = new RichText({
|
|
@@ -135,7 +135,7 @@ export function createCellContent(cellGroup, icons, textStr, padding, autoColWid
|
|
|
135
135
|
heightLimit: autoRowHeight ? -1 : cellHeight - (padding[0] + padding[2]),
|
|
136
136
|
pickable: !1,
|
|
137
137
|
dx: hierarchyOffset
|
|
138
|
-
}, wrapText = new WrapText(cellTheme
|
|
138
|
+
}, wrapText = new WrapText(cellTheme.text ? Object.assign({}, cellTheme.text, attribute) : attribute);
|
|
139
139
|
wrapText.name = "text", cellGroup.appendChild(wrapText), contentWidth = wrapText.AABBBounds.width(),
|
|
140
140
|
contentHeight = wrapText.AABBBounds.height();
|
|
141
141
|
}
|
|
@@ -171,7 +171,7 @@ export function dealWithIcon(icon, mark, col, row, table) {
|
|
|
171
171
|
return iconMark.tooltip = icon.tooltip, iconMark;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
function dealWithRichTextIcon(icon) {
|
|
174
|
+
export function dealWithRichTextIcon(icon) {
|
|
175
175
|
var _a, _b, _c, _d, _e, _f;
|
|
176
176
|
const config = {};
|
|
177
177
|
return "image" === icon.type ? config.image = icon.src : ("svg" === icon.type || "svg" in icon) && (config.image = icon.svg),
|