added the Delete all WineHelper data button

This commit is contained in:
Sergey Palcheh
2025-10-02 15:45:24 +06:00
parent 36f5c306c5
commit ad775e4644

View File

@@ -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(
"<h2>ВНИМАНИЕ!</h2>"
"<p>Это действие полностью и безвозвратно удалит <b>ВСЕ</b> данные, связанные с WineHelper, включая:</p>"
"<ul>"
"<li>Все созданные префиксы и установленные в них программы.</li>"
"<li>Все ярлыки в меню и на рабочем столе.</li>"
"<li>Все настройки, кэш и резервные копии.</li>"
"</ul>"
"<p>Продолжить?</p>"
)
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("<h3>Вы уверены, что хотите удалить ВСЁ?</h3><p>Это действие необратимо.</p>")
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