tksheet 7.1.21__py3-none-any.whl → 7.1.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tksheet/row_index.py CHANGED
@@ -32,6 +32,7 @@ from .functions import (
32
32
  event_dict,
33
33
  get_n2a,
34
34
  is_contiguous,
35
+ new_tk_event,
35
36
  num2alpha,
36
37
  pickled_event_dict,
37
38
  rounded_box_coords,
@@ -48,9 +49,10 @@ from .text_editor import (
48
49
  TextEditor,
49
50
  )
50
51
  from .vars import (
51
- USER_OS,
52
52
  rc_binding,
53
53
  symbols_set,
54
+ text_editor_close_bindings,
55
+ text_editor_newline_bindings,
54
56
  text_editor_to_unbind,
55
57
  )
56
58
 
@@ -136,6 +138,13 @@ class RowIndex(tk.Canvas):
136
138
  self.tree_reset()
137
139
  self.basic_bindings()
138
140
 
141
+ def event_generate(self, *args, **kwargs) -> None:
142
+ for arg in args:
143
+ if self.MT and arg in self.MT.event_linker:
144
+ self.MT.event_linker[arg]()
145
+ else:
146
+ super().event_generate(*args, **kwargs)
147
+
139
148
  def basic_bindings(self, enable: bool = True) -> None:
140
149
  if enable:
141
150
  self.bind("<Motion>", self.mouse_motion)
@@ -835,6 +844,7 @@ class RowIndex(tk.Canvas):
835
844
  event_data = event_dict(
836
845
  name="move_rows",
837
846
  sheet=self.PAR.name,
847
+ widget=self,
838
848
  boxes=self.MT.get_boxes(),
839
849
  selected=self.MT.selected,
840
850
  value=r,
@@ -846,6 +856,7 @@ class RowIndex(tk.Canvas):
846
856
  to_move=self.dragged_row.to_move,
847
857
  ),
848
858
  move_data=self.PAR.ops.row_drag_and_drop_perform,
859
+ move_heights=self.PAR.ops.row_drag_and_drop_perform,
849
860
  event_data=event_data,
850
861
  )
851
862
  event_data["moved"]["rows"] = {
@@ -1011,7 +1022,7 @@ class RowIndex(tk.Canvas):
1011
1022
  w = self.PAR.ops.default_row_index_width
1012
1023
  h = self.MT.min_row_height
1013
1024
  if self.get_cell_kwargs(datarn, key="dropdown") or self.get_cell_kwargs(datarn, key="checkbox"):
1014
- w += self.MT.index_txt_height
1025
+ w += self.MT.index_txt_height + 2
1015
1026
  if self.PAR.ops.treeview:
1016
1027
  if datarn in self.cell_options and "align" in self.cell_options[datarn]:
1017
1028
  align = self.cell_options[datarn]["align"]
@@ -1181,23 +1192,22 @@ class RowIndex(tk.Canvas):
1181
1192
  self.MT.recreate_all_selection_boxes()
1182
1193
 
1183
1194
  def auto_set_index_width(self, end_row: int, only_rows: list) -> bool:
1184
- if self.PAR.ops.auto_resize_row_index:
1185
- if not isinstance(self.MT._row_index, int) and not self.MT._row_index:
1186
- if self.default_index == "letters":
1187
- new_w = self.MT.get_txt_w(f"{num2alpha(end_row)}") + 20
1188
- elif self.default_index == "numbers":
1189
- new_w = self.MT.get_txt_w(f"{end_row}") + 20
1190
- elif self.default_index == "both":
1191
- new_w = self.MT.get_txt_w(f"{end_row + 1} {num2alpha(end_row)}") + 20
1192
- elif self.PAR.ops.auto_resize_row_index is True:
1193
- new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
1194
- else:
1195
- new_w = None
1196
- if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.8)) < new_w:
1197
- new_w = sheet_w_x
1198
- if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 5):
1199
- self.set_width(new_w, set_TL=True)
1200
- return True
1195
+ if not isinstance(self.MT._row_index, int) and not self.MT._row_index:
1196
+ if self.default_index == "letters":
1197
+ new_w = self.MT.get_txt_w(f"{num2alpha(end_row)}") + 20
1198
+ elif self.default_index == "numbers":
1199
+ new_w = self.MT.get_txt_w(f"{end_row}") + 20
1200
+ elif self.default_index == "both":
1201
+ new_w = self.MT.get_txt_w(f"{end_row + 1} {num2alpha(end_row)}") + 20
1202
+ elif self.PAR.ops.auto_resize_row_index is True:
1203
+ new_w = self.set_width_of_index_to_text(only_rows=only_rows, set_width=False)
1204
+ else:
1205
+ new_w = None
1206
+ if new_w is not None and (sheet_w_x := floor(self.PAR.winfo_width() * 0.7)) < new_w:
1207
+ new_w = sheet_w_x
1208
+ if new_w and (self.current_width - new_w > 15 or new_w - self.current_width > 3):
1209
+ self.set_width(new_w, set_TL=True)
1210
+ return True
1201
1211
  return False
