tksheet 7.0.6__py3-none-any.whl → 7.1.1__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 +3 -3
- tksheet/column_headers.py +252 -270
- tksheet/functions.py +42 -9
- tksheet/main_table.py +779 -815
- tksheet/other_classes.py +129 -4
- tksheet/row_index.py +470 -316
- tksheet/sheet.py +994 -177
- tksheet/sheet_options.py +34 -0
- tksheet/text_editor.py +93 -78
- tksheet/themes.py +104 -0
- tksheet/vars.py +35 -0
- {tksheet-7.0.6.dist-info → tksheet-7.1.1.dist-info}/METADATA +1 -1
- tksheet-7.1.1.dist-info/RECORD +20 -0
- {tksheet-7.0.6.dist-info → tksheet-7.1.1.dist-info}/WHEEL +1 -1
- tksheet-7.0.6.dist-info/RECORD +0 -20
- {tksheet-7.0.6.dist-info → tksheet-7.1.1.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.0.6.dist-info → tksheet-7.1.1.dist-info}/top_level.txt +0 -0
tksheet/column_headers.py
CHANGED
@@ -9,7 +9,6 @@ from functools import (
|
|
9
9
|
partial,
|
10
10
|
)
|
11
11
|
from itertools import (
|
12
|
-
chain,
|
13
12
|
cycle,
|
14
13
|
islice,
|
15
14
|
)
|
@@ -21,7 +20,6 @@ from .colors import (
|
|
21
20
|
from .formatters import is_bool_like, try_to_bool
|
22
21
|
from .functions import (
|
23
22
|
consecutive_chunks,
|
24
|
-
coords_tag_to_int_tuple,
|
25
23
|
ev_stack_dict,
|
26
24
|
event_dict,
|
27
25
|
get_checkbox_points,
|
@@ -32,6 +30,8 @@ from .functions import (
|
|
32
30
|
from .other_classes import (
|
33
31
|
DotDict,
|
34
32
|
DraggedRowColumn,
|
33
|
+
DropdownStorage,
|
34
|
+
TextEditorStorage,
|
35
35
|
)
|
36
36
|
from .text_editor import (
|
37
37
|
TextEditor,
|
@@ -59,14 +59,9 @@ class ColumnHeaders(tk.Canvas):
|
|
59
59
|
self.popup_menu_loc = None
|
60
60
|
self.extra_begin_edit_cell_func = None
|
61
61
|
self.extra_end_edit_cell_func = None
|
62
|
-
self.text_editor = None
|
63
|
-
self.text_editor_id = None
|
64
|
-
self.text_editor_loc = None
|
65
62
|
self.centre_alignment_text_mod_indexes = (slice(1, None), slice(None, -1))
|
66
63
|
self.c_align_cyc = cycle(self.centre_alignment_text_mod_indexes)
|
67
64
|
self.b1_pressed_loc = None
|
68
|
-
self.existing_dropdown_canvas_id = None
|
69
|
-
self.existing_dropdown_window = None
|
70
65
|
self.closed_dropdown = None
|
71
66
|
self.being_drawn_item = None
|
72
67
|
self.extra_motion_func = None
|
@@ -102,6 +97,8 @@ class ColumnHeaders(tk.Canvas):
|
|
102
97
|
self.currently_resizing_width = False
|
103
98
|
self.currently_resizing_height = False
|
104
99
|
self.ch_rc_popup_menu = None
|
100
|
+
self.dropdown = DropdownStorage()
|
101
|
+
self.text_editor = TextEditorStorage()
|
105
102
|
|
106
103
|
self.disp_text = {}
|
107
104
|
self.disp_high = {}
|
@@ -110,6 +107,7 @@ class ColumnHeaders(tk.Canvas):
|
|
110
107
|
self.disp_resize_lines = {}
|
111
108
|
self.disp_dropdown = {}
|
112
109
|
self.disp_checkbox = {}
|
110
|
+
self.disp_boxes = set()
|
113
111
|
self.hidd_text = {}
|
114
112
|
self.hidd_high = {}
|
115
113
|
self.hidd_grid = {}
|
@@ -117,6 +115,7 @@ class ColumnHeaders(tk.Canvas):
|
|
117
115
|
self.hidd_resize_lines = {}
|
118
116
|
self.hidd_dropdown = {}
|
119
117
|
self.hidd_checkbox = {}
|
118
|
+
self.hidd_boxes = set()
|
120
119
|
|
121
120
|
self.default_header = kwargs["default_header"].lower()
|
122
121
|
self.align = kwargs["header_align"]
|
@@ -241,14 +240,17 @@ class ColumnHeaders(tk.Canvas):
|
|
241
240
|
if c < len(self.MT.col_positions) - 1:
|
242
241
|
c_selected = self.MT.col_selected(c)
|
243
242
|
if not c_selected and self.col_selection_enabled:
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
243
|
+
if self.MT.selected and self.MT.selected.type_ == "columns":
|
244
|
+
self.being_drawn_item = self.MT.recreate_selection_box(
|
245
|
+
*self.get_shift_select_box(c, self.MT.selected.column),
|
246
|
+
fill_iid=self.MT.selected.fill_iid,
|
247
|
+
)
|
249
248
|
else:
|
250
|
-
self.being_drawn_item = self.add_selection(
|
251
|
-
|
249
|
+
self.being_drawn_item = self.add_selection(
|
250
|
+
c,
|
251
|
+
run_binding_func=False,
|
252
|
+
set_as_current=True,
|
253
|
+
)
|
252
254
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
253
255
|
if self.ctrl_selection_binding_func is not None:
|
254
256
|
self.ctrl_selection_binding_func(
|
@@ -270,14 +272,13 @@ class ColumnHeaders(tk.Canvas):
|
|
270
272
|
if c < len(self.MT.col_positions) - 1:
|
271
273
|
c_selected = self.MT.col_selected(c)
|
272
274
|
if not c_selected and self.col_selection_enabled:
|
273
|
-
|
274
|
-
|
275
|
+
if self.MT.selected and self.MT.selected.type_ == "columns":
|
276
|
+
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
275
277
|
self.MT.deselect("all", redraw=False)
|
276
|
-
|
277
|
-
self.
|
278
|
+
self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(c, c_to_sel))
|
279
|
+
self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
|
278
280
|
else:
|
279
|
-
self.being_drawn_item = self.
|
280
|
-
box = self.MT.get_box_from_item(self.being_drawn_item)
|
281
|
+
self.being_drawn_item = self.select_col(c, run_binding_func=False)
|
281
282
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
282
283
|
if self.shift_selection_binding_func is not None:
|
283
284
|
self.shift_selection_binding_func(
|
@@ -291,9 +292,9 @@ class ColumnHeaders(tk.Canvas):
|
|
291
292
|
|
292
293
|
def get_shift_select_box(self, c: int, min_c: int) -> tuple[int, int, int, int, str]:
|
293
294
|
if c > min_c:
|
294
|
-
return
|
295
|
+
return 0, min_c, len(self.MT.row_positions) - 1, c + 1
|
295
296
|
elif c < min_c:
|
296
|
-
return
|
297
|
+
return 0, c, len(self.MT.row_positions) - 1, min_c + 1
|
297
298
|
|
298
299
|
def create_resize_line(
|
299
300
|
self,
|
@@ -486,7 +487,7 @@ class ColumnHeaders(tk.Canvas):
|
|
486
487
|
x = self.canvasx(event.x)
|
487
488
|
size = x - self.MT.col_positions[self.rsz_w - 1]
|
488
489
|
if size >= self.MT.min_column_width and size < self.MT.max_column_width:
|
489
|
-
self.
|
490
|
+
self.hide_resize_and_ctrl_lines(ctrl_lines=False)
|
490
491
|
line2x = self.MT.col_positions[self.rsz_w - 1]
|
491
492
|
self.create_resize_line(
|
492
493
|
x,
|
@@ -518,7 +519,7 @@ class ColumnHeaders(tk.Canvas):
|
|
518
519
|
)
|
519
520
|
elif self.height_resizing_enabled and self.rsz_h is not None and self.currently_resizing_height:
|
520
521
|
evy = event.y
|
521
|
-
self.
|
522
|
+
self.hide_resize_and_ctrl_lines(ctrl_lines=False)
|
522
523
|
if evy > self.current_height:
|
523
524
|
y = self.MT.canvasy(evy - self.current_height)
|
524
525
|
if evy > self.MT.max_header_height:
|
@@ -553,20 +554,21 @@ class ColumnHeaders(tk.Canvas):
|
|
553
554
|
):
|
554
555
|
need_redraw = False
|
555
556
|
end_col = self.MT.identify_col(x=event.x)
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
box = self.get_b1_motion_box(currently_selected.column, end_col)
|
557
|
+
if end_col < len(self.MT.col_positions) - 1 and self.MT.selected:
|
558
|
+
if self.MT.selected.type_ == "columns":
|
559
|
+
box = self.get_b1_motion_box(self.MT.selected.column, end_col)
|
560
560
|
if (
|
561
561
|
box is not None
|
562
562
|
and self.being_drawn_item is not None
|
563
|
-
and self.MT.
|
563
|
+
and self.MT.coords_and_type(self.being_drawn_item) != box
|
564
564
|
):
|
565
|
-
self.MT.deselect("all", redraw=False)
|
566
565
|
if box[3] - box[1] != 1:
|
567
|
-
self.being_drawn_item = self.MT.
|
566
|
+
self.being_drawn_item = self.MT.recreate_selection_box(
|
567
|
+
*box[:-1],
|
568
|
+
fill_iid=self.MT.selected.fill_iid,
|
569
|
+
)
|
568
570
|
else:
|
569
|
-
self.being_drawn_item = self.select_col(
|
571
|
+
self.being_drawn_item = self.select_col(self.MT.selected.column, run_binding_func=False)
|
570
572
|
need_redraw = True
|
571
573
|
if self.drag_selection_binding_func is not None:
|
572
574
|
self.drag_selection_binding_func(
|
@@ -581,21 +583,9 @@ class ColumnHeaders(tk.Canvas):
|
|
581
583
|
|
582
584
|
def get_b1_motion_box(self, start_col, end_col):
|
583
585
|
if end_col >= start_col:
|
584
|
-
return (
|
585
|
-
0,
|
586
|
-
start_col,
|
587
|
-
len(self.MT.row_positions) - 1,
|
588
|
-
end_col + 1,
|
589
|
-
"columns",
|
590
|
-
)
|
586
|
+
return 0, start_col, len(self.MT.row_positions) - 1, end_col + 1, "columns"
|
591
587
|
elif end_col < start_col:
|
592
|
-
return (
|
593
|
-
0,
|
594
|
-
end_col,
|
595
|
-
len(self.MT.row_positions) - 1,
|
596
|
-
start_col + 1,
|
597
|
-
"columns",
|
598
|
-
)
|
588
|
+
return 0, end_col, len(self.MT.row_positions) - 1, start_col + 1, "columns"
|
599
589
|
|
600
590
|
def ctrl_b1_motion(self, event: object):
|
601
591
|
x1, y1, x2, y2 = self.MT.get_canvas_visible_area()
|
@@ -624,22 +614,22 @@ class ColumnHeaders(tk.Canvas):
|
|
624
614
|
):
|
625
615
|
need_redraw = False
|
626
616
|
end_col = self.MT.identify_col(x=event.x)
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
box = self.get_b1_motion_box(currently_selected.column, end_col)
|
617
|
+
if end_col < len(self.MT.col_positions) - 1 and self.MT.selected:
|
618
|
+
if self.MT.selected.type_ == "columns":
|
619
|
+
box = self.get_b1_motion_box(self.MT.selected.column, end_col)
|
631
620
|
if (
|
632
621
|
box is not None
|
633
622
|
and self.being_drawn_item is not None
|
634
|
-
and self.MT.
|
623
|
+
and self.MT.coords_and_type(self.being_drawn_item) != box
|
635
624
|
):
|
636
|
-
self.MT.delete_item(self.being_drawn_item)
|
637
625
|
if box[3] - box[1] != 1:
|
638
|
-
self.being_drawn_item = self.MT.
|
639
|
-
|
640
|
-
|
641
|
-
currently_selected.column, run_binding_func=False
|
626
|
+
self.being_drawn_item = self.MT.recreate_selection_box(
|
627
|
+
*box[:-1],
|
628
|
+
self.MT.selected.fill_iid,
|
642
629
|
)
|
630
|
+
else:
|
631
|
+
self.MT.hide_selection_box(self.MT.selected.fill_iid)
|
632
|
+
self.being_drawn_item = self.add_selection(box[1], run_binding_func=False)
|
643
633
|
need_redraw = True
|
644
634
|
if self.drag_selection_binding_func is not None:
|
645
635
|
self.drag_selection_binding_func(
|
@@ -694,7 +684,7 @@ class ColumnHeaders(tk.Canvas):
|
|
694
684
|
y2,
|
695
685
|
cols,
|
696
686
|
):
|
697
|
-
self.
|
687
|
+
self.hide_resize_and_ctrl_lines()
|
698
688
|
self.create_resize_line(
|
699
689
|
xpos,
|
700
690
|
0,
|
@@ -714,7 +704,7 @@ class ColumnHeaders(tk.Canvas):
|
|
714
704
|
delete_on_timer=False,
|
715
705
|
)
|
716
706
|
|
717
|
-
def
|
707
|
+
def hide_resize_and_ctrl_lines(self, ctrl_lines=True):
|
718
708
|
self.delete_resize_lines()
|
719
709
|
self.MT.delete_resize_lines()
|
720
710
|
if ctrl_lines:
|
@@ -771,11 +761,15 @@ class ColumnHeaders(tk.Canvas):
|
|
771
761
|
|
772
762
|
def b1_release(self, event: object):
|
773
763
|
if self.being_drawn_item is not None:
|
774
|
-
|
775
|
-
|
776
|
-
self.MT.
|
764
|
+
to_sel = self.MT.coords_and_type(self.being_drawn_item)
|
765
|
+
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
766
|
+
self.MT.hide_selection_box(self.being_drawn_item)
|
777
767
|
self.being_drawn_item = None
|
778
|
-
self.MT.
|
768
|
+
self.MT.set_currently_selected(
|
769
|
+
r_to_sel,
|
770
|
+
c_to_sel,
|
771
|
+
item=self.MT.create_selection_box(*to_sel, set_current=False),
|
772
|
+
)
|
779
773
|
if self.drag_selection_binding_func is not None:
|
780
774
|
self.drag_selection_binding_func(
|
781
775
|
self.MT.get_select_event(being_drawn_item=self.being_drawn_item),
|
@@ -784,7 +778,7 @@ class ColumnHeaders(tk.Canvas):
|
|
784
778
|
if self.width_resizing_enabled and self.rsz_w is not None and self.currently_resizing_width:
|
785
779
|
self.currently_resizing_width = False
|
786
780
|
new_col_pos = int(self.coords("rwl")[0])
|
787
|
-
self.
|
781
|
+
self.hide_resize_and_ctrl_lines(ctrl_lines=False)
|
788
782
|
old_width = self.MT.col_positions[self.rsz_w] - self.MT.col_positions[self.rsz_w - 1]
|
789
783
|
size = new_col_pos - self.MT.col_positions[self.rsz_w - 1]
|
790
784
|
if size < self.MT.min_column_width:
|
@@ -810,7 +804,7 @@ class ColumnHeaders(tk.Canvas):
|
|
810
804
|
)
|
811
805
|
elif self.height_resizing_enabled and self.rsz_h is not None and self.currently_resizing_height:
|
812
806
|
self.currently_resizing_height = False
|
813
|
-
self.
|
807
|
+
self.hide_resize_and_ctrl_lines(ctrl_lines=False)
|
814
808
|
self.set_height(self.new_col_height, set_TL=True)
|
815
809
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
816
810
|
elif (
|
@@ -822,7 +816,7 @@ class ColumnHeaders(tk.Canvas):
|
|
822
816
|
and self.dragged_col is not None
|
823
817
|
and self.find_withtag("move_columns")
|
824
818
|
):
|
825
|
-
self.
|
819
|
+
self.hide_resize_and_ctrl_lines()
|
826
820
|
c = self.MT.identify_col(x=event.x)
|
827
821
|
totalcols = len(self.dragged_col.to_move)
|
828
822
|
if (
|
@@ -840,7 +834,7 @@ class ColumnHeaders(tk.Canvas):
|
|
840
834
|
name="move_columns",
|
841
835
|
sheet=self.PAR.name,
|
842
836
|
boxes=self.MT.get_boxes(),
|
843
|
-
selected=self.MT.
|
837
|
+
selected=self.MT.selected,
|
844
838
|
value=c,
|
845
839
|
)
|
846
840
|
if try_binding(self.ch_extra_begin_drag_drop_func, event_data, "begin_move_columns"):
|
@@ -932,6 +926,32 @@ class ColumnHeaders(tk.Canvas):
|
|
932
926
|
self.MT.run_selection_binding("columns")
|
933
927
|
return fill_iid
|
934
928
|
|
929
|
+
def display_box(
|
930
|
+
self,
|
931
|
+
x1: int,
|
932
|
+
y1: int,
|
933
|
+
x2: int,
|
934
|
+
y2: int,
|
935
|
+
fill: str,
|
936
|
+
outline: str,
|
937
|
+
state: str,
|
938
|
+
tags: str | tuple[str],
|
939
|
+
) -> int:
|
940
|
+
if self.hidd_boxes:
|
941
|
+
iid = self.hidd_boxes.pop()
|
942
|
+
self.coords(iid, x1, y1, x2, y2)
|
943
|
+
self.itemconfig(iid, fill=fill, outline=outline, state=state, tags=tags)
|
944
|
+
else:
|
945
|
+
iid = self.create_rectangle(x1, y1, x2, y2, fill=fill, outline=outline, state=state, tags=tags)
|
946
|
+
self.disp_boxes.add(iid)
|
947
|
+
return iid
|
948
|
+
|
949
|
+
def hide_box(self, item: int) -> None:
|
950
|
+
if isinstance(item, int):
|
951
|
+
self.disp_boxes.discard(item)
|
952
|
+
self.hidd_boxes.add(item)
|
953
|
+
self.itemconfig(item, state="hidden")
|
954
|
+
|
935
955
|
def get_cell_dimensions(self, datacn):
|
936
956
|
txt = self.get_valid_cell_data_as_str(datacn, fix=False)
|
937
957
|
if txt:
|
@@ -1213,27 +1233,30 @@ class ColumnHeaders(tk.Canvas):
|
|
1213
1233
|
if draw_outline and self.PAR.ops.show_dropdown_borders:
|
1214
1234
|
self.redraw_highlight(x1 + 1, y1 + 1, x2, y2, fill="", outline=self.PAR.ops.header_fg, tag=tag)
|
1215
1235
|
if draw_arrow:
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1236
|
+
mod = (self.MT.header_txt_height - 1) if self.MT.header_txt_height % 2 else self.MT.header_txt_height
|
1237
|
+
half_mod = mod / 2
|
1238
|
+
qtr_mod = mod / 4
|
1239
|
+
mid_y = (
|
1240
|
+
(self.MT.header_first_ln_ins - 1) if self.MT.header_first_ln_ins % 2 else self.MT.header_first_ln_ins
|
1241
|
+
)
|
1242
|
+
if dd_is_open:
|
1243
|
+
points = (
|
1244
|
+
x2 - 3 - mod,
|
1245
|
+
y1 + mid_y + qtr_mod,
|
1246
|
+
x2 - 3 - half_mod,
|
1247
|
+
y1 + mid_y - qtr_mod,
|
1248
|
+
x2 - 3,
|
1249
|
+
y1 + mid_y + qtr_mod,
|
1250
|
+
)
|
1225
1251
|
else:
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
elif tx2 - tx1 < tx3 - tx2:
|
1235
|
-
tx1 -= (tx3 - tx2) - (tx2 - tx1)
|
1236
|
-
points = (tx1, ty1, tx2, ty2, tx3, ty3)
|
1252
|
+
points = (
|
1253
|
+
x2 - 3 - mod,
|
1254
|
+
y1 + mid_y - qtr_mod,
|
1255
|
+
x2 - 3 - half_mod,
|
1256
|
+
y1 + mid_y + qtr_mod,
|
1257
|
+
x2 - 3,
|
1258
|
+
y1 + mid_y - qtr_mod,
|
1259
|
+
)
|
1237
1260
|
if self.hidd_dropdown:
|
1238
1261
|
t, sh = self.hidd_dropdown.popitem()
|
1239
1262
|
self.coords(t, points)
|
@@ -1364,7 +1387,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1364
1387
|
)
|
1365
1388
|
font = self.PAR.ops.header_font
|
1366
1389
|
selections = self.get_redraw_selections(start_col, end_col)
|
1367
|
-
dd_coords = self.
|
1390
|
+
dd_coords = self.dropdown.get_coords()
|
1368
1391
|
for c in range(start_col, end_col - 1):
|
1369
1392
|
draw_y = self.MT.header_first_ln_ins
|
1370
1393
|
cleftgridln = self.MT.col_positions[c]
|
@@ -1554,10 +1577,8 @@ class ColumnHeaders(tk.Canvas):
|
|
1554
1577
|
|
1555
1578
|
def get_redraw_selections(self, startc, endc):
|
1556
1579
|
d = defaultdict(list)
|
1557
|
-
for item in
|
1558
|
-
|
1559
|
-
if tags:
|
1560
|
-
d[tags[0]].append(coords_tag_to_int_tuple(tags[1]))
|
1580
|
+
for item, box in self.MT.get_selection_items(rows=False):
|
1581
|
+
d[box.type_].append(box.coords)
|
1561
1582
|
d2 = {}
|
1562
1583
|
if "cells" in d:
|
1563
1584
|
d2["cells"] = {c for c in range(startc, endc) for r1, c1, r2, c2 in d["cells"] if c1 <= c and c2 > c}
|
@@ -1566,23 +1587,22 @@ class ColumnHeaders(tk.Canvas):
|
|
1566
1587
|
return d2
|
1567
1588
|
|
1568
1589
|
def open_cell(self, event: object = None, ignore_existing_editor=False):
|
1569
|
-
if not self.MT.anything_selected() or (not ignore_existing_editor and self.
|
1590
|
+
if not self.MT.anything_selected() or (not ignore_existing_editor and self.text_editor.open):
|
1570
1591
|
return
|
1571
|
-
|
1572
|
-
if not currently_selected:
|
1592
|
+
if not self.MT.selected:
|
1573
1593
|
return
|
1574
|
-
|
1575
|
-
datacn =
|
1594
|
+
c = self.MT.selected.column
|
1595
|
+
datacn = self.MT.datacn(c)
|
1576
1596
|
if self.get_cell_kwargs(datacn, key="readonly"):
|
1577
1597
|
return
|
1578
1598
|
elif self.get_cell_kwargs(datacn, key="dropdown") or self.get_cell_kwargs(datacn, key="checkbox"):
|
1579
1599
|
if self.MT.event_opens_dropdown_or_checkbox(event):
|
1580
1600
|
if self.get_cell_kwargs(datacn, key="dropdown"):
|
1581
|
-
self.open_dropdown_window(
|
1601
|
+
self.open_dropdown_window(c, event=event)
|
1582
1602
|
elif self.get_cell_kwargs(datacn, key="checkbox"):
|
1583
|
-
self.click_checkbox(
|
1603
|
+
self.click_checkbox(c, datacn)
|
1584
1604
|
elif self.edit_cell_enabled:
|
1585
|
-
self.open_text_editor(event=event, c=
|
1605
|
+
self.open_text_editor(event=event, c=c, dropdown=False)
|
1586
1606
|
|
1587
1607
|
# displayed indexes
|
1588
1608
|
def get_cell_align(self, c: int) -> str:
|
@@ -1626,7 +1646,6 @@ class ColumnHeaders(tk.Canvas):
|
|
1626
1646
|
text = event.char
|
1627
1647
|
else:
|
1628
1648
|
return False
|
1629
|
-
self.text_editor_loc = c
|
1630
1649
|
if self.extra_begin_edit_cell_func is not None:
|
1631
1650
|
try:
|
1632
1651
|
text = self.extra_begin_edit_cell_func(
|
@@ -1637,7 +1656,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1637
1656
|
value=text,
|
1638
1657
|
loc=c,
|
1639
1658
|
boxes=self.MT.get_boxes(),
|
1640
|
-
selected=self.MT.
|
1659
|
+
selected=self.MT.selected,
|
1641
1660
|
)
|
1642
1661
|
)
|
1643
1662
|
except Exception:
|
@@ -1651,14 +1670,13 @@ class ColumnHeaders(tk.Canvas):
|
|
1651
1670
|
if self.height_resizing_enabled:
|
1652
1671
|
self.set_height_of_header_to_text(text)
|
1653
1672
|
self.set_col_width_run_binding(c)
|
1654
|
-
if
|
1673
|
+
if self.text_editor.open and c == self.text_editor.column:
|
1655
1674
|
self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
1656
1675
|
return
|
1657
|
-
if self.text_editor
|
1658
|
-
self.
|
1676
|
+
if self.text_editor.open:
|
1677
|
+
self.hide_text_editor()
|
1659
1678
|
if not self.MT.see(r=0, c=c, keep_yscroll=True, check_cell_visibility=True):
|
1660
1679
|
self.MT.refresh()
|
1661
|
-
self.text_editor_loc = c
|
1662
1680
|
x = self.MT.col_positions[c] + 1
|
1663
1681
|
y = 0
|
1664
1682
|
w = self.MT.col_positions[c + 1] - x
|
@@ -1667,72 +1685,76 @@ class ColumnHeaders(tk.Canvas):
|
|
1667
1685
|
if text is None:
|
1668
1686
|
text = self.get_cell_data(datacn, none_to_empty_str=True, redirect_int=True)
|
1669
1687
|
bg, fg = self.PAR.ops.header_bg, self.PAR.ops.header_fg
|
1670
|
-
|
1671
|
-
|
1672
|
-
menu_kwargs=DotDict(
|
1688
|
+
kwargs = {
|
1689
|
+
"menu_kwargs": DotDict(
|
1673
1690
|
{
|
1674
|
-
"font": self.PAR.ops.
|
1691
|
+
"font": self.PAR.ops.table_font,
|
1675
1692
|
"foreground": self.PAR.ops.popup_menu_fg,
|
1676
1693
|
"background": self.PAR.ops.popup_menu_bg,
|
1677
1694
|
"activebackground": self.PAR.ops.popup_menu_highlight_bg,
|
1678
1695
|
"activeforeground": self.PAR.ops.popup_menu_highlight_fg,
|
1679
1696
|
}
|
1680
1697
|
),
|
1681
|
-
sheet_ops
|
1682
|
-
border_color
|
1683
|
-
text
|
1684
|
-
state
|
1685
|
-
width
|
1686
|
-
height
|
1687
|
-
show_border
|
1688
|
-
bg
|
1689
|
-
fg
|
1690
|
-
align
|
1691
|
-
c
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
1695
|
-
|
1698
|
+
"sheet_ops": self.PAR.ops,
|
1699
|
+
"border_color": self.PAR.ops.table_selected_cells_border_fg,
|
1700
|
+
"text": text,
|
1701
|
+
"state": state,
|
1702
|
+
"width": w,
|
1703
|
+
"height": h,
|
1704
|
+
"show_border": self.PAR.ops.show_selected_cells_border,
|
1705
|
+
"bg": bg,
|
1706
|
+
"fg": fg,
|
1707
|
+
"align": self.get_cell_align(c),
|
1708
|
+
"c": c,
|
1709
|
+
}
|
1710
|
+
if not self.text_editor.window:
|
1711
|
+
self.text_editor.window = TextEditor(self, newline_binding=self.text_editor_newline_binding)
|
1712
|
+
self.text_editor.canvas_id = self.create_window((x, y), window=self.text_editor.window, anchor="nw")
|
1713
|
+
self.text_editor.window.reset(**kwargs)
|
1714
|
+
if not self.text_editor.open:
|
1715
|
+
self.itemconfig(self.text_editor.canvas_id, state="normal")
|
1716
|
+
self.text_editor.open = True
|
1717
|
+
self.coords(self.text_editor.canvas_id, x, y)
|
1696
1718
|
if not dropdown:
|
1697
|
-
self.text_editor.
|
1698
|
-
self.text_editor.scroll_to_bottom()
|
1699
|
-
self.text_editor.
|
1719
|
+
self.text_editor.tktext.focus_set()
|
1720
|
+
self.text_editor.window.scroll_to_bottom()
|
1721
|
+
self.text_editor.tktext.bind("<Alt-Return>", lambda _x: self.text_editor_newline_binding(c=c))
|
1700
1722
|
if USER_OS == "darwin":
|
1701
|
-
self.text_editor.
|
1723
|
+
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(c=c))
|
1702
1724
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1703
|
-
self.text_editor.
|
1704
|
-
self.text_editor.
|
1705
|
-
self.text_editor.
|
1725
|
+
self.text_editor.tktext.bind(key, func)
|
1726
|
+
self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((c, "Tab")))
|
1727
|
+
self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((c, "Return")))
|
1706
1728
|
if not dropdown:
|
1707
|
-
self.text_editor.
|
1708
|
-
self.text_editor.
|
1729
|
+
self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((c, "FocusOut")))
|
1730
|
+
self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((c, "Escape")))
|
1709
1731
|
return True
|
1710
1732
|
|
1711
1733
|
# displayed indexes #just here to receive text editor arg
|
1712
1734
|
def text_editor_has_wrapped(self, r=0, c=0, check_lines=None):
|
1713
1735
|
if self.width_resizing_enabled:
|
1714
|
-
|
1715
|
-
curr_width = self.text_editor.winfo_width()
|
1736
|
+
curr_width = self.text_editor.window.winfo_width()
|
1716
1737
|
new_width = curr_width + (self.MT.header_txt_height * 2)
|
1717
1738
|
if new_width != curr_width:
|
1718
|
-
self.text_editor.config(width=new_width)
|
1739
|
+
self.text_editor.window.config(width=new_width)
|
1719
1740
|
self.set_col_width_run_binding(c, width=new_width, only_set_if_too_small=False)
|
1720
|
-
|
1721
|
-
|
1722
|
-
self.
|
1723
|
-
|
1724
|
-
kwargs["window"]._reselect()
|
1741
|
+
if self.dropdown.open and self.dropdown.get_coords() == c:
|
1742
|
+
self.itemconfig(self.dropdown.canvas_id, width=new_width)
|
1743
|
+
self.dropdown.window.update_idletasks()
|
1744
|
+
self.dropdown.window._reselect()
|
1725
1745
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False, redraw_table=True)
|
1726
|
-
self.coords(self.
|
1746
|
+
self.coords(self.text_editor.canvas_id, self.MT.col_positions[c] + 1, 0)
|
1727
1747
|
|
1728
1748
|
# displayed indexes
|
1729
1749
|
def text_editor_newline_binding(self, r=0, c=0, event: object = None, check_lines=True):
|
1730
1750
|
if self.height_resizing_enabled:
|
1731
|
-
|
1732
|
-
curr_height = self.text_editor.winfo_height()
|
1751
|
+
curr_height = self.text_editor.window.winfo_height()
|
1733
1752
|
if (
|
1734
1753
|
not check_lines
|
1735
|
-
or self.MT.get_lines_cell_height(
|
1754
|
+
or self.MT.get_lines_cell_height(
|
1755
|
+
self.text_editor.window.get_num_lines() + 1,
|
1756
|
+
font=self.PAR.ops.header_font,
|
1757
|
+
)
|
1736
1758
|
> curr_height
|
1737
1759
|
):
|
1738
1760
|
new_height = curr_height + self.MT.header_xtra_lines_increment
|
@@ -1740,69 +1762,54 @@ class ColumnHeaders(tk.Canvas):
|
|
1740
1762
|
if new_height > space_bot:
|
1741
1763
|
new_height = space_bot
|
1742
1764
|
if new_height != curr_height:
|
1743
|
-
self.text_editor.config(height=new_height)
|
1765
|
+
self.text_editor.window.config(height=new_height)
|
1744
1766
|
self.set_height(new_height, set_TL=True)
|
1745
|
-
|
1746
|
-
if kwargs:
|
1767
|
+
if self.dropdown.open and self.dropdown.get_coords() == c:
|
1747
1768
|
win_h, anchor = self.get_dropdown_height_anchor(c, new_height)
|
1748
1769
|
self.coords(
|
1749
|
-
|
1770
|
+
self.dropdown.canvas_id,
|
1750
1771
|
self.MT.col_positions[c],
|
1751
1772
|
new_height - 1,
|
1752
1773
|
)
|
1753
|
-
self.itemconfig(
|
1774
|
+
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1754
1775
|
|
1755
1776
|
def refresh_open_window_positions(self):
|
1756
|
-
if self.text_editor
|
1757
|
-
c = self.
|
1758
|
-
self.text_editor.config(height=self.MT.col_positions[c + 1] - self.MT.col_positions[c])
|
1777
|
+
if self.text_editor.open:
|
1778
|
+
c = self.text_editor.column
|
1779
|
+
self.text_editor.window.config(height=self.MT.col_positions[c + 1] - self.MT.col_positions[c])
|
1759
1780
|
self.coords(
|
1760
|
-
self.
|
1781
|
+
self.text_editor.canvas_id,
|
1761
1782
|
0,
|
1762
1783
|
self.MT.col_positions[c],
|
1763
1784
|
)
|
1764
|
-
if self.
|
1765
|
-
c = self.
|
1766
|
-
if self.text_editor
|
1767
|
-
text_editor_h = self.
|
1768
|
-
anchor = self.itemcget(self.existing_dropdown_canvas_id, "anchor")
|
1769
|
-
win_h = 0
|
1770
|
-
else:
|
1771
|
-
text_editor_h = self.text_editor.winfo_height()
|
1785
|
+
if self.dropdown.open:
|
1786
|
+
c = self.dropdown.get_coords()
|
1787
|
+
if self.text_editor.open:
|
1788
|
+
text_editor_h = self.text_editor.window.winfo_height()
|
1772
1789
|
win_h, anchor = self.get_dropdown_height_anchor(c, text_editor_h)
|
1790
|
+
else:
|
1791
|
+
text_editor_h = self.MT.col_positions[c + 1] - self.MT.col_positions[c]
|
1792
|
+
anchor = self.itemcget(self.dropdown.canvas_id, "anchor")
|
1793
|
+
# win_h = 0
|
1773
1794
|
if anchor == "nw":
|
1774
1795
|
self.coords(
|
1775
|
-
self.
|
1796
|
+
self.dropdown.canvas_id,
|
1776
1797
|
0,
|
1777
1798
|
self.MT.col_positions[c] + text_editor_h - 1,
|
1778
1799
|
)
|
1779
|
-
# self.itemconfig(self.
|
1800
|
+
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1780
1801
|
elif anchor == "sw":
|
1781
1802
|
self.coords(
|
1782
|
-
self.
|
1803
|
+
self.dropdown.canvas_id,
|
1783
1804
|
0,
|
1784
1805
|
self.MT.col_positions[c],
|
1785
1806
|
)
|
1786
|
-
# self.itemconfig(self.
|
1807
|
+
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1787
1808
|
|
1788
|
-
def
|
1789
|
-
self.text_editor.
|
1790
|
-
|
1791
|
-
|
1792
|
-
self.text_editor.textedit.focus_set()
|
1793
|
-
|
1794
|
-
def destroy_text_editor(self, reason: None | str = None) -> None:
|
1795
|
-
self.text_editor_loc = None
|
1796
|
-
try:
|
1797
|
-
self.delete(self.text_editor_id)
|
1798
|
-
except Exception:
|
1799
|
-
pass
|
1800
|
-
try:
|
1801
|
-
self.text_editor.destroy()
|
1802
|
-
except Exception:
|
1803
|
-
pass
|
1804
|
-
self.text_editor = None
|
1805
|
-
self.text_editor_id = None
|
1809
|
+
def hide_text_editor(self, reason: None | str = None) -> None:
|
1810
|
+
if self.text_editor.open:
|
1811
|
+
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
1812
|
+
self.text_editor.open = False
|
1806
1813
|
if reason == "Escape":
|
1807
1814
|
self.focus_set()
|
1808
1815
|
|
@@ -1814,19 +1821,17 @@ class ColumnHeaders(tk.Canvas):
|
|
1814
1821
|
# checking if text editor should be closed or not
|
1815
1822
|
focused = self.focus_get()
|
1816
1823
|
try:
|
1817
|
-
if focused == self.text_editor.
|
1824
|
+
if focused == self.text_editor.tktext.rc_popup_menu:
|
1818
1825
|
return "break"
|
1819
1826
|
except Exception:
|
1820
1827
|
pass
|
1821
1828
|
if focused is None and editor_info:
|
1822
1829
|
return "break"
|
1823
1830
|
if editor_info[1] == "Escape":
|
1824
|
-
self.
|
1825
|
-
self.close_dropdown_window()
|
1831
|
+
self.hide_text_editor_and_dropdown()
|
1826
1832
|
return
|
1827
1833
|
# setting cell data with text editor value
|
1828
1834
|
self.text_editor_value = self.text_editor.get()
|
1829
|
-
self.destroy_text_editor()
|
1830
1835
|
c = editor_info[0]
|
1831
1836
|
datacn = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
1832
1837
|
event_data = event_dict(
|
@@ -1837,7 +1842,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1837
1842
|
value=self.text_editor_value,
|
1838
1843
|
loc=c,
|
1839
1844
|
boxes=self.MT.get_boxes(),
|
1840
|
-
selected=self.MT.
|
1845
|
+
selected=self.MT.selected,
|
1841
1846
|
)
|
1842
1847
|
edited = False
|
1843
1848
|
set_data = partial(
|
@@ -1854,9 +1859,8 @@ class ColumnHeaders(tk.Canvas):
|
|
1854
1859
|
edited = set_data(value=self.text_editor_value)
|
1855
1860
|
if edited:
|
1856
1861
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
1857
|
-
self.close_dropdown_window(c)
|
1858
1862
|
self.MT.recreate_all_selection_boxes()
|
1859
|
-
self.
|
1863
|
+
self.hide_text_editor_and_dropdown()
|
1860
1864
|
if editor_info[1] != "FocusOut":
|
1861
1865
|
self.focus_set()
|
1862
1866
|
return "break"
|
@@ -1897,8 +1901,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1897
1901
|
dd_window.search_and_see(event)
|
1898
1902
|
|
1899
1903
|
def open_dropdown_window(self, c, datacn=None, event: object = None):
|
1900
|
-
self.
|
1901
|
-
self.destroy_opened_dropdown_window()
|
1904
|
+
self.hide_text_editor("Escape")
|
1902
1905
|
if datacn is None:
|
1903
1906
|
datacn = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
1904
1907
|
kwargs = self.get_cell_kwargs(datacn, key="dropdown")
|
@@ -1906,61 +1909,68 @@ class ColumnHeaders(tk.Canvas):
|
|
1906
1909
|
if not self.open_text_editor(event=event, c=c, dropdown=True):
|
1907
1910
|
return
|
1908
1911
|
win_h, anchor = self.get_dropdown_height_anchor(c)
|
1909
|
-
window = self.PAR.dropdown_class(
|
1910
|
-
self.MT.winfo_toplevel(),
|
1911
|
-
0,
|
1912
|
-
c,
|
1913
|
-
width=self.MT.col_positions[c + 1] - self.MT.col_positions[c] + 1,
|
1914
|
-
height=win_h,
|
1915
|
-
font=self.PAR.ops.header_font,
|
1916
|
-
colors={
|
1917
|
-
"bg": self.PAR.ops.popup_menu_bg,
|
1918
|
-
"fg": self.PAR.ops.popup_menu_fg,
|
1919
|
-
"highlight_bg": self.PAR.ops.popup_menu_highlight_bg,
|
1920
|
-
"highlight_fg": self.PAR.ops.popup_menu_highlight_fg,
|
1921
|
-
},
|
1922
|
-
outline_color=self.PAR.ops.popup_menu_fg,
|
1923
|
-
values=kwargs["values"],
|
1924
|
-
close_dropdown_window=self.close_dropdown_window,
|
1925
|
-
search_function=kwargs["search_function"],
|
1926
|
-
arrowkey_RIGHT=self.MT.arrowkey_RIGHT,
|
1927
|
-
arrowkey_LEFT=self.MT.arrowkey_LEFT,
|
1928
|
-
align="w",
|
1929
|
-
single_index="c",
|
1930
|
-
)
|
1931
1912
|
ypos = self.current_height - 1
|
1932
|
-
|
1913
|
+
if self.dropdown.window is not None:
|
1914
|
+
self.dropdown.window.search_function = kwargs["search_function"]
|
1915
|
+
self.dropdown.window.c = c
|
1916
|
+
self.dropdown.window.row = -1
|
1917
|
+
self.dropdown.window.set_options()
|
1918
|
+
self.dropdown.window.values(kwargs["values"])
|
1919
|
+
if not self.dropdown.open:
|
1920
|
+
self.itemconfig(self.dropdown.canvas_id, state="normal")
|
1921
|
+
self.coords(self.dropdown.canvas_id, self.MT.col_positions[c], ypos)
|
1922
|
+
else:
|
1923
|
+
self.dropdown.window = self.PAR.dropdown_class(
|
1924
|
+
self.MT.winfo_toplevel(),
|
1925
|
+
0,
|
1926
|
+
c,
|
1927
|
+
width=self.MT.col_positions[c + 1] - self.MT.col_positions[c] + 1,
|
1928
|
+
height=win_h,
|
1929
|
+
font=self.PAR.ops.header_font,
|
1930
|
+
ops=self.PAR.ops,
|
1931
|
+
outline_color=self.PAR.ops.popup_menu_fg,
|
1932
|
+
values=kwargs["values"],
|
1933
|
+
close_dropdown_window=self.close_dropdown_window,
|
1934
|
+
search_function=kwargs["search_function"],
|
1935
|
+
arrowkey_RIGHT=self.MT.arrowkey_RIGHT,
|
1936
|
+
arrowkey_LEFT=self.MT.arrowkey_LEFT,
|
1937
|
+
align="w",
|
1938
|
+
single_index="c",
|
1939
|
+
)
|
1940
|
+
self.dropdown.canvas_id = self.create_window(
|
1941
|
+
(self.MT.col_positions[c], ypos),
|
1942
|
+
window=self.dropdown.window,
|
1943
|
+
anchor=anchor,
|
1944
|
+
)
|
1933
1945
|
if kwargs["state"] == "normal":
|
1934
|
-
self.text_editor.
|
1946
|
+
self.text_editor.tktext.bind(
|
1935
1947
|
"<<TextModified>>",
|
1936
1948
|
lambda _x: self.dropdown_text_editor_modified(
|
1937
|
-
window,
|
1949
|
+
self.dropdown.window,
|
1938
1950
|
event_dict(
|
1939
1951
|
name="header_dropdown_modified",
|
1940
1952
|
sheet=self.PAR.name,
|
1941
1953
|
value=self.text_editor.get(),
|
1942
1954
|
loc=c,
|
1943
1955
|
boxes=self.MT.get_boxes(),
|
1944
|
-
selected=self.MT.
|
1956
|
+
selected=self.MT.selected,
|
1945
1957
|
),
|
1946
1958
|
kwargs["modified_function"],
|
1947
1959
|
),
|
1948
1960
|
)
|
1949
1961
|
self.update_idletasks()
|
1950
1962
|
try:
|
1951
|
-
self.after(1, lambda: self.text_editor.
|
1952
|
-
self.after(2, self.text_editor.scroll_to_bottom())
|
1963
|
+
self.after(1, lambda: self.text_editor.tktext.focus())
|
1964
|
+
self.after(2, self.text_editor.window.scroll_to_bottom())
|
1953
1965
|
except Exception:
|
1954
1966
|
return
|
1955
1967
|
redraw = False
|
1956
1968
|
else:
|
1957
|
-
window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
1969
|
+
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
1958
1970
|
self.update_idletasks()
|
1959
|
-
window.focus_set()
|
1971
|
+
self.dropdown.window.focus_set()
|
1960
1972
|
redraw = True
|
1961
|
-
self.
|
1962
|
-
kwargs["window"] = window
|
1963
|
-
self.existing_dropdown_canvas_id = kwargs["canvas_id"]
|
1973
|
+
self.dropdown.open = True
|
1964
1974
|
if redraw:
|
1965
1975
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False, redraw_table=False)
|
1966
1976
|
|
@@ -1978,7 +1988,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1978
1988
|
value=selection,
|
1979
1989
|
loc=c,
|
1980
1990
|
boxes=self.MT.get_boxes(),
|
1981
|
-
selected=self.MT.
|
1991
|
+
selected=self.MT.selected,
|
1982
1992
|
)
|
1983
1993
|
if kwargs["select_function"] is not None:
|
1984
1994
|
kwargs["select_function"](event_data)
|
@@ -1992,23 +2002,20 @@ class ColumnHeaders(tk.Canvas):
|
|
1992
2002
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
1993
2003
|
self.focus_set()
|
1994
2004
|
self.MT.recreate_all_selection_boxes()
|
1995
|
-
self.
|
1996
|
-
|
2005
|
+
self.hide_text_editor_and_dropdown(redraw=redraw)
|
2006
|
+
|
2007
|
+
def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
|
2008
|
+
self.hide_text_editor("Escape")
|
2009
|
+
self.hide_dropdown_window()
|
1997
2010
|
if redraw:
|
1998
2011
|
self.MT.refresh()
|
1999
2012
|
|
2000
|
-
def get_existing_dropdown_coords(self):
|
2001
|
-
if self.existing_dropdown_window is not None:
|
2002
|
-
return int(self.existing_dropdown_window.c)
|
2003
|
-
return None
|
2004
|
-
|
2005
2013
|
def mouseclick_outside_editor_or_dropdown(self, inside: bool = False):
|
2006
|
-
closed_dd_coords = self.
|
2007
|
-
if self.
|
2008
|
-
self.close_text_editor((self.
|
2014
|
+
closed_dd_coords = self.dropdown.get_coords()
|
2015
|
+
if self.text_editor.open:
|
2016
|
+
self.close_text_editor((self.text_editor.column, "ButtonPress-1"))
|
2009
2017
|
if closed_dd_coords is not None:
|
2010
|
-
|
2011
|
-
self.destroy_opened_dropdown_window(closed_dd_coords)
|
2018
|
+
self.hide_dropdown_window()
|
2012
2019
|
if inside:
|
2013
2020
|
self.MT.main_table_redraw_grid_and_text(
|
2014
2021
|
redraw_header=True,
|
@@ -2022,35 +2029,10 @@ class ColumnHeaders(tk.Canvas):
|
|
2022
2029
|
self.MT.mouseclick_outside_editor_or_dropdown()
|
2023
2030
|
return self.mouseclick_outside_editor_or_dropdown(inside)
|
2024
2031
|
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2029
|
-
if c is not None or datacn is not None:
|
2030
|
-
if datacn is None:
|
2031
|
-
datacn_ = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
2032
|
-
else:
|
2033
|
-
datacn_ = datacn
|
2034
|
-
else:
|
2035
|
-
datacn_ = None
|
2036
|
-
try:
|
2037
|
-
self.delete(self.existing_dropdown_canvas_id)
|
2038
|
-
except Exception:
|
2039
|
-
pass
|
2040
|
-
self.existing_dropdown_canvas_id = None
|
2041
|
-
try:
|
2042
|
-
self.existing_dropdown_window.destroy()
|
2043
|
-
except Exception:
|
2044
|
-
pass
|
2045
|
-
kwargs = self.get_cell_kwargs(datacn_, key="dropdown")
|
2046
|
-
if kwargs:
|
2047
|
-
kwargs["canvas_id"] = "no dropdown open"
|
2048
|
-
kwargs["window"] = "no dropdown open"
|
2049
|
-
try:
|
2050
|
-
self.delete(kwargs["canvas_id"])
|
2051
|
-
except Exception:
|
2052
|
-
pass
|
2053
|
-
self.existing_dropdown_window = None
|
2032
|
+
def hide_dropdown_window(self) -> None:
|
2033
|
+
if self.dropdown.open:
|
2034
|
+
self.itemconfig(self.dropdown.canvas_id, state="hidden")
|
2035
|
+
self.dropdown.open = False
|
2054
2036
|
|
2055
2037
|
# internal event use
|
2056
2038
|
def set_cell_data_undo(
|
@@ -2070,7 +2052,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2070
2052
|
sheet=self.PAR.name,
|
2071
2053
|
cells_header={datacn: self.get_cell_data(datacn)},
|
2072
2054
|
boxes=self.MT.get_boxes(),
|
2073
|
-
selected=self.MT.
|
2055
|
+
selected=self.MT.selected,
|
2074
2056
|
)
|
2075
2057
|
edited = False
|
2076
2058
|
if isinstance(self.MT._headers, int):
|
@@ -2230,7 +2212,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2230
2212
|
value=value,
|
2231
2213
|
loc=c,
|
2232
2214
|
boxes=self.MT.get_boxes(),
|
2233
|
-
selected=self.MT.
|
2215
|
+
selected=self.MT.selected,
|
2234
2216
|
)
|
2235
2217
|
if kwargs["check_function"] is not None:
|
2236
2218
|
kwargs["check_function"](event_data)
|