From ad775e46441b29a96b093efab4337af18c83ac12 Mon Sep 17 00:00:00 2001 From: Sergey Palcheh Date: Thu, 2 Oct 2025 15:45:24 +0600 Subject: [PATCH] added the Delete all WineHelper data button --- winehelper_gui.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/winehelper_gui.py b/winehelper_gui.py index 636f49e..57362d8 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -2323,6 +2323,24 @@ class WineHelperGUI(QMainWindow): management_layout.setColumnStretch(2, 2) container_layout.addWidget(self.prefix_management_groupbox) + + # --- Кнопка полного удаления --- + # Добавляем разделитель и кнопку в основной контейнер управления + container_layout.addSpacing(15) + self.remove_all_button = QPushButton("Удалить все данные WineHelper") + self.remove_all_button.setStyleSheet(""" + QPushButton:!disabled { + background-color: #d32f2f; + color: white; + padding: 5px; + } + """) + self.remove_all_button.setMinimumHeight(32) + self.remove_all_button.setFont(QFont('Arial', 10, QFont.Bold)) + self.remove_all_button.setToolTip("ВНИМАНИЕ: Удаляет ВСЕ данные WineHelper, включая все префиксы, настройки и ярлыки.") + self.remove_all_button.clicked.connect(self.remove_all_data) + container_layout.addWidget(self.remove_all_button) + layout.addWidget(self.management_container_groupbox) layout.addStretch() self.add_tab(self.prefix_tab, "Менеджер префиксов") @@ -2364,6 +2382,7 @@ class WineHelperGUI(QMainWindow): prefix_names = [] self.created_prefix_selector.blockSignals(True) + self.remove_all_button.setEnabled(bool(prefix_names)) self.created_prefix_selector.clear() if prefix_names: self.created_prefix_selector.addItems(prefix_names) @@ -2379,6 +2398,7 @@ class WineHelperGUI(QMainWindow): self.current_managed_prefix_name = None self._setup_prefix_management_panel(None) self.delete_prefix_button.setEnabled(False) + self.remove_all_button.setEnabled(False) self.create_base_pfx_button.setEnabled(False) else: # Прокручиваем к выбранному элементу, чтобы он был виден в списке @@ -2389,6 +2409,7 @@ class WineHelperGUI(QMainWindow): self.current_managed_prefix_name = prefix_name self._setup_prefix_management_panel(prefix_name) self.delete_prefix_button.setEnabled(True) + self.remove_all_button.setEnabled(True) self.create_base_pfx_button.setEnabled(True) def delete_selected_prefix(self): @@ -3842,6 +3863,55 @@ class WineHelperGUI(QMainWindow): QMessageBox.critical(self, "Ошибка", f"Не удалось обработать команду запуска:\n{command_str}\n\nОшибка: {str(e)}") + def remove_all_data(self): + """Запускает процесс полного удаления всех данных WineHelper.""" + # Первое подтверждение + msg_box1 = QMessageBox(self) + msg_box1.setIcon(QMessageBox.Critical) + msg_box1.setWindowTitle('Подтверждение полного удаления') + msg_box1.setText( + "

ВНИМАНИЕ!

" + "

Это действие полностью и безвозвратно удалит ВСЕ данные, связанные с WineHelper, включая:

" + "" + "

Продолжить?

" + ) + msg_box1.setTextFormat(Qt.RichText) + yes_button1 = msg_box1.addButton("Да, я понимаю", QMessageBox.YesRole) + no_button1 = msg_box1.addButton("Отмена", QMessageBox.NoRole) + msg_box1.setDefaultButton(no_button1) + msg_box1.exec_() + + if msg_box1.clickedButton() != yes_button1: + return + + # Второе, финальное подтверждение + msg_box2 = QMessageBox(self) + msg_box2.setIcon(QMessageBox.Critical) + msg_box2.setWindowTitle('Последнее предупреждение') + msg_box2.setText("

Вы уверены, что хотите удалить ВСЁ?

Это действие необратимо.

") + msg_box2.setTextFormat(Qt.RichText) + yes_button2 = msg_box2.addButton("Да, удалить всё", QMessageBox.DestructiveRole) + no_button2 = msg_box2.addButton("Нет, я передумал", QMessageBox.RejectRole) + msg_box2.setDefaultButton(no_button2) + msg_box2.exec_() + + if msg_box2.clickedButton() != yes_button2: + return + + # Запускаем команду и выходим из приложения + try: + # Запускаем команду в фоне и не ждем ее завершения + subprocess.Popen([self.winehelper_path, "remove-all", "--force"]) + # Сообщаем пользователю и закрываем GUI + QMessageBox.information(self, "Удаление", "Запущена процедура удаления WineHelper. Приложение будет закрыто.") + self.quit_application() + except Exception as e: + QMessageBox.critical(self, "Ошибка", f"Не удалось запустить команду удаления: {e}") + def quit_application(self): """Инициирует процесс выхода из приложения.""" self.is_quitting = True