1202
1212
 
1203
1213
  def redraw_highlight_get_text_fg(self, fr, sr, r, c_2, c_3, selections, datarn):
@@ -1861,24 +1871,19 @@ class RowIndex(tk.Canvas):
1861
1871
  self.itemconfig(self.text_editor.canvas_id, state="normal")
1862
1872
  self.text_editor.open = True
1863
1873
  self.coords(self.text_editor.canvas_id, x, y)
1874
+ for b in text_editor_newline_bindings:
1875
+ self.text_editor.tktext.bind(b, self.text_editor_newline_binding)
1876
+ for b in text_editor_close_bindings:
1877
+ self.text_editor.tktext.bind(b, self.close_text_editor)
1864
1878
  if not dropdown:
1865
1879
  self.text_editor.tktext.focus_set()
1866
1880
  self.text_editor.window.scroll_to_bottom()
1867
- self.text_editor.tktext.bind("<Alt-Return>", lambda _x: self.text_editor_newline_binding(r=r))
1868
- self.text_editor.tktext.bind("<Alt-KP_Enter>", lambda _x: self.text_editor_newline_binding(r=r))
1869
- if USER_OS == "darwin":
1870
- self.text_editor.tktext.bind("<Option-Return>", lambda _x: self.text_editor_newline_binding(r=r))
1881
+ self.text_editor.tktext.bind("<FocusOut>", self.close_text_editor)
1871
1882
  for key, func in self.MT.text_editor_user_bound_keys.items():
1872
1883
  self.text_editor.tktext.bind(key, func)
1873
- self.text_editor.tktext.bind("<Tab>", lambda _x: self.close_text_editor((r, "Tab")))
1874
- self.text_editor.tktext.bind("<Return>", lambda _x: self.close_text_editor((r, "Return")))
1875
- self.text_editor.tktext.bind("<KP_Enter>", lambda _x: self.close_text_editor((r, "Return")))
1876
- if not dropdown:
1877
- self.text_editor.tktext.bind("<FocusOut>", lambda _x: self.close_text_editor((r, "FocusOut")))
1878
- self.text_editor.tktext.bind("<Escape>", lambda _x: self.close_text_editor((r, "Escape")))
1879
1884
  return True
1880
1885
 
1881
- def text_editor_newline_binding(self, r=0, c=0, event: object = None, check_lines=True):
1886
+ def text_editor_newline_binding(self, event: object = None, check_lines=True):
1882
1887
  if not self.height_resizing_enabled:
1883
1888
  return
1884
1889
  curr_height = self.text_editor.window.winfo_height()
@@ -1892,6 +1897,7 @@ class RowIndex(tk.Canvas):
1892
1897
  )
1893
1898
  > curr_height
1894
1899
  ):
1900
+ r = self.text_editor.row
1895
1901
  new_height = curr_height + self.MT.index_xtra_lines_increment
1896
1902
  space_bot = self.MT.get_space_bot(r)
1897
1903
  if new_height > space_bot:
@@ -1907,14 +1913,14 @@ class RowIndex(tk.Canvas):
1907
1913
  if anchor == "nw":
1908
1914
  self.coords(
1909
1915
  self.dropdown.canvas_id,
1910
- self.MT.col_positions[c],
1916
+ 0,
1911
1917
  self.MT.row_positions[r] + text_editor_h - 1,
1912
1918
  )
1913
1919
  self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
1914
1920
  elif anchor == "sw":
1915
1921
  self.coords(
1916
1922
  self.dropdown.canvas_id,
1917
- self.MT.col_positions[c],
1923
+ 0,
1918
1924
  self.MT.row_positions[r],
1919
1925
  )
1920
1926
  self.itemconfig(self.dropdown.canvas_id, anchor=anchor, height=win_h)
@@ -1968,29 +1974,32 @@ class RowIndex(tk.Canvas):
1968
1974
  self.focus_set()
1969
1975
 
1970
1976
  # r is displayed row
