fix: кнопка «✏️ Уточнить модель/кол-во» только для ПО/оборудования

- в окнах выбора из словаря инцидентов, угроз, критериев, мер,
  пользователей, СЗИ и ОКВЭД кнопка больше не показывается
- параметр allow_refine: включается только у hw_sw/os_sw/app_sw
  (там «уточнить модель» и количество действительно нужны)
This commit is contained in:
2026-08-04 18:01:27 +04:00
parent 6c2e4a0c38
commit 58b4402d31
+16 -8
View File
@@ -937,7 +937,7 @@ class DokoGenApp:
ttk.Button(btn, text="✏️ Редактировать",
command=lambda a=attr: self._edit_sw_item(getattr(self, a))).pack(fill=tk.X, pady=1)
ttk.Button(btn, text="📚 Из словаря",
command=lambda a=attr, d=dict_name: self._select_sw_from_dict(getattr(self, a), d)).pack(fill=tk.X, pady=1)
command=lambda a=attr, d=dict_name: self._select_sw_from_dict(getattr(self, a), d, allow_refine=True)).pack(fill=tk.X, pady=1)
setattr(self, attr, box)
sw_frame.columnconfigure(0, weight=1)
@@ -1639,15 +1639,19 @@ class DokoGenApp:
if item:
self.defense_tools_listbox.insert(tk.END, item)
def _select_sw_from_dict(self, listbox, dict_name):
"""Выбор позиций из словаря (JSON) — можно несколько."""
def _select_sw_from_dict(self, listbox, dict_name, allow_refine=False):
"""Выбор позиций из словаря (JSON) — можно несколько.
allow_refine=True — показывать кнопку «✏️ Уточнить модель/кол-во»
(только для ПО/оборудования, где это имеет смысл).
"""
import json
dict_path = os.path.join(os.path.dirname(__file__), 'dictionaries', dict_name)
try:
with open(dict_path, 'r', encoding='utf-8') as f:
items = json.load(f)
title = "Выбор из словаря"
self._select_from_dialog(title, items, listbox)
self._select_from_dialog(title, items, listbox, allow_refine=allow_refine)
except Exception as e:
messagebox.showerror("Ошибка", f"Не удалось загрузить словарь: {e}")
@@ -2168,8 +2172,11 @@ class DokoGenApp:
listbox.delete(sel[0])
# ==================== ВЫБОР ИЗ СПИСКА (словари) ====================
def _select_from_dialog(self, title: str, items: list, listbox):
"""Открывает окно с чекбоксами для выбора элементов из списка."""
def _select_from_dialog(self, title: str, items: list, listbox, allow_refine=False):
"""Открывает окно с чекбоксами для выбора элементов из списка.
allow_refine=True — показывать кнопку «✏️ Уточнить модель/кол-во».
"""
dialog = tk.Toplevel(self.root)
dialog.title(title)
dialog.geometry("720x680")
@@ -2253,8 +2260,9 @@ class DokoGenApp:
vars[new_text] = var
items_map[new_text] = (var, cb)
ttk.Button(btn_frame, text="✏️ Уточнить модель/кол-во",
command=_refine_selected).pack(side=tk.LEFT, padx=2)
if allow_refine:
ttk.Button(btn_frame, text="✏️ Уточнить модель/кол-во",
command=_refine_selected).pack(side=tk.LEFT, padx=2)
ttk.Button(btn_frame, text="Выбрать всё", command=_select_all).pack(side=tk.LEFT, padx=2)
ttk.Button(btn_frame, text="Снять всё", command=_clear_all).pack(side=tk.LEFT, padx=2)
ttk.Button(btn_frame, text="✅ Применить", command=_apply).pack(side=tk.RIGHT, padx=2)