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)
|
||||
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.setIcon(QIcon.fromTheme("user-trash"))
|
||||
self.delete_prefix_button.setToolTip("Удалить выбранный префикс")
|
||||
@@ -2293,6 +2300,7 @@ class WineHelperGUI(QMainWindow):
|
||||
self.current_managed_prefix_name = None
|
||||
self._setup_prefix_management_panel(None)
|
||||
self.delete_prefix_button.setEnabled(False)
|
||||
self.create_base_pfx_button.setEnabled(False)
|
||||
else:
|
||||
# Прокручиваем к выбранному элементу, чтобы он был виден в списке
|
||||
self.created_prefix_selector.view().scrollTo(
|
||||
@@ -2302,6 +2310,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.create_base_pfx_button.setEnabled(True)
|
||||
|
||||
def delete_selected_prefix(self):
|
||||
"""Удаляет префикс, выбранный в выпадающем списке на вкладке 'Менеджер префиксов'."""
|
||||
@@ -2366,6 +2375,50 @@ class WineHelperGUI(QMainWindow):
|
||||
else:
|
||||
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):
|
||||
"""Настраивает панель управления префиксом на основе текущего состояния."""
|
||||
is_prefix_selected = bool(prefix_name)
|
||||
@@ -4345,13 +4398,22 @@ class WineHelperGUI(QMainWindow):
|
||||
self.install_process.terminate()
|
||||
|
||||
def _handle_command_output(self):
|
||||
"""Обрабатывает вывод для диалога команды"""
|
||||
"""Обрабатывает вывод для общих команд в модальном диалоге."""
|
||||
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'):
|
||||
self.command_log_output.append(output)
|
||||
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):
|
||||
"""Обрабатывает завершение для диалога команды"""
|
||||
if exit_code == 0:
|
||||
|
Reference in New Issue
Block a user