tksheet 7.2.20__py3-none-any.whl → 7.2.22__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 +71 -56
- tksheet/functions.py +17 -14
- tksheet/main_table.py +182 -138
- tksheet/other_classes.py +19 -0
- tksheet/row_index.py +64 -55
- tksheet/sheet.py +115 -17
- {tksheet-7.2.20.dist-info → tksheet-7.2.22.dist-info}/METADATA +2 -2
- tksheet-7.2.22.dist-info/RECORD +20 -0
- {tksheet-7.2.20.dist-info → tksheet-7.2.22.dist-info}/WHEEL +1 -1
- tksheet-7.2.20.dist-info/RECORD +0 -20
- {tksheet-7.2.20.dist-info → tksheet-7.2.22.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.2.20.dist-info → tksheet-7.2.22.dist-info}/top_level.txt +0 -0
tksheet/main_table.py
CHANGED
@@ -51,9 +51,10 @@ from .formatters import (
|
|
51
51
|
from .functions import (
|
52
52
|
add_to_displayed,
|
53
53
|
b_index,
|
54
|
+
box_is_single_cell,
|
54
55
|
cell_right_within_box,
|
56
|
+
color_tup,
|
55
57
|
consecutive_ranges,
|
56
|
-
decompress_load,
|
57
58
|
diff_gen,
|
58
59
|
diff_list,
|
59
60
|
down_cell_within_box,
|
@@ -73,10 +74,9 @@ from .functions import (
|
|
73
74
|
mod_span_widget,
|
74
75
|
move_elements_by_mapping,
|
75
76
|
new_tk_event,
|
76
|
-
pickle_obj,
|
77
|
-
pickled_event_dict,
|
78
77
|
rounded_box_coords,
|
79
78
|
span_idxs_post_move,
|
79
|
+
stored_event_dict,
|
80
80
|
try_binding,
|
81
81
|
unpickle_obj,
|
82
82
|
)
|
@@ -88,6 +88,7 @@ from .other_classes import (
|
|
88
88
|
DropdownStorage,
|
89
89
|
EventDataDict,
|
90
90
|
FontTuple,
|
91
|
+
Highlight,
|
91
92
|
Loc,
|
92
93
|
ProgressBar,
|
93
94
|
Selected,
|
@@ -682,7 +683,7 @@ class MainTable(tk.Canvas):
|
|
682
683
|
for r1, c1, r2, c2 in boxes:
|
683
684
|
self.show_ctrl_outline(canvas="table", start_cell=(c1, r1), end_cell=(c2, r2))
|
684
685
|
if event_data["cells"]["table"]:
|
685
|
-
self.undo_stack.append(
|
686
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
686
687
|
try_binding(self.extra_end_ctrl_x_func, event_data, "end_ctrl_x")
|
687
688
|
self.sheet_modified(event_data)
|
688
689
|
self.PAR.emit_event("<<Cut>>", event_data)
|
@@ -946,7 +947,7 @@ class MainTable(tk.Canvas):
|
|
946
947
|
)
|
947
948
|
self.refresh()
|
948
949
|
if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
|
949
|
-
self.undo_stack.append(
|
950
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
950
951
|
try_binding(self.extra_end_ctrl_v_func, event_data, "end_ctrl_v")
|
951
952
|
self.sheet_modified(event_data)
|
952
953
|
self.PAR.emit_event("<<Paste>>", event_data)
|
@@ -986,7 +987,7 @@ class MainTable(tk.Canvas):
|
|
986
987
|
)
|
987
988
|
if event_data["cells"]["table"]:
|
988
989
|
self.refresh()
|
989
|
-
self.undo_stack.append(
|
990
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
990
991
|
try_binding(self.extra_end_delete_key_func, event_data, "end_delete")
|
991
992
|
self.sheet_modified(event_data)
|
992
993
|
self.PAR.emit_event("<<Delete>>", event_data)
|
@@ -1057,7 +1058,7 @@ class MainTable(tk.Canvas):
|
|
1057
1058
|
"data": data_new_idxs,
|
1058
1059
|
"displayed": {} if disp_new_idxs is None else disp_new_idxs,
|
1059
1060
|
}
|
1060
|
-
event_data["options"] = self.
|
1061
|
+
event_data["options"] = self.copy_options()
|
1061
1062
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1062
1063
|
if move_widths and disp_new_idxs and (not data_indexes or self.all_columns_displayed):
|
1063
1064
|
self.deselect("all", run_binding=False, redraw=False)
|
@@ -1291,7 +1292,7 @@ class MainTable(tk.Canvas):
|
|
1291
1292
|
"data": data_new_idxs,
|
1292
1293
|
"displayed": {} if disp_new_idxs is None else disp_new_idxs,
|
1293
1294
|
}
|
1294
|
-
event_data["options"] = self.
|
1295
|
+
event_data["options"] = self.copy_options()
|
1295
1296
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1296
1297
|
if move_heights and disp_new_idxs and (not data_indexes or self.all_rows_displayed):
|
1297
1298
|
self.deselect("all", run_binding=False, redraw=False)
|
@@ -1482,11 +1483,11 @@ class MainTable(tk.Canvas):
|
|
1482
1483
|
def undo(self, event: object = None) -> None | EventDataDict:
|
1483
1484
|
if not self.undo_stack:
|
1484
1485
|
return
|
1485
|
-
modification =
|
1486
|
+
modification = self.undo_stack[-1]["data"]
|
1486
1487
|
if not try_binding(self.extra_begin_ctrl_z_func, modification, "begin_undo"):
|
1487
1488
|
return
|
1488
1489
|
event_data = self.undo_modification_invert_event(modification)
|
1489
|
-
self.redo_stack.append(
|
1490
|
+
self.redo_stack.append(stored_event_dict(event_data))
|
1490
1491
|
self.undo_stack.pop()
|
1491
1492
|
self.sheet_modified(event_data, purge_redo=False)
|
1492
1493
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_undo")
|
@@ -1496,11 +1497,11 @@ class MainTable(tk.Canvas):
|
|
1496
1497
|
def redo(self, event: object = None) -> None | EventDataDict:
|
1497
1498
|
if not self.redo_stack:
|
1498
1499
|
return
|
1499
|
-
modification =
|
1500
|
+
modification = self.redo_stack[-1]["data"]
|
1500
1501
|
if not try_binding(self.extra_begin_ctrl_z_func, modification, "begin_redo"):
|
1501
1502
|
return
|
1502
1503
|
event_data = self.undo_modification_invert_event(modification, name="redo")
|
1503
|
-
self.undo_stack.append(
|
1504
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
1504
1505
|
self.redo_stack.pop()
|
1505
1506
|
self.sheet_modified(event_data, purge_redo=False)
|
1506
1507
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_redo")
|
@@ -1535,8 +1536,6 @@ class MainTable(tk.Canvas):
|
|
1535
1536
|
return event_data
|
1536
1537
|
|
1537
1538
|
def restore_options_named_spans(self, modification: EventDataDict) -> None:
|
1538
|
-
if not isinstance(modification["options"], dict):
|
1539
|
-
modification["options"] = unpickle_obj(modification["options"])
|
1540
1539
|
if "cell_options" in modification["options"]:
|
1541
1540
|
self.cell_options = modification["options"]["cell_options"]
|
1542
1541
|
if "column_options" in modification["options"]:
|
@@ -2763,7 +2762,7 @@ class MainTable(tk.Canvas):
|
|
2763
2762
|
self.rc_insert_row_enabled = True
|
2764
2763
|
self.rc_popup_menus_enabled = True
|
2765
2764
|
self.rc_select_enabled = True
|
2766
|
-
if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
|
2765
|
+
if binding in ("all", "right_click_popup_menu", "rc_popup_menu", "rc_menu"):
|
2767
2766
|
self.rc_popup_menus_enabled = True
|
2768
2767
|
self.rc_select_enabled = True
|
2769
2768
|
if binding in ("all", "right_click_select", "rc_select"):
|
@@ -2826,7 +2825,7 @@ class MainTable(tk.Canvas):
|
|
2826
2825
|
self.rc_insert_column_enabled = False
|
2827
2826
|
if binding in bind_add_rows:
|
2828
2827
|
self.rc_insert_row_enabled = False
|
2829
|
-
if binding in ("all", "right_click_popup_menu", "rc_popup_menu"):
|
2828
|
+
if binding in ("all", "right_click_popup_menu", "rc_popup_menu", "rc_menu"):
|
2830
2829
|
self.rc_popup_menus_enabled = False
|
2831
2830
|
if binding in ("all", "right_click_select", "rc_select"):
|
2832
2831
|
self.rc_select_enabled = False
|
@@ -2993,8 +2992,7 @@ class MainTable(tk.Canvas):
|
|
2993
2992
|
self.being_drawn_item = True
|
2994
2993
|
self.being_drawn_item = self.add_selection(rowsel, colsel, set_as_current=True, run_binding_func=False)
|
2995
2994
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
2996
|
-
|
2997
|
-
self.ctrl_selection_binding_func(sel_event)
|
2995
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
2998
2996
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
2999
2997
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3000
2998
|
elif not self.ctrl_select_enabled:
|
@@ -3023,8 +3021,7 @@ class MainTable(tk.Canvas):
|
|
3023
3021
|
)
|
3024
3022
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3025
3023
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3026
|
-
|
3027
|
-
self.shift_selection_binding_func(sel_event)
|
3024
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
3028
3025
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3029
3026
|
elif not self.ctrl_select_enabled:
|
3030
3027
|
self.shift_b1_press(event)
|
@@ -3053,8 +3050,7 @@ class MainTable(tk.Canvas):
|
|
3053
3050
|
)
|
3054
3051
|
self.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True, redraw_table=True)
|
3055
3052
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3056
|
-
|
3057
|
-
self.shift_selection_binding_func(sel_event)
|
3053
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
3058
3054
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3059
3055
|
|
3060
3056
|
def get_shift_select_box(self, min_r: int, rowsel: int, min_c: int, colsel: int):
|
@@ -3119,8 +3115,7 @@ class MainTable(tk.Canvas):
|
|
3119
3115
|
)
|
3120
3116
|
need_redraw = True
|
3121
3117
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3122
|
-
|
3123
|
-
self.drag_selection_binding_func(sel_event)
|
3118
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3124
3119
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3125
3120
|
if self.scroll_if_event_offscreen(event):
|
3126
3121
|
need_redraw = True
|
@@ -3162,8 +3157,7 @@ class MainTable(tk.Canvas):
|
|
3162
3157
|
)
|
3163
3158
|
need_redraw = True
|
3164
3159
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3165
|
-
|
3166
|
-
self.drag_selection_binding_func(sel_event)
|
3160
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3167
3161
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3168
3162
|
if self.scroll_if_event_offscreen(event):
|
3169
3163
|
need_redraw = True
|
@@ -3190,8 +3184,7 @@ class MainTable(tk.Canvas):
|
|
3190
3184
|
),
|
3191
3185
|
)
|
3192
3186
|
sel_event = self.get_select_event(being_drawn_item=self.being_drawn_item)
|
3193
|
-
|
3194
|
-
self.drag_selection_binding_func(sel_event)
|
3187
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
3195
3188
|
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
3196
3189
|
else:
|
3197
3190
|
self.being_drawn_item = None
|
@@ -4536,7 +4529,7 @@ class MainTable(tk.Canvas):
|
|
4536
4529
|
event_data=event_data,
|
4537
4530
|
)
|
4538
4531
|
if self.undo_enabled:
|
4539
|
-
self.undo_stack.append(
|
4532
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4540
4533
|
self.refresh()
|
4541
4534
|
try_binding(self.extra_end_insert_cols_rc_func, event_data, "end_add_columns")
|
4542
4535
|
self.sheet_modified(event_data)
|
@@ -4671,7 +4664,7 @@ class MainTable(tk.Canvas):
|
|
4671
4664
|
event_data=event_data,
|
4672
4665
|
)
|
4673
4666
|
if self.undo_enabled:
|
4674
|
-
self.undo_stack.append(
|
4667
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4675
4668
|
self.refresh()
|
4676
4669
|
try_binding(self.extra_end_insert_rows_rc_func, event_data, "end_add_rows")
|
4677
4670
|
self.sheet_modified(event_data)
|
@@ -4775,26 +4768,24 @@ class MainTable(tk.Canvas):
|
|
4775
4768
|
}
|
4776
4769
|
return rows, index_data, heights
|
4777
4770
|
|
4778
|
-
def
|
4779
|
-
return
|
4780
|
-
|
4781
|
-
|
4782
|
-
|
4783
|
-
|
4784
|
-
|
4785
|
-
|
4786
|
-
|
4787
|
-
|
4788
|
-
|
4789
|
-
}
|
4790
|
-
)
|
4771
|
+
def copy_options(self) -> dict:
|
4772
|
+
return {
|
4773
|
+
"cell_options": dict(self.cell_options),
|
4774
|
+
"column_options": dict(self.col_options),
|
4775
|
+
"row_options": dict(self.row_options),
|
4776
|
+
"CH_cell_options": dict(self.CH.cell_options),
|
4777
|
+
"RI_cell_options": dict(self.RI.cell_options),
|
4778
|
+
"tagged_cells": {f"{tag}": set(s) for tag, s in self.tagged_cells.items()},
|
4779
|
+
"tagged_rows": {f"{tag}": set(s) for tag, s in self.tagged_rows.items()},
|
4780
|
+
"tagged_columns": {f"{tag}": set(s) for tag, s in self.tagged_columns.items()},
|
4781
|
+
}
|
4791
4782
|
|
4792
4783
|
def delete_columns_data(self, cols: list, event_data: dict) -> EventDataDict:
|
4793
4784
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
4794
4785
|
event_data["deleted"]["displayed_columns"] = (
|
4795
4786
|
list(self.displayed_columns) if not isinstance(self.displayed_columns, int) else int(self.displayed_columns)
|
4796
4787
|
)
|
4797
|
-
event_data["options"] = self.
|
4788
|
+
event_data["options"] = self.copy_options()
|
4798
4789
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
4799
4790
|
for datacn in reversed(cols):
|
4800
4791
|
for rn in range(len(self.data)):
|
@@ -4846,7 +4837,7 @@ class MainTable(tk.Canvas):
|
|
4846
4837
|
data_cols = selected if self.all_columns_displayed else [self.displayed_columns[c] for c in selected]
|
4847
4838
|
event_data = self.delete_columns_data(data_cols, event_data)
|
4848
4839
|
if self.undo_enabled:
|
4849
|
-
self.undo_stack.append(
|
4840
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4850
4841
|
self.deselect("all")
|
4851
4842
|
try_binding(self.extra_end_del_cols_rc_func, event_data, "end_delete_columns")
|
4852
4843
|
self.sheet_modified(event_data)
|
@@ -4856,7 +4847,7 @@ class MainTable(tk.Canvas):
|
|
4856
4847
|
event_data["deleted"]["displayed_rows"] = (
|
4857
4848
|
list(self.displayed_rows) if not isinstance(self.displayed_rows, int) else int(self.displayed_rows)
|
4858
4849
|
)
|
4859
|
-
event_data["options"] = self.
|
4850
|
+
event_data["options"] = self.copy_options()
|
4860
4851
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
4861
4852
|
for datarn in reversed(rows):
|
4862
4853
|
event_data["deleted"]["rows"][datarn] = self.data.pop(datarn)
|
@@ -4902,7 +4893,7 @@ class MainTable(tk.Canvas):
|
|
4902
4893
|
data_rows = selected if self.all_rows_displayed else [self.displayed_rows[r] for r in selected]
|
4903
4894
|
event_data = self.delete_rows_data(data_rows, event_data)
|
4904
4895
|
if self.undo_enabled:
|
4905
|
-
self.undo_stack.append(
|
4896
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
4906
4897
|
self.deselect("all")
|
4907
4898
|
try_binding(self.extra_end_del_rows_rc_func, event_data, "end_delete_rows")
|
4908
4899
|
self.sheet_modified(event_data)
|
@@ -5168,63 +5159,82 @@ class MainTable(tk.Canvas):
|
|
5168
5159
|
fr: int | float,
|
5169
5160
|
sc: int | float,
|
5170
5161
|
sr: int | float,
|
5171
|
-
|
5172
|
-
|
5173
|
-
|
5162
|
+
sel_cells_bg: tuple[int, int, int],
|
5163
|
+
sel_cols_bg: tuple[int, int, int],
|
5164
|
+
sel_rows_bg: tuple[int, int, int],
|
5174
5165
|
selections: dict,
|
5175
5166
|
datarn: int,
|
5176
5167
|
datacn: int,
|
5177
5168
|
can_width: int | None,
|
5169
|
+
dont_blend: bool,
|
5170
|
+
alternate_color: Highlight | None,
|
5178
5171
|
) -> str:
|
5179
5172
|
redrawn = False
|
5180
5173
|
if (datarn, datacn) in self.progress_bars:
|
5181
5174
|
kwargs = self.progress_bars[(datarn, datacn)]
|
5182
5175
|
else:
|
5183
5176
|
kwargs = self.get_cell_kwargs(datarn, datacn, key="highlight")
|
5177
|
+
if alt := bool(not kwargs and alternate_color and r % 2):
|
5178
|
+
kwargs = alternate_color
|
5179
|
+
|
5184
5180
|
if kwargs:
|
5185
|
-
|
5186
|
-
|
5187
|
-
|
5188
|
-
|
5181
|
+
fill = kwargs[0]
|
5182
|
+
if fill and not fill.startswith("#"):
|
5183
|
+
fill = color_map[fill]
|
5184
|
+
|
5185
|
+
# cell is a single currently selected cell box
|
5186
|
+
# not highlighted
|
5187
|
+
# on an alternate row color
|
5188
|
+
if alt and dont_blend:
|
5189
|
+
txtfg = self.PAR.ops.table_fg
|
5190
|
+
|
5191
|
+
# cell is highlighted and cell selected
|
5192
|
+
elif "cells" in selections and (r, c) in selections["cells"]:
|
5193
|
+
txtfg = (
|
5189
5194
|
self.PAR.ops.table_selected_cells_fg
|
5190
5195
|
if kwargs[1] is None or self.PAR.ops.display_selected_fg_over_highlights
|
5191
5196
|
else kwargs[1]
|
5192
5197
|
)
|
5193
|
-
if
|
5198
|
+
if fill:
|
5194
5199
|
fill = (
|
5195
|
-
f"#{int((int(
|
5196
|
-
+ f"{int((int(
|
5197
|
-
+ f"{int((int(
|
5200
|
+
f"#{int((int(fill[1:3], 16) + sel_cells_bg[0]) / 2):02X}"
|
5201
|
+
+ f"{int((int(fill[3:5], 16) + sel_cells_bg[1]) / 2):02X}"
|
5202
|
+
+ f"{int((int(fill[5:], 16) + sel_cells_bg[2]) / 2):02X}"
|
5198
5203
|
)
|
5204
|
+
|
5205
|
+
# cell is highlighted and row selected
|
5199
5206
|
elif "rows" in selections and r in selections["rows"]:
|
5200
|
-
|
5207
|
+
txtfg = (
|
5201
5208
|
self.PAR.ops.table_selected_rows_fg
|
5202
5209
|
if kwargs[1] is None or self.PAR.ops.display_selected_fg_over_highlights
|
5203
5210
|
else kwargs[1]
|
5204
5211
|
)
|
5205
|
-
if
|
5212
|
+
if fill:
|
5206
5213
|
fill = (
|
5207
|
-
f"#{int((int(
|
5208
|
-
+ f"{int((int(
|
5209
|
-
+ f"{int((int(
|
5214
|
+
f"#{int((int(fill[1:3], 16) + sel_rows_bg[0]) / 2):02X}"
|
5215
|
+
+ f"{int((int(fill[3:5], 16) + sel_rows_bg[1]) / 2):02X}"
|
5216
|
+
+ f"{int((int(fill[5:], 16) + sel_rows_bg[2]) / 2):02X}"
|
5210
5217
|
)
|
5218
|
+
|
5219
|
+
# cell is highlighted and column selected
|
5211
5220
|
elif "columns" in selections and c in selections["columns"]:
|
5212
|
-
|
5221
|
+
txtfg = (
|
5213
5222
|
self.PAR.ops.table_selected_columns_fg
|
5214
5223
|
if kwargs[1] is None or self.PAR.ops.display_selected_fg_over_highlights
|
5215
5224
|
else kwargs[1]
|
5216
5225
|
)
|
5217
|
-
if
|
5226
|
+
if fill:
|
5218
5227
|
fill = (
|
5219
|
-
f"#{int((int(
|
5220
|
-
+ f"{int((int(
|
5221
|
-
+ f"{int((int(
|
5228
|
+
f"#{int((int(fill[1:3], 16) + sel_cols_bg[0]) / 2):02X}"
|
5229
|
+
+ f"{int((int(fill[3:5], 16) + sel_cols_bg[1]) / 2):02X}"
|
5230
|
+
+ f"{int((int(fill[5:], 16) + sel_cols_bg[2]) / 2):02X}"
|
5222
5231
|
)
|
5232
|
+
|
5233
|
+
# cell is just highlighted
|
5223
5234
|
else:
|
5224
|
-
|
5225
|
-
|
5226
|
-
|
5227
|
-
if kwargs[0] is not None:
|
5235
|
+
txtfg = self.PAR.ops.table_fg if kwargs[1] is None else kwargs[1]
|
5236
|
+
|
5237
|
+
if fill:
|
5228
5238
|
highlight_fn = partial(
|
5229
5239
|
self.redraw_highlight,
|
5230
5240
|
x1=fc + 1,
|
@@ -5254,14 +5264,14 @@ class MainTable(tk.Canvas):
|
|
5254
5264
|
)
|
5255
5265
|
elif not kwargs:
|
5256
5266
|
if "cells" in selections and (r, c) in selections["cells"]:
|
5257
|
-
|
5267
|
+
txtfg = self.PAR.ops.table_selected_cells_fg
|
5258
5268
|
elif "rows" in selections and r in selections["rows"]:
|
5259
|
-
|
5269
|
+
txtfg = self.PAR.ops.table_selected_rows_fg
|
5260
5270
|
elif "columns" in selections and c in selections["columns"]:
|
5261
|
-
|
5271
|
+
txtfg = self.PAR.ops.table_selected_columns_fg
|
5262
5272
|
else:
|
5263
|
-
|
5264
|
-
return
|
5273
|
+
txtfg = self.PAR.ops.table_fg
|
5274
|
+
return txtfg, redrawn
|
5265
5275
|
|
5266
5276
|
def redraw_highlight(self, x1, y1, x2, y2, fill, outline, tag, can_width=None, pc=None):
|
5267
5277
|
if not is_type_int(pc) or pc >= 100:
|
@@ -5643,24 +5653,36 @@ class MainTable(tk.Canvas):
|
|
5643
5653
|
)
|
5644
5654
|
if redraw_table:
|
5645
5655
|
selections = self.get_redraw_selections(text_start_row, grid_end_row, text_start_col, grid_end_col)
|
5646
|
-
|
5647
|
-
|
5648
|
-
|
5649
|
-
|
5650
|
-
|
5651
|
-
|
5652
|
-
|
5653
|
-
|
5654
|
-
|
5655
|
-
|
5656
|
-
|
5657
|
-
|
5658
|
-
|
5659
|
-
self.PAR.ops.
|
5660
|
-
|
5661
|
-
else
|
5662
|
-
|
5663
|
-
|
5656
|
+
sel_cells_bg = color_tup(self.PAR.ops.table_selected_cells_bg)
|
5657
|
+
sel_cols_bg = color_tup(self.PAR.ops.table_selected_columns_bg)
|
5658
|
+
sel_rows_bg = color_tup(self.PAR.ops.table_selected_rows_bg)
|
5659
|
+
if self.selected:
|
5660
|
+
current_loc = (self.selected.row, self.selected.column)
|
5661
|
+
else:
|
5662
|
+
current_loc = tuple()
|
5663
|
+
if self.PAR.ops.alternate_color:
|
5664
|
+
alternate_color = Highlight(
|
5665
|
+
bg=self.PAR.ops.alternate_color,
|
5666
|
+
fg=None,
|
5667
|
+
end=False,
|
5668
|
+
)
|
5669
|
+
if self.selected and box_is_single_cell(*self.selected.box) and self.PAR.ops.show_selected_cells_border:
|
5670
|
+
dont_blend = current_loc
|
5671
|
+
else:
|
5672
|
+
dont_blend = tuple()
|
5673
|
+
else:
|
5674
|
+
alternate_color = None
|
5675
|
+
dont_blend = tuple()
|
5676
|
+
|
5677
|
+
if not self.PAR.ops.show_selected_cells_border:
|
5678
|
+
override = (
|
5679
|
+
color_tup(self.PAR.ops.table_selected_cells_fg),
|
5680
|
+
color_tup(self.PAR.ops.table_selected_columns_fg),
|
5681
|
+
color_tup(self.PAR.ops.table_selected_rows_fg),
|
5682
|
+
)
|
5683
|
+
else:
|
5684
|
+
override = tuple()
|
5685
|
+
|
5664
5686
|
rows_ = tuple(range(text_start_row, text_end_row))
|
5665
5687
|
font = self.PAR.ops.table_font
|
5666
5688
|
dd_coords = self.dropdown.get_coords()
|
@@ -5677,19 +5699,21 @@ class MainTable(tk.Canvas):
|
|
5677
5699
|
datacn = self.datacn(c)
|
5678
5700
|
|
5679
5701
|
fill, dd_drawn = self.redraw_highlight_get_text_fg(
|
5680
|
-
r,
|
5681
|
-
c,
|
5682
|
-
cleftgridln,
|
5683
|
-
rtopgridln,
|
5684
|
-
crightgridln,
|
5685
|
-
rbotgridln,
|
5686
|
-
|
5687
|
-
|
5688
|
-
|
5689
|
-
selections,
|
5690
|
-
datarn,
|
5691
|
-
datacn,
|
5692
|
-
can_width,
|
5702
|
+
r=r,
|
5703
|
+
c=c,
|
5704
|
+
fc=cleftgridln,
|
5705
|
+
fr=rtopgridln,
|
5706
|
+
sc=crightgridln,
|
5707
|
+
sr=rbotgridln,
|
5708
|
+
sel_cells_bg=override[0] if override and (r, c) == current_loc else sel_cells_bg,
|
5709
|
+
sel_cols_bg=override[1] if override and (r, c) == current_loc else sel_cols_bg,
|
5710
|
+
sel_rows_bg=override[2] if override and (r, c) == current_loc else sel_rows_bg,
|
5711
|
+
selections=selections,
|
5712
|
+
datarn=datarn,
|
5713
|
+
datacn=datacn,
|
5714
|
+
can_width=can_width,
|
5715
|
+
dont_blend=(r, c) == dont_blend,
|
5716
|
+
alternate_color=alternate_color,
|
5693
5717
|
)
|
5694
5718
|
align = self.get_cell_kwargs(datarn, datacn, key="align")
|
5695
5719
|
if align:
|
@@ -5706,7 +5730,7 @@ class MainTable(tk.Canvas):
|
|
5706
5730
|
rtopgridln,
|
5707
5731
|
crightgridln,
|
5708
5732
|
self.row_positions[r + 1],
|
5709
|
-
fill=fill,
|
5733
|
+
fill=fill if kwargs["state"] != "disabled" else self.PAR.ops.table_grid_fg,
|
5710
5734
|
outline=fill,
|
5711
5735
|
tag=f"dd_{r}_{c}",
|
5712
5736
|
draw_outline=not dd_drawn,
|
@@ -5724,7 +5748,7 @@ class MainTable(tk.Canvas):
|
|
5724
5748
|
rtopgridln,
|
5725
5749
|
crightgridln,
|
5726
5750
|
self.row_positions[r + 1],
|
5727
|
-
fill=fill,
|
5751
|
+
fill=fill if kwargs["state"] != "disabled" else self.PAR.ops.table_grid_fg,
|
5728
5752
|
outline=fill,
|
5729
5753
|
tag=f"dd_{r}_{c}",
|
5730
5754
|
draw_outline=not dd_drawn,
|
@@ -5743,7 +5767,7 @@ class MainTable(tk.Canvas):
|
|
5743
5767
|
rtopgridln,
|
5744
5768
|
crightgridln,
|
5745
5769
|
self.row_positions[r + 1],
|
5746
|
-
fill=fill,
|
5770
|
+
fill=fill if kwargs["state"] != "disabled" else self.PAR.ops.table_grid_fg,
|
5747
5771
|
outline=fill,
|
5748
5772
|
tag=f"dd_{r}_{c}",
|
5749
5773
|
draw_outline=not dd_drawn,
|
@@ -5859,7 +5883,13 @@ class MainTable(tk.Canvas):
|
|
5859
5883
|
if draw_y + self.table_half_txt_height - 1 > rbotgridln:
|
5860
5884
|
break
|
5861
5885
|
if redraw_table:
|
5862
|
-
for dct in (
|
5886
|
+
for dct in (
|
5887
|
+
self.hidd_text,
|
5888
|
+
self.hidd_high,
|
5889
|
+
self.hidd_grid,
|
5890
|
+
self.hidd_dropdown,
|
5891
|
+
self.hidd_checkbox,
|
5892
|
+
):
|
5863
5893
|
for iid, showing in dct.items():
|
5864
5894
|
if showing:
|
5865
5895
|
self.itemconfig(iid, state="hidden")
|
@@ -6903,6 +6933,8 @@ class MainTable(tk.Canvas):
|
|
6903
6933
|
new_r, new_c = down_cell_within_box(r, c, r1, c1, r2, c2, numrows, numcols)
|
6904
6934
|
else:
|
6905
6935
|
new_r, new_c = None, None
|
6936
|
+
else:
|
6937
|
+
new_r, new_c = None, None
|
6906
6938
|
if isinstance(new_r, int):
|
6907
6939
|
self.set_currently_selected(new_r, new_c, item=self.selected.fill_iid)
|
6908
6940
|
self.see(
|
@@ -6957,6 +6989,8 @@ class MainTable(tk.Canvas):
|
|
6957
6989
|
bottom_right_corner=True,
|
6958
6990
|
check_cell_visibility=True,
|
6959
6991
|
)
|
6992
|
+
if not self.PAR.ops.show_selected_cells_border:
|
6993
|
+
self.refresh()
|
6960
6994
|
return "break"
|
6961
6995
|
|
6962
6996
|
def get_space_bot(self, r: int, text_editor_h: int | None = None) -> int:
|
@@ -7014,13 +7048,34 @@ class MainTable(tk.Canvas):
|
|
7014
7048
|
|
7015
7049
|
def dropdown_text_editor_modified(
|
7016
7050
|
self,
|
7017
|
-
|
7018
|
-
event: dict,
|
7019
|
-
modified_func: Callable | None,
|
7051
|
+
event: tk.Misc,
|
7020
7052
|
) -> None:
|
7021
|
-
|
7022
|
-
|
7023
|
-
|
7053
|
+
r, c = self.dropdown.get_coords()
|
7054
|
+
event_data = event_dict(
|
7055
|
+
name="table_dropdown_modified",
|
7056
|
+
sheet=self.PAR.name,
|
7057
|
+
value=self.text_editor.get(),
|
7058
|
+
loc=Loc(r, c),
|
7059
|
+
row=r,
|
7060
|
+
column=c,
|
7061
|
+
boxes=self.get_boxes(),
|
7062
|
+
selected=self.selected,
|
7063
|
+
)
|
7064
|
+
try_binding(self.dropdown.window.modified_function, event_data)
|
7065
|
+
val = self.dropdown.window.search_and_see(event_data)
|
7066
|
+
# return to tk.Text action if control/command is held down
|
7067
|
+
# or keysym was not a character
|
7068
|
+
if (hasattr(event, "state") and event.state & (0x0004 | 0x00000010)) or (
|
7069
|
+
hasattr(event, "keysym") and len(event.keysym) > 2
|
7070
|
+
):
|
7071
|
+
return
|
7072
|
+
self.text_editor.tktext.unbind("<KeyRelease>")
|
7073
|
+
self.text_editor.autocomplete(val)
|
7074
|
+
self.text_editor.tktext.bind(
|
7075
|
+
"<KeyRelease>",
|
7076
|
+
self.dropdown_text_editor_modified,
|
7077
|
+
)
|
7078
|
+
return "break"
|
7024
7079
|
|
7025
7080
|
# c is displayed col
|
7026
7081
|
def open_dropdown_window(
|
@@ -7033,9 +7088,10 @@ class MainTable(tk.Canvas):
|
|
7033
7088
|
datarn = self.datarn(r)
|
7034
7089
|
datacn = self.datacn(c)
|
7035
7090
|
kwargs = self.get_cell_kwargs(datarn, datacn, key="dropdown")
|
7036
|
-
if kwargs["state"] == "
|
7037
|
-
|
7038
|
-
|
7091
|
+
if kwargs["state"] == "disabled":
|
7092
|
+
return
|
7093
|
+
if kwargs["state"] == "normal" and not self.open_text_editor(event=event, r=r, c=c, dropdown=True):
|
7094
|
+
return
|
7039
7095
|
win_h, anchor = self.get_dropdown_height_anchor(r, c)
|
7040
7096
|
win_w = self.col_positions[c + 1] - self.col_positions[c] + 1
|
7041
7097
|
if anchor == "nw":
|
@@ -7056,6 +7112,8 @@ class MainTable(tk.Canvas):
|
|
7056
7112
|
"outline_color": self.get_selected_box_bg_fg(type_="cells")[1],
|
7057
7113
|
"align": self.get_cell_align(r, c),
|
7058
7114
|
"values": kwargs["values"],
|
7115
|
+
"search_function": kwargs["search_function"],
|
7116
|
+
"modified_function": kwargs["modified_function"],
|
7059
7117
|
}
|
7060
7118
|
if self.dropdown.window:
|
7061
7119
|
self.dropdown.window.reset(**reset_kwargs)
|
@@ -7067,7 +7125,6 @@ class MainTable(tk.Canvas):
|
|
7067
7125
|
self.winfo_toplevel(),
|
7068
7126
|
**reset_kwargs,
|
7069
7127
|
close_dropdown_window=self.close_dropdown_window,
|
7070
|
-
search_function=kwargs["search_function"],
|
7071
7128
|
arrowkey_RIGHT=self.arrowkey_RIGHT,
|
7072
7129
|
arrowkey_LEFT=self.arrowkey_LEFT,
|
7073
7130
|
)
|
@@ -7078,22 +7135,9 @@ class MainTable(tk.Canvas):
|
|
7078
7135
|
)
|
7079
7136
|
if kwargs["state"] == "normal":
|
7080
7137
|
self.text_editor.tktext.bind(
|
7081
|
-
"
|
7082
|
-
|
7083
|
-
event_dict(
|
7084
|
-
name="table_dropdown_modified",
|
7085
|
-
sheet=self.PAR.name,
|
7086
|
-
value=self.text_editor.get(),
|
7087
|
-
loc=Loc(r, c),
|
7088
|
-
row=r,
|
7089
|
-
column=c,
|
7090
|
-
boxes=self.get_boxes(),
|
7091
|
-
selected=self.selected,
|
7092
|
-
)
|
7093
|
-
),
|
7138
|
+
"<KeyRelease>",
|
7139
|
+
self.dropdown_text_editor_modified,
|
7094
7140
|
)
|
7095
|
-
if kwargs["modified_function"] is not None:
|
7096
|
-
self.dropdown.window.modified_function = kwargs["modified_function"]
|
7097
7141
|
self.update_idletasks()
|
7098
7142
|
try:
|
7099
7143
|
self.after(1, lambda: self.text_editor.tktext.focus())
|
@@ -7268,7 +7312,7 @@ class MainTable(tk.Canvas):
|
|
7268
7312
|
)
|
7269
7313
|
if not check_input_valid or self.input_valid_for_cell(datarn, datacn, value):
|
7270
7314
|
if self.undo_enabled and undo:
|
7271
|
-
self.undo_stack.append(
|
7315
|
+
self.undo_stack.append(stored_event_dict(event_data))
|
7272
7316
|
self.set_cell_data(datarn, datacn, value)
|
7273
7317
|
if cell_resize and self.PAR.ops.cell_auto_resize_enabled:
|
7274
7318
|
self.set_cell_size_to_text(r, c, only_if_too_small=True, redraw=redraw, run_binding=True)
|