-
-
Notifications
You must be signed in to change notification settings - Fork 129
/
cellrenderer.ts
131 lines (117 loc) · 3.39 KB
/
cellrenderer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
/*-----------------------------------------------------------------------------
| Copyright (c) 2014-2019, PhosphorJS Contributors
|
| Distributed under the terms of the BSD 3-Clause License.
|
| The full license is in the file LICENSE, distributed with this software.
|----------------------------------------------------------------------------*/
import { DataModel } from './datamodel';
import { GraphicsContext } from './graphicscontext';
/**
* An object which renders the cells of a data grid.
*
* #### Notes
* If the predefined cell renderers are insufficient for a particular
* use case, a custom cell renderer can be defined which derives from
* this class.
*
* The data grid renders cells in column-major order, by region. The
* region order is: body, row header, column header, corner header.
*/
export abstract class CellRenderer {
/**
* Paint the content for a cell.
*
* @param gc - The graphics context to use for drawing.
*
* @param config - The configuration data for the cell.
*
* #### Notes
* The grid will save/restore the `gc` state before/after invoking
* the renderer.
*
* For performance, the cell content is efficiently clipped to the
* width of the column, but *the height is not clipped*. If height
* clipping is needed, the renderer must set up its own clip rect.
*
* The renderer **must not** draw outside the cell bounding height.
*/
abstract paint(gc: GraphicsContext, config: CellRenderer.CellConfig): void;
}
/**
* The namespace for the `CellRenderer` class statics.
*/
export namespace CellRenderer {
/**
* An object which holds the configuration data for a cell.
*/
export type CellConfig = {
/**
* The X position of the cell rectangle, in viewport coordinates.
*/
readonly x: number;
/**
* The Y position of the cell rectangle, in viewport coordinates.
*/
readonly y: number;
/**
* The height of the cell rectangle, in viewport pixels.
*/
readonly height: number;
/**
* The width of the cell rectangle, in viewport pixels.
*/
readonly width: number;
/**
* The region for the cell.
*/
readonly region: DataModel.CellRegion;
/**
* The row index of the cell.
*/
readonly row: number;
/**
* The column index of the cell.
*/
readonly column: number;
/**
* The value for the cell.
*/
readonly value: any;
/**
* The metadata for the cell.
*/
readonly metadata: DataModel.Metadata;
};
/**
* A type alias for a cell renderer config function.
*
* This type is used to compute a value from a cell config object.
*/
export type ConfigFunc<T> = (config: CellConfig) => T;
/**
* A type alias for a cell renderer config option.
*
* A config option can be a static value or a config function.
*/
export type ConfigOption<T> = T | ConfigFunc<T>;
/**
* Resolve a config option for a cell renderer.
*
* @param option - The config option to resolve.
*
* @param config - The cell config object.
*
* @returns The resolved value for the option.
*/
export function resolveOption<T>(
option: ConfigOption<T>,
config: CellConfig
): T {
return typeof option === 'function'
? (option as ConfigFunc<T>)(config)
: option;
}
}