added a prefix template creation button
This commit is contained in:
@@ -2097,6 +2097,13 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.created_prefix_selector.currentIndexChanged.connect(self.on_created_prefix_selected)
|
self.created_prefix_selector.currentIndexChanged.connect(self.on_created_prefix_selected)
|
||||||
selector_layout.addWidget(self.created_prefix_selector, 1)
|
selector_layout.addWidget(self.created_prefix_selector, 1)
|
||||||
|
|
||||||
|
self.create_base_pfx_button = QPushButton()
|
||||||
|
self.create_base_pfx_button.setIcon(QIcon.fromTheme("document-export"))
|
||||||
|
self.create_base_pfx_button.setToolTip("Создать шаблон из выбранного префикса (для опытных пользователей)")
|
||||||
|
self.create_base_pfx_button.setEnabled(False)
|
||||||
|
self.create_base_pfx_button.clicked.connect(self.create_base_prefix_from_selected)
|
||||||
|
selector_layout.addWidget(self.create_base_pfx_button)
|
||||||
|
|
||||||
self.delete_prefix_button = QPushButton()
|
self.delete_prefix_button = QPushButton()
|
||||||
self.delete_prefix_button.setIcon(QIcon.fromTheme("user-trash"))
|
self.delete_prefix_button.setIcon(QIcon.fromTheme("user-trash"))
|
||||||
self.delete_prefix_button.setToolTip("Удалить выбранный префикс")
|
self.delete_prefix_button.setToolTip("Удалить выбранный префикс")
|
||||||
@@ -2293,6 +2300,7 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.current_managed_prefix_name = None
|
self.current_managed_prefix_name = None
|
||||||
self._setup_prefix_management_panel(None)
|
self._setup_prefix_management_panel(None)
|
||||||
self.delete_prefix_button.setEnabled(False)
|
self.delete_prefix_button.setEnabled(False)
|
||||||
|
self.create_base_pfx_button.setEnabled(False)
|
||||||
else:
|
else:
|
||||||
# Прокручиваем к выбранному элементу, чтобы он был виден в списке
|
# Прокручиваем к выбранному элементу, чтобы он был виден в списке
|
||||||
self.created_prefix_selector.view().scrollTo(
|
self.created_prefix_selector.view().scrollTo(
|
||||||
@@ -2302,6 +2310,7 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.current_managed_prefix_name = prefix_name
|
self.current_managed_prefix_name = prefix_name
|
||||||
self._setup_prefix_management_panel(prefix_name)
|
self._setup_prefix_management_panel(prefix_name)
|
||||||
self.delete_prefix_button.setEnabled(True)
|
self.delete_prefix_button.setEnabled(True)
|
||||||
|
self.create_base_pfx_button.setEnabled(True)
|
||||||
|
|
||||||
def delete_selected_prefix(self):
|
def delete_selected_prefix(self):
|
||||||
"""Удаляет префикс, выбранный в выпадающем списке на вкладке 'Менеджер префиксов'."""
|
"""Удаляет префикс, выбранный в выпадающем списке на вкладке 'Менеджер префиксов'."""
|
||||||
@@ -2366,6 +2375,50 @@ class WineHelperGUI(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
QMessageBox.critical(self, "Ошибка удаления", f"Не удалось удалить префикс '{prefix_name}'.\nПодробности смотрите в логе.")
|
QMessageBox.critical(self, "Ошибка удаления", f"Не удалось удалить префикс '{prefix_name}'.\nПодробности смотрите в логе.")
|
||||||
|
|
||||||
|
def create_base_prefix_from_selected(self):
|
||||||
|
"""Создает шаблон префикса из выбранного в выпадающем списке."""
|
||||||
|
prefix_name = self.current_managed_prefix_name
|
||||||
|
if not prefix_name:
|
||||||
|
return
|
||||||
|
|
||||||
|
msg_box = QMessageBox(self)
|
||||||
|
msg_box.setIcon(QMessageBox.Question)
|
||||||
|
msg_box.setWindowTitle("Создание шаблона префикса")
|
||||||
|
msg_box.setText(
|
||||||
|
f"Будет создан 'шаблон' из префикса '{prefix_name}'.\n"
|
||||||
|
"Это продвинутая функция для создания базовых архивов префиксов.\n\n"
|
||||||
|
"Продолжить?"
|
||||||
|
)
|
||||||
|
|
||||||
|
yes_button = msg_box.addButton("Да, создать", QMessageBox.YesRole)
|
||||||
|
no_button = msg_box.addButton("Нет", QMessageBox.NoRole)
|
||||||
|
msg_box.setDefaultButton(no_button)
|
||||||
|
|
||||||
|
msg_box.exec_()
|
||||||
|
|
||||||
|
if msg_box.clickedButton() != yes_button:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.command_dialog = QDialog(self)
|
||||||
|
self.command_dialog.setWindowTitle(f"Создание шаблона: {prefix_name}")
|
||||||
|
self.command_dialog.setMinimumSize(750, 400)
|
||||||
|
self.command_dialog.setModal(True)
|
||||||
|
self.command_dialog.setWindowFlags(self.command_dialog.windowFlags() & ~Qt.WindowCloseButtonHint)
|
||||||
|
|
||||||
|
layout = QVBoxLayout()
|
||||||
|
self.command_log_output = QTextEdit()
|
||||||
|
self.command_log_output.setReadOnly(True)
|
||||||
|
layout.addWidget(self.command_log_output)
|
||||||
|
|
||||||
|
self.command_close_button = QPushButton("Закрыть")
|
||||||
|
self.command_close_button.setEnabled(False)
|
||||||
|
self.command_close_button.clicked.connect(self.command_dialog.close)
|
||||||
|
layout.addWidget(self.command_close_button)
|
||||||
|
self.command_dialog.setLayout(layout)
|
||||||
|
|
||||||
|
self._run_simple_command("create-base-pfx", [prefix_name])
|
||||||
|
self.command_dialog.exec_()
|
||||||
|
|
||||||
def _setup_prefix_management_panel(self, prefix_name):
|
def _setup_prefix_management_panel(self, prefix_name):
|
||||||
"""Настраивает панель управления префиксом на основе текущего состояния."""
|
"""Настраивает панель управления префиксом на основе текущего состояния."""
|
||||||
is_prefix_selected = bool(prefix_name)
|
is_prefix_selected = bool(prefix_name)
|
||||||
@@ -4345,13 +4398,22 @@ class WineHelperGUI(QMainWindow):
|
|||||||
self.install_process.terminate()
|
self.install_process.terminate()
|
||||||
|
|
||||||
def _handle_command_output(self):
|
def _handle_command_output(self):
|
||||||
"""Обрабатывает вывод для диалога команды"""
|
"""Обрабатывает вывод для общих команд в модальном диалоге."""
|
||||||
if hasattr(self, 'command_process') and self.command_process:
|
if hasattr(self, 'command_process') and self.command_process:
|
||||||
output = self.command_process.readAllStandardOutput().data().decode('utf-8', errors='ignore').strip()
|
# Используем readAll, чтобы получить и stdout, и stderr
|
||||||
|
output_bytes = self.command_process.readAll()
|
||||||
|
output = output_bytes.data().decode('utf-8', errors='ignore').strip()
|
||||||
if output and hasattr(self, 'command_log_output'):
|
if output and hasattr(self, 'command_log_output'):
|
||||||
self.command_log_output.append(output)
|
self.command_log_output.append(output)
|
||||||
QApplication.processEvents()
|
QApplication.processEvents()
|
||||||
|
|
||||||
|
def _run_simple_command(self, command, args=None):
|
||||||
|
"""Запускает простую команду winehelper и выводит лог."""
|
||||||
|
self.command_process = QProcess(self.command_dialog)
|
||||||
|
self.command_process.setProcessChannelMode(QProcess.MergedChannels)
|
||||||
|
self.command_process.readyReadStandardOutput.connect(self._handle_command_output)
|
||||||
|
self.command_process.finished.connect(self._handle_command_finished)
|
||||||
|
self.command_process.start(self.winehelper_path, [command] + (args or []))
|
||||||
def _handle_command_finished(self, exit_code, exit_status):
|
def _handle_command_finished(self, exit_code, exit_status):
|
||||||
"""Обрабатывает завершение для диалога команды"""
|
"""Обрабатывает завершение для диалога команды"""
|
||||||
if exit_code == 0:
|
if exit_code == 0:
|
||||||
|
Reference in New Issue
Block a user