simplifying logic in WinetricksManagerDialog

This commit is contained in:
Sergey Palcheh
2025-08-15 10:36:11 +06:00
parent c1e58bb8a1
commit 4e1c3e787d

View File

@@ -525,7 +525,7 @@ class WinetricksManagerDialog(QDialog):
layout.addWidget(search_edit)
list_widget = QListWidget()
list_widget.itemChanged.connect(self._on_item_changed)
list_widget.itemChanged.connect(self._update_ui_state)
list_widget.currentItemChanged.connect(self._update_ui_state)
layout.addWidget(list_widget)
@@ -651,8 +651,18 @@ class WinetricksManagerDialog(QDialog):
item = QListWidgetItem(item_text)
item.setData(Qt.UserRole, name)
item.setFont(QFont("DejaVu Sans Mono", 10))
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked if is_checked else Qt.Unchecked)
if is_checked:
# Если компонент уже установлен, делаем его неинтерактивным,
# так как удаление не поддерживается. Переустановка - через отдельную кнопку.
item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Checked)
item.setToolTip("Этот компонент уже установлен. Для переустановки выделите его и нажмите кнопку 'Переустановить'.")
else:
# Для неустановленных компонентов разрешаем установку через чекбокс.
item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
item.setCheckState(Qt.Unchecked)
list_widget.addItem(item)
self.initial_states[name] = is_checked
@@ -718,21 +728,6 @@ class WinetricksManagerDialog(QDialog):
self.status_label.setText("Готово.")
self._update_ui_state()
def _on_item_changed(self, item):
"""Обрабатывает изменение состояния чекбокса, предотвращая снятие галочки с установленных."""
name = item.data(Qt.UserRole)
# Если компонент был изначально установлен и пользователь пытается его снять
if name in self.initial_states and self.initial_states.get(name) is True:
if item.checkState() == Qt.Unchecked:
# Блокируем сигналы, чтобы избежать рекурсии, и возвращаем галочку на место.
list_widget = item.listWidget()
if list_widget:
list_widget.blockSignals(True)
item.setCheckState(Qt.Checked)
if list_widget:
list_widget.blockSignals(False)
self._update_ui_state()
def _update_ui_state(self, *args):
"""Централизованно обновляет состояние кнопок 'Применить' и 'Переустановить'."""
# 1. Проверяем, есть ли изменения в чекбоксах (установка новых или снятие галочек с новых)