forked from CastroFidel/winehelper
the prefix control unit has been added to the Create prefix tab
This commit is contained in:
@@ -1268,6 +1268,8 @@ class WineHelperGUI(QMainWindow):
|
||||
self.icon_animators = {}
|
||||
self.previous_tab_index = 0
|
||||
self.selected_wine_version_value = None
|
||||
self.last_created_prefix_name = None
|
||||
self.last_created_prefix_info = None
|
||||
|
||||
# State for command dialog log processing (specifically for prefix creation)
|
||||
self.command_output_buffer = ""
|
||||
@@ -1814,7 +1816,7 @@ class WineHelperGUI(QMainWindow):
|
||||
form_layout.setSpacing(10)
|
||||
|
||||
self.prefix_name_edit = QLineEdit()
|
||||
self.prefix_name_edit.setPlaceholderText("Например: 'm_prefix'")
|
||||
self.prefix_name_edit.setPlaceholderText("Например: my_prefix")
|
||||
form_layout.addRow("<b>Имя нового префикса:</b>", self.prefix_name_edit)
|
||||
|
||||
self.arch_groupbox = QGroupBox("Архитектура")
|
||||
@@ -1849,22 +1851,104 @@ class WineHelperGUI(QMainWindow):
|
||||
version_layout.addWidget(select_version_button)
|
||||
form_layout.addRow("<b>Версия Wine/Proton:</b>", version_layout)
|
||||
|
||||
layout.addLayout(form_layout)
|
||||
layout.addStretch()
|
||||
# --- GroupBox for managing the created prefix ---
|
||||
self.prefix_management_groupbox = QGroupBox("Управление префиксом")
|
||||
self.prefix_management_groupbox.setEnabled(False) # Disabled by default
|
||||
management_layout = QGridLayout(self.prefix_management_groupbox)
|
||||
management_layout.setSpacing(5)
|
||||
|
||||
# --- Left side: Buttons ---
|
||||
self.prefix_winetricks_button = QPushButton("Менеджер компонентов")
|
||||
self.prefix_winetricks_button.clicked.connect(
|
||||
lambda: self.open_winetricks_manager(prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_winetricks_button.setToolTip(
|
||||
"Установка компонентов, библиотек и шрифтов в префикс с помощью Winetricks.")
|
||||
management_layout.addWidget(self.prefix_winetricks_button, 0, 0)
|
||||
|
||||
self.prefix_winecfg_button = QPushButton("Редактор настроек")
|
||||
self.prefix_winecfg_button.clicked.connect(
|
||||
lambda: self._run_wine_util('winecfg', prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_winecfg_button.setToolTip(
|
||||
"Запуск утилиты winecfg для настройки параметров Wine (версия Windows, диски, аудио и т.д.).")
|
||||
management_layout.addWidget(self.prefix_winecfg_button, 0, 1)
|
||||
|
||||
self.prefix_regedit_button = QPushButton("Редактор реестра")
|
||||
self.prefix_regedit_button.clicked.connect(
|
||||
lambda: self._run_wine_util('regedit', prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_regedit_button.setToolTip(
|
||||
"Запуск редактора реестра Wine (regedit) для просмотра и изменения ключей реестра в префиксе.")
|
||||
management_layout.addWidget(self.prefix_regedit_button, 1, 0)
|
||||
|
||||
self.prefix_uninstaller_button = QPushButton("Удаление программ")
|
||||
self.prefix_uninstaller_button.clicked.connect(
|
||||
lambda: self._run_wine_util('uninstaller', prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_uninstaller_button.setToolTip(
|
||||
"Запуск стандартного деинсталлятора Wine для удаления установленных в префикс Windows-программ.")
|
||||
management_layout.addWidget(self.prefix_uninstaller_button, 1, 1)
|
||||
|
||||
self.prefix_cmd_button = QPushButton("Командная строка")
|
||||
self.prefix_cmd_button.clicked.connect(lambda: self._run_wine_util('cmd', prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_cmd_button.setToolTip("Запуск командной строки (cmd) в окружении выбранного префикса.")
|
||||
management_layout.addWidget(self.prefix_cmd_button, 2, 0)
|
||||
|
||||
self.prefix_winefile_button = QPushButton("Файловый менеджер")
|
||||
self.prefix_winefile_button.clicked.connect(
|
||||
lambda: self._run_wine_util('winefile', prefix_name=self.last_created_prefix_name))
|
||||
self.prefix_winefile_button.setToolTip("Запуск файлового менеджера Wine (winefile) для просмотра файлов внутри префикса.")
|
||||
management_layout.addWidget(self.prefix_winefile_button, 2, 1)
|
||||
|
||||
# --- Right side: Info display ---
|
||||
self.prefix_info_display = QTextBrowser()
|
||||
self.prefix_info_display.setReadOnly(True)
|
||||
self.prefix_info_display.setFrameStyle(QFrame.StyledPanel)
|
||||
management_layout.addWidget(self.prefix_info_display, 0, 2, 3, 1)
|
||||
|
||||
# Устанавливаем растяжение колонок, чтобы область кнопок и область информации были примерно равны
|
||||
management_layout.setColumnStretch(0, 1)
|
||||
management_layout.setColumnStretch(1, 1)
|
||||
management_layout.setColumnStretch(2, 2)
|
||||
|
||||
self.create_prefix_button = QPushButton("Создать префикс")
|
||||
self.create_prefix_button.setFont(QFont('Arial', 12, QFont.Bold))
|
||||
self.create_prefix_button.setStyleSheet("background-color: #0078d7; color: white;")
|
||||
self.create_prefix_button.setEnabled(False)
|
||||
self.create_prefix_button.clicked.connect(self.start_prefix_creation)
|
||||
layout.addWidget(self.create_prefix_button)
|
||||
|
||||
layout.addLayout(form_layout)
|
||||
layout.addWidget(self.create_prefix_button)
|
||||
layout.addWidget(self.prefix_management_groupbox)
|
||||
layout.addStretch()
|
||||
self.add_tab(self.prefix_tab, "Создать префикс")
|
||||
|
||||
self.arch_win32_radio.toggled.connect(self.clear_wine_version_selection)
|
||||
self.prefix_name_edit.textChanged.connect(self.update_create_prefix_button_state)
|
||||
self.prefix_name_edit.textChanged.connect(self.on_prefix_name_edited)
|
||||
self.wine_version_edit.textChanged.connect(self.update_create_prefix_button_state)
|
||||
|
||||
def on_prefix_name_edited(self, text):
|
||||
"""Сбрасывает состояние управления префиксом, когда пользователь вводит новое имя."""
|
||||
if text and self.prefix_management_groupbox.isEnabled():
|
||||
self.prefix_management_groupbox.setEnabled(False)
|
||||
self.prefix_management_groupbox.setTitle("Управление префиксом")
|
||||
self.last_created_prefix_name = None
|
||||
self.last_created_prefix_info = None
|
||||
self.prefix_info_display.clear()
|
||||
|
||||
def update_prefix_info_display(self):
|
||||
"""Обновляет информационный блок для созданного префикса."""
|
||||
if not self.last_created_prefix_info:
|
||||
self.prefix_info_display.clear()
|
||||
return
|
||||
|
||||
info = self.last_created_prefix_info
|
||||
html_content = f"""
|
||||
<p style="line-height: 1.3; font-size: 9pt;">
|
||||
<b>Имя:</b> {html.escape(info['name'])}<br>
|
||||
<b>Архитектура:</b> {html.escape(info['arch'])}<br>
|
||||
<b>Версия Wine:</b> {html.escape(info['wine_version'])}<br>
|
||||
<b>Путь:</b> {html.escape(info['path'])}</p>"""
|
||||
self.prefix_info_display.setHtml(html_content)
|
||||
|
||||
def create_help_tab(self):
|
||||
"""Создает вкладку 'Справка' с подвкладками"""
|
||||
help_tab = QWidget()
|
||||
@@ -1996,6 +2080,13 @@ class WineHelperGUI(QMainWindow):
|
||||
if not self._show_license_agreement_dialog():
|
||||
return
|
||||
|
||||
# Сбрасываем состояние управления предыдущим созданным префиксом
|
||||
self.last_created_prefix_name = None
|
||||
self.last_created_prefix_info = None
|
||||
self.prefix_info_display.clear()
|
||||
self.prefix_management_groupbox.setEnabled(False)
|
||||
self.prefix_management_groupbox.setTitle("Управление префиксом")
|
||||
|
||||
prefix_name = self.prefix_name_edit.text().strip()
|
||||
|
||||
if not prefix_name:
|
||||
@@ -2016,6 +2107,15 @@ class WineHelperGUI(QMainWindow):
|
||||
wine_use = self.selected_wine_version_value
|
||||
wine_use_display = self.wine_version_edit.text()
|
||||
|
||||
# Сохраняем информацию для отображения после создания
|
||||
self.last_created_prefix_info = {
|
||||
'name': prefix_name,
|
||||
'path': prefix_path,
|
||||
'arch': "32-bit" if wine_arch == "win32" else "64-bit",
|
||||
'type': 'Чистый' if base_pfx else 'С рекомендуемыми библиотеками',
|
||||
'wine_version': wine_use_display
|
||||
}
|
||||
|
||||
self.command_dialog = QDialog(self)
|
||||
self.command_dialog.setWindowTitle(f"Создание префикса: {prefix_name}")
|
||||
self.command_dialog.setMinimumSize(750, 400)
|
||||
@@ -2078,9 +2178,14 @@ class WineHelperGUI(QMainWindow):
|
||||
|
||||
self._handle_command_finished(exit_code, exit_status)
|
||||
if exit_code == 0:
|
||||
self.last_created_prefix_name = prefix_name
|
||||
self.prefix_management_groupbox.setTitle(f"Управление префиксом «{prefix_name}»")
|
||||
self.prefix_management_groupbox.setEnabled(True)
|
||||
self.update_prefix_info_display()
|
||||
self.prefix_name_edit.clear()
|
||||
self.wine_version_edit.clear()
|
||||
QMessageBox.information(self, "Успех", f"Префикс '{prefix_name}' успешно создан.")
|
||||
QMessageBox.information(self, "Успех",
|
||||
f"Префикс '{prefix_name}' успешно создан.\nТеперь вы можете управлять им с помощью кнопок ниже.")
|
||||
|
||||
def update_installed_apps(self):
|
||||
"""Обновляет список установленных приложений в виде кнопок"""
|
||||
@@ -2364,11 +2469,14 @@ class WineHelperGUI(QMainWindow):
|
||||
if msg_box.clickedButton() == yes_button:
|
||||
self._run_app_launcher(debug=True)
|
||||
|
||||
def open_winetricks_manager(self):
|
||||
def open_winetricks_manager(self, prefix_name=None):
|
||||
"""Открывает новый диалог для управления компонентами Winetricks."""
|
||||
prefix_name = self._get_prefix_name_for_selected_app()
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Менеджер Winetricks", "Сначала выберите установленное приложение, чтобы открыть менеджер для его префикса.")
|
||||
prefix_name = self._get_prefix_name_for_selected_app()
|
||||
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Менеджер Winetricks",
|
||||
"Не удалось определить префикс. Выберите установленное приложение или создайте новый префикс.")
|
||||
return
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
@@ -2395,11 +2503,14 @@ class WineHelperGUI(QMainWindow):
|
||||
dialog = WinetricksManagerDialog(prefix_path, winetricks_path, self)
|
||||
dialog.exec_()
|
||||
|
||||
def _run_wine_util(self, util_name):
|
||||
def _run_wine_util(self, util_name, prefix_name=None):
|
||||
"""Запускает стандартную утилиту Wine для выбранного префикса."""
|
||||
prefix_name = self._get_prefix_name_for_selected_app()
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Ошибка", "Сначала выберите установленное приложение.")
|
||||
prefix_name = self._get_prefix_name_for_selected_app()
|
||||
|
||||
if not prefix_name:
|
||||
QMessageBox.warning(self, "Ошибка",
|
||||
"Не удалось определить префикс. Выберите установленное приложение или создайте новый префикс.")
|
||||
return
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
|
Reference in New Issue
Block a user