forked from CastroFidel/winehelper
simplifying logic in WinetricksManagerDialog
This commit is contained in:
@@ -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. Проверяем, есть ли изменения в чекбоксах (установка новых или снятие галочек с новых)
|
||||
|
Reference in New Issue
Block a user