1971
- def close_text_editor(
1972
- self,
1973
- editor_info: tuple | None = None,
1974
- ) -> str | None:
1975
- focused = self.focus_get()
1977
+ def close_text_editor(self, event: tk.Event) -> Literal["break"] | None:
1978
+ # checking if text editor should be closed or not
1979
+ # errors if __tk_filedialog is open
1980
+ try:
1981
+ focused = self.focus_get()
1982
+ except Exception:
1983
+ focused = None
1976
1984
  try:
1977
1985
  if focused == self.text_editor.tktext.rc_popup_menu:
1978
1986
  return "break"
1979
1987
  except Exception:
1980
1988
  pass
1981
- if focused is None and editor_info:
1989
+ if focused is None:
1982
1990
  return "break"
1983
- if editor_info is not None and len(editor_info) >= 2 and editor_info[1] == "Escape":
1991
+ if event.keysym == "Escape":
1984
1992
  self.hide_text_editor_and_dropdown()
1985
1993
  return
1986
1994
  text_editor_value = self.text_editor.get()
1987
- r = editor_info[0]
1995
+ r = self.text_editor.row
1988
1996
  datarn = r if self.MT.all_rows_displayed else self.MT.displayed_rows[r]
1989
1997
  event_data = event_dict(
1990
1998
  name="end_edit_index",
1991
1999
  sheet=self.PAR.name,
2000
+ widget=self,
1992
2001
  cells_index={datarn: self.get_cell_data(datarn)},
1993
- key=editor_info[1] if len(editor_info) >= 2 else "FocusOut",
2002
+ key=event.keysym,
1994
2003
  value=text_editor_value,
1995
2004
  loc=r,
1996
2005
  row=r,
@@ -2014,7 +2023,7 @@ class RowIndex(tk.Canvas):
2014
2023
  try_binding(self.extra_end_edit_cell_func, event_data)
2015
2024
  self.MT.recreate_all_selection_boxes()
2016
2025
  self.hide_text_editor_and_dropdown()
2017
- if editor_info[1] != "FocusOut":
2026
+ if event.keysym != "FocusOut":
2018
2027
  self.focus_set()
2019
2028
  return "break"
2020
2029
 
@@ -2151,6 +2160,7 @@ class RowIndex(tk.Canvas):
2151
2160
  event_data = event_dict(
2152
2161
  name="end_edit_index",
2153
2162
  sheet=self.PAR.name,
2163
+ widget=self,
2154
2164
  cells_header={datarn: pre_edit_value},
2155
2165
  key="??",
2156
2166
  value=selection,
@@ -2182,7 +2192,7 @@ class RowIndex(tk.Canvas):
2182
2192
  def mouseclick_outside_editor_or_dropdown(self, inside: bool = False):
2183
2193
  closed_dd_coords = self.dropdown.get_coords()
2184
2194
  if self.text_editor.open:
2185
- self.close_text_editor((self.text_editor.row, "ButtonPress-1"))
2195
+ self.close_text_editor(new_tk_event("ButtonPress-1"))
2186
2196
  if closed_dd_coords is not None:
2187
2197
  self.hide_dropdown_window()
2188
2198
  if inside:
@@ -2220,6 +2230,7 @@ class RowIndex(tk.Canvas):
2220
2230
  event_data = event_dict(
2221
2231
  name="edit_index",
2222
2232
  sheet=self.PAR.name,
2233
+ widget=self,
2223
2234
  cells_index={datarn: self.get_cell_data(datarn)},
2224
2235
  boxes=self.MT.get_boxes(),
2225
2236
  selected=self.MT.selected,
@@ -2374,6 +2385,7 @@ class RowIndex(tk.Canvas):
2374
2385
  event_data = event_dict(
2375
2386
  name="end_edit_index",
2376
2387
  sheet=self.PAR.name,
2388
+ widget=self,
2377
2389
  cells_index={datarn: pre_edit_value},
2378
2390
  key="??",
2379
2391
  value=value,
@@ -2427,7 +2439,7 @@ class RowIndex(tk.Canvas):
2427
2439
 
2428
2440
  def get_treeview_indent(self, iid: str) -> int:
2429
2441
  if isinstance(self.PAR.ops.treeview_indent, str):
2430
- indent = self.MT.index_txt_height * int(self.PAR.ops.treeview_indent)
2442
+ indent = self.MT.index_txt_width * int(self.PAR.ops.treeview_indent)
2431
2443
  else:
2432
2444
  indent = self.PAR.ops.treeview_indent
2433
2445
  return indent * max(self.get_node_level(self.tree[iid]))