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