tksheet 7.1.2__tar.gz → 7.1.4__tar.gz
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-7.1.2/tksheet.egg-info → tksheet-7.1.4}/PKG-INFO +1 -1
- {tksheet-7.1.2 → tksheet-7.1.4}/pyproject.toml +1 -1
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/__init__.py +1 -1
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/column_headers.py +26 -38
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/functions.py +2 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/main_table.py +32 -48
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/other_classes.py +4 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/row_index.py +26 -38
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/sheet.py +57 -20
- {tksheet-7.1.2 → tksheet-7.1.4/tksheet.egg-info}/PKG-INFO +1 -1
- {tksheet-7.1.2 → tksheet-7.1.4}/LICENSE.txt +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/README.md +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/setup.cfg +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/colors.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/formatters.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/sheet_options.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/text_editor.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/themes.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/top_left_rectangle.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/types.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet/vars.py +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet.egg-info/SOURCES.txt +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet.egg-info/dependency_links.txt +0 -0
- {tksheet-7.1.2 → tksheet-7.1.4}/tksheet.egg-info/top_level.txt +0 -0
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
6
6
|
name = "tksheet"
|
7
7
|
description = "Tkinter table / sheet widget"
|
8
8
|
readme = "README.md"
|
9
|
-
version = "7.1.
|
9
|
+
version = "7.1.4"
|
10
10
|
authors = [{ name = "ragardner", email = "github@ragardner.simplelogin.com" }]
|
11
11
|
requires-python = ">=3.8"
|
12
12
|
license = {file = "LICENSE.txt"}
|
@@ -197,8 +197,7 @@ class ColumnHeaders(tk.Canvas):
|
|
197
197
|
self.toggle_select_col(c, redraw=True)
|
198
198
|
if self.MT.rc_popup_menus_enabled:
|
199
199
|
popup_menu = self.ch_rc_popup_menu
|
200
|
-
|
201
|
-
self.extra_rc_func(event)
|
200
|
+
try_binding(self.extra_rc_func, event)
|
202
201
|
if popup_menu is not None:
|
203
202
|
self.popup_menu_loc = c
|
204
203
|
popup_menu.tk_popup(event.x_root, event.y_root)
|
@@ -218,10 +217,9 @@ class ColumnHeaders(tk.Canvas):
|
|
218
217
|
self.being_drawn_item = True
|
219
218
|
self.being_drawn_item = self.add_selection(c, set_as_current=True, run_binding_func=False)
|
220
219
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
)
|
220
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
221
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
222
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
225
223
|
elif c_selected:
|
226
224
|
self.MT.deselect(c=c)
|
227
225
|
elif not self.MT.ctrl_select_enabled:
|
@@ -252,10 +250,9 @@ class ColumnHeaders(tk.Canvas):
|
|
252
250
|
set_as_current=True,
|
253
251
|
)
|
254
252
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
)
|
253
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
254
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
255
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
259
256
|
elif c_selected:
|
260
257
|
self.dragged_col = DraggedRowColumn(
|
261
258
|
dragged=c,
|
@@ -275,15 +272,14 @@ class ColumnHeaders(tk.Canvas):
|
|
275
272
|
if self.MT.selected and self.MT.selected.type_ == "columns":
|
276
273
|
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
277
274
|
self.MT.deselect("all", redraw=False)
|
278
|
-
self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(c, c_to_sel))
|
275
|
+
self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(c, c_to_sel), "columns")
|
279
276
|
self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
|
280
277
|
else:
|
281
278
|
self.being_drawn_item = self.select_col(c, run_binding_func=False)
|
282
279
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
)
|
280
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
281
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
282
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
287
283
|
elif c_selected:
|
288
284
|
self.dragged_col = DraggedRowColumn(
|
289
285
|
dragged=c,
|
@@ -371,8 +367,7 @@ class ColumnHeaders(tk.Canvas):
|
|
371
367
|
self.MT.current_cursor = "hand2"
|
372
368
|
if not mouse_over_resize and not mouse_over_selected:
|
373
369
|
self.MT.reset_mouse_motion_creations()
|
374
|
-
|
375
|
-
self.extra_motion_func(event)
|
370
|
+
try_binding(self.extra_motion_func, event)
|
376
371
|
|
377
372
|
def double_b1(self, event: object):
|
378
373
|
self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
|
@@ -412,8 +407,7 @@ class ColumnHeaders(tk.Canvas):
|
|
412
407
|
self.open_cell(event)
|
413
408
|
self.rsz_w = None
|
414
409
|
self.mouse_motion(event)
|
415
|
-
|
416
|
-
self.extra_double_b1_func(event)
|
410
|
+
try_binding(self.extra_double_b1_func, event)
|
417
411
|
|
418
412
|
def b1_press(self, event: object):
|
419
413
|
self.MT.unbind("<MouseWheel>")
|
@@ -478,8 +472,7 @@ class ColumnHeaders(tk.Canvas):
|
|
478
472
|
self.being_drawn_item = self.select_col(c, redraw=True)
|
479
473
|
elif self.MT.toggle_selection_enabled:
|
480
474
|
self.toggle_select_col(c, redraw=True)
|
481
|
-
|
482
|
-
self.extra_b1_press_func(event)
|
475
|
+
try_binding(self.extra_b1_press_func, event)
|
483
476
|
|
484
477
|
def b1_motion(self, event: object):
|
485
478
|
x1, y1, x2, y2 = self.MT.get_canvas_visible_area()
|
@@ -570,16 +563,14 @@ class ColumnHeaders(tk.Canvas):
|
|
570
563
|
else:
|
571
564
|
self.being_drawn_item = self.select_col(self.MT.selected.column, run_binding_func=False)
|
572
565
|
need_redraw = True
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
)
|
566
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
567
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
568
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
577
569
|
if self.scroll_if_event_offscreen(event):
|
578
570
|
need_redraw = True
|
579
571
|
if need_redraw:
|
580
572
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=False)
|
581
|
-
|
582
|
-
self.extra_b1_motion_func(event)
|
573
|
+
try_binding(self.extra_b1_motion_func, event)
|
583
574
|
|
584
575
|
def get_b1_motion_box(self, start_col, end_col):
|
585
576
|
if end_col >= start_col:
|
@@ -631,10 +622,9 @@ class ColumnHeaders(tk.Canvas):
|
|
631
622
|
self.MT.hide_selection_box(self.MT.selected.fill_iid)
|
632
623
|
self.being_drawn_item = self.add_selection(box[1], run_binding_func=False)
|
633
624
|
need_redraw = True
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
)
|
625
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
626
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
627
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
638
628
|
if self.scroll_if_event_offscreen(event):
|
639
629
|
need_redraw = True
|
640
630
|
if need_redraw:
|
@@ -770,10 +760,9 @@ class ColumnHeaders(tk.Canvas):
|
|
770
760
|
c_to_sel,
|
771
761
|
item=self.MT.create_selection_box(*to_sel, set_current=False),
|
772
762
|
)
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
)
|
763
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
764
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
765
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
777
766
|
self.MT.bind("<MouseWheel>", self.MT.mousewheel)
|
778
767
|
if self.width_resizing_enabled and self.rsz_w is not None and self.currently_resizing_width:
|
779
768
|
self.currently_resizing_width = False
|
@@ -879,8 +868,7 @@ class ColumnHeaders(tk.Canvas):
|
|
879
868
|
self.rsz_w = None
|
880
869
|
self.rsz_h = None
|
881
870
|
self.mouse_motion(event)
|
882
|
-
|
883
|
-
self.extra_b1_release_func(event)
|
871
|
+
try_binding(self.extra_b1_release_func, event)
|
884
872
|
|
885
873
|
def toggle_select_col(
|
886
874
|
self,
|
@@ -1646,7 +1634,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1646
1634
|
text = event.char
|
1647
1635
|
else:
|
1648
1636
|
return False
|
1649
|
-
if self.extra_begin_edit_cell_func
|
1637
|
+
if self.extra_begin_edit_cell_func:
|
1650
1638
|
try:
|
1651
1639
|
text = self.extra_begin_edit_cell_func(
|
1652
1640
|
event_dict(
|
@@ -628,6 +628,7 @@ def span_dict(
|
|
628
628
|
ndim: int | None = None,
|
629
629
|
convert: Callable | None = None,
|
630
630
|
undo: bool = False,
|
631
|
+
emit_event: bool = False,
|
631
632
|
widget: object = None,
|
632
633
|
) -> Span:
|
633
634
|
d: Span = Span(
|
@@ -648,6 +649,7 @@ def span_dict(
|
|
648
649
|
ndim=ndim,
|
649
650
|
convert=convert,
|
650
651
|
undo=undo,
|
652
|
+
emit_event=emit_event,
|
651
653
|
widget=widget,
|
652
654
|
)
|
653
655
|
return d
|
@@ -75,6 +75,7 @@ from .functions import (
|
|
75
75
|
)
|
76
76
|
from .other_classes import (
|
77
77
|
Box_nt,
|
78
|
+
Box_st,
|
78
79
|
Box_t,
|
79
80
|
DotDict,
|
80
81
|
DropdownStorage,
|
@@ -1908,11 +1909,11 @@ class MainTable(tk.Canvas):
|
|
1908
1909
|
def page_UP(self, event=None):
|
1909
1910
|
height = self.winfo_height()
|
1910
1911
|
top = self.canvasy(0)
|
1911
|
-
|
1912
|
-
if
|
1913
|
-
|
1912
|
+
scrollto_y = top - height
|
1913
|
+
if scrollto_y < 0:
|
1914
|
+
scrollto_y = 0
|
1914
1915
|
if self.PAR.ops.page_up_down_select_row:
|
1915
|
-
r = bisect_left(self.row_positions,
|
1916
|
+
r = bisect_left(self.row_positions, scrollto_y)
|
1916
1917
|
if self.selected and self.selected.row == r:
|
1917
1918
|
r -= 1
|
1918
1919
|
if r < 0:
|
@@ -1925,11 +1926,11 @@ class MainTable(tk.Canvas):
|
|
1925
1926
|
elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
|
1926
1927
|
exclude_columns=True, exclude_rows=True
|
1927
1928
|
):
|
1928
|
-
|
1929
|
-
self.see(r,
|
1930
|
-
self.select_cell(r,
|
1929
|
+
c = next(reversed(self.selection_boxes.values())).coords.from_c
|
1930
|
+
self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
|
1931
|
+
self.select_cell(r, c)
|
1931
1932
|
else:
|
1932
|
-
args = ("moveto",
|
1933
|
+
args = ("moveto", scrollto_y / (self.row_positions[-1] + 100))
|
1933
1934
|
self.yview(*args)
|
1934
1935
|
self.RI.yview(*args)
|
1935
1936
|
self.main_table_redraw_grid_and_text(redraw_row_index=True)
|
@@ -1952,9 +1953,9 @@ class MainTable(tk.Canvas):
|
|
1952
1953
|
elif (self.single_selection_enabled or self.toggle_selection_enabled) and self.anything_selected(
|
1953
1954
|
exclude_columns=True, exclude_rows=True
|
1954
1955
|
):
|
1955
|
-
|
1956
|
-
self.see(r,
|
1957
|
-
self.select_cell(r,
|
1956
|
+
c = next(reversed(self.selection_boxes.values())).coords.from_c
|
1957
|
+
self.see(r, c, keep_xscroll=True, check_cell_visibility=False)
|
1958
|
+
self.select_cell(r, c)
|
1958
1959
|
else:
|
1959
1960
|
end = self.row_positions[-1]
|
1960
1961
|
if scrollto > end + 100:
|
@@ -2699,42 +2700,22 @@ class MainTable(tk.Canvas):
|
|
2699
2700
|
self.mouseclick_outside_editor_or_dropdown_all_canvases()
|
2700
2701
|
self.focus_set()
|
2701
2702
|
popup_menu = None
|
2702
|
-
if self.single_selection_enabled and self.not_currently_resizing():
|
2703
|
+
if (self.single_selection_enabled or self.toggle_selection_enabled) and self.not_currently_resizing():
|
2703
2704
|
r = self.identify_row(y=event.y)
|
2704
2705
|
c = self.identify_col(x=event.x)
|
2705
2706
|
if r < len(self.row_positions) - 1 and c < len(self.col_positions) - 1:
|
2706
|
-
if self.col_selected(c):
|
2707
|
-
|
2708
|
-
|
2709
|
-
|
2710
|
-
|
2711
|
-
|
2712
|
-
elif self.cell_selected(r, c):
|
2713
|
-
if self.rc_popup_menus_enabled:
|
2714
|
-
popup_menu = self.rc_popup_menu
|
2707
|
+
if self.col_selected(c) and self.rc_popup_menus_enabled:
|
2708
|
+
popup_menu = self.CH.ch_rc_popup_menu
|
2709
|
+
elif self.row_selected(r) and self.rc_popup_menus_enabled:
|
2710
|
+
popup_menu = self.RI.ri_rc_popup_menu
|
2711
|
+
elif self.cell_selected(r, c) and self.rc_popup_menus_enabled:
|
2712
|
+
popup_menu = self.rc_popup_menu
|
2715
2713
|
else:
|
2716
2714
|
if self.rc_select_enabled:
|
2717
|
-
self.
|
2718
|
-
|
2719
|
-
|
2720
|
-
|
2721
|
-
popup_menu = self.empty_rc_popup_menu
|
2722
|
-
elif self.toggle_selection_enabled and self.not_currently_resizing():
|
2723
|
-
r = self.identify_row(y=event.y)
|
2724
|
-
c = self.identify_col(x=event.x)
|
2725
|
-
if r < len(self.row_positions) - 1 and c < len(self.col_positions) - 1:
|
2726
|
-
if self.col_selected(c):
|
2727
|
-
if self.rc_popup_menus_enabled:
|
2728
|
-
popup_menu = self.CH.ch_rc_popup_menu
|
2729
|
-
elif self.row_selected(r):
|
2730
|
-
if self.rc_popup_menus_enabled:
|
2731
|
-
popup_menu = self.RI.ri_rc_popup_menu
|
2732
|
-
elif self.cell_selected(r, c):
|
2733
|
-
if self.rc_popup_menus_enabled:
|
2734
|
-
popup_menu = self.rc_popup_menu
|
2735
|
-
else:
|
2736
|
-
if self.rc_select_enabled:
|
2737
|
-
self.toggle_select_cell(r, c, redraw=True)
|
2715
|
+
if self.single_selection_enabled:
|
2716
|
+
self.select_cell(r, c, redraw=True)
|
2717
|
+
elif self.toggle_selection_enabled:
|
2718
|
+
self.toggle_select_cell(r, c, redraw=True)
|
2738
2719
|
if self.rc_popup_menus_enabled:
|
2739
2720
|
popup_menu = self.rc_popup_menu
|
2740
2721
|
else:
|
@@ -5603,6 +5584,9 @@ class MainTable(tk.Canvas):
|
|
5603
5584
|
columns: bool = True,
|
5604
5585
|
reverse: bool = False,
|
5605
5586
|
) -> Generator[int]:
|
5587
|
+
"""
|
5588
|
+
Most recent selection box should be last
|
5589
|
+
"""
|
5606
5590
|
itr = reversed(self.selection_boxes.items()) if reverse else self.selection_boxes.items()
|
5607
5591
|
return tuple(
|
5608
5592
|
(iid, box)
|
@@ -5610,7 +5594,7 @@ class MainTable(tk.Canvas):
|
|
5610
5594
|
if cells and box.type_ == "cells" or rows and box.type_ == "rows" or columns and box.type_ == "columns"
|
5611
5595
|
)
|
5612
5596
|
|
5613
|
-
def get_boxes(self) -> dict:
|
5597
|
+
def get_boxes(self) -> dict[Box_nt, Literal["cells", "rows", "columns"]]:
|
5614
5598
|
return {box.coords: box.type_ for box in self.selection_boxes.values()}
|
5615
5599
|
|
5616
5600
|
def reselect_from_get_boxes(
|
@@ -6236,7 +6220,7 @@ class MainTable(tk.Canvas):
|
|
6236
6220
|
return tuple(box.coords for item, box in self.get_selection_items())
|
6237
6221
|
|
6238
6222
|
def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
6239
|
-
return [(box.coords, box.
|
6223
|
+
return [Box_st(box.coords, box.type_) for item, box in self.get_selection_items()]
|
6240
6224
|
|
6241
6225
|
def all_selected(self) -> bool:
|
6242
6226
|
return any(
|
@@ -6263,20 +6247,20 @@ class MainTable(tk.Canvas):
|
|
6263
6247
|
)
|
6264
6248
|
)
|
6265
6249
|
|
6266
|
-
def col_selected(self, c: int) -> bool:
|
6250
|
+
def col_selected(self, c: int, cells: bool = False) -> bool:
|
6267
6251
|
return isinstance(c, int) and any(
|
6268
6252
|
box.coords.from_c <= c and box.coords.upto_c > c
|
6269
6253
|
for item, box in self.get_selection_items(
|
6270
|
-
cells=
|
6254
|
+
cells=cells,
|
6271
6255
|
rows=False,
|
6272
6256
|
)
|
6273
6257
|
)
|
6274
6258
|
|
6275
|
-
def row_selected(self, r: int) -> bool:
|
6259
|
+
def row_selected(self, r: int, cells: bool = False) -> bool:
|
6276
6260
|
return isinstance(r, int) and any(
|
6277
6261
|
box.coords.from_r <= r and box.coords.upto_r > r
|
6278
6262
|
for item, box in self.get_selection_items(
|
6279
|
-
cells=
|
6263
|
+
cells=cells,
|
6280
6264
|
columns=False,
|
6281
6265
|
)
|
6282
6266
|
)
|
@@ -191,8 +191,7 @@ class RowIndex(tk.Canvas):
|
|
191
191
|
self.toggle_select_row(r, redraw=True)
|
192
192
|
if self.MT.rc_popup_menus_enabled:
|
193
193
|
popup_menu = self.ri_rc_popup_menu
|
194
|
-
|
195
|
-
self.extra_rc_func(event)
|
194
|
+
try_binding(self.extra_rc_func, event)
|
196
195
|
if popup_menu is not None:
|
197
196
|
self.popup_menu_loc = r
|
198
197
|
popup_menu.tk_popup(event.x_root, event.y_root)
|
@@ -212,10 +211,9 @@ class RowIndex(tk.Canvas):
|
|
212
211
|
self.being_drawn_item = True
|
213
212
|
self.being_drawn_item = self.add_selection(r, set_as_current=True, run_binding_func=False)
|
214
213
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
)
|
214
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
215
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
216
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
219
217
|
elif r_selected:
|
220
218
|
self.MT.deselect(r=r)
|
221
219
|
elif not self.MT.ctrl_select_enabled:
|
@@ -246,10 +244,9 @@ class RowIndex(tk.Canvas):
|
|
246
244
|
set_as_current=True,
|
247
245
|
)
|
248
246
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
)
|
247
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
248
|
+
try_binding(self.ctrl_selection_binding_func, sel_event)
|
249
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
253
250
|
elif r_selected:
|
254
251
|
self.dragged_row = DraggedRowColumn(
|
255
252
|
dragged=r,
|
@@ -269,15 +266,14 @@ class RowIndex(tk.Canvas):
|
|
269
266
|
if self.MT.selected and self.MT.selected.type_ == "rows":
|
270
267
|
r_to_sel, c_to_sel = self.MT.selected.row, self.MT.selected.column
|
271
268
|
self.MT.deselect("all", redraw=False)
|
272
|
-
self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(r, r_to_sel))
|
269
|
+
self.being_drawn_item = self.MT.create_selection_box(*self.get_shift_select_box(r, r_to_sel), "rows")
|
273
270
|
self.MT.set_currently_selected(r_to_sel, c_to_sel, self.being_drawn_item)
|
274
271
|
else:
|
275
272
|
self.being_drawn_item = self.select_row(r, run_binding_func=False)
|
276
273
|
self.MT.main_table_redraw_grid_and_text(redraw_header=True, redraw_row_index=True)
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
)
|
274
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
275
|
+
try_binding(self.shift_selection_binding_func, sel_event)
|
276
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
281
277
|
elif r_selected:
|
282
278
|
self.dragged_row = DraggedRowColumn(
|
283
279
|
dragged=r,
|
@@ -365,8 +361,7 @@ class RowIndex(tk.Canvas):
|
|
365
361
|
self.MT.current_cursor = "hand2"
|
366
362
|
if not mouse_over_resize and not mouse_over_selected:
|
367
363
|
self.MT.reset_mouse_motion_creations()
|
368
|
-
|
369
|
-
self.extra_motion_func(event)
|
364
|
+
try_binding(self.extra_motion_func, event)
|
370
365
|
|
371
366
|
def double_b1(self, event: object):
|
372
367
|
self.mouseclick_outside_editor_or_dropdown_all_canvases(inside=True)
|
@@ -410,8 +405,7 @@ class RowIndex(tk.Canvas):
|
|
410
405
|
self.PAR.item(iid, open_=iid not in self.tree_open_ids)
|
411
406
|
self.rsz_h = None
|
412
407
|
self.mouse_motion(event)
|
413
|
-
|
414
|
-
self.extra_double_b1_func(event)
|
408
|
+
try_binding(self.extra_double_b1_func, event)
|
415
409
|
|
416
410
|
def b1_press(self, event: object):
|
417
411
|
self.MT.unbind("<MouseWheel>")
|
@@ -484,8 +478,7 @@ class RowIndex(tk.Canvas):
|
|
484
478
|
self.being_drawn_item = self.select_row(r, redraw=True)
|
485
479
|
elif self.MT.toggle_selection_enabled:
|
486
480
|
self.toggle_select_row(r, redraw=True)
|
487
|
-
|
488
|
-
self.extra_b1_press_func(event)
|
481
|
+
try_binding(self.extra_b1_press_func, event)
|
489
482
|
|
490
483
|
def b1_motion(self, event: object):
|
491
484
|
x1, y1, x2, y2 = self.MT.get_canvas_visible_area()
|
@@ -576,16 +569,14 @@ class RowIndex(tk.Canvas):
|
|
576
569
|
else:
|
577
570
|
self.being_drawn_item = self.select_row(self.MT.selected.row, run_binding_func=False)
|
578
571
|
need_redraw = True
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
)
|
572
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
573
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
574
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
583
575
|
if self.scroll_if_event_offscreen(event):
|
584
576
|
need_redraw = True
|
585
577
|
if need_redraw:
|
586
578
|
self.MT.main_table_redraw_grid_and_text(redraw_header=False, redraw_row_index=True)
|
587
|
-
|
588
|
-
self.extra_b1_motion_func(event)
|
579
|
+
try_binding(self.extra_b1_motion_func, event)
|
589
580
|
|
590
581
|
def get_b1_motion_box(self, start_row, end_row):
|
591
582
|
if end_row >= start_row:
|
@@ -637,10 +628,9 @@ class RowIndex(tk.Canvas):
|
|
637
628
|
self.MT.hide_selection_box(self.MT.selected.fill_iid)
|
638
629
|
self.being_drawn_item = self.add_selection(box[0], run_binding_func=False)
|
639
630
|
need_redraw = True
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
)
|
631
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
632
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
633
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
644
634
|
if self.scroll_if_event_offscreen(event):
|
645
635
|
need_redraw = True
|
646
636
|
if need_redraw:
|
@@ -775,10 +765,9 @@ class RowIndex(tk.Canvas):
|
|
775
765
|
c_to_sel,
|
776
766
|
item=self.MT.create_selection_box(*to_sel, set_current=False),
|
777
767
|
)
|
778
|
-
|
779
|
-
|
780
|
-
|
781
|
-
)
|
768
|
+
sel_event = self.MT.get_select_event(being_drawn_item=self.being_drawn_item)
|
769
|
+
try_binding(self.drag_selection_binding_func, sel_event)
|
770
|
+
self.PAR.emit_event("<<SheetSelect>>", data=sel_event)
|
782
771
|
self.MT.bind("<MouseWheel>", self.MT.mousewheel)
|
783
772
|
if self.height_resizing_enabled and self.rsz_h is not None and self.currently_resizing_height:
|
784
773
|
self.currently_resizing_height = False
|
@@ -886,8 +875,7 @@ class RowIndex(tk.Canvas):
|
|
886
875
|
self.rsz_w = None
|
887
876
|
self.rsz_h = None
|
888
877
|
self.mouse_motion(event)
|
889
|
-
|
890
|
-
self.extra_b1_release_func(event)
|
878
|
+
try_binding(self.extra_b1_release_func, event)
|
891
879
|
|
892
880
|
def event_over_tree_arrow(
|
893
881
|
self,
|
@@ -1738,7 +1726,7 @@ class RowIndex(tk.Canvas):
|
|
1738
1726
|
text = event.char
|
1739
1727
|
else:
|
1740
1728
|
return False
|
1741
|
-
if self.extra_begin_edit_cell_func
|
1729
|
+
if self.extra_begin_edit_cell_func:
|
1742
1730
|
try:
|
1743
1731
|
text = self.extra_begin_edit_cell_func(
|
1744
1732
|
event_dict(
|
@@ -2967,14 +2967,24 @@ class Sheet(tk.Frame):
|
|
2967
2967
|
def get_all_selection_boxes_with_types(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
2968
2968
|
return self.MT.get_all_selection_boxes_with_types()
|
2969
2969
|
|
2970
|
-
|
2971
|
-
|
2970
|
+
@property
|
2971
|
+
def boxes(self) -> list[tuple[tuple[int, int, int, int], str]]:
|
2972
|
+
return self.MT.get_all_selection_boxes_with_types()
|
2973
|
+
|
2974
|
+
def cell_selected(
|
2975
|
+
self,
|
2976
|
+
r: int,
|
2977
|
+
c: int,
|
2978
|
+
rows: bool = False,
|
2979
|
+
columns: bool = False,
|
2980
|
+
) -> bool:
|
2981
|
+
return self.MT.cell_selected(r, c, inc_cols=columns, inc_rows=rows)
|
2972
2982
|
|
2973
|
-
def row_selected(self, r: int) -> bool:
|
2974
|
-
return self.MT.row_selected(r)
|
2983
|
+
def row_selected(self, r: int, cells: bool = False) -> bool:
|
2984
|
+
return self.MT.row_selected(r, cells=cells)
|
2975
2985
|
|
2976
|
-
def column_selected(self, c: int) -> bool:
|
2977
|
-
return self.MT.col_selected(c)
|
2986
|
+
def column_selected(self, c: int, cells: bool = False) -> bool:
|
2987
|
+
return self.MT.col_selected(c, cells=cells)
|
2978
2988
|
|
2979
2989
|
def anything_selected(
|
2980
2990
|
self,
|
@@ -3603,6 +3613,7 @@ class Sheet(tk.Frame):
|
|
3603
3613
|
return c if self.MT.all_columns_displayed else self.MT.displayed_columns[c]
|
3604
3614
|
|
3605
3615
|
data_c = displayed_column_to_data
|
3616
|
+
dcol = displayed_column_to_data
|
3606
3617
|
|
3607
3618
|
def display_columns(
|
3608
3619
|
self,
|
@@ -3710,6 +3721,7 @@ class Sheet(tk.Frame):
|
|
3710
3721
|
return r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
|
3711
3722
|
|
3712
3723
|
data_r = displayed_row_to_data
|
3724
|
+
drow = displayed_row_to_data
|
3713
3725
|
|
3714
3726
|
def display_rows(
|
3715
3727
|
self,
|
@@ -4104,6 +4116,25 @@ class Sheet(tk.Frame):
|
|
4104
4116
|
)
|
4105
4117
|
return self
|
4106
4118
|
|
4119
|
+
def event_widget_is_sheet(
|
4120
|
+
self,
|
4121
|
+
event: object,
|
4122
|
+
table: bool = True,
|
4123
|
+
index: bool = True,
|
4124
|
+
header: bool = True,
|
4125
|
+
top_left: bool = True,
|
4126
|
+
) -> bool:
|
4127
|
+
return (
|
4128
|
+
table
|
4129
|
+
and event.widget == self.MT
|
4130
|
+
or index
|
4131
|
+
and event.widget == self.RI
|
4132
|
+
or header
|
4133
|
+
and event.widget == self.CH
|
4134
|
+
or top_left
|
4135
|
+
and event.widget == self.TL
|
4136
|
+
)
|
4137
|
+
|
4107
4138
|
def get_cell_options(
|
4108
4139
|
self,
|
4109
4140
|
key: None | str = None,
|
@@ -4420,7 +4451,8 @@ class Sheet(tk.Frame):
|
|
4420
4451
|
redraw=False,
|
4421
4452
|
deselect_all=True,
|
4422
4453
|
)
|
4423
|
-
|
4454
|
+
if open_ids:
|
4455
|
+
self.tree_open(*open_ids)
|
4424
4456
|
return self
|
4425
4457
|
|
4426
4458
|
def tree_open(self, *items) -> Sheet:
|
@@ -4428,7 +4460,7 @@ class Sheet(tk.Frame):
|
|
4428
4460
|
If used without args all items are opened
|
4429
4461
|
"""
|
4430
4462
|
if items:
|
4431
|
-
for item in items:
|
4463
|
+
for item in unpack(items):
|
4432
4464
|
self.item(item, open_=True)
|
4433
4465
|
else:
|
4434
4466
|
for item in self.get_children():
|
@@ -4440,7 +4472,7 @@ class Sheet(tk.Frame):
|
|
4440
4472
|
If used without args all items are closed
|
4441
4473
|
"""
|
4442
4474
|
if items:
|
4443
|
-
for item in items:
|
4475
|
+
for item in unpack(items):
|
4444
4476
|
self.item(item, open_=False)
|
4445
4477
|
else:
|
4446
4478
|
for item in self.get_children():
|
@@ -4525,8 +4557,6 @@ class Sheet(tk.Frame):
|
|
4525
4557
|
if not (item := item.lower()) or item not in self.RI.tree:
|
4526
4558
|
raise ValueError(f"Item '{item}' does not exist.")
|
4527
4559
|
if isinstance(iid, str):
|
4528
|
-
if not (iid := iid.lower()):
|
4529
|
-
raise ValueError(f"iid '{iid}' does not exist.")
|
4530
4560
|
if iid in self.RI.tree:
|
4531
4561
|
raise ValueError(f"Cannot rename '{iid}', it already exists.")
|
4532
4562
|
iid = iid.lower()
|
@@ -4538,7 +4568,7 @@ class Sheet(tk.Frame):
|
|
4538
4568
|
if isinstance(text, str):
|
4539
4569
|
self.RI.tree[item].text = text
|
4540
4570
|
if isinstance(values, list):
|
4541
|
-
self.set_data(self.RI.tree_rns[item], values)
|
4571
|
+
self.set_data(self.RI.tree_rns[item], data=values)
|
4542
4572
|
if isinstance(open_, bool):
|
4543
4573
|
if self.RI.tree[item].children:
|
4544
4574
|
if open_:
|
@@ -4569,10 +4599,15 @@ class Sheet(tk.Frame):
|
|
4569
4599
|
return self
|
4570
4600
|
|
4571
4601
|
def itemrow(self, item: str) -> int:
|
4572
|
-
|
4602
|
+
try:
|
4603
|
+
return self.RI.tree_rns[item.lower()]
|
4604
|
+
except Exception:
|
4605
|
+
raise ValueError(f"item '{item.lower()}' does not exist.")
|
4573
4606
|
|
4574
|
-
def rowitem(self, row: int) -> str | None:
|
4575
|
-
if
|
4607
|
+
def rowitem(self, row: int, data_index: bool = False) -> str | None:
|
4608
|
+
if not data_index:
|
4609
|
+
row = self.data_r(row)
|
4610
|
+
if isinstance(row, int) and len(self.MT._row_index) > row:
|
4576
4611
|
return self.MT._row_index[row].iid
|
4577
4612
|
return None
|
4578
4613
|
|
@@ -4782,12 +4817,14 @@ class Sheet(tk.Frame):
|
|
4782
4817
|
self.display_item(item)
|
4783
4818
|
self.see(row=bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]), keep_xscroll=True)
|
4784
4819
|
|
4785
|
-
def selection(self) -> list[str]:
|
4820
|
+
def selection(self, cells: bool = False) -> list[str]:
|
4786
4821
|
"""
|
4787
4822
|
Get currently selected item ids
|
4788
|
-
- Only includes selected rows
|
4789
4823
|
"""
|
4790
|
-
return [
|
4824
|
+
return [
|
4825
|
+
self.MT._row_index[self.displayed_row_to_data(rn)].iid
|
4826
|
+
for rn in self.get_selected_rows(get_cells_as_rows=cells)
|
4827
|
+
]
|
4791
4828
|
|
4792
4829
|
def selection_set(self, *items) -> Sheet:
|
4793
4830
|
self.deselect()
|
@@ -4797,7 +4834,7 @@ class Sheet(tk.Frame):
|
|
4797
4834
|
def selection_add(self, *items) -> Sheet:
|
4798
4835
|
for item in unpack(items):
|
4799
4836
|
if (item := item.lower()) not in self.RI.tree:
|
4800
|
-
|
4837
|
+
continue
|
4801
4838
|
if not self.item_displayed(item):
|
4802
4839
|
self.display_item(item)
|
4803
4840
|
self.add_row_selection(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
|
@@ -4806,7 +4843,7 @@ class Sheet(tk.Frame):
|
|
4806
4843
|
def selection_remove(self, *items) -> Sheet:
|
4807
4844
|
for item in unpack(items):
|
4808
4845
|
if (item := item.lower()) not in self.RI.tree:
|
4809
|
-
|
4846
|
+
continue
|
4810
4847
|
try:
|
4811
4848
|
self.deselect(bisect_left(self.MT.displayed_rows, self.RI.tree_rns[item]))
|
4812
4849
|
except Exception:
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|