diff --git a/winehelper_gui.py b/winehelper_gui.py index 9df665b..f1f769b 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -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("Имя нового префикса:", self.prefix_name_edit) self.arch_groupbox = QGroupBox("Архитектура") @@ -1849,22 +1851,104 @@ class WineHelperGUI(QMainWindow): version_layout.addWidget(select_version_button) form_layout.addRow("Версия Wine/Proton:", 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""" +
+ Имя: {html.escape(info['name'])}
+ Архитектура: {html.escape(info['arch'])}
+ Версия Wine: {html.escape(info['wine_version'])}
+ Путь: {html.escape(info['path'])}