forked from CastroFidel/winehelper
added the Delete all WineHelper data button
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user