tksheet 7.1.21__py3-none-any.whl → 7.1.23__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 +5 -1
- tksheet/column_headers.py +35 -22
- tksheet/functions.py +27 -5
- tksheet/main_table.py +126 -64
- tksheet/row_index.py +56 -44
- tksheet/sheet.py +358 -272
- tksheet/sheet_options.py +1 -1
- tksheet/text_editor.py +1 -5
- tksheet/themes.py +41 -32
- tksheet/vars.py +22 -9
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/METADATA +5 -5
- tksheet-7.1.23.dist-info/RECORD +20 -0
- tksheet-7.1.21.dist-info/RECORD +0 -20
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/WHEEL +0 -0
- {tksheet-7.1.21.dist-info → tksheet-7.1.23.dist-info}/top_level.txt +0 -0
tksheet/main_table.py
CHANGED
@@ -67,6 +67,7 @@ from .functions import (
|
|
67
67
|
mod_span,
|
68
68
|
mod_span_widget,
|
69
69
|
move_elements_by_mapping,
|
70
|
+
new_tk_event,
|
70
71
|
pickle_obj,
|
71
72
|
pickled_event_dict,
|
72
73
|
rounded_box_coords,
|
@@ -99,6 +100,8 @@ from .vars import (
|
|
99
100
|
ctrl_key,
|
100
101
|
rc_binding,
|
101
102
|
symbols_set,
|
103
|
+
text_editor_close_bindings,
|
104
|
+
text_editor_newline_bindings,
|
102
105
|
text_editor_to_unbind,
|
103
106
|
val_modifying_options,
|
104
107
|
)
|
@@ -127,6 +130,15 @@ class MainTable(tk.Canvas):
|
|
127
130
|
self.synced_scrolls = set()
|
128
131
|
self.dropdown = DropdownStorage()
|
129
132
|
self.text_editor = TextEditorStorage()
|
133
|
+
self.event_linker = {
|
134
|
+
"<<Copy>>": self.ctrl_c,
|
135
|
+
"<<Cut>>": self.ctrl_x,
|
136
|
+
"<<Paste>>": self.ctrl_v,
|
137
|
+
"<<Delete>>": self.delete_key,
|
138
|
+
"<<Undo>>": self.undo,
|
139
|
+
"<<Redo>>": self.redo,
|
140
|
+
"<<SelectAll>>": self.select_all,
|
141
|
+
}
|
130
142
|
|
131
143
|
self.disp_ctrl_outline = {}
|
132
144
|
self.disp_text = {}
|
@@ -341,6 +353,13 @@ class MainTable(tk.Canvas):
|
|
341
353
|
self.basic_bindings()
|
342
354
|
self.create_rc_menus()
|
343
355
|
|
356
|
+
def event_generate(self, *args, **kwargs) -> None:
|
357
|
+
for arg in args:
|
358
|
+
if arg in self.event_linker:
|
359
|
+
self.event_linker[arg]()
|
360
|
+
else:
|
361
|
+
super().event_generate(*args, **kwargs)
|
362
|
+
|
344
363
|
def refresh(self, event: object = None) -> None:
|
345
364
|
self.main_table_redraw_grid_and_text(True, True)
|
346
365
|
|
@@ -532,10 +551,11 @@ class MainTable(tk.Canvas):
|
|
532
551
|
if not self.selected:
|
533
552
|
return
|
534
553
|
event_data = event_dict(
|
554
|
+
name="begin_ctrl_c",
|
535
555
|
sheet=self.PAR.name,
|
556
|
+
widget=self,
|
536
557
|
selected=self.selected,
|
537
558
|
)
|
538
|
-
event_data["eventname"] = "begin_ctrl_c"
|
539
559
|
boxes, maxrows = self.get_ctrl_x_c_boxes()
|
540
560
|
event_data["selection_boxes"] = boxes
|
541
561
|
s, writer = self.io_csv_writer()
|
@@ -573,7 +593,8 @@ class MainTable(tk.Canvas):
|
|
573
593
|
else:
|
574
594
|
self.clipboard_append(s.getvalue())
|
575
595
|
self.update_idletasks()
|
576
|
-
try_binding(self.extra_end_ctrl_c_func, event_data, "end_ctrl_c")
|
596
|
+
try_binding(self.extra_end_ctrl_c_func, event_data, new_name="end_ctrl_c")
|
597
|
+
self.PAR.emit_event("<<Copy>>", EventDataDict({**event_data, **{"eventname": "copy"}}))
|
577
598
|
return event_data
|
578
599
|
|
579
600
|
def ctrl_x(self, event=None, validation: bool = True) -> None | EventDataDict:
|
@@ -582,6 +603,7 @@ class MainTable(tk.Canvas):
|
|
582
603
|
event_data = event_dict(
|
583
604
|
name="edit_table",
|
584
605
|
sheet=self.PAR.name,
|
606
|
+
widget=self,
|
585
607
|
selected=self.selected,
|
586
608
|
)
|
587
609
|
boxes, maxrows = self.get_ctrl_x_c_boxes()
|
@@ -657,6 +679,7 @@ class MainTable(tk.Canvas):
|
|
657
679
|
if event_data["cells"]["table"]:
|
658
680
|
try_binding(self.extra_end_ctrl_x_func, event_data, "end_ctrl_x")
|
659
681
|
self.sheet_modified(event_data)
|
682
|
+
self.PAR.emit_event("<<Cut>>", event_data)
|
660
683
|
return event_data
|
661
684
|
|
662
685
|
def ctrl_v(self, event: object = None, validation: bool = True) -> None | EventDataDict:
|
@@ -667,6 +690,7 @@ class MainTable(tk.Canvas):
|
|
667
690
|
event_data = event_dict(
|
668
691
|
name="edit_table",
|
669
692
|
sheet=self.PAR.name,
|
693
|
+
widget=self,
|
670
694
|
selected=self.selected,
|
671
695
|
)
|
672
696
|
if self.selected:
|
@@ -893,6 +917,7 @@ class MainTable(tk.Canvas):
|
|
893
917
|
if event_data["cells"]["table"] or event_data["added"]["rows"] or event_data["added"]["columns"]:
|
894
918
|
try_binding(self.extra_end_ctrl_v_func, event_data, "end_ctrl_v")
|
895
919
|
self.sheet_modified(event_data)
|
920
|
+
self.PAR.emit_event("<<Paste>>", event_data)
|
896
921
|
return event_data
|
897
922
|
|
898
923
|
def delete_key(self, event: object = None, validation: bool = True) -> None | EventDataDict:
|
@@ -901,6 +926,7 @@ class MainTable(tk.Canvas):
|
|
901
926
|
event_data = event_dict(
|
902
927
|
name="edit_table",
|
903
928
|
sheet=self.PAR.name,
|
929
|
+
widget=self,
|
904
930
|
selected=self.selected,
|
905
931
|
)
|
906
932
|
boxes = self.get_boxes()
|
@@ -931,6 +957,7 @@ class MainTable(tk.Canvas):
|
|
931
957
|
try_binding(self.extra_end_delete_key_func, event_data, "end_delete")
|
932
958
|
self.refresh()
|
933
959
|
self.sheet_modified(event_data)
|
960
|
+
self.PAR.emit_event("<<Delete>>", event_data)
|
934
961
|
return event_data
|
935
962
|
|
936
963
|
def event_data_set_cell(self, datarn: int, datacn: int, value: object, event_data: dict) -> EventDataDict:
|
@@ -958,11 +985,18 @@ class MainTable(tk.Canvas):
|
|
958
985
|
data_new_idxs = get_new_indexes(seqlen=totalcols, move_to=move_to, to_move=to_move)
|
959
986
|
elif not self.all_columns_displayed and not data_indexes:
|
960
987
|
data_new_idxs = get_new_indexes(seqlen=len(self.displayed_columns), move_to=move_to, to_move=to_move)
|
961
|
-
|
988
|
+
moved = {self.displayed_columns[i] for i in to_move}
|
962
989
|
data_new_idxs = dict(
|
963
|
-
|
964
|
-
|
965
|
-
|
990
|
+
filter(
|
991
|
+
lambda tup: tup[0] in moved,
|
992
|
+
zip(
|
993
|
+
move_elements_by_mapping(
|
994
|
+
self.displayed_columns,
|
995
|
+
data_new_idxs,
|
996
|
+
dict(zip(data_new_idxs.values(), data_new_idxs)),
|
997
|
+
),
|
998
|
+
self.displayed_columns,
|
999
|
+
),
|
966
1000
|
)
|
967
1001
|
)
|
968
1002
|
return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalcols, disp_new_idxs
|
@@ -974,6 +1008,7 @@ class MainTable(tk.Canvas):
|
|
974
1008
|
totalcols: int | None,
|
975
1009
|
disp_new_idxs: None | dict[int, int] = None,
|
976
1010
|
move_data: bool = True,
|
1011
|
+
move_widths: bool = True,
|
977
1012
|
create_selections: bool = True,
|
978
1013
|
data_indexes: bool = False,
|
979
1014
|
event_data: EventDataDict | None = None,
|
@@ -988,6 +1023,7 @@ class MainTable(tk.Canvas):
|
|
988
1023
|
event_data = event_dict(
|
989
1024
|
name="move_columns",
|
990
1025
|
sheet=self.PAR.name,
|
1026
|
+
widget=self,
|
991
1027
|
boxes=self.get_boxes(),
|
992
1028
|
selected=self.selected,
|
993
1029
|
)
|
@@ -997,7 +1033,7 @@ class MainTable(tk.Canvas):
|
|
997
1033
|
}
|
998
1034
|
event_data["options"] = self.pickle_options()
|
999
1035
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1000
|
-
if disp_new_idxs and (not data_indexes or self.all_columns_displayed):
|
1036
|
+
if move_widths and disp_new_idxs and (not data_indexes or self.all_columns_displayed):
|
1001
1037
|
self.deselect("all", run_binding=False, redraw=False)
|
1002
1038
|
self.set_col_positions(
|
1003
1039
|
itr=move_elements_by_mapping(
|
@@ -1189,11 +1225,18 @@ class MainTable(tk.Canvas):
|
|
1189
1225
|
data_new_idxs = get_new_indexes(seqlen=totalrows, move_to=move_to, to_move=to_move)
|
1190
1226
|
elif not self.all_rows_displayed and not data_indexes:
|
1191
1227
|
data_new_idxs = get_new_indexes(seqlen=len(self.displayed_rows), move_to=move_to, to_move=to_move)
|
1192
|
-
|
1228
|
+
moved = {self.displayed_rows[i] for i in to_move}
|
1193
1229
|
data_new_idxs = dict(
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1230
|
+
filter(
|
1231
|
+
lambda tup: tup[0] in moved,
|
1232
|
+
zip(
|
1233
|
+
move_elements_by_mapping(
|
1234
|
+
self.displayed_rows,
|
1235
|
+
data_new_idxs,
|
1236
|
+
dict(zip(data_new_idxs.values(), data_new_idxs)),
|
1237
|
+
),
|
1238
|
+
self.displayed_rows,
|
1239
|
+
),
|
1197
1240
|
)
|
1198
1241
|
)
|
1199
1242
|
return data_new_idxs, dict(zip(data_new_idxs.values(), data_new_idxs)), totalrows, disp_new_idxs
|
@@ -1205,6 +1248,7 @@ class MainTable(tk.Canvas):
|
|
1205
1248
|
totalrows: int | None,
|
1206
1249
|
disp_new_idxs: None | dict[int, int] = None,
|
1207
1250
|
move_data: bool = True,
|
1251
|
+
move_heights: bool = True,
|
1208
1252
|
create_selections: bool = True,
|
1209
1253
|
data_indexes: bool = False,
|
1210
1254
|
event_data: EventDataDict | None = None,
|
@@ -1221,6 +1265,7 @@ class MainTable(tk.Canvas):
|
|
1221
1265
|
event_data = event_dict(
|
1222
1266
|
name="move_rows",
|
1223
1267
|
sheet=self.PAR.name,
|
1268
|
+
widget=self,
|
1224
1269
|
boxes=self.get_boxes(),
|
1225
1270
|
selected=self.selected,
|
1226
1271
|
)
|
@@ -1230,7 +1275,7 @@ class MainTable(tk.Canvas):
|
|
1230
1275
|
}
|
1231
1276
|
event_data["options"] = self.pickle_options()
|
1232
1277
|
event_data["named_spans"] = {k: span.pickle_self() for k, span in self.named_spans.items()}
|
1233
|
-
if disp_new_idxs and (not data_indexes or self.all_rows_displayed):
|
1278
|
+
if move_heights and disp_new_idxs and (not data_indexes or self.all_rows_displayed):
|
1234
1279
|
self.deselect("all", run_binding=False, redraw=False)
|
1235
1280
|
self.set_row_positions(
|
1236
1281
|
itr=move_elements_by_mapping(
|
@@ -1424,7 +1469,9 @@ class MainTable(tk.Canvas):
|
|
1424
1469
|
event_data = self.undo_modification_invert_event(modification)
|
1425
1470
|
self.redo_stack.append(pickled_event_dict(event_data))
|
1426
1471
|
self.undo_stack.pop()
|
1472
|
+
self.sheet_modified(event_data, purge_redo=False)
|
1427
1473
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_undo")
|
1474
|
+
self.PAR.emit_event("<<Undo>>", event_data)
|
1428
1475
|
return event_data
|
1429
1476
|
|
1430
1477
|
def redo(self, event: object = None) -> None | EventDataDict:
|
@@ -1436,7 +1483,9 @@ class MainTable(tk.Canvas):
|
|
1436
1483
|
event_data = self.undo_modification_invert_event(modification, name="redo")
|
1437
1484
|
self.undo_stack.append(pickled_event_dict(event_data))
|
1438
1485
|
self.redo_stack.pop()
|
1486
|
+
self.sheet_modified(event_data, purge_redo=False)
|
1439
1487
|
try_binding(self.extra_end_ctrl_z_func, event_data, "end_redo")
|
1488
|
+
self.PAR.emit_event("<<Redo>>", event_data)
|
1440
1489
|
return event_data
|
1441
1490
|
|
1442
1491
|
def sheet_modified(self, event_data: EventDataDict, purge_redo: bool = True) -> None:
|
@@ -1490,6 +1539,7 @@ class MainTable(tk.Canvas):
|
|
1490
1539
|
event_data = event_dict(
|
1491
1540
|
name=modification["eventname"],
|
1492
1541
|
sheet=self.PAR.name,
|
1542
|
+
widget=self,
|
1493
1543
|
)
|
1494
1544
|
event_data["selection_boxes"] = modification["selection_boxes"]
|
1495
1545
|
event_data["selected"] = modification["selected"]
|
@@ -1648,7 +1698,6 @@ class MainTable(tk.Canvas):
|
|
1648
1698
|
redraw=False,
|
1649
1699
|
)
|
1650
1700
|
|
1651
|
-
self.sheet_modified(event_data, purge_redo=False)
|
1652
1701
|
self.refresh()
|
1653
1702
|
return event_data
|
1654
1703
|
|
@@ -1775,7 +1824,9 @@ class MainTable(tk.Canvas):
|
|
1775
1824
|
self.select_all_binding_func(
|
1776
1825
|
self.get_select_event(being_drawn_item=self.being_drawn_item),
|
1777
1826
|
)
|
1778
|
-
|
1827
|
+
event_data = self.get_select_event(self.being_drawn_item)
|
1828
|
+
self.PAR.emit_event("<<SheetSelect>>", data=event_data)
|
1829
|
+
self.PAR.emit_event("<<SelectAll>>", data=event_data)
|
1779
1830
|
|
1780
1831
|
def select_cell(
|
1781
1832
|
self,
|
@@ -3530,6 +3581,7 @@ class MainTable(tk.Canvas):
|
|
3530
3581
|
keep_formatting: bool = True,
|
3531
3582
|
) -> object:
|
3532
3583
|
if isinstance(newdataref, (list, tuple)):
|
3584
|
+
self.hide_dropdown_editor_all_canvases()
|
3533
3585
|
self.data = newdataref
|
3534
3586
|
if keep_formatting:
|
3535
3587
|
self.reapply_formatting()
|
@@ -3633,7 +3685,7 @@ class MainTable(tk.Canvas):
|
|
3633
3685
|
else:
|
3634
3686
|
return False
|
3635
3687
|
|
3636
|
-
def set_all_cell_sizes_to_text(self, w: int | None = None) -> tuple[list[float], list[float]]:
|
3688
|
+
def set_all_cell_sizes_to_text(self, w: int | None = None, slim: bool = False) -> tuple[list[float], list[float]]:
|
3637
3689
|
min_column_width = int(self.min_column_width)
|
3638
3690
|
min_rh = int(self.min_row_height)
|
3639
3691
|
w = min_column_width if w is None else w
|
@@ -3664,6 +3716,7 @@ class MainTable(tk.Canvas):
|
|
3664
3716
|
h = int(self.max_row_height)
|
3665
3717
|
if h > rhs[datarn]:
|
3666
3718
|
rhs[datarn] = h
|
3719
|
+
added_w_space = 1 if slim else 7
|
3667
3720
|
for datacn in itercols:
|
3668
3721
|
if (hw := self.CH.get_cell_dimensions(datacn)[0]) > w:
|
3669
3722
|
w = hw
|
@@ -3672,7 +3725,7 @@ class MainTable(tk.Canvas):
|
|
3672
3725
|
if txt:
|
3673
3726
|
qconf(qtxtm, text=txt, font=qfont)
|
3674
3727
|
b = qbbox(qtxtm)
|
3675
|
-
tw = b[2] - b[0] +
|
3728
|
+
tw = b[2] - b[0] + added_w_space
|
3676
3729
|
h = b[3] - b[1] + 5
|
3677
3730
|
else:
|
3678
3731
|
tw = min_column_width
|
@@ -4323,6 +4376,7 @@ class MainTable(tk.Canvas):
|
|
4323
4376
|
event_data = event_dict(
|
4324
4377
|
name="add_columns",
|
4325
4378
|
sheet=self.PAR.name,
|
4379
|
+
widget=self,
|
4326
4380
|
boxes=self.get_boxes(),
|
4327
4381
|
selected=self.selected,
|
4328
4382
|
)
|
@@ -4454,6 +4508,7 @@ class MainTable(tk.Canvas):
|
|
4454
4508
|
event_data = event_dict(
|
4455
4509
|
name="add_rows",
|
4456
4510
|
sheet=self.PAR.name,
|
4511
|
+
widget=self,
|
4457
4512
|
boxes=self.get_boxes(),
|
4458
4513
|
selected=self.selected,
|
4459
4514
|
)
|
@@ -4627,6 +4682,7 @@ class MainTable(tk.Canvas):
|
|
4627
4682
|
event_data = event_dict(
|
4628
4683
|
name="delete_columns",
|
4629
4684
|
sheet=self.PAR.name,
|
4685
|
+
widget=self,
|
4630
4686
|
boxes=self.get_boxes(),
|
4631
4687
|
selected=self.selected,
|
4632
4688
|
)
|
@@ -4681,6 +4737,7 @@ class MainTable(tk.Canvas):
|
|
4681
4737
|
event_data = event_dict(
|
4682
4738
|
name="delete_rows",
|
4683
4739
|
sheet=self.PAR.name,
|
4740
|
+
widget=self,
|
4684
4741
|
boxes=self.get_boxes(),
|
4685
4742
|
selected=self.selected,
|
4686
4743
|
)
|
@@ -5224,7 +5281,7 @@ class MainTable(tk.Canvas):
|
|
5224
5281
|
for i, w in enumerate(widths):
|
5225
5282
|
if i not in diffs:
|
5226
5283
|
widths[i] -= change
|
5227
|
-
self.
|
5284
|
+
self.col_positions = list(accumulate(chain([0], widths)))
|
5228
5285
|
if self.PAR.ops.auto_resize_rows and self.allow_auto_resize_rows and row_pos_exists:
|
5229
5286
|
max_h = can_height - self.PAR.ops.empty_vertical
|
5230
5287
|
if self.PAR.ops.auto_resize_rows < self.min_row_height:
|
@@ -5249,30 +5306,31 @@ class MainTable(tk.Canvas):
|
|
5249
5306
|
if i not in diffs:
|
5250
5307
|
heights[i] -= change
|
5251
5308
|
self.row_positions = list(accumulate(chain([0], heights)))
|
5252
|
-
|
5253
|
-
|
5254
|
-
|
5255
|
-
|
5256
|
-
|
5257
|
-
|
5258
|
-
|
5259
|
-
|
5260
|
-
|
5261
|
-
|
5262
|
-
|
5263
|
-
|
5264
|
-
|
5265
|
-
if can_height >= last_row_line_pos + self.PAR.ops.empty_vertical and self.PAR.yscroll_showing:
|
5309
|
+
if self.PAR.ops.auto_resize_row_index is not True:
|
5310
|
+
if can_width >= self.col_positions[-1] + self.PAR.ops.empty_horizontal and self.PAR.xscroll_showing:
|
5311
|
+
self.PAR.xscroll.grid_forget()
|
5312
|
+
self.PAR.xscroll_showing = False
|
5313
|
+
elif (
|
5314
|
+
can_width < self.col_positions[-1] + self.PAR.ops.empty_horizontal
|
5315
|
+
and not self.PAR.xscroll_showing
|
5316
|
+
and not self.PAR.xscroll_disabled
|
5317
|
+
and can_height > 40
|
5318
|
+
):
|
5319
|
+
self.PAR.xscroll.grid(row=2, column=0, columnspan=2, sticky="nswe")
|
5320
|
+
self.PAR.xscroll_showing = True
|
5321
|
+
if can_height >= self.row_positions[-1] + self.PAR.ops.empty_vertical and self.PAR.yscroll_showing:
|
5266
5322
|
self.PAR.yscroll.grid_forget()
|
5267
5323
|
self.PAR.yscroll_showing = False
|
5268
5324
|
elif (
|
5269
|
-
can_height <
|
5325
|
+
can_height < self.row_positions[-1] + self.PAR.ops.empty_vertical
|
5270
5326
|
and not self.PAR.yscroll_showing
|
5271
5327
|
and not self.PAR.yscroll_disabled
|
5272
5328
|
and can_width > 40
|
5273
5329
|
):
|
5274
5330
|
self.PAR.yscroll.grid(row=0, column=2, rowspan=3, sticky="nswe")
|
5275
5331
|
self.PAR.yscroll_showing = True
|
5332
|
+
last_col_line_pos = self.col_positions[-1] + 1
|
5333
|
+
last_row_line_pos = self.row_positions[-1] + 1
|
5276
5334
|
scrollregion = (
|
5277
5335
|
0,
|
5278
5336
|
0,
|
@@ -5297,15 +5355,15 @@ class MainTable(tk.Canvas):
|
|
5297
5355
|
start_col = bisect_left(self.col_positions, scrollpos_left)
|
5298
5356
|
end_col = bisect_right(self.col_positions, scrollpos_right)
|
5299
5357
|
changed_w = False
|
5300
|
-
if redraw_row_index and self.show_index:
|
5358
|
+
if self.PAR.ops.auto_resize_row_index and redraw_row_index and self.show_index:
|
5301
5359
|
changed_w = self.RI.auto_set_index_width(
|
5302
5360
|
end_row=end_row - 1,
|
5303
5361
|
only_rows=[self.datarn(r) for r in range(start_row if not start_row else start_row - 1, end_row - 1)],
|
5304
5362
|
)
|
5363
|
+
if resized_cols or resized_rows or changed_w:
|
5364
|
+
self.recreate_all_selection_boxes()
|
5305
5365
|
if changed_w:
|
5306
5366
|
return False
|
5307
|
-
if resized_cols or resized_rows:
|
5308
|
-
self.recreate_all_selection_boxes()
|
5309
5367
|
self.hidd_text.update(self.disp_text)
|
5310
5368
|
self.disp_text = {}
|
5311
5369
|
self.hidd_high.update(self.disp_high)
|
@@ -6435,31 +6493,25 @@ class MainTable(tk.Canvas):
|
|
6435
6493
|
self.itemconfig(self.text_editor.canvas_id, state="normal")
|
6436
6494
|
self.text_editor.open = True
|
6437
6495
|
self.coords(self.text_editor.canvas_id, x, y)
|
6496
|
+
for b in text_editor_newline_bindings:
|
6497
|
+
self.text_editor.tktext.bind(b, self.text_editor_newline_binding)
|
6498
|
+
for b in text_editor_close_bindings:
|
6499
|
+
self.text_editor.tktext.bind(b, self.close_text_editor)
|
6438
6500
|
if not dropdown:
|
6439
6501
|
self.text_editor.tktext.focus_set()
|
6440
6502
|
self.text_editor.window.scroll_to_bottom()
|
6441
|
-
|
6442
|
-
self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(r, c))
|
6443
|
-
if USER_OS == "darwin":
|
6444
|
-
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(r, c))
|
6503
|
+
self.text_editor.tktext.bind("<FocusOut>", self.close_text_editor)
|
6445
6504
|
for key, func in self.text_editor_user_bound_keys.items():
|
6446
6505
|
self.text_editor.tktext.bind(key, func)
|
6447
|
-
self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((r, c, "Tab")))
|
6448
|
-
self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((r, c, "Return")))
|
6449
|
-
self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((r, c, "Return")))
|
6450
|
-
if not dropdown:
|
6451
|
-
self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((r, c, "FocusOut")))
|
6452
|
-
self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((r, c, "Escape")))
|
6453
6506
|
return True
|
6454
6507
|
|
6455
6508
|
# displayed indexes
|
6456
6509
|
def text_editor_newline_binding(
|
6457
6510
|
self,
|
6458
|
-
r: int = 0,
|
6459
|
-
c: int = 0,
|
6460
6511
|
event: object = None,
|
6461
6512
|
check_lines: bool = True,
|
6462
6513
|
) -> None:
|
6514
|
+
r, c = self.text_editor.coords
|
6463
6515
|
curr_height = self.text_editor.window.winfo_height()
|
6464
6516
|
if curr_height < self.min_row_height:
|
6465
6517
|
return
|
@@ -6543,31 +6595,33 @@ class MainTable(tk.Canvas):
|
|
6543
6595
|
if reason == "Escape":
|
6544
6596
|
self.focus_set()
|
6545
6597
|
|
6546
|
-
def close_text_editor(
|
6547
|
-
self,
|
6548
|
-
editor_info: tuple | None = None,
|
6549
|
-
) -> str | None:
|
6598
|
+
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
6550
6599
|
# checking if text editor should be closed or not
|
6551
|
-
|
6600
|
+
# errors if __tk_filedialog is open
|
6601
|
+
try:
|
6602
|
+
focused = self.focus_get()
|
6603
|
+
except Exception:
|
6604
|
+
focused = None
|
6552
6605
|
try:
|
6553
6606
|
if focused == self.text_editor.tktext.rc_popup_menu:
|
6554
6607
|
return "break"
|
6555
6608
|
except Exception:
|
6556
6609
|
pass
|
6557
|
-
if focused is None
|
6610
|
+
if focused is None:
|
6558
6611
|
return "break"
|
6559
|
-
if
|
6612
|
+
if event.keysym == "Escape":
|
6560
6613
|
self.hide_text_editor_and_dropdown()
|
6561
6614
|
return
|
6562
6615
|
# setting cell data with text editor value
|
6563
6616
|
text_editor_value = self.text_editor.get()
|
6564
|
-
r, c =
|
6617
|
+
r, c = self.text_editor.coords
|
6565
6618
|
datarn, datacn = self.datarn(r), self.datacn(c)
|
6566
6619
|
event_data = event_dict(
|
6567
6620
|
name="end_edit_table",
|
6568
6621
|
sheet=self.PAR.name,
|
6622
|
+
widget=self,
|
6569
6623
|
cells_table={(datarn, datacn): text_editor_value},
|
6570
|
-
key=
|
6624
|
+
key=event.keysym,
|
6571
6625
|
value=text_editor_value,
|
6572
6626
|
loc=Loc(r, c),
|
6573
6627
|
row=r,
|
@@ -6606,7 +6660,7 @@ class MainTable(tk.Canvas):
|
|
6606
6660
|
numcols = c2 - c1
|
6607
6661
|
numrows = r2 - r1
|
6608
6662
|
if numcols == 1 and numrows == 1:
|
6609
|
-
if
|
6663
|
+
if event.keysym == "Return":
|
6610
6664
|
self.select_cell(r + 1 if r < len(self.row_positions) - 2 else r, c)
|
6611
6665
|
self.see(
|
6612
6666
|
r + 1 if r < len(self.row_positions) - 2 else r,
|
@@ -6615,7 +6669,7 @@ class MainTable(tk.Canvas):
|
|
6615
6669
|
bottom_right_corner=True,
|
6616
6670
|
check_cell_visibility=True,
|
6617
6671
|
)
|
6618
|
-
elif
|
6672
|
+
elif event.keysym == "Tab":
|
6619
6673
|
self.select_cell(r, c + 1 if c < len(self.col_positions) - 2 else c)
|
6620
6674
|
self.see(
|
6621
6675
|
r,
|
@@ -6628,7 +6682,7 @@ class MainTable(tk.Canvas):
|
|
6628
6682
|
moved = False
|
6629
6683
|
new_r = r
|
6630
6684
|
new_c = c
|
6631
|
-
if
|
6685
|
+
if event.keysym == "Return":
|
6632
6686
|
if r + 1 == r2:
|
6633
6687
|
new_r = r1
|
6634
6688
|
elif numrows > 1:
|
@@ -6639,7 +6693,7 @@ class MainTable(tk.Canvas):
|
|
6639
6693
|
new_c = c1
|
6640
6694
|
elif numcols > 1:
|
6641
6695
|
new_c = c + 1
|
6642
|
-
elif
|
6696
|
+
elif event.keysym == "Tab":
|
6643
6697
|
if c + 1 == c2:
|
6644
6698
|
new_c = c1
|
6645
6699
|
elif numcols > 1:
|
@@ -6660,7 +6714,7 @@ class MainTable(tk.Canvas):
|
|
6660
6714
|
)
|
6661
6715
|
self.recreate_all_selection_boxes()
|
6662
6716
|
self.hide_text_editor_and_dropdown()
|
6663
|
-
if
|
6717
|
+
if event.keysym != "FocusOut":
|
6664
6718
|
self.focus_set()
|
6665
6719
|
return "break"
|
6666
6720
|
|
@@ -6819,7 +6873,7 @@ class MainTable(tk.Canvas):
|
|
6819
6873
|
if kwargs["state"] == "normal":
|
6820
6874
|
self.text_editor.tktext.bind(
|
6821
6875
|
"<<TextModified>>",
|
6822
|
-
lambda
|
6876
|
+
lambda _: self.dropdown.window.search_and_see(
|
6823
6877
|
event_dict(
|
6824
6878
|
name="table_dropdown_modified",
|
6825
6879
|
sheet=self.PAR.name,
|
@@ -6843,7 +6897,7 @@ class MainTable(tk.Canvas):
|
|
6843
6897
|
redraw = False
|
6844
6898
|
else:
|
6845
6899
|
self.update_idletasks()
|
6846
|
-
self.dropdown.window.bind("<FocusOut>", lambda
|
6900
|
+
self.dropdown.window.bind("<FocusOut>", lambda _: self.close_dropdown_window(r, c))
|
6847
6901
|
self.dropdown.window.focus()
|
6848
6902
|
redraw = True
|
6849
6903
|
self.dropdown.open = True
|
@@ -6866,6 +6920,7 @@ class MainTable(tk.Canvas):
|
|
6866
6920
|
event_data = event_dict(
|
6867
6921
|
name="end_edit_table",
|
6868
6922
|
sheet=self.PAR.name,
|
6923
|
+
widget=self,
|
6869
6924
|
cells_table={(datarn, datacn): pre_edit_value},
|
6870
6925
|
key="??",
|
6871
6926
|
value=selection,
|
@@ -6912,7 +6967,7 @@ class MainTable(tk.Canvas):
|
|
6912
6967
|
def mouseclick_outside_editor_or_dropdown(self) -> tuple[int, int] | None:
|
6913
6968
|
closed_dd_coords = self.dropdown.get_coords()
|
6914
6969
|
if self.text_editor.open:
|
6915
|
-
self.close_text_editor(
|
6970
|
+
self.close_text_editor(new_tk_event("ButtonPress-1"))
|
6916
6971
|
self.hide_dropdown_window()
|
6917
6972
|
self.focus_set()
|
6918
6973
|
return closed_dd_coords
|
@@ -6922,6 +6977,11 @@ class MainTable(tk.Canvas):
|
|
6922
6977
|
self.RI.mouseclick_outside_editor_or_dropdown()
|
6923
6978
|
return self.mouseclick_outside_editor_or_dropdown()
|
6924
6979
|
|
6980
|
+
def hide_dropdown_editor_all_canvases(self):
|
6981
|
+
self.hide_text_editor_and_dropdown()
|
6982
|
+
self.RI.hide_text_editor_and_dropdown()
|
6983
|
+
self.CH.hide_text_editor_and_dropdown()
|
6984
|
+
|
6925
6985
|
def hide_dropdown_window(self) -> None:
|
6926
6986
|
if self.dropdown.open:
|
6927
6987
|
self.dropdown.window.unbind("<FocusOut>")
|
@@ -6956,6 +7016,7 @@ class MainTable(tk.Canvas):
|
|
6956
7016
|
event_data = event_dict(
|
6957
7017
|
name="end_edit_table",
|
6958
7018
|
sheet=self.PAR.name,
|
7019
|
+
widget=self,
|
6959
7020
|
cells_table={(datarn, datacn): pre_edit_value},
|
6960
7021
|
key="??",
|
6961
7022
|
value=value,
|
@@ -6993,6 +7054,7 @@ class MainTable(tk.Canvas):
|
|
6993
7054
|
event_data = event_dict(
|
6994
7055
|
name="edit_table",
|
6995
7056
|
sheet=self.PAR.name,
|
7057
|
+
widget=self,
|
6996
7058
|
cells_table={(datarn, datacn): self.get_cell_data(datarn, datacn)},
|
6997
7059
|
boxes=self.get_boxes(),
|
6998
7060
|
selected=self.selected,
|