Skip to content

Commit bd7541e

Browse files
committed
редактор обьект теперь удаляется один только
1 parent c88f043 commit bd7541e

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

editor.py

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,7 @@ def _create_ui(self):
604604
self.visible_cb.pack(anchor="w", padx=5, pady=(0, 5))
605605

606606
ttk.Button(props, text="Применить к выбранному", command=self.apply_props).pack(fill="x", padx=5, pady=5)
607+
ttk.Button(props, text="- Удалить выбранные", command=self.delete_selected_items).pack(fill="x", padx=5, pady=5)
607608

608609
# ---- Вкладка "Логика групп" ----
609610
groups_frame = ttk.LabelFrame(groups_tab, text="Логика групп")
@@ -1799,6 +1800,54 @@ def send_backward(self):
17991800
logger.info("Sent selection backward")
18001801
self.save_to_history("Перемещение назад")
18011802

1803+
def delete_selected_items(self):
1804+
"""Удаляет выбранные элементы с холста"""
1805+
if not self.current_selection:
1806+
messagebox.showwarning("Нет выбора", "Сначала выберите элемент(ы)")
1807+
return
1808+
1809+
confirm = messagebox.askyesno(
1810+
"Удаление элементов",
1811+
f"Вы уверены, что хотите удалить {len(self.current_selection)} выбранных элементов?"
1812+
)
1813+
1814+
if not confirm:
1815+
return
1816+
1817+
# Удаляем выбранные элементы из списка items
1818+
items_to_remove = set(self.current_selection)
1819+
self.items = [ci for ci in self.items if ci not in items_to_remove]
1820+
1821+
# Удаляем соответствующие слои из модели
1822+
layer_names_to_remove = {ci.layer.get("name") for ci in items_to_remove}
1823+
self.model["layers"] = [layer for layer in self.model.get("layers", [])
1824+
if layer.get("name") not in layer_names_to_remove]
1825+
1826+
# Обновляем группы: удаляем ссылки на удаленные слои
1827+
for group in self.model.get("groups", []):
1828+
if "children" in group:
1829+
group["children"] = [child for child in group["children"]
1830+
if child not in layer_names_to_remove]
1831+
1832+
# Сбрасываем выделение
1833+
for ci in self.current_selection:
1834+
if hasattr(ci, '_tk_images'):
1835+
ci._tk_images.clear()
1836+
1837+
self.current_selection = []
1838+
self.clear_props_fields()
1839+
1840+
# Обновляем интерфейс
1841+
self._save_tree_state()
1842+
self.tree_state["preserve_selection"] = False
1843+
1844+
self.refresh_tree()
1845+
self._canvas_cache_valid = False
1846+
self.redraw_canvas()
1847+
1848+
logger.info(f"Deleted {len(items_to_remove)} selected items")
1849+
self.save_to_history("Удаление выбранных элементов")
1850+
18021851
def apply_group_logic(self):
18031852
"""Применяет логику группы"""
18041853
if not self.selected_group:
@@ -2584,7 +2633,6 @@ def refresh_import_list(self):
25842633
icon = "GIF" if is_gif else "PNG"
25852634
ttk.Label(row, text=f"{icon}: {fname}", width=20).pack(side="left", padx=2)
25862635
ttk.Button(row, text="+", width=2, command=lambda f=fname: self.add_to_canvas(f)).pack(side="left", padx=2)
2587-
ttk.Button(row, text="-", width=2, command=lambda f=fname: self.remove_from_canvas_by_file(f)).pack(side="left", padx=2)
25882636
ttk.Button(row, text="🗑️", width=2, command=lambda f=fname: self.delete_file(f)).pack(side="left", padx=2)
25892637

25902638
def clear_props_fields(self):

0 commit comments

Comments
 (0)