diff --git a/winehelper_gui.py b/winehelper_gui.py index 17803418..4dae2eab 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -13,7 +13,7 @@ from functools import partial from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QTabWidget, QTabBar, QTextEdit, QFileDialog, QMessageBox, QLineEdit, QCheckBox, QStackedWidget, QScrollArea, QFormLayout, QGroupBox, QRadioButton, QComboBox, QListWidget, QListWidgetItem, QGridLayout, QFrame, QDialog, QTextBrowser, QInputDialog, QDialogButtonBox, QSystemTrayIcon, QMenu) -from PyQt5.QtCore import Qt, QProcess, QSize, QTimer, QProcessEnvironment, QPropertyAnimation, QEasingCurve +from PyQt5.QtCore import Qt, QProcess, QSize, QTimer, QProcessEnvironment, QPropertyAnimation, QEasingCurve, pyqtSignal from PyQt5.QtGui import QIcon, QFont, QTextCursor, QPixmap, QPainter, QCursor from PyQt5.QtNetwork import QLocalServer, QLocalSocket @@ -428,6 +428,8 @@ class WinetricksManagerDialog(QDialog): "Для переустановки компонента: Выделите его в списке и нажмите кнопку «Переустановить»." ) + installation_complete = pyqtSignal() + def __init__(self, prefix_path, winetricks_path, parent=None, wine_executable=None): super().__init__(parent) self.prefix_path = prefix_path @@ -885,6 +887,7 @@ class WinetricksManagerDialog(QDialog): # Перезагружаем данные, чтобы обновить состояние self.initial_states.clear() self.load_all_categories() + self.installation_complete.emit() self.installation_finished = True def closeEvent(self, event): @@ -2630,19 +2633,39 @@ class WineHelperGUI(QMainWindow): self.esync_button.blockSignals(False) self.fsync_button.blockSignals(False) + # --- Чтение и отображение установленных компонентов Winetricks --- + winetricks_log_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name, "winetricks.log") + installed_verbs = [] + if os.path.exists(winetricks_log_path): + try: + with open(winetricks_log_path, 'r', encoding='utf-8') as f: + for line in f: + verb = line.split('#', 1)[0].strip() + if verb: + installed_verbs.append(verb) + except IOError as e: + print(f"Ошибка чтения winetricks.log: {e}") + + # Фильтруем служебные компоненты, чтобы не засорять вывод + verbs_to_ignore = { + 'isolate_home', 'winxp', 'win7', 'win10', 'win11', + 'vista', 'win2k', 'win2k3', 'win2k8', 'win8', 'win81', + 'workaround', 'internal' + } + display_verbs = sorted([v for v in installed_verbs if v not in verbs_to_ignore]) + # Карта для красивого отображения известных переменных display_map = { "WINEPREFIX": ("Путь", lambda v: v), "WINEARCH": ("Архитектура", lambda v: "64-bit" if v == "win64" else "32-bit"), "WH_WINE_USE": ("Версия Wine", lambda v: "Системная" if v == "system" else v), - "BASE_PFX": ("Тип", lambda v: 'Чистый' if v == "none" else 'С рекомендуемыми библиотеками'), "DXVK_VER": ("Версия DXVK", lambda v: v if v else "Не установлено"), "VKD3D_VER": ("Версия VKD3D", lambda v: v if v else "Не установлено"), "WINEESYNC": ("ESync", lambda v: "Включен" if v == "1" else "Выключен"), "WINEFSYNC": ("FSync", lambda v: "Включен" if v == "1" else "Выключен"), "WH_XDG_OPEN": ("Ассоциации файлов", lambda v: v if v and v != "0" else "Не заданы"), } - display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "BASE_PFX", "DXVK_VER", "VKD3D_VER", "WINEESYNC", "WINEFSYNC", "WH_XDG_OPEN"] + display_order = ["WINEPREFIX", "WINEARCH", "WH_WINE_USE", "DXVK_VER", "VKD3D_VER", "WINEESYNC", "WINEFSYNC", "WH_XDG_OPEN"] html_content = f'
'
html_content += f"Имя: {html.escape(prefix_name)}
"
@@ -2664,6 +2687,15 @@ class WineHelperGUI(QMainWindow):
html_content += "
Дополнительные параметры:
"
html_content += other_vars_html
+ html_content += "
Компоненты (Winetricks): "
+ if display_verbs:
+ # Используем span вместо div, чтобы избежать лишних отступов
+ html_content += ''
+ html_content += ", ".join(html.escape(v) for v in display_verbs)
+ html_content += ''
+ else:
+ html_content += "Не установлены"
+
html_content += "