tksheet 7.0.5__py3-none-any.whl → 7.1.0__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 +96 -96
- tksheet/column_headers.py +254 -271
- tksheet/functions.py +46 -30
- tksheet/main_table.py +790 -862
- tksheet/other_classes.py +129 -4
- tksheet/row_index.py +473 -319
- tksheet/sheet.py +1027 -232
- tksheet/sheet_options.py +38 -0
- tksheet/text_editor.py +93 -78
- tksheet/themes.py +104 -0
- tksheet/top_left_rectangle.py +2 -2
- tksheet/vars.py +35 -0
- {tksheet-7.0.5.dist-info → tksheet-7.1.0.dist-info}/METADATA +1 -1
- tksheet-7.1.0.dist-info/RECORD +20 -0
- {tksheet-7.0.5.dist-info → tksheet-7.1.0.dist-info}/WHEEL +1 -1
- tksheet-7.0.5.dist-info/RECORD +0 -20
- {tksheet-7.0.5.dist-info → tksheet-7.1.0.dist-info}/LICENSE.txt +0 -0
- {tksheet-7.0.5.dist-info → tksheet-7.1.0.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:
|
@@ -963,6 +983,7 @@ class ColumnHeaders(tk.Canvas):
|
|
963
983
|
qbbox = self.MT.txt_measure_canvas.bbox
|
964
984
|
qtxtm = self.MT.txt_measure_canvas_text
|
965
985
|
new_height = self.MT.min_header_height
|
986
|
+
default_header_height = self.MT.get_default_header_height()
|
966
987
|
self.fix_header()
|
967
988
|
if text is not None:
|
968
989
|
if text:
|
@@ -997,7 +1018,7 @@ class ColumnHeaders(tk.Canvas):
|
|
997
1018
|
b = qbbox(qtxtm)
|
998
1019
|
h = b[3] - b[1] + 5
|
999
1020
|
else:
|
1000
|
-
h =
|
1021
|
+
h = default_header_height
|
1001
1022
|
if h < self.MT.min_header_height:
|
1002
1023
|
h = int(self.MT.min_header_height)
|
1003
1024
|
elif h > self.MT.max_header_height:
|
@@ -1212,27 +1233,30 @@ class ColumnHeaders(tk.Canvas):
|
|
1212
1233
|
if draw_outline and self.PAR.ops.show_dropdown_borders:
|
1213
1234
|
self.redraw_highlight(x1 + 1, y1 + 1, x2, y2, fill="", outline=self.PAR.ops.header_fg, tag=tag)
|
1214
1235
|
if draw_arrow:
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
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
|
+
)
|
1224
1251
|
else:
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
elif tx2 - tx1 < tx3 - tx2:
|
1234
|
-
tx1 -= (tx3 - tx2) - (tx2 - tx1)
|
1235
|
-
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
|
+
)
|
1236
1260
|
if self.hidd_dropdown:
|
1237
1261
|
t, sh = self.hidd_dropdown.popitem()
|
1238
1262
|
self.coords(t, points)
|
@@ -1363,7 +1387,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1363
1387
|
)
|
1364
1388
|
font = self.PAR.ops.header_font
|
1365
1389
|
selections = self.get_redraw_selections(start_col, end_col)
|
1366
|
-
dd_coords = self.
|
1390
|
+
dd_coords = self.dropdown.get_coords()
|
1367
1391
|
for c in range(start_col, end_col - 1):
|
1368
1392
|
draw_y = self.MT.header_first_ln_ins
|
1369
1393
|
cleftgridln = self.MT.col_positions[c]
|
@@ -1553,10 +1577,8 @@ class ColumnHeaders(tk.Canvas):
|
|
1553
1577
|
|
1554
1578
|
def get_redraw_selections(self, startc, endc):
|
1555
1579
|
d = defaultdict(list)
|
1556
|
-
for item in
|
1557
|
-
|
1558
|
-
if tags:
|
1559
|
-
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)
|
1560
1582
|
d2 = {}
|
1561
1583
|
if "cells" in d:
|
1562
1584
|
d2["cells"] = {c for c in range(startc, endc) for r1, c1, r2, c2 in d["cells"] if c1 <= c and c2 > c}
|
@@ -1565,23 +1587,22 @@ class ColumnHeaders(tk.Canvas):
|
|
1565
1587
|
return d2
|
1566
1588
|
|
1567
1589
|
def open_cell(self, event: object = None, ignore_existing_editor=False):
|
1568
|
-
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):
|
1569
1591
|
return
|
1570
|
-
|
1571
|
-
if not currently_selected:
|
1592
|
+
if not self.MT.selected:
|
1572
1593
|
return
|
1573
|
-
|
1574
|
-
datacn =
|
1594
|
+
c = self.MT.selected.column
|
1595
|
+
datacn = self.MT.datacn(c)
|
1575
1596
|
if self.get_cell_kwargs(datacn, key="readonly"):
|
1576
1597
|
return
|
1577
1598
|
elif self.get_cell_kwargs(datacn, key="dropdown") or self.get_cell_kwargs(datacn, key="checkbox"):
|
1578
1599
|
if self.MT.event_opens_dropdown_or_checkbox(event):
|
1579
1600
|
if self.get_cell_kwargs(datacn, key="dropdown"):
|
1580
|
-
self.open_dropdown_window(
|
1601
|
+
self.open_dropdown_window(c, event=event)
|
1581
1602
|
elif self.get_cell_kwargs(datacn, key="checkbox"):
|
1582
|
-
self.click_checkbox(
|
1603
|
+
self.click_checkbox(c, datacn)
|
1583
1604
|
elif self.edit_cell_enabled:
|
1584
|
-
self.open_text_editor(event=event, c=
|
1605
|
+
self.open_text_editor(event=event, c=c, dropdown=False)
|
1585
1606
|
|
1586
1607
|
# displayed indexes
|
1587
1608
|
def get_cell_align(self, c: int) -> str:
|
@@ -1625,7 +1646,6 @@ class ColumnHeaders(tk.Canvas):
|
|
1625
1646
|
text = event.char
|
1626
1647
|
else:
|
1627
1648
|
return False
|
1628
|
-
self.text_editor_loc = c
|
1629
1649
|
if self.extra_begin_edit_cell_func is not None:
|
1630
1650
|
try:
|
1631
1651
|
text = self.extra_begin_edit_cell_func(
|
@@ -1636,7 +1656,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1636
1656
|
value=text,
|
1637
1657
|
loc=c,
|
1638
1658
|
boxes=self.MT.get_boxes(),
|
1639
|
-
selected=self.MT.
|
1659
|
+
selected=self.MT.selected,
|
1640
1660
|
)
|
1641
1661
|
)
|
1642
1662
|
except Exception:
|
@@ -1650,14 +1670,13 @@ class ColumnHeaders(tk.Canvas):
|
|
1650
1670
|
if self.height_resizing_enabled:
|
1651
1671
|
self.set_height_of_header_to_text(text)
|
1652
1672
|
self.set_col_width_run_binding(c)
|
1653
|
-
if
|
1673
|
+
if self.text_editor.open and c == self.text_editor.column:
|
1654
1674
|
self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
1655
1675
|
return
|
1656
|
-
if self.text_editor
|
1657
|
-
self.
|
1676
|
+
if self.text_editor.open:
|
1677
|
+
self.hide_text_editor()
|
1658
1678
|
if not self.MT.see(r=0, c=c, keep_yscroll=True, check_cell_visibility=True):
|
1659
1679
|
self.MT.refresh()
|
1660
|
-
self.text_editor_loc = c
|
1661
1680
|
x = self.MT.col_positions[c] + 1
|
1662
1681
|
y = 0
|
1663
1682
|
w = self.MT.col_positions[c + 1] - x
|
@@ -1666,72 +1685,76 @@ class ColumnHeaders(tk.Canvas):
|
|
1666
1685
|
if text is None:
|
1667
1686
|
text = self.get_cell_data(datacn, none_to_empty_str=True, redirect_int=True)
|
1668
1687
|
bg, fg = self.PAR.ops.header_bg, self.PAR.ops.header_fg
|
1669
|
-
|
1670
|
-
|
1671
|
-
menu_kwargs=DotDict(
|
1688
|
+
kwargs = {
|
1689
|
+
"menu_kwargs": DotDict(
|
1672
1690
|
{
|
1673
|
-
"font": self.PAR.ops.
|
1691
|
+
"font": self.PAR.ops.table_font,
|
1674
1692
|
"foreground": self.PAR.ops.popup_menu_fg,
|
1675
1693
|
"background": self.PAR.ops.popup_menu_bg,
|
1676
1694
|
"activebackground": self.PAR.ops.popup_menu_highlight_bg,
|
1677
1695
|
"activeforeground": self.PAR.ops.popup_menu_highlight_fg,
|
1678
1696
|
}
|
1679
1697
|
),
|
1680
|
-
sheet_ops
|
1681
|
-
border_color
|
1682
|
-
text
|
1683
|
-
state
|
1684
|
-
width
|
1685
|
-
height
|
1686
|
-
show_border
|
1687
|
-
bg
|
1688
|
-
fg
|
1689
|
-
align
|
1690
|
-
c
|
1691
|
-
|
1692
|
-
|
1693
|
-
|
1694
|
-
|
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)
|
1695
1718
|
if not dropdown:
|
1696
|
-
self.text_editor.
|
1697
|
-
self.text_editor.scroll_to_bottom()
|
1698
|
-
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))
|
1699
1722
|
if USER_OS == "darwin":
|
1700
|
-
self.text_editor.
|
1723
|
+
self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(c=c))
|
1701
1724
|
for key, func in self.MT.text_editor_user_bound_keys.items():
|
1702
|
-
self.text_editor.
|
1703
|
-
self.text_editor.
|
1704
|
-
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")))
|
1705
1728
|
if not dropdown:
|
1706
|
-
self.text_editor.
|
1707
|
-
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")))
|
1708
1731
|
return True
|
1709
1732
|
|
1710
1733
|
# displayed indexes #just here to receive text editor arg
|
1711
1734
|
def text_editor_has_wrapped(self, r=0, c=0, check_lines=None):
|
1712
1735
|
if self.width_resizing_enabled:
|
1713
|
-
|
1714
|
-
curr_width = self.text_editor.winfo_width()
|
1736
|
+
curr_width = self.text_editor.window.winfo_width()
|
1715
1737
|
new_width = curr_width + (self.MT.header_txt_height * 2)
|
1716
1738
|
if new_width != curr_width:
|
1717
|
-
self.text_editor.config(width=new_width)
|
1739
|
+
self.text_editor.window.config(width=new_width)
|
1718
1740
|
self.set_col_width_run_binding(c, width=new_width, only_set_if_too_small=False)
|
1719
|
-
|
1720
|
-
|
1721
|
-
self.
|
1722
|
-
|
1723
|
-
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()
|
1724
1745
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False, redraw_table=True)
|
1725
|
-
self.coords(self.
|
1746
|
+
self.coords(self.text_editor.canvas_id, self.MT.col_positions[c] + 1, 0)
|
1726
1747
|
|
1727
1748
|
# displayed indexes
|
1728
1749
|
def text_editor_newline_binding(self, r=0, c=0, event: object = None, check_lines=True):
|
1729
1750
|
if self.height_resizing_enabled:
|
1730
|
-
|
1731
|
-
curr_height = self.text_editor.winfo_height()
|
1751
|
+
curr_height = self.text_editor.window.winfo_height()
|
1732
1752
|
if (
|
1733
1753
|
not check_lines
|
1734
|
-
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
|
+
)
|
1735
1758
|
> curr_height
|
1736
1759
|
):
|
1737
1760
|
new_height = curr_height + self.MT.header_xtra_lines_increment
|
@@ -1739,69 +1762,54 @@ class ColumnHeaders(tk.Canvas):
|
|
1739
1762
|
if new_height > space_bot:
|
1740
1763
|
new_height = space_bot
|
1741
1764
|
if new_height != curr_height:
|
1742
|
-
self.text_editor.config(height=new_height)
|
1765
|
+
self.text_editor.window.config(height=new_height)
|
1743
1766
|
self.set_height(new_height, set_TL=True)
|
1744
|
-
|
1745
|
-
if kwargs:
|
1767
|
+
if self.dropdown.open and self.dropdown.get_coords() == c:
|
1746
1768
|
win_h, anchor = self.get_dropdown_height_anchor(c, new_height)
|
1747
1769
|
self.coords(
|
1748
|
-
|
1770
|
+
self.dropdown.canvas_id,
|
1749
1771
|
self.MT.col_positions[c],
|
1750
1772
|
new_height - 1,
|
1751
1773
|
)
|
1752
|
-
self.itemconfig(
|
1774
|
+
self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1753
1775
|
|
1754
1776
|
def refresh_open_window_positions(self):
|
1755
|
-
if self.text_editor
|
1756
|
-
c = self.
|
1757
|
-
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])
|
1758
1780
|
self.coords(
|
1759
|
-
self.
|
1781
|
+
self.text_editor.canvas_id,
|
1760
1782
|
0,
|
1761
1783
|
self.MT.col_positions[c],
|
1762
1784
|
)
|
1763
|
-
if self.
|
1764
|
-
c = self.
|
1765
|
-
if self.text_editor
|
1766
|
-
text_editor_h = self.
|
1767
|
-
anchor = self.itemcget(self.existing_dropdown_canvas_id, "anchor")
|
1768
|
-
win_h = 0
|
1769
|
-
else:
|
1770
|
-
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()
|
1771
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
|
1772
1794
|
if anchor == "nw":
|
1773
1795
|
self.coords(
|
1774
|
-
self.
|
1796
|
+
self.dropdown.canvas_id,
|
1775
1797
|
0,
|
1776
1798
|
self.MT.col_positions[c] + text_editor_h - 1,
|
1777
1799
|
)
|
1778
|
-
# self.itemconfig(self.
|
1800
|
+
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1779
1801
|
elif anchor == "sw":
|
1780
1802
|
self.coords(
|
1781
|
-
self.
|
1803
|
+
self.dropdown.canvas_id,
|
1782
1804
|
0,
|
1783
1805
|
self.MT.col_positions[c],
|
1784
1806
|
)
|
1785
|
-
# self.itemconfig(self.
|
1807
|
+
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1786
1808
|
|
1787
|
-
def
|
1788
|
-
self.text_editor.
|
1789
|
-
|
1790
|
-
|
1791
|
-
self.text_editor.textedit.focus_set()
|
1792
|
-
|
1793
|
-
def destroy_text_editor(self, reason: None | str = None) -> None:
|
1794
|
-
self.text_editor_loc = None
|
1795
|
-
try:
|
1796
|
-
self.delete(self.text_editor_id)
|
1797
|
-
except Exception:
|
1798
|
-
pass
|
1799
|
-
try:
|
1800
|
-
self.text_editor.destroy()
|
1801
|
-
except Exception:
|
1802
|
-
pass
|
1803
|
-
self.text_editor = None
|
1804
|
-
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
|
1805
1813
|
if reason == "Escape":
|
1806
1814
|
self.focus_set()
|
1807
1815
|
|
@@ -1813,19 +1821,17 @@ class ColumnHeaders(tk.Canvas):
|
|
1813
1821
|
# checking if text editor should be closed or not
|
1814
1822
|
focused = self.focus_get()
|
1815
1823
|
try:
|
1816
|
-
if focused == self.text_editor.
|
1824
|
+
if focused == self.text_editor.tktext.rc_popup_menu:
|
1817
1825
|
return "break"
|
1818
1826
|
except Exception:
|
1819
1827
|
pass
|
1820
1828
|
if focused is None and editor_info:
|
1821
1829
|
return "break"
|
1822
1830
|
if editor_info[1] == "Escape":
|
1823
|
-
self.
|
1824
|
-
self.close_dropdown_window()
|
1831
|
+
self.hide_text_editor_and_dropdown()
|
1825
1832
|
return
|
1826
1833
|
# setting cell data with text editor value
|
1827
1834
|
self.text_editor_value = self.text_editor.get()
|
1828
|
-
self.destroy_text_editor()
|
1829
1835
|
c = editor_info[0]
|
1830
1836
|
datacn = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
1831
1837
|
event_data = event_dict(
|
@@ -1836,7 +1842,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1836
1842
|
value=self.text_editor_value,
|
1837
1843
|
loc=c,
|
1838
1844
|
boxes=self.MT.get_boxes(),
|
1839
|
-
selected=self.MT.
|
1845
|
+
selected=self.MT.selected,
|
1840
1846
|
)
|
1841
1847
|
edited = False
|
1842
1848
|
set_data = partial(
|
@@ -1853,9 +1859,8 @@ class ColumnHeaders(tk.Canvas):
|
|
1853
1859
|
edited = set_data(value=self.text_editor_value)
|
1854
1860
|
if edited:
|
1855
1861
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
1856
|
-
self.close_dropdown_window(c)
|
1857
1862
|
self.MT.recreate_all_selection_boxes()
|
1858
|
-
self.
|
1863
|
+
self.hide_text_editor_and_dropdown()
|
1859
1864
|
if editor_info[1] != "FocusOut":
|
1860
1865
|
self.focus_set()
|
1861
1866
|
return "break"
|
@@ -1896,8 +1901,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1896
1901
|
dd_window.search_and_see(event)
|
1897
1902
|
|
1898
1903
|
def open_dropdown_window(self, c, datacn=None, event: object = None):
|
1899
|
-
self.
|
1900
|
-
self.destroy_opened_dropdown_window()
|
1904
|
+
self.hide_text_editor("Escape")
|
1901
1905
|
if datacn is None:
|
1902
1906
|
datacn = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
1903
1907
|
kwargs = self.get_cell_kwargs(datacn, key="dropdown")
|
@@ -1905,61 +1909,68 @@ class ColumnHeaders(tk.Canvas):
|
|
1905
1909
|
if not self.open_text_editor(event=event, c=c, dropdown=True):
|
1906
1910
|
return
|
1907
1911
|
win_h, anchor = self.get_dropdown_height_anchor(c)
|
1908
|
-
window = self.PAR.dropdown_class(
|
1909
|
-
self.MT.winfo_toplevel(),
|
1910
|
-
0,
|
1911
|
-
c,
|
1912
|
-
width=self.MT.col_positions[c + 1] - self.MT.col_positions[c] + 1,
|
1913
|
-
height=win_h,
|
1914
|
-
font=self.PAR.ops.header_font,
|
1915
|
-
colors={
|
1916
|
-
"bg": self.PAR.ops.popup_menu_bg,
|
1917
|
-
"fg": self.PAR.ops.popup_menu_fg,
|
1918
|
-
"highlight_bg": self.PAR.ops.popup_menu_highlight_bg,
|
1919
|
-
"highlight_fg": self.PAR.ops.popup_menu_highlight_fg,
|
1920
|
-
},
|
1921
|
-
outline_color=self.PAR.ops.popup_menu_fg,
|
1922
|
-
values=kwargs["values"],
|
1923
|
-
close_dropdown_window=self.close_dropdown_window,
|
1924
|
-
search_function=kwargs["search_function"],
|
1925
|
-
arrowkey_RIGHT=self.MT.arrowkey_RIGHT,
|
1926
|
-
arrowkey_LEFT=self.MT.arrowkey_LEFT,
|
1927
|
-
align="w",
|
1928
|
-
single_index="c",
|
1929
|
-
)
|
1930
1912
|
ypos = self.current_height - 1
|
1931
|
-
|
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
|
+
)
|
1932
1945
|
if kwargs["state"] == "normal":
|
1933
|
-
self.text_editor.
|
1946
|
+
self.text_editor.tktext.bind(
|
1934
1947
|
"<<TextModified>>",
|
1935
1948
|
lambda _x: self.dropdown_text_editor_modified(
|
1936
|
-
window,
|
1949
|
+
self.dropdown.window,
|
1937
1950
|
event_dict(
|
1938
1951
|
name="header_dropdown_modified",
|
1939
1952
|
sheet=self.PAR.name,
|
1940
1953
|
value=self.text_editor.get(),
|
1941
1954
|
loc=c,
|
1942
1955
|
boxes=self.MT.get_boxes(),
|
1943
|
-
selected=self.MT.
|
1956
|
+
selected=self.MT.selected,
|
1944
1957
|
),
|
1945
1958
|
kwargs["modified_function"],
|
1946
1959
|
),
|
1947
1960
|
)
|
1948
1961
|
self.update_idletasks()
|
1949
1962
|
try:
|
1950
|
-
self.after(1, lambda: self.text_editor.
|
1951
|
-
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())
|
1952
1965
|
except Exception:
|
1953
1966
|
return
|
1954
1967
|
redraw = False
|
1955
1968
|
else:
|
1956
|
-
window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
1969
|
+
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
1957
1970
|
self.update_idletasks()
|
1958
|
-
window.focus_set()
|
1971
|
+
self.dropdown.window.focus_set()
|
1959
1972
|
redraw = True
|
1960
|
-
self.
|
1961
|
-
kwargs["window"] = window
|
1962
|
-
self.existing_dropdown_canvas_id = kwargs["canvas_id"]
|
1973
|
+
self.dropdown.open = True
|
1963
1974
|
if redraw:
|
1964
1975
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False, redraw_table=False)
|
1965
1976
|
|
@@ -1977,7 +1988,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1977
1988
|
value=selection,
|
1978
1989
|
loc=c,
|
1979
1990
|
boxes=self.MT.get_boxes(),
|
1980
|
-
selected=self.MT.
|
1991
|
+
selected=self.MT.selected,
|
1981
1992
|
)
|
1982
1993
|
if kwargs["select_function"] is not None:
|
1983
1994
|
kwargs["select_function"](event_data)
|
@@ -1991,23 +2002,20 @@ class ColumnHeaders(tk.Canvas):
|
|
1991
2002
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
1992
2003
|
self.focus_set()
|
1993
2004
|
self.MT.recreate_all_selection_boxes()
|
1994
|
-
self.
|
1995
|
-
|
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()
|
1996
2010
|
if redraw:
|
1997
2011
|
self.MT.refresh()
|
1998
2012
|
|
1999
|
-
def get_existing_dropdown_coords(self):
|
2000
|
-
if self.existing_dropdown_window is not None:
|
2001
|
-
return int(self.existing_dropdown_window.c)
|
2002
|
-
return None
|
2003
|
-
|
2004
2013
|
def mouseclick_outside_editor_or_dropdown(self, inside: bool = False):
|
2005
|
-
closed_dd_coords = self.
|
2006
|
-
if self.
|
2007
|
-
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"))
|
2008
2017
|
if closed_dd_coords is not None:
|
2009
|
-
|
2010
|
-
self.destroy_opened_dropdown_window(closed_dd_coords)
|
2018
|
+
self.hide_dropdown_window()
|
2011
2019
|
if inside:
|
2012
2020
|
self.MT.main_table_redraw_grid_and_text(
|
2013
2021
|
redraw_header=True,
|
@@ -2021,35 +2029,10 @@ class ColumnHeaders(tk.Canvas):
|
|
2021
2029
|
self.MT.mouseclick_outside_editor_or_dropdown()
|
2022
2030
|
return self.mouseclick_outside_editor_or_dropdown(inside)
|
2023
2031
|
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
if c is not None or datacn is not None:
|
2029
|
-
if datacn is None:
|
2030
|
-
datacn_ = c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
2031
|
-
else:
|
2032
|
-
datacn_ = datacn
|
2033
|
-
else:
|
2034
|
-
datacn_ = None
|
2035
|
-
try:
|
2036
|
-
self.delete(self.existing_dropdown_canvas_id)
|
2037
|
-
except Exception:
|
2038
|
-
pass
|
2039
|
-
self.existing_dropdown_canvas_id = None
|
2040
|
-
try:
|
2041
|
-
self.existing_dropdown_window.destroy()
|
2042
|
-
except Exception:
|
2043
|
-
pass
|
2044
|
-
kwargs = self.get_cell_kwargs(datacn_, key="dropdown")
|
2045
|
-
if kwargs:
|
2046
|
-
kwargs["canvas_id"] = "no dropdown open"
|
2047
|
-
kwargs["window"] = "no dropdown open"
|
2048
|
-
try:
|
2049
|
-
self.delete(kwargs["canvas_id"])
|
2050
|
-
except Exception:
|
2051
|
-
pass
|
2052
|
-
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
|
2053
2036
|
|
2054
2037
|
# internal event use
|
2055
2038
|
def set_cell_data_undo(
|
@@ -2069,7 +2052,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2069
2052
|
sheet=self.PAR.name,
|
2070
2053
|
cells_header={datacn: self.get_cell_data(datacn)},
|
2071
2054
|
boxes=self.MT.get_boxes(),
|
2072
|
-
selected=self.MT.
|
2055
|
+
selected=self.MT.selected,
|
2073
2056
|
)
|
2074
2057
|
edited = False
|
2075
2058
|
if isinstance(self.MT._headers, int):
|
@@ -2229,7 +2212,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2229
2212
|
value=value,
|
2230
2213
|
loc=c,
|
2231
2214
|
boxes=self.MT.get_boxes(),
|
2232
|
-
selected=self.MT.
|
2215
|
+
selected=self.MT.selected,
|
2233
2216
|
)
|
2234
2217
|
if kwargs["check_function"] is not None:
|
2235
2218
|
kwargs["check_function"](event_data)
|