@deephaven/grid 0.7.3-beta.8 → 0.8.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/dist/CellInputField.d.ts +4 -4
- package/dist/CellInputField.d.ts.map +1 -1
- package/dist/CellInputField.js +10 -11
- package/dist/CellInputField.js.map +1 -1
- package/dist/EditableGridModel.d.ts +70 -0
- package/dist/EditableGridModel.d.ts.map +1 -0
- package/dist/EditableGridModel.js +13 -0
- package/dist/EditableGridModel.js.map +1 -0
- package/dist/EventHandlerResult.d.ts +17 -0
- package/dist/EventHandlerResult.d.ts.map +1 -0
- package/dist/EventHandlerResult.js +2 -0
- package/dist/EventHandlerResult.js.map +1 -0
- package/dist/ExpandableGridModel.d.ts +34 -0
- package/dist/ExpandableGridModel.d.ts.map +1 -0
- package/dist/ExpandableGridModel.js +7 -0
- package/dist/ExpandableGridModel.js.map +1 -0
- package/dist/Grid.d.ts +283 -234
- package/dist/Grid.d.ts.map +1 -1
- package/dist/Grid.js +397 -165
- package/dist/Grid.js.map +1 -1
- package/dist/GridColorUtils.d.ts +22 -12
- package/dist/GridColorUtils.d.ts.map +1 -1
- package/dist/GridColorUtils.js +26 -21
- package/dist/GridColorUtils.js.map +1 -1
- package/dist/GridMetricCalculator.d.ts.map +1 -1
- package/dist/GridMetricCalculator.js +8 -4
- package/dist/GridMetricCalculator.js.map +1 -1
- package/dist/GridModel.d.ts +54 -60
- package/dist/GridModel.d.ts.map +1 -1
- package/dist/GridModel.js +54 -122
- package/dist/GridModel.js.map +1 -1
- package/dist/GridMouseHandler.d.ts +23 -24
- package/dist/GridMouseHandler.d.ts.map +1 -1
- package/dist/GridMouseHandler.js +8 -14
- package/dist/GridMouseHandler.js.map +1 -1
- package/dist/GridRange.d.ts +2 -2
- package/dist/GridRange.d.ts.map +1 -1
- package/dist/GridRange.js +1 -1
- package/dist/GridRange.js.map +1 -1
- package/dist/GridRenderer.d.ts +117 -69
- package/dist/GridRenderer.d.ts.map +1 -1
- package/dist/GridRenderer.js +183 -168
- package/dist/GridRenderer.js.map +1 -1
- package/dist/GridUtils.d.ts +4 -4
- package/dist/GridUtils.js +4 -4
- package/dist/GridUtils.js.map +1 -1
- package/dist/KeyHandler.d.ts +10 -7
- package/dist/KeyHandler.d.ts.map +1 -1
- package/dist/KeyHandler.js +6 -5
- package/dist/KeyHandler.js.map +1 -1
- package/dist/MockGridData.d.ts +1 -1
- package/dist/MockGridData.d.ts.map +1 -1
- package/dist/MockGridData.js.map +1 -1
- package/dist/MockGridModel.d.ts +39 -12
- package/dist/MockGridModel.d.ts.map +1 -1
- package/dist/MockGridModel.js +43 -10
- package/dist/MockGridModel.js.map +1 -1
- package/dist/MockTreeGridModel.d.ts +37 -22
- package/dist/MockTreeGridModel.d.ts.map +1 -1
- package/dist/MockTreeGridModel.js +38 -20
- package/dist/MockTreeGridModel.js.map +1 -1
- package/dist/errors/AssertionError.d.ts +5 -0
- package/dist/errors/AssertionError.d.ts.map +1 -0
- package/dist/errors/AssertionError.js +12 -0
- package/dist/errors/AssertionError.js.map +1 -0
- package/dist/errors/PasteError.d.ts +1 -1
- package/dist/errors/PasteError.d.ts.map +1 -1
- package/dist/errors/PasteError.js +1 -2
- package/dist/errors/PasteError.js.map +1 -1
- package/dist/errors/assertIsDefined.d.ts +3 -0
- package/dist/errors/assertIsDefined.d.ts.map +1 -0
- package/dist/errors/assertIsDefined.js +8 -0
- package/dist/errors/assertIsDefined.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -1
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/key-handlers/EditKeyHandler.d.ts +3 -2
- package/dist/key-handlers/EditKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/EditKeyHandler.js +10 -9
- package/dist/key-handlers/EditKeyHandler.js.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.d.ts +3 -5
- package/dist/key-handlers/PasteKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/PasteKeyHandler.js +3 -3
- package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.d.ts +5 -5
- package/dist/key-handlers/SelectionKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/SelectionKeyHandler.js +16 -15
- package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.d.ts +2 -2
- package/dist/key-handlers/TreeKeyHandler.d.ts.map +1 -1
- package/dist/key-handlers/TreeKeyHandler.js +14 -12
- package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
- package/dist/memoizeClear.d.ts +13 -3
- package/dist/memoizeClear.d.ts.map +1 -1
- package/dist/memoizeClear.js +7 -7
- package/dist/memoizeClear.js.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.d.ts +3 -4
- package/dist/mouse-handlers/EditMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/EditMouseHandler.js +3 -2
- package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts +12 -5
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +13 -10
- package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts +24 -3
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +2 -1
- package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts +16 -6
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +41 -37
- package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts +10 -3
- package/dist/mouse-handlers/GridRowMoveMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js +14 -11
- package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts +24 -3
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +4 -3
- package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts +8 -3
- package/dist/mouse-handlers/GridRowTreeMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js +12 -7
- package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts +9 -3
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +2 -1
- package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts +15 -9
- package/dist/mouse-handlers/GridSelectionMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSelectionMouseHandler.js +26 -16
- package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts +46 -28
- package/dist/mouse-handlers/GridSeparatorMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js +57 -74
- package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts +16 -6
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.d.ts.map +1 -1
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +41 -37
- package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/GridRenderer.js
CHANGED
|
@@ -3,6 +3,10 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
3
3
|
import memoizeClear from "./memoizeClear.js";
|
|
4
4
|
import GridUtils from "./GridUtils.js";
|
|
5
5
|
import GridColorUtils from "./GridColorUtils.js";
|
|
6
|
+
import { isExpandableGridModel } from "./ExpandableGridModel.js";
|
|
7
|
+
import { getOrThrow } from "./GridMetricCalculator.js";
|
|
8
|
+
import { isEditableGridModel } from "./EditableGridModel.js";
|
|
9
|
+
|
|
6
10
|
/* eslint react/destructuring-assignment: "off" */
|
|
7
11
|
|
|
8
12
|
/* eslint class-methods-use-this: "off" */
|
|
@@ -14,8 +18,7 @@ import GridColorUtils from "./GridColorUtils.js";
|
|
|
14
18
|
* This default rendering just renders a basic grid. Extend this class and implement
|
|
15
19
|
* your own methods to customize drawing of the grid (eg. Draw icons or special features)
|
|
16
20
|
*/
|
|
17
|
-
|
|
18
|
-
class GridRenderer {
|
|
21
|
+
export class GridRenderer {
|
|
19
22
|
constructor() {
|
|
20
23
|
_defineProperty(this, "getCachedTruncatedString", memoizeClear((context, text, width, fontWidth) => GridRenderer.truncateToWidth(context, text, width, fontWidth), {
|
|
21
24
|
max: 10000
|
|
@@ -39,9 +42,10 @@ class GridRenderer {
|
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
/**
|
|
42
|
-
* Truncate a string and add ellipses if necessary
|
|
43
|
-
* @param
|
|
44
|
-
* @param
|
|
45
|
+
* Truncate a string to the specified length and add ellipses if necessary
|
|
46
|
+
* @param str The string to truncate
|
|
47
|
+
* @param len The length to truncate the string to. If longer than the actual string, just returns the string
|
|
48
|
+
* @returns The truncated string
|
|
45
49
|
*/
|
|
46
50
|
static truncate(str, len) {
|
|
47
51
|
if (len < str.length) {
|
|
@@ -53,11 +57,12 @@ class GridRenderer {
|
|
|
53
57
|
}
|
|
54
58
|
/**
|
|
55
59
|
* Uses binary search to truncate a string to fit in the provided width
|
|
56
|
-
* @param
|
|
57
|
-
* @param
|
|
58
|
-
* @param
|
|
59
|
-
* @param
|
|
60
|
-
* @param
|
|
60
|
+
* @param context The drawing context to measure the text in
|
|
61
|
+
* @param str The string to get the maximum length it can draw
|
|
62
|
+
* @param width The width to truncate it to
|
|
63
|
+
* @param start The low boundary to start the search
|
|
64
|
+
* @param end The high boundary to start the search
|
|
65
|
+
* @returns The truncated string
|
|
61
66
|
*/
|
|
62
67
|
|
|
63
68
|
|
|
@@ -105,11 +110,11 @@ class GridRenderer {
|
|
|
105
110
|
* Truncate a string (if necessary) to fit in the specified width.
|
|
106
111
|
* First uses the estimated font width to calculate a lower/upper bound
|
|
107
112
|
* Then uses binary search within those bounds to find the exact max length
|
|
108
|
-
* @param
|
|
109
|
-
* @param
|
|
110
|
-
* @param
|
|
111
|
-
* @param
|
|
112
|
-
* @returns
|
|
113
|
+
* @param context The drawing context
|
|
114
|
+
* @param str The string to calculate max length for
|
|
115
|
+
* @param width The width to truncate within
|
|
116
|
+
* @param fontWidth The estimated width of each character
|
|
117
|
+
* @returns The truncated string that fits within the width provided
|
|
113
118
|
*/
|
|
114
119
|
|
|
115
120
|
|
|
@@ -128,9 +133,8 @@ class GridRenderer {
|
|
|
128
133
|
return GridRenderer.binaryTruncateToWidth(context, str, width, lo, hi);
|
|
129
134
|
}
|
|
130
135
|
/**
|
|
131
|
-
*
|
|
132
|
-
* @param
|
|
133
|
-
* @param {GridState} state State of the grid, { left, top, mouseX, mouseY, selectedRanges, theme, model, metrics }
|
|
136
|
+
* Draw the grid canvas with the state provided
|
|
137
|
+
* @param state The state of the grid
|
|
134
138
|
*/
|
|
135
139
|
|
|
136
140
|
|
|
@@ -192,12 +196,12 @@ class GridRenderer {
|
|
|
192
196
|
|
|
193
197
|
drawFloatingRows(context, state) {
|
|
194
198
|
var {
|
|
199
|
+
draggingRow,
|
|
200
|
+
draggingColumn,
|
|
195
201
|
metrics,
|
|
196
202
|
theme
|
|
197
203
|
} = state;
|
|
198
204
|
var {
|
|
199
|
-
draggingRow,
|
|
200
|
-
draggingColumn,
|
|
201
205
|
floatingTopRowCount,
|
|
202
206
|
floatingBottomRowCount,
|
|
203
207
|
floatingRows,
|
|
@@ -227,17 +231,17 @@ class GridRenderer {
|
|
|
227
231
|
this.drawSelectedRanges(context, state, {
|
|
228
232
|
top: 0,
|
|
229
233
|
bottom: floatingTopRowCount - 1,
|
|
230
|
-
maxY: visibleRowYs
|
|
231
|
-
}
|
|
234
|
+
maxY: getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) - 0.5
|
|
235
|
+
});
|
|
232
236
|
}
|
|
233
237
|
|
|
234
238
|
if (floatingBottomRowCount > 0) {
|
|
235
239
|
this.drawSelectedRanges(context, state, {
|
|
236
240
|
top: rowCount - floatingBottomRowCount - 1,
|
|
237
241
|
bottom: rowCount - 1,
|
|
238
|
-
minY: visibleRowYs
|
|
239
|
-
maxY: visibleRowYs
|
|
240
|
-
}
|
|
242
|
+
minY: getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) + 0.5,
|
|
243
|
+
maxY: getOrThrow(visibleRowYs, rowCount - 1) + getOrThrow(visibleRowHeights, rowCount - 1) - 0.5
|
|
244
|
+
});
|
|
241
245
|
} // Draw the cell content...
|
|
242
246
|
|
|
243
247
|
|
|
@@ -253,12 +257,12 @@ class GridRenderer {
|
|
|
253
257
|
|
|
254
258
|
drawFloatingColumns(context, state) {
|
|
255
259
|
var {
|
|
260
|
+
draggingRow,
|
|
261
|
+
draggingColumn,
|
|
256
262
|
metrics,
|
|
257
263
|
theme
|
|
258
264
|
} = state;
|
|
259
265
|
var {
|
|
260
|
-
draggingRow,
|
|
261
|
-
draggingColumn,
|
|
262
266
|
floatingLeftColumnCount,
|
|
263
267
|
floatingRightColumnCount,
|
|
264
268
|
floatingLeftWidth,
|
|
@@ -300,17 +304,17 @@ class GridRenderer {
|
|
|
300
304
|
if (floatingLeftColumnCount > 0) {
|
|
301
305
|
this.drawSelectedRanges(context, state, {
|
|
302
306
|
left: 0,
|
|
303
|
-
maxX: visibleColumnXs
|
|
304
|
-
}
|
|
307
|
+
maxX: getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1)
|
|
308
|
+
});
|
|
305
309
|
}
|
|
306
310
|
|
|
307
311
|
if (floatingRightColumnCount > 0) {
|
|
308
312
|
this.drawSelectedRanges(context, state, {
|
|
309
313
|
left: columnCount - floatingRightColumnCount,
|
|
310
314
|
right: columnCount - 1,
|
|
311
|
-
minX: visibleColumnXs
|
|
312
|
-
maxX: visibleColumnXs
|
|
313
|
-
}
|
|
315
|
+
minX: getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) + 0.5,
|
|
316
|
+
maxX: getOrThrow(visibleColumnXs, columnCount - 1) + getOrThrow(visibleColumnWidths, columnCount - 1)
|
|
317
|
+
});
|
|
314
318
|
} // Draw the cell content...
|
|
315
319
|
|
|
316
320
|
|
|
@@ -352,26 +356,26 @@ class GridRenderer {
|
|
|
352
356
|
context.strokeStyle = floatingDividerOuterColor;
|
|
353
357
|
|
|
354
358
|
if (floatingTopRowCount > 0) {
|
|
355
|
-
var y = visibleRowYs
|
|
359
|
+
var y = getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) + 0.5;
|
|
356
360
|
context.moveTo(0.5, y);
|
|
357
361
|
context.lineTo(maxX - 0.5, y);
|
|
358
362
|
}
|
|
359
363
|
|
|
360
364
|
if (floatingBottomRowCount > 0) {
|
|
361
|
-
var _y = visibleRowYs
|
|
365
|
+
var _y = getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;
|
|
362
366
|
|
|
363
367
|
context.moveTo(0.5, _y);
|
|
364
368
|
context.lineTo(maxX - 0.5, _y);
|
|
365
369
|
}
|
|
366
370
|
|
|
367
371
|
if (floatingLeftColumnCount > 0) {
|
|
368
|
-
var x = visibleColumnXs
|
|
372
|
+
var x = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) + 0.5;
|
|
369
373
|
context.moveTo(x, 0.5);
|
|
370
374
|
context.lineTo(x, maxY - 0.5);
|
|
371
375
|
}
|
|
372
376
|
|
|
373
377
|
if (floatingRightColumnCount > 0) {
|
|
374
|
-
var _x = visibleColumnXs
|
|
378
|
+
var _x = getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) - 0.5;
|
|
375
379
|
|
|
376
380
|
context.moveTo(_x, 0.5);
|
|
377
381
|
context.lineTo(_x, maxY - 0.5);
|
|
@@ -383,28 +387,28 @@ class GridRenderer {
|
|
|
383
387
|
context.strokeStyle = floatingDividerInnerColor;
|
|
384
388
|
|
|
385
389
|
if (floatingTopRowCount > 0) {
|
|
386
|
-
var _y2 = visibleRowYs
|
|
390
|
+
var _y2 = getOrThrow(visibleRowYs, floatingTopRowCount - 1) + getOrThrow(visibleRowHeights, floatingTopRowCount - 1) + 0.5;
|
|
387
391
|
|
|
388
392
|
context.moveTo(0.5, _y2);
|
|
389
393
|
context.lineTo(maxX - 0.5, _y2);
|
|
390
394
|
}
|
|
391
395
|
|
|
392
396
|
if (floatingBottomRowCount > 0) {
|
|
393
|
-
var _y3 = visibleRowYs
|
|
397
|
+
var _y3 = getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount) - 0.5;
|
|
394
398
|
|
|
395
399
|
context.moveTo(0.5, _y3);
|
|
396
400
|
context.lineTo(maxX - 0.5, _y3);
|
|
397
401
|
}
|
|
398
402
|
|
|
399
403
|
if (floatingLeftColumnCount > 0) {
|
|
400
|
-
var _x2 = visibleColumnXs
|
|
404
|
+
var _x2 = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1) + 0.5;
|
|
401
405
|
|
|
402
406
|
context.moveTo(_x2, 0.5);
|
|
403
407
|
context.lineTo(_x2, maxY - 0.5);
|
|
404
408
|
}
|
|
405
409
|
|
|
406
410
|
if (floatingRightColumnCount > 0) {
|
|
407
|
-
var _x3 = visibleColumnXs
|
|
411
|
+
var _x3 = getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount) - 0.5;
|
|
408
412
|
|
|
409
413
|
context.moveTo(_x3, 0.5);
|
|
410
414
|
context.lineTo(_x3, maxY - 0.5);
|
|
@@ -433,7 +437,7 @@ class GridRenderer {
|
|
|
433
437
|
floatingBottomRowCount,
|
|
434
438
|
floatingLeftColumnCount,
|
|
435
439
|
floatingRightColumnCount,
|
|
436
|
-
|
|
440
|
+
floatingTopRowCount,
|
|
437
441
|
columnCount,
|
|
438
442
|
rowCount,
|
|
439
443
|
visibleRowHeights,
|
|
@@ -446,10 +450,10 @@ class GridRenderer {
|
|
|
446
450
|
this.drawSelectedRanges(context, state, {
|
|
447
451
|
bottom: Math.min(bottom, rowCount - floatingBottomRowCount - 1),
|
|
448
452
|
right: Math.min(right, columnCount - floatingRightColumnCount - 1),
|
|
449
|
-
minX: floatingLeftColumnCount > 0 && visibleColumnXs.has(floatingLeftColumnCount + 1) ? visibleColumnXs
|
|
450
|
-
minY:
|
|
451
|
-
maxX: floatingRightColumnCount > 0 && visibleColumnXs.has(columnCount - floatingRightColumnCount - 1) ? visibleColumnXs
|
|
452
|
-
maxY: floatingBottomRowCount > 0 && visibleRowYs.has(rowCount - floatingBottomRowCount - 1) ? visibleRowYs
|
|
453
|
+
minX: floatingLeftColumnCount > 0 && visibleColumnXs.has(floatingLeftColumnCount + 1) ? getOrThrow(visibleColumnXs, floatingLeftColumnCount + 1) : -10,
|
|
454
|
+
minY: floatingTopRowCount > 0 && visibleRowYs.has(floatingTopRowCount + 1) ? getOrThrow(visibleRowYs, floatingTopRowCount + 1) : -10,
|
|
455
|
+
maxX: floatingRightColumnCount > 0 && visibleColumnXs.has(columnCount - floatingRightColumnCount - 1) ? getOrThrow(visibleColumnXs, columnCount - floatingRightColumnCount - 1) + getOrThrow(visibleColumnWidths, columnCount - floatingRightColumnCount - 1) - 0.5 : width + 10,
|
|
456
|
+
maxY: floatingBottomRowCount > 0 && visibleRowYs.has(rowCount - floatingBottomRowCount - 1) ? getOrThrow(visibleRowYs, rowCount - floatingBottomRowCount - 1) + getOrThrow(visibleRowHeights, rowCount - floatingBottomRowCount - 1) - 0.5 : height + 10
|
|
453
457
|
});
|
|
454
458
|
}
|
|
455
459
|
|
|
@@ -497,7 +501,7 @@ class GridRenderer {
|
|
|
497
501
|
var bottomShadowRows = [];
|
|
498
502
|
|
|
499
503
|
var addRowToColorMap = (row, rowAbove) => {
|
|
500
|
-
var depth = model.depthForRow(row);
|
|
504
|
+
var depth = isExpandableGridModel(model) ? model.depthForRow(row) : 0;
|
|
501
505
|
var colorSet = colorSets[row % colorSets.length];
|
|
502
506
|
var color = colorSet[Math.min(depth, colorSet.length - 1)];
|
|
503
507
|
|
|
@@ -508,7 +512,7 @@ class GridRenderer {
|
|
|
508
512
|
colorRowMap.get(color).push(row);
|
|
509
513
|
|
|
510
514
|
if (rowAbove != null) {
|
|
511
|
-
var depthAbove = model.depthForRow(rowAbove);
|
|
515
|
+
var depthAbove = isExpandableGridModel(model) ? model.depthForRow(rowAbove) : 0;
|
|
512
516
|
|
|
513
517
|
if (depthAbove < depth) {
|
|
514
518
|
topShadowRows.push(row);
|
|
@@ -521,7 +525,7 @@ class GridRenderer {
|
|
|
521
525
|
|
|
522
526
|
for (var i = 0; i < rows.length; i += 1) {
|
|
523
527
|
var row = rows[i];
|
|
524
|
-
var rowAbove = i > 0 ? rows[i - 1] :
|
|
528
|
+
var rowAbove = i > 0 ? rows[i - 1] : undefined;
|
|
525
529
|
addRowToColorMap(row, rowAbove);
|
|
526
530
|
}
|
|
527
531
|
|
|
@@ -531,8 +535,8 @@ class GridRenderer {
|
|
|
531
535
|
|
|
532
536
|
for (var _i = 0; _i < colorRows.length; _i += 1) {
|
|
533
537
|
var _row = colorRows[_i];
|
|
534
|
-
var y = visibleRowYs
|
|
535
|
-
var rowHeight = visibleRowHeights
|
|
538
|
+
var y = getOrThrow(visibleRowYs, _row);
|
|
539
|
+
var rowHeight = getOrThrow(visibleRowHeights, _row);
|
|
536
540
|
context.rect(minX, y, maxX, rowHeight);
|
|
537
541
|
}
|
|
538
542
|
|
|
@@ -550,7 +554,7 @@ class GridRenderer {
|
|
|
550
554
|
|
|
551
555
|
for (var _i2 = 0; _i2 < topShadowRows.length; _i2 += 1) {
|
|
552
556
|
var _row2 = topShadowRows[_i2];
|
|
553
|
-
var y = visibleRowYs
|
|
557
|
+
var y = getOrThrow(visibleRowYs, _row2); // Use a translate so we can reuse the gradient
|
|
554
558
|
|
|
555
559
|
context.translate(0, y);
|
|
556
560
|
context.fillRect(minX, 0, maxX, shadowBlur);
|
|
@@ -578,9 +582,9 @@ class GridRenderer {
|
|
|
578
582
|
for (var _i3 = 0; _i3 < bottomShadowRows.length; _i3 += 1) {
|
|
579
583
|
var _row3 = bottomShadowRows[_i3];
|
|
580
584
|
|
|
581
|
-
var _y4 = visibleRowYs
|
|
585
|
+
var _y4 = getOrThrow(visibleRowYs, _row3);
|
|
582
586
|
|
|
583
|
-
var rowHeight = visibleRowHeights
|
|
587
|
+
var rowHeight = getOrThrow(visibleRowHeights, _row3);
|
|
584
588
|
var gradientY = _y4 + rowHeight - shadowBlur; // Use a translate so we can reuse the gradient
|
|
585
589
|
|
|
586
590
|
context.translate(0, gradientY);
|
|
@@ -599,6 +603,7 @@ class GridRenderer {
|
|
|
599
603
|
theme,
|
|
600
604
|
metrics
|
|
601
605
|
} = state;
|
|
606
|
+
if (mouseX == null || mouseY == null) return;
|
|
602
607
|
var mouseColumn = GridUtils.getColumnAtX(mouseX, metrics);
|
|
603
608
|
|
|
604
609
|
if (mouseColumn == null || !theme.columnHoverBackgroundColor) {
|
|
@@ -615,8 +620,8 @@ class GridRenderer {
|
|
|
615
620
|
return;
|
|
616
621
|
}
|
|
617
622
|
|
|
618
|
-
var x = visibleColumnXs
|
|
619
|
-
var columnWidth = visibleColumnWidths
|
|
623
|
+
var x = getOrThrow(visibleColumnXs, mouseColumn);
|
|
624
|
+
var columnWidth = getOrThrow(visibleColumnWidths, mouseColumn);
|
|
620
625
|
context.fillStyle = theme.columnHoverBackgroundColor;
|
|
621
626
|
context.fillRect(x, 0, columnWidth, maxY);
|
|
622
627
|
}
|
|
@@ -628,6 +633,7 @@ class GridRenderer {
|
|
|
628
633
|
theme,
|
|
629
634
|
metrics
|
|
630
635
|
} = state;
|
|
636
|
+
if (mouseX == null || mouseY == null) return;
|
|
631
637
|
var {
|
|
632
638
|
maxX
|
|
633
639
|
} = metrics;
|
|
@@ -660,7 +666,7 @@ class GridRenderer {
|
|
|
660
666
|
rowFooterWidth
|
|
661
667
|
} = metrics;
|
|
662
668
|
|
|
663
|
-
if (mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {
|
|
669
|
+
if (mouseX == null || mouseY == null || mouseX > maxX + rowFooterWidth || !theme.rowHoverBackgroundColor) {
|
|
664
670
|
return;
|
|
665
671
|
}
|
|
666
672
|
|
|
@@ -682,13 +688,24 @@ class GridRenderer {
|
|
|
682
688
|
visibleRowYs,
|
|
683
689
|
maxX
|
|
684
690
|
} = metrics;
|
|
685
|
-
var y = visibleRowYs
|
|
686
|
-
var rowHeight = visibleRowHeights
|
|
687
|
-
|
|
691
|
+
var y = getOrThrow(visibleRowYs, row);
|
|
692
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
693
|
+
|
|
694
|
+
if (theme.rowHoverBackgroundColor) {
|
|
695
|
+
context.fillStyle = theme.rowHoverBackgroundColor;
|
|
696
|
+
}
|
|
688
697
|
|
|
689
698
|
for (var i = 0; i < selectedRanges.length; i += 1) {
|
|
690
|
-
|
|
691
|
-
|
|
699
|
+
var {
|
|
700
|
+
startRow,
|
|
701
|
+
endRow
|
|
702
|
+
} = selectedRanges[i];
|
|
703
|
+
|
|
704
|
+
if (startRow != null && endRow != null && startRow <= row && endRow >= row) {
|
|
705
|
+
if (theme.selectedRowHoverBackgroundColor) {
|
|
706
|
+
context.fillStyle = theme.selectedRowHoverBackgroundColor;
|
|
707
|
+
}
|
|
708
|
+
|
|
692
709
|
break;
|
|
693
710
|
}
|
|
694
711
|
}
|
|
@@ -740,7 +757,7 @@ class GridRenderer {
|
|
|
740
757
|
|
|
741
758
|
for (var i = 0; i < columns.length; i += 1) {
|
|
742
759
|
var column = columns[i];
|
|
743
|
-
var x = visibleColumnXs
|
|
760
|
+
var x = getOrThrow(visibleColumnXs, column) + 0.5;
|
|
744
761
|
context.moveTo(x, 0);
|
|
745
762
|
context.lineTo(x, maxY);
|
|
746
763
|
}
|
|
@@ -758,7 +775,7 @@ class GridRenderer {
|
|
|
758
775
|
|
|
759
776
|
for (var i = 0; i < rows.length; i += 1) {
|
|
760
777
|
var row = rows[i];
|
|
761
|
-
var y = visibleRowYs
|
|
778
|
+
var y = getOrThrow(visibleRowYs, row) + 0.5;
|
|
762
779
|
context.moveTo(0.5, y);
|
|
763
780
|
context.lineTo(maxX - 0.5, y);
|
|
764
781
|
}
|
|
@@ -783,7 +800,7 @@ class GridRenderer {
|
|
|
783
800
|
|
|
784
801
|
for (var j = 0; j < rows.length; j += 1) {
|
|
785
802
|
var row = rows[j];
|
|
786
|
-
var rowAfter = j + 1 < rows.length ? rows[j + 1] :
|
|
803
|
+
var rowAfter = j + 1 < rows.length ? rows[j + 1] : undefined;
|
|
787
804
|
this.drawCellBackground(context, state, column, row, rowAfter);
|
|
788
805
|
}
|
|
789
806
|
}
|
|
@@ -795,9 +812,6 @@ class GridRenderer {
|
|
|
795
812
|
var {
|
|
796
813
|
metrics,
|
|
797
814
|
model,
|
|
798
|
-
model: {
|
|
799
|
-
hasExpandableRows
|
|
800
|
-
},
|
|
801
815
|
theme
|
|
802
816
|
} = state;
|
|
803
817
|
var {
|
|
@@ -809,16 +823,17 @@ class GridRenderer {
|
|
|
809
823
|
visibleRowYs,
|
|
810
824
|
visibleRowHeights
|
|
811
825
|
} = metrics;
|
|
812
|
-
var modelRow = modelRows
|
|
813
|
-
var modelColumn = modelColumns
|
|
826
|
+
var modelRow = getOrThrow(modelRows, row);
|
|
827
|
+
var modelColumn = getOrThrow(modelColumns, column);
|
|
814
828
|
var backgroundColor = model.backgroundColorForCell(modelColumn, modelRow, theme);
|
|
815
829
|
var isFirstColumn = column === firstColumn;
|
|
830
|
+
var hasExpandableRows = isExpandableGridModel(model) && model.hasExpandableRows;
|
|
816
831
|
|
|
817
832
|
if (backgroundColor) {
|
|
818
|
-
var x = visibleColumnXs
|
|
819
|
-
var y = visibleRowYs
|
|
820
|
-
var columnWidth = visibleColumnWidths
|
|
821
|
-
var rowHeight = visibleRowHeights
|
|
833
|
+
var x = getOrThrow(visibleColumnXs, column) + 1;
|
|
834
|
+
var y = getOrThrow(visibleRowYs, row) + 1;
|
|
835
|
+
var columnWidth = getOrThrow(visibleColumnWidths, column) - 1;
|
|
836
|
+
var rowHeight = getOrThrow(visibleRowHeights, row) - 1;
|
|
822
837
|
context.fillStyle = backgroundColor;
|
|
823
838
|
context.fillRect(x, y, columnWidth, rowHeight);
|
|
824
839
|
}
|
|
@@ -852,8 +867,8 @@ class GridRenderer {
|
|
|
852
867
|
visibleRows,
|
|
853
868
|
height
|
|
854
869
|
} = metrics;
|
|
855
|
-
var x = visibleColumnXs
|
|
856
|
-
var columnWidth = visibleColumnWidths
|
|
870
|
+
var x = getOrThrow(visibleColumnXs, column);
|
|
871
|
+
var columnWidth = getOrThrow(visibleColumnWidths, column);
|
|
857
872
|
context.save();
|
|
858
873
|
context.beginPath();
|
|
859
874
|
context.rect(x, 0, columnWidth, height);
|
|
@@ -871,9 +886,6 @@ class GridRenderer {
|
|
|
871
886
|
var {
|
|
872
887
|
metrics,
|
|
873
888
|
model,
|
|
874
|
-
model: {
|
|
875
|
-
hasExpandableRows
|
|
876
|
-
},
|
|
877
889
|
theme
|
|
878
890
|
} = state;
|
|
879
891
|
var {
|
|
@@ -892,23 +904,25 @@ class GridRenderer {
|
|
|
892
904
|
treeHorizontalPadding,
|
|
893
905
|
textColor
|
|
894
906
|
} = theme;
|
|
895
|
-
var x = visibleColumnXs
|
|
896
|
-
var y = visibleRowYs
|
|
897
|
-
var columnWidth = visibleColumnWidths
|
|
898
|
-
var rowHeight = visibleRowHeights
|
|
899
|
-
var modelRow = modelRows
|
|
900
|
-
var modelColumn = modelColumns
|
|
907
|
+
var x = getOrThrow(visibleColumnXs, column);
|
|
908
|
+
var y = getOrThrow(visibleRowYs, row);
|
|
909
|
+
var columnWidth = getOrThrow(visibleColumnWidths, column);
|
|
910
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
911
|
+
var modelRow = getOrThrow(modelRows, row);
|
|
912
|
+
var modelColumn = getOrThrow(modelColumns, column);
|
|
901
913
|
var text = model.textForCell(modelColumn, modelRow);
|
|
902
914
|
var isFirstColumn = column === firstColumn;
|
|
903
915
|
|
|
904
916
|
if (text && rowHeight > 0) {
|
|
917
|
+
var _fontWidths$get;
|
|
918
|
+
|
|
905
919
|
var textAlign = model.textAlignForCell(modelColumn, modelRow) || 'left';
|
|
906
920
|
context.textAlign = textAlign;
|
|
907
921
|
var color = model.colorForCell(modelColumn, modelRow, theme) || textColor;
|
|
908
922
|
context.fillStyle = color;
|
|
909
923
|
var treeIndent = 0;
|
|
910
924
|
|
|
911
|
-
if (hasExpandableRows && isFirstColumn) {
|
|
925
|
+
if (isExpandableGridModel(model) && model.hasExpandableRows && isFirstColumn) {
|
|
912
926
|
treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;
|
|
913
927
|
}
|
|
914
928
|
|
|
@@ -925,7 +939,7 @@ class GridRenderer {
|
|
|
925
939
|
}
|
|
926
940
|
|
|
927
941
|
textX += treeIndent;
|
|
928
|
-
var fontWidth = fontWidths.get(context.font);
|
|
942
|
+
var fontWidth = (_fontWidths$get = fontWidths.get(context.font)) !== null && _fontWidths$get !== void 0 ? _fontWidths$get : GridRenderer.DEFAULT_FONT_WIDTH;
|
|
929
943
|
var truncatedText = this.getCachedTruncatedString(context, text, textWidth - cellHorizontalPadding * 2, fontWidth);
|
|
930
944
|
|
|
931
945
|
if (truncatedText) {
|
|
@@ -933,7 +947,7 @@ class GridRenderer {
|
|
|
933
947
|
}
|
|
934
948
|
}
|
|
935
949
|
|
|
936
|
-
if (isFirstColumn && hasExpandableRows) {
|
|
950
|
+
if (isFirstColumn && isExpandableGridModel(model) && model.hasExpandableRows) {
|
|
937
951
|
this.drawCellRowTreeMarker(context, state, row);
|
|
938
952
|
}
|
|
939
953
|
}
|
|
@@ -960,18 +974,18 @@ class GridRenderer {
|
|
|
960
974
|
treeMarkerColor,
|
|
961
975
|
treeMarkerHoverColor
|
|
962
976
|
} = theme;
|
|
963
|
-
var columnX = visibleColumnXs
|
|
964
|
-
var columnWidth = visibleColumnWidths
|
|
965
|
-
var rowY = visibleRowYs
|
|
966
|
-
var rowHeight = visibleRowHeights
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
if (isExpandable) {
|
|
971
|
-
var treeBox = visibleRowTreeBoxes.get(row);
|
|
972
|
-
var color = mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;
|
|
973
|
-
this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded);
|
|
977
|
+
var columnX = getOrThrow(visibleColumnXs, firstColumn);
|
|
978
|
+
var columnWidth = getOrThrow(visibleColumnWidths, firstColumn);
|
|
979
|
+
var rowY = getOrThrow(visibleRowYs, row);
|
|
980
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
981
|
+
|
|
982
|
+
if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {
|
|
983
|
+
return;
|
|
974
984
|
}
|
|
985
|
+
|
|
986
|
+
var treeBox = getOrThrow(visibleRowTreeBoxes, row);
|
|
987
|
+
var color = mouseX != null && mouseY != null && mouseX >= gridX + columnX && mouseX <= gridX + columnX + columnWidth && mouseY >= gridY + rowY && mouseY <= gridY + rowY + rowHeight ? treeMarkerHoverColor : treeMarkerColor;
|
|
988
|
+
this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, model.isRowExpanded(row));
|
|
975
989
|
}
|
|
976
990
|
|
|
977
991
|
drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {
|
|
@@ -995,6 +1009,7 @@ class GridRenderer {
|
|
|
995
1009
|
model,
|
|
996
1010
|
theme
|
|
997
1011
|
} = state;
|
|
1012
|
+
if (!isExpandableGridModel(model)) return;
|
|
998
1013
|
var depth = model.depthForRow(row);
|
|
999
1014
|
if (depth === 0) return;
|
|
1000
1015
|
var {
|
|
@@ -1008,10 +1023,10 @@ class GridRenderer {
|
|
|
1008
1023
|
treeHorizontalPadding,
|
|
1009
1024
|
treeLineColor
|
|
1010
1025
|
} = theme;
|
|
1011
|
-
var columnX = visibleColumnXs
|
|
1012
|
-
var rowY = visibleRowYs
|
|
1013
|
-
var rowHeight = visibleRowHeights
|
|
1014
|
-
var depthRowAfter = model.depthForRow(rowAfter);
|
|
1026
|
+
var columnX = getOrThrow(visibleColumnXs, firstColumn);
|
|
1027
|
+
var rowY = getOrThrow(visibleRowYs, row);
|
|
1028
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
1029
|
+
var depthRowAfter = rowAfter !== undefined ? model.depthForRow(rowAfter) : 0;
|
|
1015
1030
|
var depthDiff = depth > depthRowAfter ? depth - depthRowAfter : 0;
|
|
1016
1031
|
context.strokeStyle = treeLineColor;
|
|
1017
1032
|
context.lineWidth = 1; // draw normal depth lines
|
|
@@ -1108,13 +1123,13 @@ class GridRenderer {
|
|
|
1108
1123
|
|
|
1109
1124
|
for (var i = 0; i < visibleColumns.length; i += 1) {
|
|
1110
1125
|
var column = visibleColumns[i];
|
|
1111
|
-
var columnWidth = visibleColumnWidths
|
|
1112
|
-
var x = visibleColumnXs
|
|
1126
|
+
var columnWidth = getOrThrow(visibleColumnWidths, column);
|
|
1127
|
+
var x = getOrThrow(visibleColumnXs, column) + gridX;
|
|
1113
1128
|
this.drawColumnHeader(context, state, column, x, columnWidth);
|
|
1114
1129
|
}
|
|
1115
1130
|
|
|
1116
1131
|
if (containsFrozenColumns) {
|
|
1117
|
-
floatingLeftColumnsWidth = visibleColumnXs
|
|
1132
|
+
floatingLeftColumnsWidth = getOrThrow(visibleColumnXs, floatingLeftColumnCount - 1) + getOrThrow(visibleColumnWidths, floatingLeftColumnCount - 1); // Frozen columns' background
|
|
1118
1133
|
|
|
1119
1134
|
context.fillStyle = headerBackgroundColor;
|
|
1120
1135
|
context.fillRect(gridX, 0, floatingLeftColumnsWidth, columnHeaderHeight); // Frozen columns.
|
|
@@ -1124,9 +1139,9 @@ class GridRenderer {
|
|
|
1124
1139
|
for (var _i5 = 0; _i5 < floatingColumns.length; _i5 += 1) {
|
|
1125
1140
|
var _column = floatingColumns[_i5];
|
|
1126
1141
|
|
|
1127
|
-
var _columnWidth = visibleColumnWidths
|
|
1142
|
+
var _columnWidth = getOrThrow(visibleColumnWidths, _column);
|
|
1128
1143
|
|
|
1129
|
-
var _x4 = visibleColumnXs
|
|
1144
|
+
var _x4 = getOrThrow(visibleColumnXs, _column) + gridX;
|
|
1130
1145
|
|
|
1131
1146
|
this.drawColumnHeader(context, state, _column, _x4, _columnWidth);
|
|
1132
1147
|
}
|
|
@@ -1142,9 +1157,9 @@ class GridRenderer {
|
|
|
1142
1157
|
|
|
1143
1158
|
for (var _i6 = 0; _i6 < visibleColumns.length; _i6 += 1) {
|
|
1144
1159
|
var _column2 = visibleColumns[_i6];
|
|
1145
|
-
var columnX = visibleColumnXs
|
|
1160
|
+
var columnX = getOrThrow(visibleColumnXs, _column2);
|
|
1146
1161
|
|
|
1147
|
-
var _columnWidth2 = visibleColumnWidths
|
|
1162
|
+
var _columnWidth2 = getOrThrow(visibleColumnWidths, _column2);
|
|
1148
1163
|
|
|
1149
1164
|
if (!(columnX < floatingLeftColumnsWidth - _columnWidth2)) {
|
|
1150
1165
|
if (_columnWidth2 > 0) {
|
|
@@ -1166,9 +1181,9 @@ class GridRenderer {
|
|
|
1166
1181
|
for (var _i7 = 0; _i7 < floatingColumns.length; _i7 += 1) {
|
|
1167
1182
|
var _column3 = floatingColumns[_i7];
|
|
1168
1183
|
|
|
1169
|
-
var _columnX = visibleColumnXs
|
|
1184
|
+
var _columnX = getOrThrow(visibleColumnXs, _column3);
|
|
1170
1185
|
|
|
1171
|
-
var _columnWidth3 = visibleColumnWidths
|
|
1186
|
+
var _columnWidth3 = getOrThrow(visibleColumnWidths, _column3);
|
|
1172
1187
|
|
|
1173
1188
|
if (_columnWidth3 > 0) {
|
|
1174
1189
|
var _x6 = gridX + _columnX + _columnWidth3 + 0.5;
|
|
@@ -1193,9 +1208,9 @@ class GridRenderer {
|
|
|
1193
1208
|
for (var _i8 = 0; _i8 < hiddenColumns.length; _i8 += 1) {
|
|
1194
1209
|
var _column4 = hiddenColumns[_i8];
|
|
1195
1210
|
|
|
1196
|
-
var _columnX2 = visibleColumnXs
|
|
1211
|
+
var _columnX2 = getOrThrow(visibleColumnXs, _column4);
|
|
1197
1212
|
|
|
1198
|
-
var _columnWidth4 = visibleColumnWidths
|
|
1213
|
+
var _columnWidth4 = getOrThrow(visibleColumnWidths, _column4);
|
|
1199
1214
|
|
|
1200
1215
|
var minX = gridX + _columnX2 + _columnWidth4 + 0.5 - headerHiddenSeparatorSize * 0.5;
|
|
1201
1216
|
context.rect(minX, hiddenY, headerHiddenSeparatorSize, hiddenSeparatorHeight);
|
|
@@ -1207,16 +1222,16 @@ class GridRenderer {
|
|
|
1207
1222
|
if (headerSeparatorHoverColor) {
|
|
1208
1223
|
var highlightedSeparator = draggingColumnSeparator;
|
|
1209
1224
|
|
|
1210
|
-
if (highlightedSeparator == null) {
|
|
1225
|
+
if (highlightedSeparator == null && mouseX != null && mouseY != null) {
|
|
1211
1226
|
highlightedSeparator = GridUtils.getColumnSeparatorIndex(mouseX, mouseY, metrics, theme);
|
|
1212
1227
|
}
|
|
1213
1228
|
|
|
1214
1229
|
if (highlightedSeparator != null && (!isDragging || draggingColumnSeparator != null)) {
|
|
1215
1230
|
context.strokeStyle = headerSeparatorHoverColor;
|
|
1216
1231
|
|
|
1217
|
-
var _columnX3 = visibleColumnXs
|
|
1232
|
+
var _columnX3 = getOrThrow(visibleColumnXs, highlightedSeparator);
|
|
1218
1233
|
|
|
1219
|
-
var _columnWidth5 = visibleColumnWidths
|
|
1234
|
+
var _columnWidth5 = getOrThrow(visibleColumnWidths, highlightedSeparator);
|
|
1220
1235
|
|
|
1221
1236
|
var _x7 = gridX + _columnX3 + _columnWidth5 + 0.5;
|
|
1222
1237
|
|
|
@@ -1259,7 +1274,7 @@ class GridRenderer {
|
|
|
1259
1274
|
var {
|
|
1260
1275
|
modelColumns
|
|
1261
1276
|
} = metrics;
|
|
1262
|
-
var modelColumn = modelColumns
|
|
1277
|
+
var modelColumn = getOrThrow(modelColumns, column);
|
|
1263
1278
|
var text = model.textForColumnHeader(modelColumn);
|
|
1264
1279
|
var {
|
|
1265
1280
|
headerHorizontalPadding
|
|
@@ -1345,8 +1360,8 @@ class GridRenderer {
|
|
|
1345
1360
|
|
|
1346
1361
|
for (var i = 0; i < visibleRows.length; i += 1) {
|
|
1347
1362
|
var row = visibleRows[i];
|
|
1348
|
-
var rowY = visibleRowYs
|
|
1349
|
-
var rowHeight = visibleRowHeights
|
|
1363
|
+
var rowY = getOrThrow(visibleRowYs, row);
|
|
1364
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
1350
1365
|
|
|
1351
1366
|
if (rowHeight > 0) {
|
|
1352
1367
|
var y = gridY + rowY + rowHeight + 0.5;
|
|
@@ -1370,9 +1385,9 @@ class GridRenderer {
|
|
|
1370
1385
|
for (var _i9 = 0; _i9 < hiddenRows.length; _i9 += 1) {
|
|
1371
1386
|
var _row4 = hiddenRows[_i9];
|
|
1372
1387
|
|
|
1373
|
-
var _rowY = visibleRowYs
|
|
1388
|
+
var _rowY = getOrThrow(visibleRowYs, _row4);
|
|
1374
1389
|
|
|
1375
|
-
var _rowHeight = visibleRowHeights
|
|
1390
|
+
var _rowHeight = getOrThrow(visibleRowHeights, _row4);
|
|
1376
1391
|
|
|
1377
1392
|
var minY = gridY + _rowY + _rowHeight + 0.5 - headerHiddenSeparatorSize * 0.5;
|
|
1378
1393
|
context.rect(hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);
|
|
@@ -1384,16 +1399,16 @@ class GridRenderer {
|
|
|
1384
1399
|
if (headerSeparatorHoverColor) {
|
|
1385
1400
|
var highlightedSeparator = draggingRowSeparator;
|
|
1386
1401
|
|
|
1387
|
-
if (highlightedSeparator == null) {
|
|
1402
|
+
if (highlightedSeparator == null && mouseX != null && mouseY != null) {
|
|
1388
1403
|
highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);
|
|
1389
1404
|
}
|
|
1390
1405
|
|
|
1391
1406
|
if (highlightedSeparator != null) {
|
|
1392
1407
|
context.strokeStyle = headerSeparatorHoverColor;
|
|
1393
1408
|
|
|
1394
|
-
var _rowY2 = visibleRowYs
|
|
1409
|
+
var _rowY2 = getOrThrow(visibleRowYs, highlightedSeparator);
|
|
1395
1410
|
|
|
1396
|
-
var _rowHeight2 = visibleRowHeights
|
|
1411
|
+
var _rowHeight2 = getOrThrow(visibleRowHeights, highlightedSeparator);
|
|
1397
1412
|
|
|
1398
1413
|
var _y6 = gridY + _rowY2 + _rowHeight2 + 0.5;
|
|
1399
1414
|
|
|
@@ -1429,9 +1444,9 @@ class GridRenderer {
|
|
|
1429
1444
|
for (var _i10 = 0; _i10 < visibleRows.length; _i10 += 1) {
|
|
1430
1445
|
var _row5 = visibleRows[_i10];
|
|
1431
1446
|
|
|
1432
|
-
var _rowHeight3 = visibleRowHeights
|
|
1447
|
+
var _rowHeight3 = getOrThrow(visibleRowHeights, _row5);
|
|
1433
1448
|
|
|
1434
|
-
var _y7 = visibleRowYs
|
|
1449
|
+
var _y7 = getOrThrow(visibleRowYs, _row5) + gridY;
|
|
1435
1450
|
|
|
1436
1451
|
this.drawRowHeader(context, state, _row5, _y7, _rowHeight3);
|
|
1437
1452
|
}
|
|
@@ -1453,7 +1468,7 @@ class GridRenderer {
|
|
|
1453
1468
|
modelRows,
|
|
1454
1469
|
rowHeaderWidth
|
|
1455
1470
|
} = metrics;
|
|
1456
|
-
var modelRow = modelRows
|
|
1471
|
+
var modelRow = getOrThrow(modelRows, row);
|
|
1457
1472
|
var x = rowHeaderWidth - theme.cellHorizontalPadding;
|
|
1458
1473
|
var y = rowY + rowHeight * 0.5;
|
|
1459
1474
|
context.fillText(model.textForRowHeader(modelRow), x, y);
|
|
@@ -1514,8 +1529,8 @@ class GridRenderer {
|
|
|
1514
1529
|
|
|
1515
1530
|
for (var i = 0; i < visibleRows.length; i += 1) {
|
|
1516
1531
|
var row = visibleRows[i];
|
|
1517
|
-
var rowY = visibleRowYs
|
|
1518
|
-
var rowHeight = visibleRowHeights
|
|
1532
|
+
var rowY = getOrThrow(visibleRowYs, row);
|
|
1533
|
+
var rowHeight = getOrThrow(visibleRowHeights, row);
|
|
1519
1534
|
|
|
1520
1535
|
if (rowHeight > 0) {
|
|
1521
1536
|
var y = gridY + rowY + rowHeight + 0.5;
|
|
@@ -1539,9 +1554,9 @@ class GridRenderer {
|
|
|
1539
1554
|
for (var _i11 = 0; _i11 < hiddenRows.length; _i11 += 1) {
|
|
1540
1555
|
var _row6 = hiddenRows[_i11];
|
|
1541
1556
|
|
|
1542
|
-
var _rowY3 = visibleRowYs
|
|
1557
|
+
var _rowY3 = getOrThrow(visibleRowYs, _row6);
|
|
1543
1558
|
|
|
1544
|
-
var _rowHeight4 = visibleRowHeights
|
|
1559
|
+
var _rowHeight4 = getOrThrow(visibleRowHeights, _row6);
|
|
1545
1560
|
|
|
1546
1561
|
var minY = gridY + _rowY3 + _rowHeight4 + 0.5 - headerHiddenSeparatorSize * 0.5;
|
|
1547
1562
|
context.rect(x + hiddenX, minY, hiddenSeparatorWidth, headerHiddenSeparatorSize);
|
|
@@ -1553,16 +1568,16 @@ class GridRenderer {
|
|
|
1553
1568
|
if (headerSeparatorHoverColor) {
|
|
1554
1569
|
var highlightedSeparator = draggingRowSeparator;
|
|
1555
1570
|
|
|
1556
|
-
if (highlightedSeparator == null) {
|
|
1571
|
+
if (highlightedSeparator == null && mouseX != null && mouseY != null) {
|
|
1557
1572
|
highlightedSeparator = GridUtils.getRowSeparatorIndex(mouseX, mouseY, metrics, theme);
|
|
1558
1573
|
}
|
|
1559
1574
|
|
|
1560
1575
|
if (highlightedSeparator != null) {
|
|
1561
1576
|
context.strokeStyle = headerSeparatorHoverColor;
|
|
1562
1577
|
|
|
1563
|
-
var _rowY4 = visibleRowYs
|
|
1578
|
+
var _rowY4 = getOrThrow(visibleRowYs, highlightedSeparator);
|
|
1564
1579
|
|
|
1565
|
-
var _rowHeight5 = visibleRowHeights
|
|
1580
|
+
var _rowHeight5 = getOrThrow(visibleRowHeights, highlightedSeparator);
|
|
1566
1581
|
|
|
1567
1582
|
var _y8 = gridY + _rowY4 + _rowHeight5 + 0.5;
|
|
1568
1583
|
|
|
@@ -1599,12 +1614,12 @@ class GridRenderer {
|
|
|
1599
1614
|
for (var _i12 = 0; _i12 < visibleRows.length; _i12 += 1) {
|
|
1600
1615
|
var _row7 = visibleRows[_i12];
|
|
1601
1616
|
|
|
1602
|
-
var _rowHeight6 = visibleRowHeights
|
|
1617
|
+
var _rowHeight6 = getOrThrow(visibleRowHeights, _row7);
|
|
1603
1618
|
|
|
1604
1619
|
if (_rowHeight6 > 0) {
|
|
1605
|
-
var _rowY5 = visibleRowYs
|
|
1620
|
+
var _rowY5 = getOrThrow(visibleRowYs, _row7) + gridY;
|
|
1606
1621
|
|
|
1607
|
-
var modelRow = modelRows
|
|
1622
|
+
var modelRow = getOrThrow(modelRows, _row7);
|
|
1608
1623
|
var textY = _rowY5 + _rowHeight6 * 0.5;
|
|
1609
1624
|
context.fillText(model.textForRowFooter(modelRow), textX, textY);
|
|
1610
1625
|
}
|
|
@@ -1649,14 +1664,14 @@ class GridRenderer {
|
|
|
1649
1664
|
return;
|
|
1650
1665
|
}
|
|
1651
1666
|
|
|
1652
|
-
var isCursorVisible = model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && visibleColumnXs.has(column) && visibleRowYs.has(row);
|
|
1667
|
+
var isCursorVisible = isEditableGridModel(model) && model.isEditable && editingCell == null && draggingRow == null && draggingColumn == null && column != null && row != null && visibleColumnXs.has(column) && visibleRowYs.has(row);
|
|
1653
1668
|
|
|
1654
1669
|
if (isCursorVisible) {
|
|
1655
1670
|
// Punch a hole out where the active cell is, it gets styled differently.
|
|
1656
|
-
var x = visibleColumnXs
|
|
1657
|
-
var y = visibleRowYs
|
|
1658
|
-
var w = visibleColumnWidths
|
|
1659
|
-
var h = visibleRowHeights
|
|
1671
|
+
var x = getOrThrow(visibleColumnXs, column);
|
|
1672
|
+
var y = getOrThrow(visibleRowYs, row);
|
|
1673
|
+
var w = getOrThrow(visibleColumnWidths, column);
|
|
1674
|
+
var h = getOrThrow(visibleRowHeights, row);
|
|
1660
1675
|
context.save();
|
|
1661
1676
|
context.beginPath();
|
|
1662
1677
|
context.rect(0, 0, width, height);
|
|
@@ -1676,12 +1691,12 @@ class GridRenderer {
|
|
|
1676
1691
|
|
|
1677
1692
|
if (endRow >= top && bottom >= startRow && endColumn >= left && right >= startColumn) {
|
|
1678
1693
|
// Need to offset the x/y coordinates so that the line draws nice and crisp
|
|
1679
|
-
var _x9 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(visibleColumnXs
|
|
1694
|
+
var _x9 = startColumn >= left && visibleColumnXs.has(startColumn) ? Math.round(getOrThrow(visibleColumnXs, startColumn)) + 0.5 : minX;
|
|
1680
1695
|
|
|
1681
|
-
var _y9 = startRow >= top && visibleRowYs.has(startRow) ? Math.max(Math.round(visibleRowYs
|
|
1696
|
+
var _y9 = startRow >= top && visibleRowYs.has(startRow) ? Math.max(Math.round(getOrThrow(visibleRowYs, startRow)) + 0.5, 0.5) : minY;
|
|
1682
1697
|
|
|
1683
|
-
var endX = endColumn <= right && visibleColumnXs.has(endColumn) ? Math.round(visibleColumnXs
|
|
1684
|
-
var endY = endRow <= bottom && visibleRowYs.has(endRow) ? Math.round(visibleRowYs
|
|
1698
|
+
var endX = endColumn <= right && visibleColumnXs.has(endColumn) ? Math.round(getOrThrow(visibleColumnXs, endColumn) + getOrThrow(visibleColumnWidths, endColumn)) - 0.5 : maxX;
|
|
1699
|
+
var endY = endRow <= bottom && visibleRowYs.has(endRow) ? Math.round(getOrThrow(visibleRowYs, endRow) + getOrThrow(visibleRowHeights, endRow)) - 0.5 : maxY;
|
|
1685
1700
|
context.rect(_x9, _y9, endX - _x9, endY - _y9);
|
|
1686
1701
|
} // draw the inner transparent fill
|
|
1687
1702
|
|
|
@@ -1708,7 +1723,7 @@ class GridRenderer {
|
|
|
1708
1723
|
context.stroke();
|
|
1709
1724
|
}
|
|
1710
1725
|
|
|
1711
|
-
if (isCursorVisible) {
|
|
1726
|
+
if (isCursorVisible && column != null && row != null) {
|
|
1712
1727
|
context.restore();
|
|
1713
1728
|
this.drawActiveCell(context, state, column, row);
|
|
1714
1729
|
}
|
|
@@ -1726,10 +1741,10 @@ class GridRenderer {
|
|
|
1726
1741
|
visibleRowHeights,
|
|
1727
1742
|
visibleRowYs
|
|
1728
1743
|
} = metrics;
|
|
1729
|
-
var cellX = visibleColumnXs
|
|
1730
|
-
var cellY = visibleRowYs
|
|
1731
|
-
var cellW = visibleColumnWidths
|
|
1732
|
-
var cellH = visibleRowHeights
|
|
1744
|
+
var cellX = getOrThrow(visibleColumnXs, column);
|
|
1745
|
+
var cellY = getOrThrow(visibleRowYs, row);
|
|
1746
|
+
var cellW = getOrThrow(visibleColumnWidths, column);
|
|
1747
|
+
var cellH = getOrThrow(visibleRowHeights, row); // Now get the outline for the active cell
|
|
1733
1748
|
|
|
1734
1749
|
var x = cellX - borderWidth * 0.5;
|
|
1735
1750
|
var y = cellY - borderWidth * 0.5;
|
|
@@ -1759,12 +1774,12 @@ class GridRenderer {
|
|
|
1759
1774
|
/**
|
|
1760
1775
|
* Draws a rounded rectangle using the current state of the canvas.
|
|
1761
1776
|
*
|
|
1762
|
-
* @param
|
|
1763
|
-
* @param
|
|
1764
|
-
* @param
|
|
1765
|
-
* @param
|
|
1766
|
-
* @param
|
|
1767
|
-
* @param
|
|
1777
|
+
* @param context The canvas context
|
|
1778
|
+
* @param x coordinate of the left side
|
|
1779
|
+
* @param y coordinate of the top side
|
|
1780
|
+
* @param w width of the rectangle
|
|
1781
|
+
* @param h height of the rectangle
|
|
1782
|
+
* @param r corner radius of the rectangle
|
|
1768
1783
|
*/
|
|
1769
1784
|
|
|
1770
1785
|
|
|
@@ -1792,7 +1807,7 @@ class GridRenderer {
|
|
|
1792
1807
|
theme
|
|
1793
1808
|
} = state;
|
|
1794
1809
|
|
|
1795
|
-
if (draggingColumn == null) {
|
|
1810
|
+
if (draggingColumn == null || mouseX == null) {
|
|
1796
1811
|
return;
|
|
1797
1812
|
}
|
|
1798
1813
|
|
|
@@ -1803,8 +1818,8 @@ class GridRenderer {
|
|
|
1803
1818
|
visibleColumnWidths,
|
|
1804
1819
|
height
|
|
1805
1820
|
} = metrics;
|
|
1806
|
-
var x = visibleColumnXs
|
|
1807
|
-
var columnWidth = visibleColumnWidths
|
|
1821
|
+
var x = getOrThrow(visibleColumnXs, draggingColumn);
|
|
1822
|
+
var columnWidth = getOrThrow(visibleColumnWidths, draggingColumn) + 1;
|
|
1808
1823
|
var {
|
|
1809
1824
|
backgroundColor,
|
|
1810
1825
|
font,
|
|
@@ -1818,7 +1833,7 @@ class GridRenderer {
|
|
|
1818
1833
|
|
|
1819
1834
|
context.fillStyle = backgroundColor;
|
|
1820
1835
|
context.fillRect(x, 0, columnWidth, height);
|
|
1821
|
-
context.translate(mouseX - x - gridX - draggingColumnOffset, gridY + reorderOffset); // Then draw the shadow of the moving column
|
|
1836
|
+
context.translate(mouseX - x - gridX - (draggingColumnOffset !== null && draggingColumnOffset !== void 0 ? draggingColumnOffset : 0), gridY + reorderOffset); // Then draw the shadow of the moving column
|
|
1822
1837
|
|
|
1823
1838
|
context.save();
|
|
1824
1839
|
context.shadowColor = shadowColor;
|
|
@@ -1849,7 +1864,7 @@ class GridRenderer {
|
|
|
1849
1864
|
theme
|
|
1850
1865
|
} = state;
|
|
1851
1866
|
|
|
1852
|
-
if (draggingRow == null) {
|
|
1867
|
+
if (draggingRow == null || mouseY == null) {
|
|
1853
1868
|
return;
|
|
1854
1869
|
}
|
|
1855
1870
|
|
|
@@ -1860,8 +1875,8 @@ class GridRenderer {
|
|
|
1860
1875
|
visibleRowHeights,
|
|
1861
1876
|
width
|
|
1862
1877
|
} = metrics;
|
|
1863
|
-
var y = visibleRowYs
|
|
1864
|
-
var rowHeight = visibleRowHeights
|
|
1878
|
+
var y = getOrThrow(visibleRowYs, draggingRow);
|
|
1879
|
+
var rowHeight = getOrThrow(visibleRowHeights, draggingRow) + 1;
|
|
1865
1880
|
var {
|
|
1866
1881
|
backgroundColor,
|
|
1867
1882
|
font,
|
|
@@ -1875,7 +1890,7 @@ class GridRenderer {
|
|
|
1875
1890
|
|
|
1876
1891
|
context.fillStyle = backgroundColor;
|
|
1877
1892
|
context.fillRect(0, y, width, rowHeight);
|
|
1878
|
-
context.translate(gridX + reorderOffset, mouseY - y - gridY - draggingRowOffset); // Then draw the shadow of the moving row
|
|
1893
|
+
context.translate(gridX + reorderOffset, mouseY - y - gridY - (draggingRowOffset !== null && draggingRowOffset !== void 0 ? draggingRowOffset : 0)); // Then draw the shadow of the moving row
|
|
1879
1894
|
|
|
1880
1895
|
context.save();
|
|
1881
1896
|
context.shadowColor = shadowColor;
|
|
@@ -1938,10 +1953,10 @@ class GridRenderer {
|
|
|
1938
1953
|
scrollBarHoverSize,
|
|
1939
1954
|
scrollBarCasingWidth
|
|
1940
1955
|
} = theme;
|
|
1941
|
-
var isInbounds = mouseX <= width && mouseY <= height;
|
|
1942
|
-
var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX >= width - scrollBarHoverSize && mouseY <= barHeight + columnHeaderHeight && isInbounds;
|
|
1956
|
+
var isInbounds = mouseX != null && mouseY != null && mouseX <= width && mouseY <= height;
|
|
1957
|
+
var isVerticalBarHover = isDraggingVerticalScrollBar || hasVerticalBar && !isDraggingHorizontalScrollBar && !isDragging && mouseX != null && mouseY != null && mouseX >= width - scrollBarHoverSize && mouseY <= barHeight + columnHeaderHeight && isInbounds;
|
|
1943
1958
|
var isHorizontalBarHover = isDraggingHorizontalScrollBar || hasHorizontalBar && !isDraggingVerticalScrollBar && !isDragging && !isVerticalBarHover && // vert bar gets priorty in overlapped corner hover area
|
|
1944
|
-
mouseY >= height - scrollBarHoverSize && mouseX <= barWidth - rowHeaderWidth && isInbounds;
|
|
1959
|
+
mouseX != null && mouseY != null && mouseY >= height - scrollBarHoverSize && mouseX <= barWidth - rowHeaderWidth && isInbounds;
|
|
1945
1960
|
var hScrollBarSize = isHorizontalBarHover ? scrollBarHoverSize : scrollBarSize;
|
|
1946
1961
|
var vScrollBarSize = isVerticalBarHover ? scrollBarHoverSize : scrollBarSize;
|
|
1947
1962
|
context.translate(rowHeaderWidth, columnHeaderHeight);
|