tksheet 7.2.9__tar.gz → 7.2.10__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.2.9/tksheet.egg-info → tksheet-7.2.10}/PKG-INFO +1 -1
- {tksheet-7.2.9 → tksheet-7.2.10}/pyproject.toml +1 -1
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/__init__.py +1 -1
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/column_headers.py +8 -9
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/main_table.py +10 -13
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/row_index.py +28 -19
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/sheet.py +57 -25
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/top_left_rectangle.py +9 -10
- {tksheet-7.2.9 → tksheet-7.2.10/tksheet.egg-info}/PKG-INFO +1 -1
- {tksheet-7.2.9 → tksheet-7.2.10}/LICENSE.txt +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/README.md +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/setup.cfg +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/colors.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/formatters.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/functions.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/other_classes.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/sheet_options.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/text_editor.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/themes.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/types.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet/vars.py +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet.egg-info/SOURCES.txt +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/tksheet.egg-info/dependency_links.txt +0 -0
- {tksheet-7.2.9 → tksheet-7.2.10}/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.2.
|
9
|
+
version = "7.2.10"
|
10
10
|
authors = [{ name = "ragardner", email = "github@ragardner.simplelogin.com" }]
|
11
11
|
requires-python = ">=3.8"
|
12
12
|
license = {file = "LICENSE.txt"}
|
@@ -1760,8 +1760,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1760
1760
|
if self.text_editor.open and c == self.text_editor.column:
|
1761
1761
|
self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
1762
1762
|
return
|
1763
|
-
|
1764
|
-
self.hide_text_editor()
|
1763
|
+
self.hide_text_editor()
|
1765
1764
|
if not self.MT.see(r=0, c=c, keep_yscroll=True, check_cell_visibility=True):
|
1766
1765
|
self.MT.refresh()
|
1767
1766
|
x = self.MT.col_positions[c] + 1
|
@@ -1907,14 +1906,12 @@ class ColumnHeaders(tk.Canvas):
|
|
1907
1906
|
)
|
1908
1907
|
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
1909
1908
|
|
1910
|
-
def hide_text_editor(self
|
1909
|
+
def hide_text_editor(self) -> None:
|
1911
1910
|
if self.text_editor.open:
|
1912
1911
|
for binding in text_editor_to_unbind:
|
1913
1912
|
self.text_editor.tktext.unbind(binding)
|
1914
1913
|
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
1915
1914
|
self.text_editor.open = False
|
1916
|
-
if reason == "Escape":
|
1917
|
-
self.focus_set()
|
1918
1915
|
|
1919
1916
|
# c is displayed col
|
1920
1917
|
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
@@ -1933,6 +1930,7 @@ class ColumnHeaders(tk.Canvas):
|
|
1933
1930
|
return "break"
|
1934
1931
|
if event.keysym == "Escape":
|
1935
1932
|
self.hide_text_editor_and_dropdown()
|
1933
|
+
self.focus_set()
|
1936
1934
|
return
|
1937
1935
|
# setting cell data with text editor value
|
1938
1936
|
text_editor_value = self.text_editor.get()
|
@@ -2011,7 +2009,7 @@ class ColumnHeaders(tk.Canvas):
|
|
2011
2009
|
dd_window.search_and_see(event)
|
2012
2010
|
|
2013
2011
|
def open_dropdown_window(self, c: int, event: object = None) -> None:
|
2014
|
-
self.hide_text_editor(
|
2012
|
+
self.hide_text_editor()
|
2015
2013
|
kwargs = self.get_cell_kwargs(self.MT.datacn(c), key="dropdown")
|
2016
2014
|
if kwargs["state"] == "normal":
|
2017
2015
|
if not self.open_text_editor(event=event, c=c, dropdown=True):
|
@@ -2075,8 +2073,9 @@ class ColumnHeaders(tk.Canvas):
|
|
2075
2073
|
return
|
2076
2074
|
redraw = False
|
2077
2075
|
else:
|
2078
|
-
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
2079
2076
|
self.update_idletasks()
|
2077
|
+
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(c))
|
2078
|
+
self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
|
2080
2079
|
self.dropdown.window.focus_set()
|
2081
2080
|
redraw = True
|
2082
2081
|
self.dropdown.open = True
|
@@ -2116,12 +2115,12 @@ class ColumnHeaders(tk.Canvas):
|
|
2116
2115
|
edited = self.set_cell_data_undo(c, datacn=datacn, value=selection, redraw=not redraw)
|
2117
2116
|
if edited:
|
2118
2117
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
2119
|
-
self.focus_set()
|
2120
2118
|
self.MT.recreate_all_selection_boxes()
|
2119
|
+
self.focus_set()
|
2121
2120
|
self.hide_text_editor_and_dropdown(redraw=redraw)
|
2122
2121
|
|
2123
2122
|
def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
|
2124
|
-
self.hide_text_editor(
|
2123
|
+
self.hide_text_editor()
|
2125
2124
|
self.hide_dropdown_window()
|
2126
2125
|
if redraw:
|
2127
2126
|
self.MT.refresh()
|
@@ -1796,9 +1796,7 @@ class MainTable(tk.Canvas):
|
|
1796
1796
|
def cell_visible(self, r: int = 0, c: int = 0) -> bool:
|
1797
1797
|
cx1, cy1, cx2, cy2 = self.get_canvas_visible_area()
|
1798
1798
|
x1, y1, x2, y2 = self.get_cell_coords(r, c)
|
1799
|
-
|
1800
|
-
return True
|
1801
|
-
return False
|
1799
|
+
return x1 <= cx2 or y1 <= cy2 or x2 >= cx1 or y2 >= cy1
|
1802
1800
|
|
1803
1801
|
def select_all(self, redraw: bool = True, run_binding_func: bool = True) -> None:
|
1804
1802
|
selected = self.selected
|
@@ -5457,7 +5455,7 @@ class MainTable(tk.Canvas):
|
|
5457
5455
|
if self.PAR.ops.auto_resize_row_index and redraw_row_index and self.show_index:
|
5458
5456
|
changed_w = self.RI.auto_set_index_width(
|
5459
5457
|
end_row=grid_end_row,
|
5460
|
-
only_rows=
|
5458
|
+
only_rows=map(self.datarn, range(text_start_row, text_end_row)),
|
5461
5459
|
)
|
5462
5460
|
if resized_cols or resized_rows or changed_w:
|
5463
5461
|
self.recreate_all_selection_boxes()
|
@@ -6572,8 +6570,7 @@ class MainTable(tk.Canvas):
|
|
6572
6570
|
if self.text_editor.open and (r, c) == self.text_editor.coords:
|
6573
6571
|
self.text_editor.window.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
6574
6572
|
return
|
6575
|
-
|
6576
|
-
self.hide_text_editor()
|
6573
|
+
self.hide_text_editor()
|
6577
6574
|
if not self.see(r=r, c=c, check_cell_visibility=True):
|
6578
6575
|
self.refresh()
|
6579
6576
|
x = self.col_positions[c]
|
@@ -6707,14 +6704,12 @@ class MainTable(tk.Canvas):
|
|
6707
6704
|
)
|
6708
6705
|
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
6709
6706
|
|
6710
|
-
def hide_text_editor(self
|
6707
|
+
def hide_text_editor(self) -> None:
|
6711
6708
|
if self.text_editor.open:
|
6712
6709
|
for binding in text_editor_to_unbind:
|
6713
6710
|
self.text_editor.tktext.unbind(binding)
|
6714
6711
|
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
6715
6712
|
self.text_editor.open = False
|
6716
|
-
if reason == "Escape":
|
6717
|
-
self.focus_set()
|
6718
6713
|
|
6719
6714
|
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
6720
6715
|
# checking if text editor should be closed or not
|
@@ -6732,6 +6727,7 @@ class MainTable(tk.Canvas):
|
|
6732
6727
|
return "break"
|
6733
6728
|
if event.keysym == "Escape":
|
6734
6729
|
self.hide_text_editor_and_dropdown()
|
6730
|
+
self.focus_set()
|
6735
6731
|
return
|
6736
6732
|
# setting cell data with text editor value
|
6737
6733
|
text_editor_value = self.text_editor.get()
|
@@ -6944,7 +6940,7 @@ class MainTable(tk.Canvas):
|
|
6944
6940
|
c: int,
|
6945
6941
|
event: object = None,
|
6946
6942
|
) -> None:
|
6947
|
-
self.hide_text_editor(
|
6943
|
+
self.hide_text_editor()
|
6948
6944
|
datarn = self.datarn(r)
|
6949
6945
|
datacn = self.datacn(c)
|
6950
6946
|
kwargs = self.get_cell_kwargs(datarn, datacn, key="dropdown")
|
@@ -7019,7 +7015,8 @@ class MainTable(tk.Canvas):
|
|
7019
7015
|
else:
|
7020
7016
|
self.update_idletasks()
|
7021
7017
|
self.dropdown.window.bind("<FocusOut>", lambda _: self.close_dropdown_window(r, c))
|
7022
|
-
self.dropdown.window.
|
7018
|
+
self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
|
7019
|
+
self.dropdown.window.focus_set()
|
7023
7020
|
redraw = True
|
7024
7021
|
self.dropdown.open = True
|
7025
7022
|
if redraw:
|
@@ -7075,12 +7072,12 @@ class MainTable(tk.Canvas):
|
|
7075
7072
|
)
|
7076
7073
|
if edited:
|
7077
7074
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
7078
|
-
self.focus_set()
|
7079
7075
|
self.recreate_all_selection_boxes()
|
7076
|
+
self.focus_set()
|
7080
7077
|
self.hide_text_editor_and_dropdown(redraw=redraw)
|
7081
7078
|
|
7082
7079
|
def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
|
7083
|
-
self.hide_text_editor(
|
7080
|
+
self.hide_text_editor()
|
7084
7081
|
self.hide_dropdown_window()
|
7085
7082
|
if redraw:
|
7086
7083
|
self.refresh()
|
@@ -358,7 +358,16 @@ class RowIndex(tk.Canvas):
|
|
358
358
|
self.MT.current_cursor = "sb_v_double_arrow"
|
359
359
|
else:
|
360
360
|
self.rsz_h = None
|
361
|
-
if
|
361
|
+
if (
|
362
|
+
self.width_resizing_enabled
|
363
|
+
and not mouse_over_resize
|
364
|
+
and self.PAR.ops.auto_resize_row_index is not True
|
365
|
+
and not (
|
366
|
+
self.PAR.ops.auto_resize_row_index == "empty"
|
367
|
+
and not isinstance(self.MT._row_index, int)
|
368
|
+
and not self.MT._row_index
|
369
|
+
)
|
370
|
+
):
|
362
371
|
try:
|
363
372
|
x1, y1, x2, y2 = (
|
364
373
|
self.row_width_resize_bbox[0],
|
@@ -761,22 +770,18 @@ class RowIndex(tk.Canvas):
|
|
761
770
|
self.MT.set_yviews("moveto", 1)
|
762
771
|
|
763
772
|
def event_over_dropdown(self, r: int, datarn: int, event: object, canvasy: float) -> bool:
|
764
|
-
|
773
|
+
return (
|
765
774
|
canvasy < self.MT.row_positions[r] + self.MT.index_txt_height
|
766
775
|
and self.get_cell_kwargs(datarn, key="dropdown")
|
767
776
|
and event.x > self.current_width - self.MT.index_txt_height - 4
|
768
|
-
)
|
769
|
-
return True
|
770
|
-
return False
|
777
|
+
)
|
771
778
|
|
772
779
|
def event_over_checkbox(self, r: int, datarn: int, event: object, canvasy: float) -> bool:
|
773
|
-
|
780
|
+
return (
|
774
781
|
canvasy < self.MT.row_positions[r] + self.MT.index_txt_height
|
775
782
|
and self.get_cell_kwargs(datarn, key="checkbox")
|
776
783
|
and event.x < self.MT.index_txt_height + 4
|
777
|
-
)
|
778
|
-
return True
|
779
|
-
return False
|
784
|
+
)
|
780
785
|
|
781
786
|
def b1_release(self, event: object) -> None:
|
782
787
|
if self.being_drawn_item is not None and (to_sel := self.MT.coords_and_type(self.being_drawn_item)):
|
@@ -1891,8 +1896,7 @@ class RowIndex(tk.Canvas):
|
|
1891
1896
|
if self.text_editor.open and r == self.text_editor.row:
|
1892
1897
|
self.text_editor.set_text(self.text_editor.get() + "" if not isinstance(text, str) else text)
|
1893
1898
|
return
|
1894
|
-
|
1895
|
-
self.hide_text_editor()
|
1899
|
+
self.hide_text_editor()
|
1896
1900
|
if not self.MT.see(r=r, c=0, keep_yscroll=True, check_cell_visibility=True):
|
1897
1901
|
self.MT.refresh()
|
1898
1902
|
x = 0
|
@@ -2025,14 +2029,12 @@ class RowIndex(tk.Canvas):
|
|
2025
2029
|
)
|
2026
2030
|
# self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
|
2027
2031
|
|
2028
|
-
def hide_text_editor(self
|
2032
|
+
def hide_text_editor(self) -> None:
|
2029
2033
|
if self.text_editor.open:
|
2030
2034
|
for binding in text_editor_to_unbind:
|
2031
2035
|
self.text_editor.tktext.unbind(binding)
|
2032
2036
|
self.itemconfig(self.text_editor.canvas_id, state="hidden")
|
2033
2037
|
self.text_editor.open = False
|
2034
|
-
if reason == "Escape":
|
2035
|
-
self.focus_set()
|
2036
2038
|
|
2037
2039
|
# r is displayed row
|
2038
2040
|
def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
|
@@ -2051,6 +2053,7 @@ class RowIndex(tk.Canvas):
|
|
2051
2053
|
return "break"
|
2052
2054
|
if event.keysym == "Escape":
|
2053
2055
|
self.hide_text_editor_and_dropdown()
|
2056
|
+
self.focus_set()
|
2054
2057
|
return
|
2055
2058
|
text_editor_value = self.text_editor.get()
|
2056
2059
|
r = self.text_editor.row
|
@@ -2132,7 +2135,7 @@ class RowIndex(tk.Canvas):
|
|
2132
2135
|
|
2133
2136
|
# r is displayed row
|
2134
2137
|
def open_dropdown_window(self, r: int, event: object = None) -> None:
|
2135
|
-
self.hide_text_editor(
|
2138
|
+
self.hide_text_editor()
|
2136
2139
|
kwargs = self.get_cell_kwargs(self.MT.datarn(r), key="dropdown")
|
2137
2140
|
if kwargs["state"] == "normal":
|
2138
2141
|
if not self.open_text_editor(event=event, r=r, dropdown=True):
|
@@ -2203,8 +2206,9 @@ class RowIndex(tk.Canvas):
|
|
2203
2206
|
return
|
2204
2207
|
redraw = False
|
2205
2208
|
else:
|
2206
|
-
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(r))
|
2207
2209
|
self.update_idletasks()
|
2210
|
+
self.dropdown.window.bind("<FocusOut>", lambda _x: self.close_dropdown_window(r))
|
2211
|
+
self.dropdown.window.bind("<Escape>", self.close_dropdown_window)
|
2208
2212
|
self.dropdown.window.focus_set()
|
2209
2213
|
redraw = True
|
2210
2214
|
self.dropdown.open = True
|
@@ -2245,12 +2249,12 @@ class RowIndex(tk.Canvas):
|
|
2245
2249
|
edited = self.set_cell_data_undo(r, datarn=datarn, value=selection, redraw=not redraw)
|
2246
2250
|
if edited:
|
2247
2251
|
try_binding(self.extra_end_edit_cell_func, event_data)
|
2248
|
-
self.focus_set()
|
2249
2252
|
self.MT.recreate_all_selection_boxes()
|
2253
|
+
self.focus_set()
|
2250
2254
|
self.hide_text_editor_and_dropdown(redraw=redraw)
|
2251
2255
|
|
2252
2256
|
def hide_text_editor_and_dropdown(self, redraw: bool = True) -> None:
|
2253
|
-
self.hide_text_editor(
|
2257
|
+
self.hide_text_editor()
|
2254
2258
|
self.hide_dropdown_window()
|
2255
2259
|
if redraw:
|
2256
2260
|
self.MT.refresh()
|
@@ -2520,7 +2524,7 @@ class RowIndex(tk.Canvas):
|
|
2520
2524
|
if not node.parent.children:
|
2521
2525
|
self.tree_open_ids.discard(node.parent)
|
2522
2526
|
|
2523
|
-
def
|
2527
|
+
def build_pid_causes_recursive_loop(self, iid: str, pid: str) -> bool:
|
2524
2528
|
return any(
|
2525
2529
|
i == pid
|
2526
2530
|
for i in chain(
|
@@ -2528,3 +2532,8 @@ class RowIndex(tk.Canvas):
|
|
2528
2532
|
islice(self.get_iid_ancestors(iid), 1, None),
|
2529
2533
|
)
|
2530
2534
|
)
|
2535
|
+
|
2536
|
+
def move_pid_causes_recursive_loop(self, to_move_iid: str, move_to_parent: str) -> bool:
|
2537
|
+
# if the parent the item is being moved under is one of the item's descendants
|
2538
|
+
# then it is a recursive loop
|
2539
|
+
return any(move_to_parent == diid for diid in self.get_iid_descendants(to_move_iid))
|
@@ -4711,7 +4711,7 @@ class Sheet(tk.Frame):
|
|
4711
4711
|
self.RI.tree[iid].text = row[text_column]
|
4712
4712
|
else:
|
4713
4713
|
self.RI.tree[iid] = Node(row[text_column], iid, "")
|
4714
|
-
if safety and (iid == pid or self.RI.
|
4714
|
+
if safety and (iid == pid or self.RI.build_pid_causes_recursive_loop(iid, pid)):
|
4715
4715
|
row[parent_column] = ""
|
4716
4716
|
pid = ""
|
4717
4717
|
if pid:
|
@@ -5041,7 +5041,8 @@ class Sheet(tk.Frame):
|
|
5041
5041
|
def move(self, item: str, parent: str, index: int | None = None) -> Sheet:
|
5042
5042
|
"""
|
5043
5043
|
Moves item to be under parent as child at index
|
5044
|
-
'parent' can be empty
|
5044
|
+
'parent' can be an empty str which will put the item at top level
|
5045
|
+
Performance is not great
|
5045
5046
|
"""
|
5046
5047
|
if (item := item.lower()) and item not in self.RI.tree:
|
5047
5048
|
raise ValueError(f"Item '{item}' does not exist.")
|
@@ -5050,25 +5051,61 @@ class Sheet(tk.Frame):
|
|
5050
5051
|
mapping = {}
|
5051
5052
|
to_show = []
|
5052
5053
|
item_node = self.RI.tree[item]
|
5054
|
+
item_r = self.RI.tree_rns[item]
|
5053
5055
|
if parent:
|
5054
|
-
if self.RI.
|
5056
|
+
if self.RI.move_pid_causes_recursive_loop(item, parent):
|
5055
5057
|
raise ValueError(f"iid '{item}' causes a recursive loop with parent '{parent}'.")
|
5056
5058
|
parent_node = self.RI.tree[parent]
|
5057
5059
|
if parent_node.children:
|
5058
5060
|
if index is None or index >= len(parent_node.children):
|
5059
|
-
index = len(parent_node.children)
|
5060
|
-
|
5061
|
-
|
5062
|
-
|
5063
|
-
|
5064
|
-
|
5065
|
-
|
5061
|
+
index = len(parent_node.children)
|
5062
|
+
new_r = self.RI.tree_rns[parent] + sum(1 for _ in self.RI.get_iid_descendants(parent))
|
5063
|
+
# new parent has children
|
5064
|
+
# index is on end
|
5065
|
+
# item row is less than move to row
|
5066
|
+
if item_r < new_r:
|
5067
|
+
r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
|
5068
|
+
|
5069
|
+
# new parent has children
|
5070
|
+
# index is on end
|
5071
|
+
# item row is greater than move to row
|
5072
|
+
else:
|
5073
|
+
r_ctr = new_r + 1
|
5066
5074
|
else:
|
5067
|
-
|
5075
|
+
new_r = self.RI.tree_rns[parent_node.children[index].iid]
|
5076
|
+
# new parent has children
|
5077
|
+
# index is not end
|
5078
|
+
# item row is less than move to row
|
5079
|
+
if item_r < new_r:
|
5080
|
+
if self.RI.items_parent(item) == parent:
|
5081
|
+
r_ctr = (
|
5082
|
+
new_r
|
5083
|
+
+ sum(1 for _ in self.RI.get_iid_descendants(parent_node.children[index].iid))
|
5084
|
+
- sum(1 for _ in self.RI.get_iid_descendants(item))
|
5085
|
+
)
|
5086
|
+
else:
|
5087
|
+
r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item)) - 1
|
5088
|
+
|
5089
|
+
# new parent has children
|
5090
|
+
# index is not end
|
5091
|
+
# item row is greater than move to row
|
5092
|
+
else:
|
5093
|
+
r_ctr = new_r
|
5068
5094
|
else:
|
5069
|
-
|
5070
|
-
|
5071
|
-
|
5095
|
+
index = 0
|
5096
|
+
new_r = self.RI.tree_rns[parent_node.iid]
|
5097
|
+
|
5098
|
+
# new parent doesn't have children
|
5099
|
+
# index always start
|
5100
|
+
# item row is less than move to row
|
5101
|
+
if item_r < new_r:
|
5102
|
+
r_ctr = new_r - sum(1 for _ in self.RI.get_iid_descendants(item))
|
5103
|
+
|
5104
|
+
# new parent doesn't have children
|
5105
|
+
# index always start
|
5106
|
+
# item row is greater than move to row
|
5107
|
+
else:
|
5108
|
+
r_ctr = new_r + 1
|
5072
5109
|
mapping[item_r] = r_ctr
|
5073
5110
|
if parent in self.RI.tree_open_ids and self.item_displayed(parent):
|
5074
5111
|
to_show.append(r_ctr)
|
@@ -5091,11 +5128,12 @@ class Sheet(tk.Frame):
|
|
5091
5128
|
else:
|
5092
5129
|
if (new_r := self.top_index_row(index)) is None:
|
5093
5130
|
new_r = self.top_index_row((sum(1 for _ in self.RI.gen_top_nodes()) - 1))
|
5094
|
-
item_r = self.RI.tree_rns[item]
|
5095
5131
|
if item_r < new_r:
|
5096
|
-
|
5097
|
-
|
5098
|
-
|
5132
|
+
r_ctr = (
|
5133
|
+
new_r
|
5134
|
+
+ sum(1 for _ in self.RI.get_iid_descendants(self.rowitem(new_r, data_index=True)))
|
5135
|
+
- sum(1 for _ in self.RI.get_iid_descendants(item))
|
5136
|
+
)
|
5099
5137
|
else:
|
5100
5138
|
r_ctr = new_r
|
5101
5139
|
mapping[item_r] = r_ctr
|
@@ -6258,13 +6296,7 @@ class Sheet(tk.Frame):
|
|
6258
6296
|
) -> Sheet:
|
6259
6297
|
kwargs = get_dropdown_kwargs(*args, **kwargs)
|
6260
6298
|
d = get_dropdown_dict(**kwargs)
|
6261
|
-
if kwargs["set_value"] is None
|
6262
|
-
if kwargs["values"] and (v := self.MT.get_cell_data(r, c)) not in kwargs["values"]:
|
6263
|
-
v = kwargs["values"][0]
|
6264
|
-
else:
|
6265
|
-
v == ""
|
6266
|
-
else:
|
6267
|
-
v = kwargs["set_value"]
|
6299
|
+
v = kwargs["set_value"] if kwargs["set_value"] is not None else kwargs["values"][0] if kwargs["values"] else ""
|
6268
6300
|
if isinstance(r, str) and r.lower() == "all" and isinstance(c, int):
|
6269
6301
|
for r_ in range(self.MT.total_data_rows()):
|
6270
6302
|
self._create_dropdown(r_, c, v, d)
|
@@ -163,17 +163,16 @@ class TopLeftRectangle(tk.Canvas):
|
|
163
163
|
recreate_selection_boxes: bool = True,
|
164
164
|
) -> None:
|
165
165
|
try:
|
166
|
-
|
167
|
-
if new_h is None:
|
168
|
-
h = self.winfo_height()
|
169
|
-
if new_w is None:
|
170
|
-
w = self.winfo_width()
|
171
|
-
if new_w:
|
172
|
-
self.config(width=new_w)
|
173
|
-
w = new_w
|
174
|
-
if new_h:
|
175
|
-
self.config(height=new_h)
|
166
|
+
if isinstance(new_h, int):
|
176
167
|
h = new_h
|
168
|
+
self.config(height=h)
|
169
|
+
else:
|
170
|
+
h = self.CH.current_height
|
171
|
+
if isinstance(new_w, int):
|
172
|
+
w = new_w
|
173
|
+
self.config(width=w)
|
174
|
+
else:
|
175
|
+
w = self.RI.current_width
|
177
176
|
except Exception:
|
178
177
|
return
|
179
178
|
self.coords(self.rw_box, 0, h - 5, w, h)
|
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
|
File without changes
|