tksheet 7.4.4__py3-none-any.whl → 7.4.6__py3-none-any.whl
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.
- tksheet/__init__.py +1 -1
- tksheet/column_headers.py +84 -86
- tksheet/constants.py +4 -3
- tksheet/find_window.py +8 -8
- tksheet/formatters.py +58 -74
- tksheet/functions.py +65 -79
- tksheet/main_table.py +330 -448
- tksheet/other_classes.py +19 -25
- tksheet/row_index.py +114 -92
- tksheet/sheet.py +191 -208
- tksheet/sorting.py +23 -22
- tksheet/text_editor.py +18 -12
- tksheet/tksheet_types.py +187 -0
- tksheet/top_left_rectangle.py +18 -18
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/METADATA +4 -2
- tksheet-7.4.6.dist-info/RECORD +22 -0
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/WHEEL +1 -1
- tksheet-7.4.4.dist-info/RECORD +0 -22
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.4.4.dist-info → tksheet-7.4.6.dist-info}/top_level.txt +0 -0
tksheet/main_table.py
CHANGED
@@ -11,7 +11,7 @@ from itertools import accumulate, chain, cycle, filterfalse, islice, repeat
|
|
11
11
|
from math import ceil, floor
|
12
12
|
from operator import itemgetter
|
13
13
|
from tkinter import TclError
|
14
|
-
from typing import Literal
|
14
|
+
from typing import Any, Literal
|
15
15
|
|
16
16
|
from .colors import color_map
|
17
17
|
from .column_headers import ColumnHeaders
|
@@ -101,7 +101,7 @@ from .other_classes import (
|
|
101
101
|
from .row_index import RowIndex
|
102
102
|
from .sorting import sort_selection
|
103
103
|
from .text_editor import TextEditor
|
104
|
-
from .tksheet_types import AnyIter
|
104
|
+
from .tksheet_types import AnyIter, Binding
|
105
105
|
|
106
106
|
|
107
107
|
class MainTable(tk.Canvas):
|
@@ -122,7 +122,7 @@ class MainTable(tk.Canvas):
|
|
122
122
|
self.PAR_height = 0
|
123
123
|
self.cells_cache = None
|
124
124
|
self.table_txt_height, self.index_txt_height, self.header_txt_height = 0, 0, 0
|
125
|
-
self.scrollregion =
|
125
|
+
self.scrollregion = ()
|
126
126
|
self.current_cursor = ""
|
127
127
|
self.ctrl_b1_pressed = False
|
128
128
|
self.b1_pressed_loc = None
|
@@ -164,7 +164,7 @@ class MainTable(tk.Canvas):
|
|
164
164
|
self.hidd_boxes = set()
|
165
165
|
|
166
166
|
self.selection_boxes = {}
|
167
|
-
self.selected =
|
167
|
+
self.selected = ()
|
168
168
|
self.named_spans = {}
|
169
169
|
self.reset_tags()
|
170
170
|
self.cell_options = {}
|
@@ -305,14 +305,13 @@ class MainTable(tk.Canvas):
|
|
305
305
|
self.data = kwargs["data_reference"]
|
306
306
|
else:
|
307
307
|
self.data = []
|
308
|
-
if not self.data
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
)
|
315
|
-
self.data = [list(repeat("", kwargs["total_cols"])) for i in range(kwargs["total_rows"])]
|
308
|
+
if not self.data and (
|
309
|
+
isinstance(kwargs["total_rows"], int)
|
310
|
+
and isinstance(kwargs["total_cols"], int)
|
311
|
+
and kwargs["total_rows"] > 0
|
312
|
+
and kwargs["total_cols"] > 0
|
313
|
+
):
|
314
|
+
self.data = [list(repeat("", kwargs["total_cols"])) for i in range(kwargs["total_rows"])]
|
316
315
|
_header = kwargs["header"] if kwargs["header"] is not None else kwargs["headers"]
|
317
316
|
if isinstance(_header, int):
|
318
317
|
self._headers = _header
|
@@ -336,14 +335,14 @@ class MainTable(tk.Canvas):
|
|
336
335
|
self.set_col_positions(itr=[])
|
337
336
|
self.set_row_positions(itr=[])
|
338
337
|
self.display_rows(
|
339
|
-
rows=kwargs["displayed_rows"],
|
338
|
+
rows=kwargs["displayed_rows"] if isinstance(kwargs["displayed_rows"], list) else [],
|
340
339
|
all_rows_displayed=kwargs["all_rows_displayed"],
|
341
340
|
reset_row_positions=False,
|
342
341
|
deselect_all=False,
|
343
342
|
)
|
344
343
|
self.reset_row_positions()
|
345
344
|
self.display_columns(
|
346
|
-
columns=kwargs["displayed_columns"],
|
345
|
+
columns=kwargs["displayed_columns"] if isinstance(kwargs["displayed_columns"], list) else [],
|
347
346
|
all_columns_displayed=kwargs["all_columns_displayed"],
|
348
347
|
reset_col_positions=False,
|
349
348
|
deselect_all=False,
|
@@ -360,10 +359,10 @@ class MainTable(tk.Canvas):
|
|
360
359
|
else:
|
361
360
|
super().event_generate(*args, **kwargs)
|
362
361
|
|
363
|
-
def refresh(self, event:
|
362
|
+
def refresh(self, event: Any = None) -> None:
|
364
363
|
self.PAR.set_refresh_timer()
|
365
364
|
|
366
|
-
def window_configured(self, event:
|
365
|
+
def window_configured(self, event: Any) -> None:
|
367
366
|
w = self.PAR.winfo_width()
|
368
367
|
if w != self.PAR_width:
|
369
368
|
self.PAR_width = w
|
@@ -551,15 +550,7 @@ class MainTable(tk.Canvas):
|
|
551
550
|
self.set_currently_selected(row, column, item=item)
|
552
551
|
else:
|
553
552
|
self.select_cell(row, column, redraw=False)
|
554
|
-
if not self.see(
|
555
|
-
row,
|
556
|
-
column,
|
557
|
-
keep_yscroll=False,
|
558
|
-
keep_xscroll=False,
|
559
|
-
bottom_right_corner=False,
|
560
|
-
check_cell_visibility=True,
|
561
|
-
redraw=True,
|
562
|
-
):
|
553
|
+
if not self.see(row, column):
|
563
554
|
self.refresh()
|
564
555
|
return coords
|
565
556
|
|
@@ -817,7 +808,7 @@ class MainTable(tk.Canvas):
|
|
817
808
|
if self.selected.type_ in ("cells", "columns"):
|
818
809
|
for rn in range(maxrows):
|
819
810
|
row = []
|
820
|
-
for r1, c1,
|
811
|
+
for r1, c1, _, c2 in boxes:
|
821
812
|
datarn = (r1 + rn) if self.all_rows_displayed else self.displayed_rows[r1 + rn]
|
822
813
|
for c in range(c1, c2):
|
823
814
|
datacn = self.datacn(c)
|
@@ -983,7 +974,7 @@ class MainTable(tk.Canvas):
|
|
983
974
|
self.refresh()
|
984
975
|
return event_data
|
985
976
|
|
986
|
-
def ctrl_v(self, event:
|
977
|
+
def ctrl_v(self, event: Any = None, validation: bool = True) -> None | EventDataDict:
|
987
978
|
if not self.PAR.ops.paste_can_expand_x and len(self.col_positions) == 1:
|
988
979
|
return
|
989
980
|
if not self.PAR.ops.paste_can_expand_y and len(self.row_positions) == 1:
|
@@ -1043,23 +1034,21 @@ class MainTable(tk.Canvas):
|
|
1043
1034
|
added_rows = 0
|
1044
1035
|
added_cols = 0
|
1045
1036
|
total_data_cols = None
|
1046
|
-
if self.PAR.ops.paste_can_expand_x:
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
)
|
1054
|
-
|
1055
|
-
|
1056
|
-
if
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
):
|
1062
|
-
added_rows = self.PAR.ops.paste_insert_row_limit - len(self.row_positions) - 1
|
1037
|
+
if self.PAR.ops.paste_can_expand_x and selected_c + new_data_numcols > len(self.col_positions) - 1:
|
1038
|
+
total_data_cols = self.equalize_data_row_lengths()
|
1039
|
+
added_cols = selected_c + new_data_numcols - len(self.col_positions) + 1
|
1040
|
+
if (
|
1041
|
+
isinstance(self.PAR.ops.paste_insert_column_limit, int)
|
1042
|
+
and self.PAR.ops.paste_insert_column_limit < len(self.col_positions) - 1 + added_cols
|
1043
|
+
):
|
1044
|
+
added_cols = self.PAR.ops.paste_insert_column_limit - len(self.col_positions) - 1
|
1045
|
+
if self.PAR.ops.paste_can_expand_y and selected_r + new_data_numrows > len(self.row_positions) - 1:
|
1046
|
+
added_rows = selected_r + new_data_numrows - len(self.row_positions) + 1
|
1047
|
+
if (
|
1048
|
+
isinstance(self.PAR.ops.paste_insert_row_limit, int)
|
1049
|
+
and self.PAR.ops.paste_insert_row_limit < len(self.row_positions) - 1 + added_rows
|
1050
|
+
):
|
1051
|
+
added_rows = self.PAR.ops.paste_insert_row_limit - len(self.row_positions) - 1
|
1063
1052
|
if selected_c + new_data_numcols > len(self.col_positions) - 1:
|
1064
1053
|
adjusted_new_data_numcols = len(self.col_positions) - 1 - selected_c
|
1065
1054
|
else:
|
@@ -1202,14 +1191,8 @@ class MainTable(tk.Canvas):
|
|
1202
1191
|
event_data=event_data,
|
1203
1192
|
mod_event_boxes=False,
|
1204
1193
|
)
|
1205
|
-
if added_rows
|
1206
|
-
|
1207
|
-
else:
|
1208
|
-
selboxr = selected_r_adjusted_new_data_numrows
|
1209
|
-
if added_cols:
|
1210
|
-
selboxc = selected_c + new_data_numcols
|
1211
|
-
else:
|
1212
|
-
selboxc = selected_c_adjusted_new_data_numcols
|
1194
|
+
selboxr = selected_r + new_data_numrows if added_rows else selected_r_adjusted_new_data_numrows
|
1195
|
+
selboxc = selected_c + new_data_numcols if added_cols else selected_c_adjusted_new_data_numcols
|
1213
1196
|
self.deselect("all", redraw=False)
|
1214
1197
|
self.set_currently_selected(
|
1215
1198
|
*curr_coords,
|
@@ -1225,15 +1208,7 @@ class MainTable(tk.Canvas):
|
|
1225
1208
|
)
|
1226
1209
|
event_data["selection_boxes"] = self.get_boxes()
|
1227
1210
|
event_data["selected"] = self.selected
|
1228
|
-
self.see(
|
1229
|
-
r=selected_r,
|
1230
|
-
c=selected_c,
|
1231
|
-
keep_yscroll=False,
|
1232
|
-
keep_xscroll=False,
|
1233
|
-
bottom_right_corner=False,
|
1234
|
-
check_cell_visibility=True,
|
1235
|
-
redraw=False,
|
1236
|
-
)
|
1211
|
+
self.see(selected_r, selected_c, redraw=False)
|
1237
1212
|
self.refresh()
|
1238
1213
|
if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
|
1239
1214
|
self.undo_stack.append(stored_event_dict(event_data))
|
@@ -1242,7 +1217,7 @@ class MainTable(tk.Canvas):
|
|
1242
1217
|
self.PAR.emit_event("<<Paste>>", event_data)
|
1243
1218
|
return event_data
|
1244
1219
|
|
1245
|
-
def delete_key(self, event:
|
1220
|
+
def delete_key(self, event: Any = None, validation: bool = True) -> None | EventDataDict:
|
1246
1221
|
if not self.selected:
|
1247
1222
|
return
|
1248
1223
|
event_data = self.new_event_dict("edit_table")
|
@@ -1276,7 +1251,7 @@ class MainTable(tk.Canvas):
|
|
1276
1251
|
self.PAR.emit_event("<<Delete>>", event_data)
|
1277
1252
|
return event_data
|
1278
1253
|
|
1279
|
-
def event_data_set_cell(self, datarn: int, datacn: int, value:
|
1254
|
+
def event_data_set_cell(self, datarn: int, datacn: int, value: Any, event_data: dict) -> EventDataDict:
|
1280
1255
|
if self.input_valid_for_cell(datarn, datacn, value):
|
1281
1256
|
event_data["cells"]["table"][(datarn, datacn)] = self.get_cell_data(datarn, datacn)
|
1282
1257
|
self.set_cell_data(datarn, datacn, value)
|
@@ -1421,7 +1396,7 @@ class MainTable(tk.Canvas):
|
|
1421
1396
|
"c",
|
1422
1397
|
)
|
1423
1398
|
# add cell/col kwargs for columns that are new to the span
|
1424
|
-
old_span_idxs =
|
1399
|
+
old_span_idxs = {full_new_idxs[k] for k in range(span["from_c"], oldupto_colrange)}
|
1425
1400
|
for k in range(newfrom, newupto_colrange):
|
1426
1401
|
if k not in old_span_idxs:
|
1427
1402
|
oldidx = full_old_idxs[k]
|
@@ -1659,7 +1634,7 @@ class MainTable(tk.Canvas):
|
|
1659
1634
|
"r",
|
1660
1635
|
)
|
1661
1636
|
# add cell/row kwargs for rows that are new to the span
|
1662
|
-
old_span_idxs =
|
1637
|
+
old_span_idxs = {full_new_idxs[k] for k in range(span["from_r"], oldupto_rowrange)}
|
1663
1638
|
for k in range(newfrom, newupto_rowrange):
|
1664
1639
|
if k not in old_span_idxs:
|
1665
1640
|
oldidx = full_old_idxs[k]
|
@@ -1742,7 +1717,7 @@ class MainTable(tk.Canvas):
|
|
1742
1717
|
# finally, change the span coords
|
1743
1718
|
span["from_r"], span["upto_r"] = newfrom, newupto
|
1744
1719
|
|
1745
|
-
if move_heights and disp_new_idxs:
|
1720
|
+
if (not self.PAR.ops.treeview or not undo_modification) and (move_heights and disp_new_idxs):
|
1746
1721
|
self.set_row_positions(
|
1747
1722
|
itr=move_elements_by_mapping_gen(
|
1748
1723
|
self.get_row_heights(),
|
@@ -1805,7 +1780,7 @@ class MainTable(tk.Canvas):
|
|
1805
1780
|
)
|
1806
1781
|
)
|
1807
1782
|
|
1808
|
-
def undo(self, event:
|
1783
|
+
def undo(self, event: Any = None) -> None | EventDataDict:
|
1809
1784
|
if not self.undo_stack:
|
1810
1785
|
return
|
1811
1786
|
modification = self.undo_stack[-1]["data"]
|
@@ -1819,7 +1794,7 @@ class MainTable(tk.Canvas):
|
|
1819
1794
|
self.PAR.emit_event("<<Undo>>", event_data)
|
1820
1795
|
return event_data
|
1821
1796
|
|
1822
|
-
def redo(self, event:
|
1797
|
+
def redo(self, event: Any = None) -> None | EventDataDict:
|
1823
1798
|
if not self.redo_stack:
|
1824
1799
|
return
|
1825
1800
|
modification = self.redo_stack[-1]["data"]
|
@@ -2048,15 +2023,7 @@ class MainTable(tk.Canvas):
|
|
2048
2023
|
)
|
2049
2024
|
|
2050
2025
|
if self.selected:
|
2051
|
-
self.see(
|
2052
|
-
r=self.selected.row,
|
2053
|
-
c=self.selected.column,
|
2054
|
-
keep_yscroll=False,
|
2055
|
-
keep_xscroll=False,
|
2056
|
-
bottom_right_corner=False,
|
2057
|
-
check_cell_visibility=True,
|
2058
|
-
redraw=False,
|
2059
|
-
)
|
2026
|
+
self.see(self.selected.row, self.selected.column, redraw=False)
|
2060
2027
|
|
2061
2028
|
self.refresh()
|
2062
2029
|
return event_data
|
@@ -2067,18 +2034,27 @@ class MainTable(tk.Canvas):
|
|
2067
2034
|
c: int | None = None,
|
2068
2035
|
keep_yscroll: bool = False,
|
2069
2036
|
keep_xscroll: bool = False,
|
2070
|
-
bottom_right_corner: bool =
|
2037
|
+
bottom_right_corner: bool | None = None,
|
2071
2038
|
check_cell_visibility: bool = True,
|
2072
2039
|
redraw: bool = True,
|
2073
2040
|
r_pc: float = 0.0,
|
2074
2041
|
c_pc: float = 0.0,
|
2075
2042
|
) -> bool:
|
2076
2043
|
need_redraw = False
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2044
|
+
vis_info = self.cell_visibility_info(r, c)
|
2045
|
+
yvis, xvis = vis_info["yvis"], vis_info["xvis"]
|
2046
|
+
top_left_x, top_left_y, bottom_right_x, bottom_right_y = vis_info["visible_region"]
|
2047
|
+
x1, y1, x2, y2 = vis_info["cell_coords"]
|
2048
|
+
# y scroll
|
2049
|
+
if not check_cell_visibility or (check_cell_visibility and not yvis) and len(self.row_positions) > 1:
|
2050
|
+
if bottom_right_corner is None:
|
2051
|
+
both_above = y1 < top_left_y and y2 < top_left_y
|
2052
|
+
y1_above_y2_below = y1 < top_left_y and y2 > bottom_right_y
|
2053
|
+
y1_above_y2_visible = y1 < top_left_y and top_left_y <= y2 <= bottom_right_y
|
2054
|
+
brc = not (both_above or y1_above_y2_below or y1_above_y2_visible)
|
2055
|
+
else:
|
2056
|
+
brc = bottom_right_corner
|
2057
|
+
if brc:
|
2082
2058
|
if r is not None and not keep_yscroll:
|
2083
2059
|
winfo_height = self.winfo_height()
|
2084
2060
|
if self.row_positions[r + 1] - self.row_positions[r] > winfo_height:
|
@@ -2104,8 +2080,16 @@ class MainTable(tk.Canvas):
|
|
2104
2080
|
]
|
2105
2081
|
self.set_yviews(*args, redraw=False)
|
2106
2082
|
need_redraw = True
|
2107
|
-
|
2108
|
-
|
2083
|
+
# x scroll
|
2084
|
+
if not check_cell_visibility or (check_cell_visibility and not xvis) and len(self.col_positions) > 1:
|
2085
|
+
if bottom_right_corner is None:
|
2086
|
+
both_left = x1 < top_left_x and x2 < top_left_x
|
2087
|
+
x1_left_x2_right = x1 < top_left_x and x2 > bottom_right_x
|
2088
|
+
x1_left_x2_visible = x1 < top_left_x and top_left_x <= x2 <= bottom_right_x
|
2089
|
+
brc = not (both_left or x1_left_x2_right or x1_left_x2_visible)
|
2090
|
+
else:
|
2091
|
+
brc = bottom_right_corner
|
2092
|
+
if brc:
|
2109
2093
|
if c is not None and not keep_xscroll:
|
2110
2094
|
winfo_width = self.winfo_width()
|
2111
2095
|
if self.col_positions[c + 1] - self.col_positions[c] > winfo_width:
|
@@ -2144,17 +2128,24 @@ class MainTable(tk.Canvas):
|
|
2144
2128
|
0 if not r else self.row_positions[r + 1],
|
2145
2129
|
)
|
2146
2130
|
|
2147
|
-
def cell_completely_visible(
|
2131
|
+
def cell_completely_visible(self, r: int | None = 0, c: int | None = 0) -> bool:
|
2132
|
+
cx1, cy1, cx2, cy2 = self.get_canvas_visible_area()
|
2133
|
+
x1, y1, x2, y2 = self.get_cell_coords(r, c)
|
2134
|
+
return cy1 <= y1 and cy2 >= y2 and cx1 <= x1 and cx2 >= x2
|
2135
|
+
|
2136
|
+
def cell_visibility_info(
|
2148
2137
|
self,
|
2149
|
-
r: int
|
2150
|
-
c: int
|
2151
|
-
|
2152
|
-
) -> bool | tuple[bool, bool]:
|
2138
|
+
r: int,
|
2139
|
+
c: int,
|
2140
|
+
) -> dict[Literal["yvis", "xvis", "visible_region", "cell_coords"], bool | tuple[int, int, int, int]]:
|
2153
2141
|
cx1, cy1, cx2, cy2 = self.get_canvas_visible_area()
|
2154
2142
|
x1, y1, x2, y2 = self.get_cell_coords(r, c)
|
2155
|
-
|
2156
|
-
|
2157
|
-
|
2143
|
+
return {
|
2144
|
+
"yvis": cy1 <= y1 and cy2 >= y2,
|
2145
|
+
"xvis": cx1 <= x1 and cx2 >= x2,
|
2146
|
+
"visible_region": (cx1, cy1, cx2, cy2),
|
2147
|
+
"cell_coords": (x1, y1, x2, y2),
|
2148
|
+
}
|
2158
2149
|
|
2159
2150
|
def cell_visible(self, r: int = 0, c: int = 0) -> bool:
|
2160
2151
|
cx1, cy1, cx2, cy2 = self.get_canvas_visible_area()
|
@@ -2184,7 +2175,7 @@ class MainTable(tk.Canvas):
|
|
2184
2175
|
self.PAR.emit_event("<<SheetSelect>>", data=event_data)
|
2185
2176
|
self.PAR.emit_event("<<SelectAll>>", data=event_data)
|
2186
2177
|
|
2187
|
-
def select_columns(self, event:
|
2178
|
+
def select_columns(self, event: Any) -> None:
|
2188
2179
|
if not self.selected:
|
2189
2180
|
return
|
2190
2181
|
r1, c1, r2, c2 = self.selection_boxes[self.selected.fill_iid].coords
|
@@ -2195,7 +2186,7 @@ class MainTable(tk.Canvas):
|
|
2195
2186
|
item=self.CH.select_col(range(c1, c2), redraw=True),
|
2196
2187
|
)
|
2197
2188
|
|
2198
|
-
def select_rows(self, event:
|
2189
|
+
def select_rows(self, event: Any) -> None:
|
2199
2190
|
if not self.selected:
|
2200
2191
|
return
|
2201
2192
|
r1, c1, r2, c2 = self.selection_boxes[self.selected.fill_iid].coords
|
@@ -2206,12 +2197,12 @@ class MainTable(tk.Canvas):
|
|
2206
2197
|
item=self.RI.select_row(range(r1, r2), redraw=True),
|
2207
2198
|
)
|
2208
2199
|
|
2209
|
-
def select_row_start(self, event:
|
2200
|
+
def select_row_start(self, event: Any) -> None:
|
2210
2201
|
if self.selected:
|
2211
2202
|
self.see(self.selected.row, 0)
|
2212
2203
|
self.select_cell(self.selected.row, 0, redraw=True)
|
2213
2204
|
|
2214
|
-
def select_a1(self, event:
|
2205
|
+
def select_a1(self, event: Any) -> None:
|
2215
2206
|
if len(self.row_positions) > 1 and len(self.col_positions) > 1:
|
2216
2207
|
self.see(0, 0)
|
2217
2208
|
self.select_cell(0, 0, redraw=True)
|
@@ -2301,10 +2292,10 @@ class MainTable(tk.Canvas):
|
|
2301
2292
|
curr_box = self.selected.fill_iid
|
2302
2293
|
if r == "all" or (r is None and c is None and cell is None):
|
2303
2294
|
self.hide_dropdown_editor_all_canvases()
|
2304
|
-
for item,
|
2295
|
+
for item, _ in self.get_selection_items():
|
2305
2296
|
self.hide_selection_box(item)
|
2306
2297
|
elif r in ("allrows", "allcols"):
|
2307
|
-
for item,
|
2298
|
+
for item, _ in self.get_selection_items(
|
2308
2299
|
columns=r == "allcols",
|
2309
2300
|
rows=r == "allrows",
|
2310
2301
|
cells=False,
|
@@ -2471,7 +2462,7 @@ class MainTable(tk.Canvas):
|
|
2471
2462
|
if redraw:
|
2472
2463
|
self.refresh()
|
2473
2464
|
|
2474
|
-
def page_UP(self, event:
|
2465
|
+
def page_UP(self, event: Any = None) -> None:
|
2475
2466
|
height = self.winfo_height()
|
2476
2467
|
top = self.canvasy(0)
|
2477
2468
|
scrollto_y = max(0, top - height)
|
@@ -2496,7 +2487,7 @@ class MainTable(tk.Canvas):
|
|
2496
2487
|
self.RI.yview(*args)
|
2497
2488
|
self.main_table_redraw_grid_and_text(redraw_row_index=True)
|
2498
2489
|
|
2499
|
-
def page_DOWN(self, event:
|
2490
|
+
def page_DOWN(self, event: Any = None) -> None:
|
2500
2491
|
height = self.winfo_height()
|
2501
2492
|
top = self.canvasy(0)
|
2502
2493
|
scrollto = top + height
|
@@ -2526,159 +2517,85 @@ class MainTable(tk.Canvas):
|
|
2526
2517
|
self.RI.yview(*args)
|
2527
2518
|
self.main_table_redraw_grid_and_text(redraw_row_index=True)
|
2528
2519
|
|
2529
|
-
def arrowkey_UP(self, event:
|
2520
|
+
def arrowkey_UP(self, event: Any = None) -> None:
|
2530
2521
|
if not self.selected:
|
2531
2522
|
return
|
2532
|
-
|
2533
|
-
|
2534
|
-
|
2535
|
-
|
2536
|
-
|
2537
|
-
|
2538
|
-
|
2539
|
-
|
2540
|
-
|
2541
|
-
|
2542
|
-
|
2543
|
-
|
2544
|
-
self.
|
2545
|
-
elif r and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2546
|
-
if self.cell_completely_visible(r=r - 1, c=c):
|
2547
|
-
self.select_cell(r - 1, c, redraw=True)
|
2548
|
-
else:
|
2549
|
-
self.select_cell(r - 1, c)
|
2550
|
-
self.see(r - 1, c, keep_xscroll=True, check_cell_visibility=False)
|
2523
|
+
r = self.selected.row
|
2524
|
+
c = self.selected.column
|
2525
|
+
if not r:
|
2526
|
+
self.see(r, c)
|
2527
|
+
else:
|
2528
|
+
self.see(r - 1, c, redraw=False)
|
2529
|
+
if self.selected.type_ == "rows" and self.RI.row_selection_enabled:
|
2530
|
+
self.RI.select_row(r - 1, redraw=True)
|
2531
|
+
|
2532
|
+
elif self.selected.type_ in ("cells", "columns") and (
|
2533
|
+
self.single_selection_enabled or self.toggle_selection_enabled
|
2534
|
+
):
|
2535
|
+
self.select_cell(r - 1, c, redraw=True)
|
2551
2536
|
|
2552
|
-
def
|
2537
|
+
def arrowkey_LEFT(self, event: Any = None) -> None:
|
2553
2538
|
if not self.selected:
|
2554
2539
|
return
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
self.RI.select_row(r + 1, redraw=True)
|
2560
|
-
else:
|
2561
|
-
self.RI.select_row(r + 1)
|
2562
|
-
self.see(
|
2563
|
-
r + 1,
|
2564
|
-
0,
|
2565
|
-
keep_xscroll=True,
|
2566
|
-
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2567
|
-
check_cell_visibility=False,
|
2568
|
-
)
|
2569
|
-
|
2570
|
-
elif self.selected.type_ == "columns":
|
2571
|
-
c = self.selected.column
|
2572
|
-
if self.single_selection_enabled or self.toggle_selection_enabled:
|
2573
|
-
if self.selected.row == len(self.row_positions) - 2:
|
2574
|
-
r = self.selected.row
|
2575
|
-
else:
|
2576
|
-
r = self.selected.row + 1
|
2577
|
-
if self.cell_completely_visible(r=r, c=c):
|
2578
|
-
self.select_cell(r, c, redraw=True)
|
2579
|
-
else:
|
2580
|
-
self.select_cell(r, c)
|
2581
|
-
self.see(
|
2582
|
-
r,
|
2583
|
-
c,
|
2584
|
-
check_cell_visibility=False,
|
2585
|
-
)
|
2540
|
+
r = self.selected.row
|
2541
|
+
c = self.selected.column
|
2542
|
+
if not c:
|
2543
|
+
self.see(r, c)
|
2586
2544
|
else:
|
2587
|
-
r =
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2591
|
-
|
2592
|
-
|
2593
|
-
|
2594
|
-
|
2595
|
-
r + 1,
|
2596
|
-
c,
|
2597
|
-
keep_xscroll=True,
|
2598
|
-
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2599
|
-
check_cell_visibility=False,
|
2600
|
-
)
|
2545
|
+
self.see(r, c - 1, redraw=False)
|
2546
|
+
if self.selected.type_ == "columns" and self.CH.col_selection_enabled:
|
2547
|
+
self.CH.select_col(c - 1, redraw=True)
|
2548
|
+
|
2549
|
+
elif self.selected.type_ in ("cells", "rows") and (
|
2550
|
+
self.single_selection_enabled or self.toggle_selection_enabled
|
2551
|
+
):
|
2552
|
+
self.select_cell(r, c - 1, redraw=True)
|
2601
2553
|
|
2602
|
-
def
|
2554
|
+
def arrowkey_DOWN(self, event: Any = None) -> None:
|
2603
2555
|
if not self.selected:
|
2604
2556
|
return
|
2605
|
-
|
2606
|
-
|
2607
|
-
|
2608
|
-
|
2609
|
-
|
2610
|
-
|
2611
|
-
|
2612
|
-
|
2613
|
-
|
2614
|
-
|
2615
|
-
|
2616
|
-
|
2617
|
-
|
2618
|
-
|
2619
|
-
|
2620
|
-
self.
|
2621
|
-
|
2622
|
-
|
2623
|
-
|
2624
|
-
c = self.selected.column
|
2625
|
-
if not c and not self.cell_completely_visible(r=r, c=c):
|
2626
|
-
self.see(r, c, keep_yscroll=True, check_cell_visibility=False)
|
2627
|
-
elif c and (self.single_selection_enabled or self.toggle_selection_enabled):
|
2628
|
-
if self.cell_completely_visible(r=r, c=c - 1):
|
2629
|
-
self.select_cell(r, c - 1, redraw=True)
|
2630
|
-
else:
|
2631
|
-
self.select_cell(r, c - 1)
|
2632
|
-
self.see(r, c - 1, keep_yscroll=True, check_cell_visibility=False)
|
2557
|
+
r = self.selected.row
|
2558
|
+
c = self.selected.column
|
2559
|
+
if self.selected.row == len(self.row_positions) - 2:
|
2560
|
+
self.see(r, c)
|
2561
|
+
else:
|
2562
|
+
brc = False if self.PAR.ops.arrow_key_down_right_scroll_page else None
|
2563
|
+
self.see(
|
2564
|
+
r + 1,
|
2565
|
+
c,
|
2566
|
+
bottom_right_corner=brc,
|
2567
|
+
redraw=False,
|
2568
|
+
)
|
2569
|
+
if self.selected.type_ == "rows" and self.RI.row_selection_enabled:
|
2570
|
+
self.RI.select_row(r + 1, redraw=True)
|
2571
|
+
|
2572
|
+
elif self.selected.type_ in ("cells", "columns") and (
|
2573
|
+
self.single_selection_enabled or self.toggle_selection_enabled
|
2574
|
+
):
|
2575
|
+
self.select_cell(r + 1, c, redraw=True)
|
2633
2576
|
|
2634
|
-
def arrowkey_RIGHT(self, event:
|
2577
|
+
def arrowkey_RIGHT(self, event: Any = None) -> None:
|
2635
2578
|
if not self.selected:
|
2636
2579
|
return
|
2637
|
-
|
2638
|
-
|
2639
|
-
|
2640
|
-
|
2641
|
-
c = self.selected.column
|
2642
|
-
else:
|
2643
|
-
c = self.selected.column + 1
|
2644
|
-
if self.cell_completely_visible(r=r, c=c):
|
2645
|
-
self.select_cell(r, c, redraw=True)
|
2646
|
-
else:
|
2647
|
-
self.select_cell(r, c)
|
2648
|
-
self.see(
|
2649
|
-
r,
|
2650
|
-
c,
|
2651
|
-
check_cell_visibility=False,
|
2652
|
-
)
|
2653
|
-
elif self.selected.type_ == "columns":
|
2654
|
-
c = self.selected.column
|
2655
|
-
if c < len(self.col_positions) - 2 and self.CH.col_selection_enabled:
|
2656
|
-
if self.cell_completely_visible(r=0, c=c + 1):
|
2657
|
-
self.CH.select_col(c + 1, redraw=True)
|
2658
|
-
else:
|
2659
|
-
self.CH.select_col(c + 1)
|
2660
|
-
self.see(
|
2661
|
-
0,
|
2662
|
-
c + 1,
|
2663
|
-
keep_yscroll=True,
|
2664
|
-
bottom_right_corner=False if self.PAR.ops.arrow_key_down_right_scroll_page else True,
|
2665
|
-
check_cell_visibility=False,
|
2666
|
-
)
|
2580
|
+
r = self.selected.row
|
2581
|
+
c = self.selected.column
|
2582
|
+
if self.selected.column == len(self.col_positions) - 2:
|
2583
|
+
self.see(r, c)
|
2667
2584
|
else:
|
2668
|
-
|
2669
|
-
|
2670
|
-
|
2671
|
-
|
2672
|
-
|
2673
|
-
|
2674
|
-
|
2675
|
-
|
2676
|
-
|
2677
|
-
|
2678
|
-
|
2679
|
-
|
2680
|
-
|
2681
|
-
|
2585
|
+
brc = False if self.PAR.ops.arrow_key_down_right_scroll_page else None
|
2586
|
+
self.see(
|
2587
|
+
r,
|
2588
|
+
c + 1,
|
2589
|
+
bottom_right_corner=brc,
|
2590
|
+
redraw=False,
|
2591
|
+
)
|
2592
|
+
if self.selected.type_ == "columns" and self.CH.col_selection_enabled:
|
2593
|
+
self.CH.select_col(c + 1, redraw=True)
|
2594
|
+
|
2595
|
+
elif self.selected.type_ in ("cells", "rows") and (
|
2596
|
+
self.single_selection_enabled or self.toggle_selection_enabled
|
2597
|
+
):
|
2598
|
+
self.select_cell(r, c + 1, redraw=True)
|
2682
2599
|
|
2683
2600
|
def shift_arrowkey_select_box(
|
2684
2601
|
self,
|
@@ -2712,7 +2629,7 @@ class MainTable(tk.Canvas):
|
|
2712
2629
|
self.see(see_r, see_c, keep_xscroll=keep_xscroll, keep_yscroll=keep_yscroll, redraw=False)
|
2713
2630
|
self.refresh()
|
2714
2631
|
|
2715
|
-
def shift_arrowkey_UP(self, event:
|
2632
|
+
def shift_arrowkey_UP(self, event: Any = None) -> None:
|
2716
2633
|
if not self.selected:
|
2717
2634
|
return
|
2718
2635
|
r1, c1, r2, c2 = self.selected.box
|
@@ -2729,7 +2646,7 @@ class MainTable(tk.Canvas):
|
|
2729
2646
|
see_r = r1
|
2730
2647
|
self.shift_arrowkey_select_box(r1, c1, r2, c2, current_r, current_c, see_r, c1, keep_xscroll=True)
|
2731
2648
|
|
2732
|
-
def shift_arrowkey_DOWN(self, event:
|
2649
|
+
def shift_arrowkey_DOWN(self, event: Any = None) -> None:
|
2733
2650
|
if not self.selected:
|
2734
2651
|
return
|
2735
2652
|
r1, c1, r2, c2 = self.selected.box
|
@@ -2744,7 +2661,7 @@ class MainTable(tk.Canvas):
|
|
2744
2661
|
see_r = r1
|
2745
2662
|
self.shift_arrowkey_select_box(r1, c1, r2, c2, current_r, current_c, see_r, c1, keep_xscroll=True)
|
2746
2663
|
|
2747
|
-
def shift_arrowkey_LEFT(self, event:
|
2664
|
+
def shift_arrowkey_LEFT(self, event: Any = None) -> None:
|
2748
2665
|
if not self.selected:
|
2749
2666
|
return
|
2750
2667
|
r1, c1, r2, c2 = self.selected.box
|
@@ -2761,7 +2678,7 @@ class MainTable(tk.Canvas):
|
|
2761
2678
|
see_c = c1
|
2762
2679
|
self.shift_arrowkey_select_box(r1, c1, r2, c2, current_r, current_c, r1, see_c, keep_yscroll=True)
|
2763
2680
|
|
2764
|
-
def shift_arrowkey_RIGHT(self, event:
|
2681
|
+
def shift_arrowkey_RIGHT(self, event: Any = None) -> None:
|
2765
2682
|
if not self.selected:
|
2766
2683
|
return
|
2767
2684
|
r1, c1, r2, c2 = self.selected.box
|
@@ -3100,7 +3017,7 @@ class MainTable(tk.Canvas):
|
|
3100
3017
|
**mnkwgs,
|
3101
3018
|
)
|
3102
3019
|
|
3103
|
-
def enable_bindings(self, bindings:
|
3020
|
+
def enable_bindings(self, bindings: Any) -> None:
|
3104
3021
|
if not bindings:
|
3105
3022
|
self._enable_binding("all")
|
3106
3023
|
elif isinstance(bindings, (list, tuple)):
|
@@ -3114,7 +3031,7 @@ class MainTable(tk.Canvas):
|
|
3114
3031
|
self._enable_binding(bindings.lower())
|
3115
3032
|
self.create_rc_menus()
|
3116
3033
|
|
3117
|
-
def disable_bindings(self, bindings:
|
3034
|
+
def disable_bindings(self, bindings: Any) -> None:
|
3118
3035
|
if not bindings:
|
3119
3036
|
self._disable_binding("all")
|
3120
3037
|
elif isinstance(bindings, (list, tuple)):
|
@@ -3128,7 +3045,7 @@ class MainTable(tk.Canvas):
|
|
3128
3045
|
self._disable_binding(bindings)
|
3129
3046
|
self.create_rc_menus()
|
3130
3047
|
|
3131
|
-
def _enable_binding(self, binding:
|
3048
|
+
def _enable_binding(self, binding: Binding) -> None:
|
3132
3049
|
if binding == "enable_all":
|
3133
3050
|
binding = "all"
|
3134
3051
|
if binding in (
|
@@ -3273,7 +3190,7 @@ class MainTable(tk.Canvas):
|
|
3273
3190
|
for binding in self.PAR.ops[bindings_key]:
|
3274
3191
|
widget.bind(binding, func)
|
3275
3192
|
|
3276
|
-
def _disable_binding(self, binding:
|
3193
|
+
def _disable_binding(self, binding: Binding) -> None:
|
3277
3194
|
if binding == "disable_all":
|
3278
3195
|
binding = "all"
|
3279
3196
|
if binding in (
|
@@ -3412,14 +3329,14 @@ class MainTable(tk.Canvas):
|
|
3412
3329
|
self.CH.rsz_w = None
|
3413
3330
|
self.CH.rsz_h = None
|
3414
3331
|
|
3415
|
-
def mouse_motion(self, event:
|
3332
|
+
def mouse_motion(self, event: Any) -> None:
|
3416
3333
|
self.reset_mouse_motion_creations()
|
3417
3334
|
try_binding(self.extra_motion_func, event)
|
3418
3335
|
|
3419
3336
|
def not_currently_resizing(self) -> bool:
|
3420
3337
|
return all(v is None for v in (self.RI.rsz_h, self.RI.rsz_w, self.CH.rsz_h, self.CH.rsz_w))
|
3421
3338
|
|
3422
|
-
def rc(self, event=None):
|
3339
|
+
def rc(self, event: Any = None) -> None:
|
3423
3340
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3424
3341
|
self.focus_set()
|
3425
3342
|
popup_menu = None
|
@@ -3452,7 +3369,7 @@ class MainTable(tk.Canvas):
|
|
3452
3369
|
if popup_menu:
|
3453
3370
|
popup_menu.tk_popup(event.x_root, event.y_root)
|
3454
3371
|
|
3455
|
-
def b1_press(self, event=None):
|
3372
|
+
def b1_press(self, event: Any = None) -> None:
|
3456
3373
|
self.closed_dropdown = self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3457
3374
|
self.focus_set()
|
3458
3375
|
if (
|
@@ -3474,7 +3391,9 @@ class MainTable(tk.Canvas):
|
|
3474
3391
|
self.b1_pressed_loc = (r, c)
|
3475
3392
|
try_binding(self.extra_b1_press_func, event)
|
3476
3393
|
|
3477
|
-
def create_resize_line(
|
3394
|
+
def create_resize_line(
|
3395
|
+
self, x1: int, y1: int, x2: int, y2: int, width: int, fill: str, tag: str | tuple[str]
|
3396
|
+
) -> None:
|
3478
3397
|
if self.hidd_resize_lines:
|
3479
3398
|
t, sh = self.hidd_resize_lines.popitem()
|
3480
3399
|
self.coords(t, x1, y1, x2, y2)
|
@@ -3487,7 +3406,7 @@ class MainTable(tk.Canvas):
|
|
3487
3406
|
t = self.create_line(x1, y1, x2, y2, width=width, fill=fill, tags=tag)
|
3488
3407
|
self.disp_resize_lines[t] = True
|
3489
3408
|
|
3490
|
-
def delete_resize_lines(self):
|
3409
|
+
def delete_resize_lines(self) -> None:
|
3491
3410
|
self.hidd_resize_lines.update(self.disp_resize_lines)
|
3492
3411
|
self.disp_resize_lines = {}
|
3493
3412
|
for t, sh in self.hidd_resize_lines.items():
|
@@ -3495,7 +3414,7 @@ class MainTable(tk.Canvas):
|
|
3495
3414
|
self.itemconfig(t, state="hidden")
|
3496
3415
|
self.hidd_resize_lines[t] = False
|
3497
3416
|
|
3498
|
-
def ctrl_b1_press(self, event=None):
|
3417
|
+
def ctrl_b1_press(self, event: Any = None) -> None:
|
3499
3418
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3500
3419
|
self.focus_set()
|
3501
3420
|
self.ctrl_b1_pressed = True
|
@@ -3513,7 +3432,7 @@ class MainTable(tk.Canvas):
|
|
3513
3432
|
elif not self.ctrl_select_enabled:
|
3514
3433
|
self.b1_press(event)
|
3515
3434
|
|
3516
|
-
def ctrl_shift_b1_press(self, event=None):
|
3435
|
+
def ctrl_shift_b1_press(self, event: Any = None) -> None:
|
3517
3436
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3518
3437
|
self.focus_set()
|
3519
3438
|
self.ctrl_b1_pressed = True
|
@@ -3541,7 +3460,7 @@ class MainTable(tk.Canvas):
|
|
3541
3460
|
elif not self.ctrl_select_enabled:
|
3542
3461
|
self.shift_b1_press(event)
|
3543
3462
|
|
3544
|
-
def shift_b1_press(self, event=None):
|
3463
|
+
def shift_b1_press(self, event: Any = None) -> None:
|
3545
3464
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3546
3465
|
self.focus_set()
|
3547
3466
|
if self.drag_selection_enabled and self.not_currently_resizing():
|
@@ -3568,7 +3487,7 @@ class MainTable(tk.Canvas):
|
|
3568
3487
|
try_binding(self.shift_selection_binding_func, sel_event)
|
3569
3488
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3570
3489
|
|
3571
|
-
def get_shift_select_box(self, min_r: int, rowsel: int, min_c: int, colsel: int):
|
3490
|
+
def get_shift_select_box(self, min_r: int, rowsel: int, min_c: int, colsel: int) -> tuple[int, int, int, int]:
|
3572
3491
|
if rowsel >= min_r and colsel >= min_c:
|
3573
3492
|
return min_r, min_c, rowsel + 1, colsel + 1
|
3574
3493
|
elif rowsel >= min_r and min_c >= colsel:
|
@@ -3578,7 +3497,13 @@ class MainTable(tk.Canvas):
|
|
3578
3497
|
elif min_r >= rowsel and min_c >= colsel:
|
3579
3498
|
return rowsel, colsel, min_r + 1, min_c + 1
|
3580
3499
|
|
3581
|
-
def get_b1_motion_box(
|
3500
|
+
def get_b1_motion_box(
|
3501
|
+
self,
|
3502
|
+
start_row: int,
|
3503
|
+
start_col: int,
|
3504
|
+
end_row: int,
|
3505
|
+
end_col: int,
|
3506
|
+
) -> tuple[int, int, int, int, Literal["cells"]]:
|
3582
3507
|
if end_row >= start_row and end_col >= start_col and (end_row - start_row or end_col - start_col):
|
3583
3508
|
return start_row, start_col, end_row + 1, end_col + 1, "cells"
|
3584
3509
|
elif end_row >= start_row and end_col < start_col and (end_row - start_row or start_col - end_col):
|
@@ -3590,7 +3515,7 @@ class MainTable(tk.Canvas):
|
|
3590
3515
|
else:
|
3591
3516
|
return start_row, start_col, start_row + 1, start_col + 1, "cells"
|
3592
3517
|
|
3593
|
-
def b1_motion(self, event:
|
3518
|
+
def b1_motion(self, event: Any) -> None:
|
3594
3519
|
if self.drag_selection_enabled and all(
|
3595
3520
|
v is None
|
3596
3521
|
for v in (
|
@@ -3638,7 +3563,7 @@ class MainTable(tk.Canvas):
|
|
3638
3563
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3639
3564
|
try_binding(self.extra_b1_motion_func, event)
|
3640
3565
|
|
3641
|
-
def ctrl_b1_motion(self, event:
|
3566
|
+
def ctrl_b1_motion(self, event: Any) -> None:
|
3642
3567
|
if self.ctrl_select_enabled and self.drag_selection_enabled and self.not_currently_resizing():
|
3643
3568
|
need_redraw = False
|
3644
3569
|
end_row = self.identify_row(y=event.y)
|
@@ -3681,7 +3606,7 @@ class MainTable(tk.Canvas):
|
|
3681
3606
|
elif not self.ctrl_select_enabled:
|
3682
3607
|
self.b1_motion(event)
|
3683
3608
|
|
3684
|
-
def b1_release(self, event=None):
|
3609
|
+
def b1_release(self, event: Any = None) -> None:
|
3685
3610
|
to_hide = self.being_drawn_item
|
3686
3611
|
if self.being_drawn_item is not None and (to_sel := self.coords_and_type(self.being_drawn_item)):
|
3687
3612
|
r_to_sel, c_to_sel = self.selected.row, self.selected.column
|
@@ -3731,7 +3656,7 @@ class MainTable(tk.Canvas):
|
|
3731
3656
|
self.closed_dropdown = None
|
3732
3657
|
try_binding(self.extra_b1_release_func, event)
|
3733
3658
|
|
3734
|
-
def double_b1(self, event=None):
|
3659
|
+
def double_b1(self, event: Any = None) -> None:
|
3735
3660
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
3736
3661
|
self.focus_set()
|
3737
3662
|
if (
|
@@ -3755,7 +3680,7 @@ class MainTable(tk.Canvas):
|
|
3755
3680
|
self.open_cell(event)
|
3756
3681
|
try_binding(self.extra_double_b1_func, event)
|
3757
3682
|
|
3758
|
-
def identify_row(self, event=None, y=None, allow_end=True):
|
3683
|
+
def identify_row(self, event: Any = None, y: int | None = None, allow_end: bool = True) -> int | None:
|
3759
3684
|
if event is None:
|
3760
3685
|
y2 = self.canvasy(y)
|
3761
3686
|
elif y is None:
|
@@ -3767,7 +3692,7 @@ class MainTable(tk.Canvas):
|
|
3767
3692
|
return None
|
3768
3693
|
return r
|
3769
3694
|
|
3770
|
-
def identify_col(self, event=None, x=None, allow_end=True):
|
3695
|
+
def identify_col(self, event: Any = None, x: int | None = None, allow_end: bool = True) -> int | None:
|
3771
3696
|
if event is None:
|
3772
3697
|
x2 = self.canvasx(x)
|
3773
3698
|
elif x is None:
|
@@ -3799,7 +3724,7 @@ class MainTable(tk.Canvas):
|
|
3799
3724
|
if self.show_index:
|
3800
3725
|
self.RI.yview("moveto", 1)
|
3801
3726
|
|
3802
|
-
def scroll_if_event_offscreen(self, event:
|
3727
|
+
def scroll_if_event_offscreen(self, event: Any) -> bool:
|
3803
3728
|
need_redraw = False
|
3804
3729
|
if self.data:
|
3805
3730
|
xcheck = self.xview()
|
@@ -3838,7 +3763,7 @@ class MainTable(tk.Canvas):
|
|
3838
3763
|
self.y_move_synced_scrolls("moveto", self.yview()[0])
|
3839
3764
|
return need_redraw
|
3840
3765
|
|
3841
|
-
def x_move_synced_scrolls(self, *args, redraw: bool = True, use_scrollbar: bool = False):
|
3766
|
+
def x_move_synced_scrolls(self, *args: Any, redraw: bool = True, use_scrollbar: bool = False) -> None:
|
3842
3767
|
for widget in self.synced_scrolls:
|
3843
3768
|
# try:
|
3844
3769
|
if hasattr(widget, "MT"):
|
@@ -3851,7 +3776,7 @@ class MainTable(tk.Canvas):
|
|
3851
3776
|
# except Exception:
|
3852
3777
|
# continue
|
3853
3778
|
|
3854
|
-
def y_move_synced_scrolls(self, *args, redraw: bool = True, use_scrollbar: bool = False):
|
3779
|
+
def y_move_synced_scrolls(self, *args: Any, redraw: bool = True, use_scrollbar: bool = False) -> None:
|
3855
3780
|
for widget in self.synced_scrolls:
|
3856
3781
|
# try:
|
3857
3782
|
if hasattr(widget, "MT"):
|
@@ -3864,7 +3789,7 @@ class MainTable(tk.Canvas):
|
|
3864
3789
|
# except Exception:
|
3865
3790
|
# continue
|
3866
3791
|
|
3867
|
-
def _xscrollbar(self, *args, move_synced: bool = True):
|
3792
|
+
def _xscrollbar(self, *args: Any, move_synced: bool = True) -> None:
|
3868
3793
|
self.xview(*args)
|
3869
3794
|
if self.show_header:
|
3870
3795
|
self.CH.xview(*args)
|
@@ -3872,7 +3797,7 @@ class MainTable(tk.Canvas):
|
|
3872
3797
|
if move_synced:
|
3873
3798
|
self.x_move_synced_scrolls(*args, use_scrollbar=True)
|
3874
3799
|
|
3875
|
-
def _yscrollbar(self, *args, move_synced: bool = True):
|
3800
|
+
def _yscrollbar(self, *args: Any, move_synced: bool = True) -> None:
|
3876
3801
|
self.yview(*args)
|
3877
3802
|
if self.show_index:
|
3878
3803
|
self.RI.yview(*args)
|
@@ -3882,7 +3807,7 @@ class MainTable(tk.Canvas):
|
|
3882
3807
|
|
3883
3808
|
def set_xviews(
|
3884
3809
|
self,
|
3885
|
-
*args,
|
3810
|
+
*args: Any,
|
3886
3811
|
move_synced: bool = True,
|
3887
3812
|
redraw: bool = True,
|
3888
3813
|
) -> None:
|
@@ -3902,7 +3827,7 @@ class MainTable(tk.Canvas):
|
|
3902
3827
|
|
3903
3828
|
def set_yviews(
|
3904
3829
|
self,
|
3905
|
-
*args,
|
3830
|
+
*args: Any,
|
3906
3831
|
move_synced: bool = True,
|
3907
3832
|
redraw: bool = True,
|
3908
3833
|
) -> None:
|
@@ -3924,7 +3849,7 @@ class MainTable(tk.Canvas):
|
|
3924
3849
|
self.set_xviews(*x_args)
|
3925
3850
|
self.set_yviews(*y_args)
|
3926
3851
|
|
3927
|
-
def mousewheel(self, event:
|
3852
|
+
def mousewheel(self, event: Any) -> None:
|
3928
3853
|
if event.delta < 0 or event.num == 5:
|
3929
3854
|
self.yview_scroll(1, "units")
|
3930
3855
|
self.RI.yview_scroll(1, "units")
|
@@ -3937,7 +3862,7 @@ class MainTable(tk.Canvas):
|
|
3937
3862
|
self.y_move_synced_scrolls("moveto", self.yview()[0])
|
3938
3863
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
3939
3864
|
|
3940
|
-
def shift_mousewheel(self, event:
|
3865
|
+
def shift_mousewheel(self, event: Any) -> None:
|
3941
3866
|
if event.delta < 0 or event.num == 5:
|
3942
3867
|
self.xview_scroll(1, "units")
|
3943
3868
|
self.CH.xview_scroll(1, "units")
|
@@ -3950,13 +3875,13 @@ class MainTable(tk.Canvas):
|
|
3950
3875
|
self.x_move_synced_scrolls("moveto", self.xview()[0])
|
3951
3876
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
3952
3877
|
|
3953
|
-
def ctrl_mousewheel(self, event):
|
3878
|
+
def ctrl_mousewheel(self, event: Any) -> None:
|
3954
3879
|
if event.delta < 0 or event.num == 5:
|
3955
3880
|
self.zoom_out()
|
3956
3881
|
elif event.delta >= 0 or event.num == 4:
|
3957
3882
|
self.zoom_in()
|
3958
3883
|
|
3959
|
-
def zoom_in(self, event=None):
|
3884
|
+
def zoom_in(self, event: Any = None) -> None:
|
3960
3885
|
self.zoom_font(
|
3961
3886
|
(self.PAR.ops.table_font[0], self.PAR.ops.table_font[1] + 1, self.PAR.ops.table_font[2]),
|
3962
3887
|
(self.PAR.ops.index_font[0], self.PAR.ops.index_font[1] + 1, self.PAR.ops.index_font[2]),
|
@@ -3964,7 +3889,7 @@ class MainTable(tk.Canvas):
|
|
3964
3889
|
"in",
|
3965
3890
|
)
|
3966
3891
|
|
3967
|
-
def zoom_out(self, event=None):
|
3892
|
+
def zoom_out(self, event: Any = None) -> None:
|
3968
3893
|
if self.PAR.ops.table_font[1] < 2 or self.PAR.ops.index_font[1] < 2 or self.PAR.ops.header_font[1] < 2:
|
3969
3894
|
return
|
3970
3895
|
self.zoom_font(
|
@@ -3974,7 +3899,13 @@ class MainTable(tk.Canvas):
|
|
3974
3899
|
"out",
|
3975
3900
|
)
|
3976
3901
|
|
3977
|
-
def zoom_font(
|
3902
|
+
def zoom_font(
|
3903
|
+
self,
|
3904
|
+
table_font: FontTuple,
|
3905
|
+
index_font: FontTuple,
|
3906
|
+
header_font: FontTuple,
|
3907
|
+
zoom: Literal["in", "out"],
|
3908
|
+
) -> None:
|
3978
3909
|
self.saved_column_widths = {}
|
3979
3910
|
self.saved_row_heights = {}
|
3980
3911
|
# should record position prior to change and then see after change
|
@@ -4129,7 +4060,7 @@ class MainTable(tk.Canvas):
|
|
4129
4060
|
self.recreate_all_selection_boxes()
|
4130
4061
|
return self.PAR.ops.index_font
|
4131
4062
|
|
4132
|
-
def set_index_font_help(self):
|
4063
|
+
def set_index_font_help(self) -> None:
|
4133
4064
|
self.RI.index_font = self.PAR.ops.index_font
|
4134
4065
|
if self.PAR.ops.index_font not in self.char_widths:
|
4135
4066
|
self.char_widths[self.PAR.ops.index_font] = {}
|
@@ -4169,7 +4100,7 @@ class MainTable(tk.Canvas):
|
|
4169
4100
|
self.recreate_all_selection_boxes()
|
4170
4101
|
return self.PAR.ops.header_font
|
4171
4102
|
|
4172
|
-
def set_header_font_help(self):
|
4103
|
+
def set_header_font_help(self) -> None:
|
4173
4104
|
self.CH.header_font = self.PAR.ops.header_font
|
4174
4105
|
if self.PAR.ops.header_font not in self.char_widths:
|
4175
4106
|
self.char_widths[self.PAR.ops.header_font] = {}
|
@@ -4183,11 +4114,11 @@ class MainTable(tk.Canvas):
|
|
4183
4114
|
self.PAR.ops.default_header_height = int(self.min_header_height)
|
4184
4115
|
self.CH.set_height(self.get_default_header_height(), set_TL=True)
|
4185
4116
|
|
4186
|
-
def purge_undo_and_redo_stack(self):
|
4117
|
+
def purge_undo_and_redo_stack(self) -> None:
|
4187
4118
|
self.undo_stack = deque(maxlen=self.PAR.ops.max_undos)
|
4188
4119
|
self.redo_stack = deque(maxlen=self.PAR.ops.max_undos)
|
4189
4120
|
|
4190
|
-
def purge_redo_stack(self):
|
4121
|
+
def purge_redo_stack(self) -> None:
|
4191
4122
|
self.redo_stack = deque(maxlen=self.PAR.ops.max_undos)
|
4192
4123
|
|
4193
4124
|
def data_reference(
|
@@ -4198,7 +4129,7 @@ class MainTable(tk.Canvas):
|
|
4198
4129
|
redraw: bool = False,
|
4199
4130
|
return_id: bool = True,
|
4200
4131
|
keep_formatting: bool = True,
|
4201
|
-
) ->
|
4132
|
+
) -> Any:
|
4202
4133
|
if isinstance(newdataref, (list, tuple)):
|
4203
4134
|
self.hide_dropdown_editor_all_canvases()
|
4204
4135
|
self.data = newdataref
|
@@ -4218,7 +4149,7 @@ class MainTable(tk.Canvas):
|
|
4218
4149
|
else:
|
4219
4150
|
return self.data
|
4220
4151
|
|
4221
|
-
def get_cell_dimensions(self, datarn, datacn):
|
4152
|
+
def get_cell_dimensions(self, datarn: int, datacn: int) -> tuple[int, int]:
|
4222
4153
|
txt = self.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True)
|
4223
4154
|
if txt:
|
4224
4155
|
self.txt_measure_canvas.itemconfig(self.txt_measure_canvas_text, text=txt, font=self.PAR.ops.table_font)
|
@@ -4232,7 +4163,9 @@ class MainTable(tk.Canvas):
|
|
4232
4163
|
return w + self.table_txt_height, h
|
4233
4164
|
return w, h
|
4234
4165
|
|
4235
|
-
def set_cell_size_to_text(
|
4166
|
+
def set_cell_size_to_text(
|
4167
|
+
self, r: int, c: int, only_if_too_small: bool = False, redraw: bool = True, run_binding: bool = False
|
4168
|
+
) -> bool:
|
4236
4169
|
min_column_width = self.PAR.ops.min_column_width
|
4237
4170
|
min_rh = self.min_row_height
|
4238
4171
|
w = min_column_width
|
@@ -4303,6 +4236,7 @@ class MainTable(tk.Canvas):
|
|
4303
4236
|
return True
|
4304
4237
|
else:
|
4305
4238
|
return False
|
4239
|
+
return False
|
4306
4240
|
|
4307
4241
|
def get_cell_max_width(self, datarn: int, dispcn: int) -> int:
|
4308
4242
|
datacn = self.datacn(dispcn)
|
@@ -4375,14 +4309,8 @@ class MainTable(tk.Canvas):
|
|
4375
4309
|
qfont = self.PAR.ops.table_font
|
4376
4310
|
numrows = self.total_data_rows()
|
4377
4311
|
numcols = self.total_data_cols()
|
4378
|
-
if self.all_columns_displayed
|
4379
|
-
|
4380
|
-
else:
|
4381
|
-
itercols = self.displayed_columns
|
4382
|
-
if self.all_rows_displayed:
|
4383
|
-
iterrows = range(numrows)
|
4384
|
-
else:
|
4385
|
-
iterrows = self.displayed_rows
|
4312
|
+
itercols = range(numcols) if self.all_columns_displayed else self.displayed_columns
|
4313
|
+
iterrows = range(numrows) if self.all_rows_displayed else self.displayed_rows
|
4386
4314
|
if is_iterable(self._row_index):
|
4387
4315
|
for datarn in iterrows:
|
4388
4316
|
w_, h = self.RI.get_cell_dimensions(datarn)
|
@@ -4395,10 +4323,7 @@ class MainTable(tk.Canvas):
|
|
4395
4323
|
added_w_space = 1 if slim else 7
|
4396
4324
|
for datacn in itercols:
|
4397
4325
|
w = min_column_width if width is None else width
|
4398
|
-
if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w
|
4399
|
-
w = hw
|
4400
|
-
else:
|
4401
|
-
w = min_column_width
|
4326
|
+
w = hw if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w else min_column_width
|
4402
4327
|
for datarn in iterrows:
|
4403
4328
|
if txt := self.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True):
|
4404
4329
|
qconf(qtxtm, text=txt, font=qfont)
|
@@ -4462,7 +4387,7 @@ class MainTable(tk.Canvas):
|
|
4462
4387
|
else:
|
4463
4388
|
self.set_row_positions(itr=repeat(height, len(self.displayed_rows)))
|
4464
4389
|
|
4465
|
-
def del_col_position(self, idx: int, deselect_all: bool = False):
|
4390
|
+
def del_col_position(self, idx: int, deselect_all: bool = False) -> None:
|
4466
4391
|
if deselect_all:
|
4467
4392
|
self.deselect("all", redraw=False)
|
4468
4393
|
if idx == "end" or len(self.col_positions) <= idx + 1:
|
@@ -4473,7 +4398,7 @@ class MainTable(tk.Canvas):
|
|
4473
4398
|
del self.col_positions[idx]
|
4474
4399
|
self.col_positions[idx:] = [e - w for e in islice(self.col_positions, idx, len(self.col_positions))]
|
4475
4400
|
|
4476
|
-
def del_row_position(self, idx: int, deselect_all: bool = False):
|
4401
|
+
def del_row_position(self, idx: int, deselect_all: bool = False) -> None:
|
4477
4402
|
if deselect_all:
|
4478
4403
|
self.deselect("all", redraw=False)
|
4479
4404
|
if idx == "end" or len(self.row_positions) <= idx + 1:
|
@@ -4484,7 +4409,7 @@ class MainTable(tk.Canvas):
|
|
4484
4409
|
del self.row_positions[idx]
|
4485
4410
|
self.row_positions[idx:] = [e - w for e in islice(self.row_positions, idx, len(self.row_positions))]
|
4486
4411
|
|
4487
|
-
def del_col_positions(self, idxs: AnyIter[int] | None = None):
|
4412
|
+
def del_col_positions(self, idxs: AnyIter[int] | None = None) -> None:
|
4488
4413
|
if idxs is None:
|
4489
4414
|
del self.col_positions[-1]
|
4490
4415
|
else:
|
@@ -4492,7 +4417,7 @@ class MainTable(tk.Canvas):
|
|
4492
4417
|
idxs = set(idxs)
|
4493
4418
|
self.set_col_positions(itr=(w for i, w in enumerate(self.gen_column_widths()) if i not in idxs))
|
4494
4419
|
|
4495
|
-
def del_row_positions(self, idxs: AnyIter[int] | None = None):
|
4420
|
+
def del_row_positions(self, idxs: AnyIter[int] | None = None) -> None:
|
4496
4421
|
if idxs is None:
|
4497
4422
|
del self.row_positions[-1]
|
4498
4423
|
else:
|
@@ -4715,9 +4640,9 @@ class MainTable(tk.Canvas):
|
|
4715
4640
|
|
4716
4641
|
def adjust_options_post_delete_columns(
|
4717
4642
|
self,
|
4718
|
-
to_del: None | set = None,
|
4719
|
-
to_bis: None | list = None,
|
4720
|
-
named_spans: None | set = None,
|
4643
|
+
to_del: None | set[int] = None,
|
4644
|
+
to_bis: None | list[int] = None,
|
4645
|
+
named_spans: None | set[str] = None,
|
4721
4646
|
) -> list[int]:
|
4722
4647
|
if to_del is None:
|
4723
4648
|
to_del = set()
|
@@ -4773,7 +4698,7 @@ class MainTable(tk.Canvas):
|
|
4773
4698
|
|
4774
4699
|
def del_columns_from_named_spans(
|
4775
4700
|
self,
|
4776
|
-
to_del: set,
|
4701
|
+
to_del: set[int],
|
4777
4702
|
to_bis: list,
|
4778
4703
|
named_spans: None | set = None,
|
4779
4704
|
) -> None:
|
@@ -4789,10 +4714,7 @@ class MainTable(tk.Canvas):
|
|
4789
4714
|
if isinstance(span["upto_c"], int) and span["upto_c"] > c:
|
4790
4715
|
span["upto_c"] -= 1
|
4791
4716
|
|
4792
|
-
def get_spans_to_del_from_cols(
|
4793
|
-
self,
|
4794
|
-
cols: set,
|
4795
|
-
) -> set:
|
4717
|
+
def get_spans_to_del_from_cols(self, cols: set[int]) -> set[str]:
|
4796
4718
|
total = self.total_data_cols()
|
4797
4719
|
return {
|
4798
4720
|
nm
|
@@ -4803,9 +4725,9 @@ class MainTable(tk.Canvas):
|
|
4803
4725
|
|
4804
4726
|
def adjust_options_post_delete_rows(
|
4805
4727
|
self,
|
4806
|
-
to_del: None | set = None,
|
4807
|
-
to_bis: None | list = None,
|
4808
|
-
named_spans: None | set = None,
|
4728
|
+
to_del: None | set[int] = None,
|
4729
|
+
to_bis: None | list[int] = None,
|
4730
|
+
named_spans: None | set[str] = None,
|
4809
4731
|
) -> list[int]:
|
4810
4732
|
if to_del is None:
|
4811
4733
|
to_del = set()
|
@@ -4868,7 +4790,7 @@ class MainTable(tk.Canvas):
|
|
4868
4790
|
self,
|
4869
4791
|
to_del: set,
|
4870
4792
|
to_bis: list,
|
4871
|
-
named_spans: None | set = None,
|
4793
|
+
named_spans: None | set[str] = None,
|
4872
4794
|
) -> None:
|
4873
4795
|
if named_spans is None:
|
4874
4796
|
named_spans = self.get_spans_to_del_from_rows(rows=to_del)
|
@@ -4882,10 +4804,7 @@ class MainTable(tk.Canvas):
|
|
4882
4804
|
if isinstance(span["upto_r"], int) and span["upto_r"] > r:
|
4883
4805
|
span["upto_r"] -= 1
|
4884
4806
|
|
4885
|
-
def get_spans_to_del_from_rows(
|
4886
|
-
self,
|
4887
|
-
rows: set,
|
4888
|
-
) -> set:
|
4807
|
+
def get_spans_to_del_from_rows(self, rows: set[int]) -> set[str]:
|
4889
4808
|
total = self.total_data_rows()
|
4890
4809
|
return {
|
4891
4810
|
nm
|
@@ -4979,7 +4898,7 @@ class MainTable(tk.Canvas):
|
|
4979
4898
|
try_binding(self.extra_end_insert_cols_rc_func, event_data, "end_add_columns")
|
4980
4899
|
return event_data
|
4981
4900
|
|
4982
|
-
def rc_add_columns(self, event:
|
4901
|
+
def rc_add_columns(self, event: Any = None) -> None:
|
4983
4902
|
rowlen = self.equalize_data_row_lengths()
|
4984
4903
|
selcols = sorted(self.get_selected_cols())
|
4985
4904
|
if (
|
@@ -5028,8 +4947,8 @@ class MainTable(tk.Canvas):
|
|
5028
4947
|
|
5029
4948
|
def add_rows(
|
5030
4949
|
self,
|
5031
|
-
rows: dict[int, list[
|
5032
|
-
index: dict[int,
|
4950
|
+
rows: dict[int, list[Any]],
|
4951
|
+
index: dict[int, Any],
|
5033
4952
|
row_heights: dict[int, float | int],
|
5034
4953
|
event_data: EventDataDict,
|
5035
4954
|
create_ops: bool = True,
|
@@ -5113,7 +5032,7 @@ class MainTable(tk.Canvas):
|
|
5113
5032
|
try_binding(self.extra_end_insert_rows_rc_func, event_data, "end_add_rows")
|
5114
5033
|
return event_data
|
5115
5034
|
|
5116
|
-
def rc_add_rows(self, event:
|
5035
|
+
def rc_add_rows(self, event: Any = None) -> None:
|
5117
5036
|
total_data_rows = self.total_data_rows()
|
5118
5037
|
selrows = sorted(self.get_selected_rows())
|
5119
5038
|
if (
|
@@ -5165,7 +5084,7 @@ class MainTable(tk.Canvas):
|
|
5165
5084
|
data_ins_col: int,
|
5166
5085
|
displayed_ins_col: int,
|
5167
5086
|
numcols: int,
|
5168
|
-
columns: list[list[
|
5087
|
+
columns: list[list[Any]] | None = None,
|
5169
5088
|
widths: list[int] | tuple[int] | None = None,
|
5170
5089
|
headers: bool = False,
|
5171
5090
|
) -> tuple[dict, dict, dict]:
|
@@ -5190,12 +5109,9 @@ class MainTable(tk.Canvas):
|
|
5190
5109
|
for datacn in reversed(range(data_ins_col, data_ins_col + numcols))
|
5191
5110
|
}
|
5192
5111
|
else:
|
5193
|
-
if headers
|
5194
|
-
start = 1
|
5195
|
-
else:
|
5196
|
-
start = 0
|
5112
|
+
start = 1 if headers else 0
|
5197
5113
|
columns = {
|
5198
|
-
datacn:
|
5114
|
+
datacn: dict(enumerate(islice(column, start, None)))
|
5199
5115
|
for datacn, column in zip(reversed(range(data_ins_col, data_ins_col + numcols)), reversed(columns))
|
5200
5116
|
}
|
5201
5117
|
if widths is None:
|
@@ -5204,10 +5120,7 @@ class MainTable(tk.Canvas):
|
|
5204
5120
|
for c in reversed(range(displayed_ins_col, displayed_ins_col + numcols))
|
5205
5121
|
}
|
5206
5122
|
else:
|
5207
|
-
widths =
|
5208
|
-
c: width
|
5209
|
-
for c, width in zip(reversed(range(displayed_ins_col, displayed_ins_col + numcols)), reversed(widths))
|
5210
|
-
}
|
5123
|
+
widths = dict(zip(reversed(range(displayed_ins_col, displayed_ins_col + numcols)), reversed(widths)))
|
5211
5124
|
return columns, header_data, widths
|
5212
5125
|
|
5213
5126
|
def get_args_for_add_rows(
|
@@ -5215,7 +5128,7 @@ class MainTable(tk.Canvas):
|
|
5215
5128
|
data_ins_row: int,
|
5216
5129
|
displayed_ins_row: int,
|
5217
5130
|
numrows: int,
|
5218
|
-
rows: list[list[
|
5131
|
+
rows: list[list[Any]] | None = None,
|
5219
5132
|
heights: list[int] | tuple[int] | None = None,
|
5220
5133
|
row_index: bool = False,
|
5221
5134
|
total_data_cols: int | None = None,
|
@@ -5245,10 +5158,7 @@ class MainTable(tk.Canvas):
|
|
5245
5158
|
for datarn in reversed(range(data_ins_row, data_ins_row + numrows))
|
5246
5159
|
}
|
5247
5160
|
else:
|
5248
|
-
if row_index
|
5249
|
-
start = 1
|
5250
|
-
else:
|
5251
|
-
start = 0
|
5161
|
+
start = 1 if row_index else 0
|
5252
5162
|
rows = {
|
5253
5163
|
datarn: v[start:] if start and v else v
|
5254
5164
|
for datarn, v in zip(reversed(range(data_ins_row, data_ins_row + numrows)), reversed(rows))
|
@@ -5257,10 +5167,7 @@ class MainTable(tk.Canvas):
|
|
5257
5167
|
default_row_height = self.get_default_row_height()
|
5258
5168
|
heights = {r: default_row_height for r in reversed(range(displayed_ins_row, displayed_ins_row + numrows))}
|
5259
5169
|
else:
|
5260
|
-
heights =
|
5261
|
-
r: height
|
5262
|
-
for r, height in zip(reversed(range(displayed_ins_row, displayed_ins_row + numrows)), reversed(heights))
|
5263
|
-
}
|
5170
|
+
heights = dict(zip(reversed(range(displayed_ins_row, displayed_ins_row + numrows)), reversed(heights)))
|
5264
5171
|
return rows, index_data, heights
|
5265
5172
|
|
5266
5173
|
def copy_options(self) -> dict:
|
@@ -5345,16 +5252,15 @@ class MainTable(tk.Canvas):
|
|
5345
5252
|
|
5346
5253
|
def delete_columns(
|
5347
5254
|
self,
|
5348
|
-
event:
|
5255
|
+
event: Any = None,
|
5349
5256
|
columns: list[int] | None = None,
|
5350
5257
|
data_indexes: bool = False,
|
5351
5258
|
undo: bool = True,
|
5352
5259
|
emit_event: bool = True,
|
5353
5260
|
) -> EventDataDict:
|
5354
5261
|
event_data = self.new_event_dict("delete_columns", state=True)
|
5355
|
-
if not columns:
|
5356
|
-
|
5357
|
-
return event_data
|
5262
|
+
if not columns and not (columns := sorted(self.get_selected_cols())):
|
5263
|
+
return event_data
|
5358
5264
|
if not try_binding(self.extra_begin_del_cols_rc_func, event_data, "begin_delete_columns"):
|
5359
5265
|
return
|
5360
5266
|
if self.all_columns_displayed:
|
@@ -5432,16 +5338,15 @@ class MainTable(tk.Canvas):
|
|
5432
5338
|
|
5433
5339
|
def delete_rows(
|
5434
5340
|
self,
|
5435
|
-
event:
|
5341
|
+
event: Any = None,
|
5436
5342
|
rows: list[int] | None = None,
|
5437
5343
|
data_indexes: bool = False,
|
5438
5344
|
undo: bool = True,
|
5439
5345
|
emit_event: bool = True,
|
5440
|
-
) -> EventDataDict:
|
5346
|
+
) -> None | EventDataDict:
|
5441
5347
|
event_data = self.new_event_dict("delete_rows", state=True)
|
5442
|
-
if not rows:
|
5443
|
-
|
5444
|
-
return
|
5348
|
+
if not rows and not (rows := sorted(self.get_selected_rows())):
|
5349
|
+
return
|
5445
5350
|
if not try_binding(self.extra_begin_del_rows_rc_func, event_data, "begin_delete_rows"):
|
5446
5351
|
return
|
5447
5352
|
if self.all_rows_displayed:
|
@@ -5571,12 +5476,12 @@ class MainTable(tk.Canvas):
|
|
5571
5476
|
|
5572
5477
|
def headers(
|
5573
5478
|
self,
|
5574
|
-
newheaders:
|
5479
|
+
newheaders: Any = None,
|
5575
5480
|
index: int | None = None,
|
5576
5481
|
reset_col_positions: bool = False,
|
5577
5482
|
show_headers_if_not_sheet: bool = True,
|
5578
5483
|
redraw: bool = False,
|
5579
|
-
) ->
|
5484
|
+
) -> Any:
|
5580
5485
|
if newheaders is not None:
|
5581
5486
|
if isinstance(newheaders, (list, tuple)):
|
5582
5487
|
self._headers = list(newheaders) if isinstance(newheaders, tuple) else newheaders
|
@@ -5589,13 +5494,13 @@ class MainTable(tk.Canvas):
|
|
5589
5494
|
elif not isinstance(newheaders, (list, tuple, int)) and index is None:
|
5590
5495
|
try:
|
5591
5496
|
self._headers = list(newheaders)
|
5592
|
-
except
|
5497
|
+
except ValueError as error:
|
5593
5498
|
raise ValueError(
|
5594
5499
|
"""
|
5595
5500
|
New header must be iterable or int \
|
5596
5501
|
(use int to use a row as the header
|
5597
5502
|
"""
|
5598
|
-
)
|
5503
|
+
) from error
|
5599
5504
|
if reset_col_positions:
|
5600
5505
|
self.reset_col_positions()
|
5601
5506
|
elif (
|
@@ -5618,12 +5523,12 @@ class MainTable(tk.Canvas):
|
|
5618
5523
|
|
5619
5524
|
def row_index(
|
5620
5525
|
self,
|
5621
|
-
newindex:
|
5526
|
+
newindex: Any = None,
|
5622
5527
|
index: int | None = None,
|
5623
5528
|
reset_row_positions: bool = False,
|
5624
5529
|
show_index_if_not_sheet: bool = True,
|
5625
5530
|
redraw: bool = False,
|
5626
|
-
) ->
|
5531
|
+
) -> Any:
|
5627
5532
|
if newindex is not None:
|
5628
5533
|
if not self._row_index and not isinstance(self._row_index, int):
|
5629
5534
|
self.RI.set_width(self.PAR.ops.default_row_index_width, set_TL=True)
|
@@ -5638,13 +5543,13 @@ class MainTable(tk.Canvas):
|
|
5638
5543
|
elif not isinstance(newindex, (list, tuple, int)) and index is None:
|
5639
5544
|
try:
|
5640
5545
|
self._row_index = list(newindex)
|
5641
|
-
except
|
5546
|
+
except ValueError as error:
|
5642
5547
|
raise ValueError(
|
5643
5548
|
"""
|
5644
5549
|
New index must be iterable or int \
|
5645
5550
|
(use int to use a column as the index
|
5646
5551
|
"""
|
5647
|
-
)
|
5552
|
+
) from error
|
5648
5553
|
if reset_row_positions:
|
5649
5554
|
self.reset_row_positions()
|
5650
5555
|
elif (
|
@@ -6038,7 +5943,7 @@ class MainTable(tk.Canvas):
|
|
6038
5943
|
widths[i] = min_column_width
|
6039
5944
|
if diffs and len(diffs) < len(widths):
|
6040
5945
|
change = sum(diffs.values()) / (len(widths) - len(diffs))
|
6041
|
-
for i
|
5946
|
+
for i in range(len(widths)):
|
6042
5947
|
if i not in diffs:
|
6043
5948
|
widths[i] -= change
|
6044
5949
|
self.col_positions = list(accumulate(chain([0], widths)))
|
@@ -6065,7 +5970,7 @@ class MainTable(tk.Canvas):
|
|
6065
5970
|
heights[i] = min_row_height
|
6066
5971
|
if diffs and len(diffs) < len(heights):
|
6067
5972
|
change = sum(diffs.values()) / (len(heights) - len(diffs))
|
6068
|
-
for i
|
5973
|
+
for i in range(len(heights)):
|
6069
5974
|
if i not in diffs:
|
6070
5975
|
heights[i] -= change
|
6071
5976
|
self.row_positions = list(accumulate(chain([0], heights)))
|
@@ -6252,10 +6157,7 @@ class MainTable(tk.Canvas):
|
|
6252
6157
|
if self.PAR.ops.horizontal_grid_to_end_of_window:
|
6253
6158
|
x_grid_stop = scrollpos_right + can_width
|
6254
6159
|
else:
|
6255
|
-
if last_col_line_pos > scrollpos_right
|
6256
|
-
x_grid_stop = x_stop + 1
|
6257
|
-
else:
|
6258
|
-
x_grid_stop = x_stop - 1
|
6160
|
+
x_grid_stop = x_stop + 1 if last_col_line_pos > scrollpos_right else x_stop - 1
|
6259
6161
|
self.redraw_gridline(
|
6260
6162
|
points=tuple(
|
6261
6163
|
chain.from_iterable(
|
@@ -6278,10 +6180,7 @@ class MainTable(tk.Canvas):
|
|
6278
6180
|
if self.PAR.ops.vertical_grid_to_end_of_window:
|
6279
6181
|
y_grid_stop = scrollpos_bot + can_height
|
6280
6182
|
else:
|
6281
|
-
if last_row_line_pos > scrollpos_bot
|
6282
|
-
y_grid_stop = y_stop + 1
|
6283
|
-
else:
|
6284
|
-
y_grid_stop = y_stop - 1
|
6183
|
+
y_grid_stop = y_stop + 1 if last_row_line_pos > scrollpos_bot else y_stop - 1
|
6285
6184
|
self.redraw_gridline(
|
6286
6185
|
points=tuple(
|
6287
6186
|
chain.from_iterable(
|
@@ -6305,10 +6204,7 @@ class MainTable(tk.Canvas):
|
|
6305
6204
|
sel_cells_bg = color_tup(self.PAR.ops.table_selected_cells_bg)
|
6306
6205
|
sel_cols_bg = color_tup(self.PAR.ops.table_selected_columns_bg)
|
6307
6206
|
sel_rows_bg = color_tup(self.PAR.ops.table_selected_rows_bg)
|
6308
|
-
if self.selected
|
6309
|
-
current_loc = (self.selected.row, self.selected.column)
|
6310
|
-
else:
|
6311
|
-
current_loc = tuple()
|
6207
|
+
current_loc = (self.selected.row, self.selected.column) if self.selected else ()
|
6312
6208
|
if self.PAR.ops.alternate_color:
|
6313
6209
|
alternate_color = Highlight(
|
6314
6210
|
bg=self.PAR.ops.alternate_color,
|
@@ -6318,10 +6214,10 @@ class MainTable(tk.Canvas):
|
|
6318
6214
|
if self.selected and box_is_single_cell(*self.selected.box) and self.PAR.ops.show_selected_cells_border:
|
6319
6215
|
dont_blend = current_loc
|
6320
6216
|
else:
|
6321
|
-
dont_blend =
|
6217
|
+
dont_blend = ()
|
6322
6218
|
else:
|
6323
6219
|
alternate_color = None
|
6324
|
-
dont_blend =
|
6220
|
+
dont_blend = ()
|
6325
6221
|
if not self.PAR.ops.show_selected_cells_border:
|
6326
6222
|
override = (
|
6327
6223
|
color_tup(self.PAR.ops.table_selected_cells_fg),
|
@@ -6329,7 +6225,7 @@ class MainTable(tk.Canvas):
|
|
6329
6225
|
color_tup(self.PAR.ops.table_selected_rows_fg),
|
6330
6226
|
)
|
6331
6227
|
else:
|
6332
|
-
override =
|
6228
|
+
override = ()
|
6333
6229
|
allow_overflow = self.PAR.ops.allow_cell_overflow
|
6334
6230
|
wrap = self.PAR.ops.table_wrap
|
6335
6231
|
cells = self._redraw_precache_cells(
|
@@ -6526,7 +6422,7 @@ class MainTable(tk.Canvas):
|
|
6526
6422
|
self.itemconfig(iid, state="hidden")
|
6527
6423
|
dct[iid] = False
|
6528
6424
|
if self.PAR.ops.show_selected_cells_border:
|
6529
|
-
for
|
6425
|
+
for _, box in self.selection_boxes.items():
|
6530
6426
|
if box.bd_iid:
|
6531
6427
|
self.tag_raise(box.bd_iid)
|
6532
6428
|
if self.selected:
|
@@ -6588,7 +6484,7 @@ class MainTable(tk.Canvas):
|
|
6588
6484
|
def reselect_from_get_boxes(
|
6589
6485
|
self,
|
6590
6486
|
boxes: dict,
|
6591
|
-
selected: tuple =
|
6487
|
+
selected: tuple = (),
|
6592
6488
|
) -> None:
|
6593
6489
|
for (r1, c1, r2, c2), v in boxes.items():
|
6594
6490
|
if r2 < len(self.row_positions) and c2 < len(self.col_positions):
|
@@ -6622,14 +6518,15 @@ class MainTable(tk.Canvas):
|
|
6622
6518
|
|
6623
6519
|
# set current to any existing selection box with coordinates: box
|
6624
6520
|
if isinstance(box, tuple):
|
6625
|
-
for
|
6626
|
-
if box == selection_box.coords
|
6627
|
-
|
6628
|
-
|
6521
|
+
for _, selection_box in self.get_selection_items(reverse=True):
|
6522
|
+
if box == selection_box.coords and box_created(
|
6523
|
+
box[0] if r is None else r, box[1] if c is None else c, selection_box
|
6524
|
+
):
|
6525
|
+
return
|
6629
6526
|
|
6630
6527
|
# set current to a coordinate, find the top most box there
|
6631
6528
|
if isinstance(r, int) and isinstance(c, int):
|
6632
|
-
for
|
6529
|
+
for _, selection_box in self.get_selection_items(reverse=True):
|
6633
6530
|
if box_created(r, c, selection_box):
|
6634
6531
|
return
|
6635
6532
|
|
@@ -6648,15 +6545,15 @@ class MainTable(tk.Canvas):
|
|
6648
6545
|
def coords_and_type(self, item: int) -> tuple:
|
6649
6546
|
if item in self.selection_boxes:
|
6650
6547
|
return Box_t(*(self.selection_boxes[item].coords + (self.selection_boxes[item].type_,)))
|
6651
|
-
return
|
6548
|
+
return ()
|
6652
6549
|
|
6653
6550
|
def get_selected_box_bg_fg(self, type_: str) -> tuple:
|
6654
|
-
|
6655
|
-
|
6656
|
-
|
6657
|
-
|
6658
|
-
|
6659
|
-
|
6551
|
+
type_map = {
|
6552
|
+
"cells": (self.PAR.ops.table_selected_cells_bg, self.PAR.ops.table_selected_box_cells_fg),
|
6553
|
+
"rows": (self.PAR.ops.table_selected_rows_bg, self.PAR.ops.table_selected_box_rows_fg),
|
6554
|
+
"columns": (self.PAR.ops.table_selected_columns_bg, self.PAR.ops.table_selected_box_columns_fg),
|
6555
|
+
}
|
6556
|
+
return type_map[type_]
|
6660
6557
|
|
6661
6558
|
def create_currently_selected_box(
|
6662
6559
|
self,
|
@@ -6713,10 +6610,7 @@ class MainTable(tk.Canvas):
|
|
6713
6610
|
width: int,
|
6714
6611
|
iid: None | int = None,
|
6715
6612
|
) -> int:
|
6716
|
-
if not self.PAR.ops.rounded_boxes or not x2 - x1 or not y2 - y1
|
6717
|
-
radius = 0
|
6718
|
-
else:
|
6719
|
-
radius = 5
|
6613
|
+
radius = 0 if not self.PAR.ops.rounded_boxes or not x2 - x1 or not y2 - y1 else 5
|
6720
6614
|
coords = rounded_box_coords(
|
6721
6615
|
x1,
|
6722
6616
|
y1,
|
@@ -6773,7 +6667,7 @@ class MainTable(tk.Canvas):
|
|
6773
6667
|
def hide_selected(self) -> None:
|
6774
6668
|
if self.selected:
|
6775
6669
|
self.hide_box(self.selected.iid)
|
6776
|
-
self.selected =
|
6670
|
+
self.selected = ()
|
6777
6671
|
|
6778
6672
|
def create_selection_box(
|
6779
6673
|
self,
|
@@ -7203,7 +7097,7 @@ class MainTable(tk.Canvas):
|
|
7203
7097
|
|
7204
7098
|
def open_cell(
|
7205
7099
|
self,
|
7206
|
-
event:
|
7100
|
+
event: Any = None,
|
7207
7101
|
ignore_existing_editor: bool = False,
|
7208
7102
|
) -> None:
|
7209
7103
|
if not self.anything_selected() or (not ignore_existing_editor and self.text_editor.open):
|
@@ -7238,7 +7132,7 @@ class MainTable(tk.Canvas):
|
|
7238
7132
|
# displayed indexes
|
7239
7133
|
def open_text_editor(
|
7240
7134
|
self,
|
7241
|
-
event:
|
7135
|
+
event: Any = None,
|
7242
7136
|
r: int = 0,
|
7243
7137
|
c: int = 0,
|
7244
7138
|
text: str | None = None,
|
@@ -7283,7 +7177,7 @@ class MainTable(tk.Canvas):
|
|
7283
7177
|
self.text_editor.window.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
7284
7178
|
return False
|
7285
7179
|
self.hide_text_editor()
|
7286
|
-
if not self.see(r
|
7180
|
+
if not self.see(r, c):
|
7287
7181
|
self.main_table_redraw_grid_and_text(True, True)
|
7288
7182
|
x = self.col_positions[c]
|
7289
7183
|
y = self.row_positions[r]
|
@@ -7337,7 +7231,7 @@ class MainTable(tk.Canvas):
|
|
7337
7231
|
# displayed indexes
|
7338
7232
|
def text_editor_newline_binding(
|
7339
7233
|
self,
|
7340
|
-
event:
|
7234
|
+
event: Any = None,
|
7341
7235
|
check_lines: bool = True,
|
7342
7236
|
) -> None:
|
7343
7237
|
r, c = self.text_editor.coords
|
@@ -7517,13 +7411,7 @@ class MainTable(tk.Canvas):
|
|
7517
7411
|
new_r, new_c = None, None
|
7518
7412
|
if isinstance(new_r, int):
|
7519
7413
|
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
7520
|
-
self.see(
|
7521
|
-
new_r,
|
7522
|
-
new_c,
|
7523
|
-
keep_xscroll=False,
|
7524
|
-
bottom_right_corner=True,
|
7525
|
-
check_cell_visibility=True,
|
7526
|
-
)
|
7414
|
+
self.see(new_r, new_c)
|
7527
7415
|
self.recreate_all_selection_boxes()
|
7528
7416
|
self.hide_text_editor_and_dropdown()
|
7529
7417
|
if event.keysym != "FocusOut":
|
@@ -7536,19 +7424,13 @@ class MainTable(tk.Canvas):
|
|
7536
7424
|
r,
|
7537
7425
|
c + 1 if c < len(self.col_positions) - 2 else c,
|
7538
7426
|
bottom_right_corner=True,
|
7539
|
-
check_cell_visibility=True,
|
7540
7427
|
)
|
7541
7428
|
|
7542
7429
|
def select_down(self, r: int, c: int) -> None:
|
7543
7430
|
self.select_cell(r + 1 if r < len(self.row_positions) - 2 else r, c)
|
7544
|
-
self.see(
|
7545
|
-
r + 1 if r < len(self.row_positions) - 2 else r,
|
7546
|
-
c,
|
7547
|
-
bottom_right_corner=True,
|
7548
|
-
check_cell_visibility=True,
|
7549
|
-
)
|
7431
|
+
self.see(r + 1 if r < len(self.row_positions) - 2 else r, c)
|
7550
7432
|
|
7551
|
-
def tab_key(self, event:
|
7433
|
+
def tab_key(self, event: Any = None) -> str:
|
7552
7434
|
if not self.selected:
|
7553
7435
|
return
|
7554
7436
|
r, c = self.selected.row, self.selected.column
|
@@ -7562,13 +7444,7 @@ class MainTable(tk.Canvas):
|
|
7562
7444
|
else:
|
7563
7445
|
new_r, new_c = cell_right_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
7564
7446
|
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
7565
|
-
self.see(
|
7566
|
-
new_r,
|
7567
|
-
new_c,
|
7568
|
-
keep_xscroll=False,
|
7569
|
-
bottom_right_corner=True,
|
7570
|
-
check_cell_visibility=True,
|
7571
|
-
)
|
7447
|
+
self.see(new_r, new_c, bottom_right_corner=True)
|
7572
7448
|
if not self.PAR.ops.show_selected_cells_border:
|
7573
7449
|
self.refresh()
|
7574
7450
|
return "break"
|
@@ -7652,7 +7528,7 @@ class MainTable(tk.Canvas):
|
|
7652
7528
|
self,
|
7653
7529
|
r: int,
|
7654
7530
|
c: int,
|
7655
|
-
event:
|
7531
|
+
event: Any = None,
|
7656
7532
|
) -> None:
|
7657
7533
|
self.hide_text_editor()
|
7658
7534
|
datarn = self.datarn(r)
|
@@ -7733,7 +7609,7 @@ class MainTable(tk.Canvas):
|
|
7733
7609
|
self,
|
7734
7610
|
r: int | None = None,
|
7735
7611
|
c: int | None = None,
|
7736
|
-
selection:
|
7612
|
+
selection: Any = None,
|
7737
7613
|
redraw: bool = True,
|
7738
7614
|
) -> None:
|
7739
7615
|
if r is not None and c is not None and selection is not None:
|
@@ -7878,8 +7754,8 @@ class MainTable(tk.Canvas):
|
|
7878
7754
|
self,
|
7879
7755
|
datarn: int,
|
7880
7756
|
datacn: int,
|
7881
|
-
value:
|
7882
|
-
kwargs: dict =
|
7757
|
+
value: Any,
|
7758
|
+
kwargs: dict | None = None,
|
7883
7759
|
expand_sheet: bool = True,
|
7884
7760
|
) -> None:
|
7885
7761
|
if expand_sheet:
|
@@ -7904,7 +7780,7 @@ class MainTable(tk.Canvas):
|
|
7904
7780
|
else:
|
7905
7781
|
self.data[datarn][datacn] = value
|
7906
7782
|
|
7907
|
-
def get_value_for_empty_cell(self, datarn: int, datacn: int, r_ops: bool = True, c_ops: bool = True) ->
|
7783
|
+
def get_value_for_empty_cell(self, datarn: int, datacn: int, r_ops: bool = True, c_ops: bool = True) -> Any:
|
7908
7784
|
kwargs = self.get_cell_kwargs(
|
7909
7785
|
datarn,
|
7910
7786
|
datacn,
|
@@ -7927,7 +7803,7 @@ class MainTable(tk.Canvas):
|
|
7927
7803
|
start: int = 0,
|
7928
7804
|
r_ops: bool = True,
|
7929
7805
|
c_ops: bool = True,
|
7930
|
-
) -> list[
|
7806
|
+
) -> list[Any]:
|
7931
7807
|
return [self.get_value_for_empty_cell(datarn, datacn, r_ops=r_ops, c_ops=c_ops) for datacn in range(start, end)]
|
7932
7808
|
|
7933
7809
|
def fix_row_len(self, datarn: int, datacn: int) -> None:
|
@@ -7987,10 +7863,7 @@ class MainTable(tk.Canvas):
|
|
7987
7863
|
self.set_cell_data(*key, get_val(*key), expand_sheet=False)
|
7988
7864
|
|
7989
7865
|
def delete_row_format(self, datarn: Literal["all"] | int = "all", clear_values: bool = False) -> None:
|
7990
|
-
if isinstance(datarn, str) and datarn.lower() == "all"
|
7991
|
-
itr = gen_formatted(self.row_options)
|
7992
|
-
else:
|
7993
|
-
itr = (datarn,)
|
7866
|
+
itr = gen_formatted(self.row_options) if isinstance(datarn, str) and datarn.lower() == "all" else (datarn,)
|
7994
7867
|
get_val = self.get_value_for_empty_cell
|
7995
7868
|
for datarn in itr:
|
7996
7869
|
try:
|
@@ -8002,10 +7875,7 @@ class MainTable(tk.Canvas):
|
|
8002
7875
|
self.set_cell_data(datarn, datacn, get_val(datarn, datacn), expand_sheet=False)
|
8003
7876
|
|
8004
7877
|
def delete_column_format(self, datacn: Literal["all"] | int = "all", clear_values: bool = False) -> None:
|
8005
|
-
if isinstance(datacn, str) and datacn.lower() == "all"
|
8006
|
-
itr = gen_formatted(self.col_options)
|
8007
|
-
else:
|
8008
|
-
itr = (datacn,)
|
7878
|
+
itr = gen_formatted(self.col_options) if isinstance(datacn, str) and datacn.lower() == "all" else (datacn,)
|
8009
7879
|
get_val = self.get_value_for_empty_cell
|
8010
7880
|
for datacn in itr:
|
8011
7881
|
try:
|
@@ -8055,7 +7925,7 @@ class MainTable(tk.Canvas):
|
|
8055
7925
|
none_to_empty_str: bool = False,
|
8056
7926
|
fmt_kw: dict | None = None,
|
8057
7927
|
**kwargs,
|
8058
|
-
) ->
|
7928
|
+
) -> Any:
|
8059
7929
|
if get_displayed:
|
8060
7930
|
return self.get_valid_cell_data_as_str(datarn, datacn, get_displayed=True)
|
8061
7931
|
value = (
|
@@ -8074,7 +7944,7 @@ class MainTable(tk.Canvas):
|
|
8074
7944
|
self,
|
8075
7945
|
datarn: int,
|
8076
7946
|
datacn: int,
|
8077
|
-
value:
|
7947
|
+
value: Any,
|
8078
7948
|
check_readonly: bool = True,
|
8079
7949
|
ignore_empty: bool = False,
|
8080
7950
|
) -> bool:
|
@@ -8083,9 +7953,7 @@ class MainTable(tk.Canvas):
|
|
8083
7953
|
return False
|
8084
7954
|
elif "format" in kwargs:
|
8085
7955
|
return True
|
8086
|
-
elif self.cell_equal_to(datarn, datacn, value, ignore_empty=ignore_empty)
|
8087
|
-
return False
|
8088
|
-
elif (
|
7956
|
+
elif self.cell_equal_to(datarn, datacn, value, ignore_empty=ignore_empty) or (
|
8089
7957
|
(dropdown := kwargs.get("dropdown", {})) and dropdown["validate_input"] and value not in dropdown["values"]
|
8090
7958
|
):
|
8091
7959
|
return False
|
@@ -8094,7 +7962,7 @@ class MainTable(tk.Canvas):
|
|
8094
7962
|
else:
|
8095
7963
|
return True
|
8096
7964
|
|
8097
|
-
def cell_equal_to(self, datarn: int, datacn: int, value:
|
7965
|
+
def cell_equal_to(self, datarn: int, datacn: int, value: Any, ignore_empty: bool = False, **kwargs) -> bool:
|
8098
7966
|
v = self.get_cell_data(datarn, datacn)
|
8099
7967
|
kwargs = self.get_cell_kwargs(datarn, datacn, key="format")
|
8100
7968
|
if kwargs and kwargs["formatter"] is None:
|
@@ -8132,16 +8000,30 @@ class MainTable(tk.Canvas):
|
|
8132
8000
|
row: bool = True,
|
8133
8001
|
column: bool = True,
|
8134
8002
|
) -> dict:
|
8135
|
-
if
|
8136
|
-
|
8137
|
-
|
8138
|
-
|
8139
|
-
|
8140
|
-
|
8141
|
-
|
8142
|
-
|
8003
|
+
if key is None:
|
8004
|
+
if cell and (datarn, datacn) in self.cell_options:
|
8005
|
+
return self.cell_options[(datarn, datacn)]
|
8006
|
+
|
8007
|
+
elif row and datarn in self.row_options:
|
8008
|
+
return self.row_options[datarn]
|
8009
|
+
|
8010
|
+
elif column and datacn in self.col_options:
|
8011
|
+
return self.col_options[datacn]
|
8012
|
+
|
8013
|
+
else:
|
8014
|
+
return {}
|
8143
8015
|
else:
|
8144
|
-
|
8016
|
+
if cell and (datarn, datacn) in self.cell_options and key in self.cell_options[(datarn, datacn)]:
|
8017
|
+
return self.cell_options[(datarn, datacn)][key]
|
8018
|
+
|
8019
|
+
elif row and datarn in self.row_options and key in self.row_options[datarn]:
|
8020
|
+
return self.row_options[datarn][key]
|
8021
|
+
|
8022
|
+
elif column and datacn in self.col_options and key in self.col_options[datacn]:
|
8023
|
+
return self.col_options[datacn][key]
|
8024
|
+
|
8025
|
+
else:
|
8026
|
+
return {}
|
8145
8027
|
|
8146
8028
|
def datacn(self, c: int) -> int:
|
8147
8029
|
return c if self.all_columns_displayed else self.displayed_columns[c]
|