diff --git a/winehelper_gui.py b/winehelper_gui.py index 174fb84..39b2c2d 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -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. Проверяем, есть ли изменения в чекбоксах (установка новых или снятие галочек с новых)