From 39c0db91a639ddd9b120002b8062cc8d498e964b Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 14:09:20 +0700 Subject: [PATCH 1/7] feat(dialogs): rewrite class AddGameDialog from @Vector_null --- portprotonqt/dialogs.py | 70 ++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 679fa52..ae74b43 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -6,7 +6,7 @@ from PySide6.QtWidgets import ( QDialog, QLineEdit, QFormLayout, QPushButton, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem ) -from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase +from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer from icoextract import IconExtractor, IconExtractorError from PIL import Image from portprotonqt.config_utils import get_portproton_location @@ -383,15 +383,16 @@ class AddGameDialog(QDialog): self.theme_manager = ThemeManager() self.edit_mode = edit_mode self.original_name = game_name - self.last_exe_path = exe_path # Store last selected exe path - self.last_cover_path = cover_path # Store last selected cover path self.setWindowTitle(_("Edit Game") if edit_mode else _("Add Game")) self.setModal(True) + self.setFixedWidth(600) self.setStyleSheet(self.theme.MAIN_WINDOW_STYLE + self.theme.MESSAGE_BOX_STYLE) layout = QFormLayout(self) layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft) + layout.setFormAlignment(Qt.AlignmentFlag.AlignLeft) + layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Game name self.nameEdit = QLineEdit(self) @@ -399,46 +400,60 @@ class AddGameDialog(QDialog): if game_name: self.nameEdit.setText(game_name) name_label = QLabel(_("Game Name:")) - name_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + name_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(name_label, self.nameEdit) # Exe path + exe_label = QLabel(_("Path to Executable:")) + exe_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + self.exeEdit = QLineEdit(self) self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if exe_path: self.exeEdit.setText(exe_path) + exeBrowseButton = QPushButton(_("Browse..."), self) exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) exeBrowseButton.clicked.connect(self.browseExe) + exeBrowseButton.setObjectName("exeBrowseButton") # Для поиска кнопки - exeLayout = QHBoxLayout() - exeLayout.addWidget(self.exeEdit) - exeLayout.addWidget(exeBrowseButton) - exe_label = QLabel(_("Path to Executable:")) - exe_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - layout.addRow(exe_label, exeLayout) + # Добавляем поле ввода для exe + layout.addRow(exe_label, self.exeEdit) + + # Добавляем кнопку обзора под полем ввода с выравниванием + empty_label = QLabel("") + empty_label.setFixedWidth(exe_label.sizeHint().width()) + layout.addRow(empty_label, exeBrowseButton) # Cover path + cover_label = QLabel(_("Custom Cover:")) + cover_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + self.coverEdit = QLineEdit(self) self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if cover_path: self.coverEdit.setText(cover_path) + coverBrowseButton = QPushButton(_("Browse..."), self) coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) coverBrowseButton.clicked.connect(self.browseCover) + coverBrowseButton.setObjectName("coverBrowseButton") # Для поиска кнопки - coverLayout = QHBoxLayout() - coverLayout.addWidget(self.coverEdit) - coverLayout.addWidget(coverBrowseButton) - cover_label = QLabel(_("Custom Cover:")) - cover_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - layout.addRow(cover_label, coverLayout) + # Добавляем поле ввода для обложки + layout.addRow(cover_label, self.coverEdit) + + # Добавляем кнопку обзора под полем ввода с выравниванием + layout.addRow(empty_label, coverBrowseButton) # Preview self.coverPreview = QLabel(self) self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }") preview_label = QLabel(_("Cover Preview:")) - preview_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + preview_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(preview_label, self.coverPreview) # Dialog buttons @@ -452,21 +467,28 @@ class AddGameDialog(QDialog): self.button_layout.addWidget(self.cancel_button) layout.addRow(self.button_layout) + # Подключение сигналов self.select_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) - self.coverEdit.textChanged.connect(self.updatePreview) self.exeEdit.textChanged.connect(self.updatePreview) + # Установка одинаковой ширины для кнопок и полей ввода + def update_button_widths(): + exeBrowseButton.setFixedWidth(self.exeEdit.width()) + coverBrowseButton.setFixedWidth(self.coverEdit.width()) + + # Вызываем после отображения окна, когда размеры установлены, чтобы реально дождаться, когда всё сформируется + QTimer.singleShot(0, update_button_widths) + + # Обновляем превью, если в режиме редактирования if edit_mode: self.updatePreview() def browseExe(self): """Открывает файловый менеджер для выбора exe-файла""" try: - # Use last_exe_path if available and valid, otherwise fallback to home - initial_path = os.path.dirname(self.last_exe_path) if self.last_exe_path and os.path.isfile(self.last_exe_path) else None - file_explorer = FileExplorer(self, file_filter='.exe', initial_path=initial_path) + file_explorer = FileExplorer(self, file_filter='.exe') file_explorer.file_signal.file_selected.connect(self.onExeSelected) # Центрируем FileExplorer относительно родительского виджета @@ -485,7 +507,6 @@ class AddGameDialog(QDialog): def onExeSelected(self, file_path): """Обработчик выбора файла в FileExplorer""" self.exeEdit.setText(file_path) - self.last_exe_path = file_path # Update last selected exe path if not self.edit_mode: # Автоматически заполняем имя игры, если не в режиме редактирования game_name = os.path.splitext(os.path.basename(file_path))[0] @@ -497,9 +518,7 @@ class AddGameDialog(QDialog): def browseCover(self): """Открывает файловый менеджер для выбора изображения обложки""" try: - # Use last_cover_path if available and valid, otherwise fallback to home - initial_path = os.path.dirname(self.last_cover_path) if self.last_cover_path and os.path.isfile(self.last_cover_path) else None - file_explorer = FileExplorer(self, file_filter=('.png', '.jpg', '.jpeg', '.bmp'), initial_path=initial_path) + file_explorer = FileExplorer(self, file_filter=('.png', '.jpg', '.jpeg', '.bmp')) file_explorer.file_signal.file_selected.connect(self.onCoverSelected) # Центрируем FileExplorer относительно родительского виджета @@ -519,7 +538,6 @@ class AddGameDialog(QDialog): """Обработчик выбора файла обложки в FileExplorer""" if file_path and os.path.splitext(file_path)[1].lower() in ('.png', '.jpg', '.jpeg', '.bmp'): self.coverEdit.setText(file_path) - self.last_cover_path = file_path # Update last selected cover path else: logger.warning(f"Selected file is not a valid image: {file_path}") -- 2.49.0 From 46eab703fe947c336dbc12d2972d8538540fd3b2 Mon Sep 17 00:00:00 2001 From: Dervart Date: Sun, 29 Jun 2025 07:21:14 +0000 Subject: [PATCH 2/7] revert 39c0db91a639ddd9b120002b8062cc8d498e964b revert feat(dialogs): rewrite class AddGameDialog from @Vector_null --- portprotonqt/dialogs.py | 70 +++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index ae74b43..679fa52 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -6,7 +6,7 @@ from PySide6.QtWidgets import ( QDialog, QLineEdit, QFormLayout, QPushButton, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem ) -from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer +from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase from icoextract import IconExtractor, IconExtractorError from PIL import Image from portprotonqt.config_utils import get_portproton_location @@ -383,16 +383,15 @@ class AddGameDialog(QDialog): self.theme_manager = ThemeManager() self.edit_mode = edit_mode self.original_name = game_name + self.last_exe_path = exe_path # Store last selected exe path + self.last_cover_path = cover_path # Store last selected cover path self.setWindowTitle(_("Edit Game") if edit_mode else _("Add Game")) self.setModal(True) - self.setFixedWidth(600) self.setStyleSheet(self.theme.MAIN_WINDOW_STYLE + self.theme.MESSAGE_BOX_STYLE) layout = QFormLayout(self) layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft) - layout.setFormAlignment(Qt.AlignmentFlag.AlignLeft) - layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Game name self.nameEdit = QLineEdit(self) @@ -400,60 +399,46 @@ class AddGameDialog(QDialog): if game_name: self.nameEdit.setText(game_name) name_label = QLabel(_("Game Name:")) - name_label.setStyleSheet( - self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + name_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(name_label, self.nameEdit) # Exe path - exe_label = QLabel(_("Path to Executable:")) - exe_label.setStyleSheet( - self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - self.exeEdit = QLineEdit(self) self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if exe_path: self.exeEdit.setText(exe_path) - exeBrowseButton = QPushButton(_("Browse..."), self) exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) exeBrowseButton.clicked.connect(self.browseExe) - exeBrowseButton.setObjectName("exeBrowseButton") # Для поиска кнопки - # Добавляем поле ввода для exe - layout.addRow(exe_label, self.exeEdit) - - # Добавляем кнопку обзора под полем ввода с выравниванием - empty_label = QLabel("") - empty_label.setFixedWidth(exe_label.sizeHint().width()) - layout.addRow(empty_label, exeBrowseButton) + exeLayout = QHBoxLayout() + exeLayout.addWidget(self.exeEdit) + exeLayout.addWidget(exeBrowseButton) + exe_label = QLabel(_("Path to Executable:")) + exe_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + layout.addRow(exe_label, exeLayout) # Cover path - cover_label = QLabel(_("Custom Cover:")) - cover_label.setStyleSheet( - self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - self.coverEdit = QLineEdit(self) self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if cover_path: self.coverEdit.setText(cover_path) - coverBrowseButton = QPushButton(_("Browse..."), self) coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) coverBrowseButton.clicked.connect(self.browseCover) - coverBrowseButton.setObjectName("coverBrowseButton") # Для поиска кнопки - # Добавляем поле ввода для обложки - layout.addRow(cover_label, self.coverEdit) - - # Добавляем кнопку обзора под полем ввода с выравниванием - layout.addRow(empty_label, coverBrowseButton) + coverLayout = QHBoxLayout() + coverLayout.addWidget(self.coverEdit) + coverLayout.addWidget(coverBrowseButton) + cover_label = QLabel(_("Custom Cover:")) + cover_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + layout.addRow(cover_label, coverLayout) # Preview self.coverPreview = QLabel(self) self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }") preview_label = QLabel(_("Cover Preview:")) - preview_label.setStyleSheet( - self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + preview_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(preview_label, self.coverPreview) # Dialog buttons @@ -467,28 +452,21 @@ class AddGameDialog(QDialog): self.button_layout.addWidget(self.cancel_button) layout.addRow(self.button_layout) - # Подключение сигналов self.select_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) + self.coverEdit.textChanged.connect(self.updatePreview) self.exeEdit.textChanged.connect(self.updatePreview) - # Установка одинаковой ширины для кнопок и полей ввода - def update_button_widths(): - exeBrowseButton.setFixedWidth(self.exeEdit.width()) - coverBrowseButton.setFixedWidth(self.coverEdit.width()) - - # Вызываем после отображения окна, когда размеры установлены, чтобы реально дождаться, когда всё сформируется - QTimer.singleShot(0, update_button_widths) - - # Обновляем превью, если в режиме редактирования if edit_mode: self.updatePreview() def browseExe(self): """Открывает файловый менеджер для выбора exe-файла""" try: - file_explorer = FileExplorer(self, file_filter='.exe') + # Use last_exe_path if available and valid, otherwise fallback to home + initial_path = os.path.dirname(self.last_exe_path) if self.last_exe_path and os.path.isfile(self.last_exe_path) else None + file_explorer = FileExplorer(self, file_filter='.exe', initial_path=initial_path) file_explorer.file_signal.file_selected.connect(self.onExeSelected) # Центрируем FileExplorer относительно родительского виджета @@ -507,6 +485,7 @@ class AddGameDialog(QDialog): def onExeSelected(self, file_path): """Обработчик выбора файла в FileExplorer""" self.exeEdit.setText(file_path) + self.last_exe_path = file_path # Update last selected exe path if not self.edit_mode: # Автоматически заполняем имя игры, если не в режиме редактирования game_name = os.path.splitext(os.path.basename(file_path))[0] @@ -518,7 +497,9 @@ class AddGameDialog(QDialog): def browseCover(self): """Открывает файловый менеджер для выбора изображения обложки""" try: - file_explorer = FileExplorer(self, file_filter=('.png', '.jpg', '.jpeg', '.bmp')) + # Use last_cover_path if available and valid, otherwise fallback to home + initial_path = os.path.dirname(self.last_cover_path) if self.last_cover_path and os.path.isfile(self.last_cover_path) else None + file_explorer = FileExplorer(self, file_filter=('.png', '.jpg', '.jpeg', '.bmp'), initial_path=initial_path) file_explorer.file_signal.file_selected.connect(self.onCoverSelected) # Центрируем FileExplorer относительно родительского виджета @@ -538,6 +519,7 @@ class AddGameDialog(QDialog): """Обработчик выбора файла обложки в FileExplorer""" if file_path and os.path.splitext(file_path)[1].lower() in ('.png', '.jpg', '.jpeg', '.bmp'): self.coverEdit.setText(file_path) + self.last_cover_path = file_path # Update last selected cover path else: logger.warning(f"Selected file is not a valid image: {file_path}") -- 2.49.0 From 9a132133978d5a18f1e7faeb47294a61649e5be1 Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 14:33:00 +0700 Subject: [PATCH 3/7] feat(dialogs): rewrite class AddGameDialog from @Vector_null --- portprotonqt/dialogs.py | 55 ++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 679fa52..17d33f3 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -6,7 +6,7 @@ from PySide6.QtWidgets import ( QDialog, QLineEdit, QFormLayout, QPushButton, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem ) -from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase +from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer from icoextract import IconExtractor, IconExtractorError from PIL import Image from portprotonqt.config_utils import get_portproton_location @@ -388,10 +388,13 @@ class AddGameDialog(QDialog): self.setWindowTitle(_("Edit Game") if edit_mode else _("Add Game")) self.setModal(True) + self.setFixedWidth(600) self.setStyleSheet(self.theme.MAIN_WINDOW_STYLE + self.theme.MESSAGE_BOX_STYLE) layout = QFormLayout(self) layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft) + layout.setFormAlignment(Qt.AlignmentFlag.AlignLeft) + layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow) # Game name self.nameEdit = QLineEdit(self) @@ -403,42 +406,55 @@ class AddGameDialog(QDialog): layout.addRow(name_label, self.nameEdit) # Exe path + exe_label = QLabel(_("Path to Executable:")) + exe_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + self.exeEdit = QLineEdit(self) self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if exe_path: self.exeEdit.setText(exe_path) + exeBrowseButton = QPushButton(_("Browse..."), self) exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) exeBrowseButton.clicked.connect(self.browseExe) + exeBrowseButton.setObjectName("exeBrowseButton") # Для поиска кнопки - exeLayout = QHBoxLayout() - exeLayout.addWidget(self.exeEdit) - exeLayout.addWidget(exeBrowseButton) - exe_label = QLabel(_("Path to Executable:")) - exe_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - layout.addRow(exe_label, exeLayout) + # Добавляем поле ввода для exe + layout.addRow(exe_label, self.exeEdit) + + # Добавляем кнопку обзора под полем ввода с выравниванием + empty_label = QLabel("") + empty_label.setFixedWidth(exe_label.sizeHint().width()) + layout.addRow(empty_label, exeBrowseButton) # Cover path + cover_label = QLabel(_("Custom Cover:")) + cover_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + self.coverEdit = QLineEdit(self) self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE) if cover_path: self.coverEdit.setText(cover_path) + coverBrowseButton = QPushButton(_("Browse..."), self) coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) coverBrowseButton.clicked.connect(self.browseCover) + coverBrowseButton.setObjectName("coverBrowseButton") # Для поиска кнопки - coverLayout = QHBoxLayout() - coverLayout.addWidget(self.coverEdit) - coverLayout.addWidget(coverBrowseButton) - cover_label = QLabel(_("Custom Cover:")) - cover_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") - layout.addRow(cover_label, coverLayout) + # Добавляем поле ввода для обложки + layout.addRow(cover_label, self.coverEdit) + + # Добавляем кнопку обзора под полем ввода с выравниванием + layout.addRow(empty_label, coverBrowseButton) # Preview self.coverPreview = QLabel(self) self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }") preview_label = QLabel(_("Cover Preview:")) - preview_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + preview_label.setStyleSheet( + self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(preview_label, self.coverPreview) # Dialog buttons @@ -452,12 +468,21 @@ class AddGameDialog(QDialog): self.button_layout.addWidget(self.cancel_button) layout.addRow(self.button_layout) + # Подключение сигналов self.select_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) - self.coverEdit.textChanged.connect(self.updatePreview) self.exeEdit.textChanged.connect(self.updatePreview) + # Установка одинаковой ширины для кнопок и полей ввода + def update_button_widths(): + exeBrowseButton.setFixedWidth(self.exeEdit.width()) + coverBrowseButton.setFixedWidth(self.coverEdit.width()) + + # Вызываем после отображения окна, когда размеры установлены, чтобы реально дождаться, когда всё сформируется + QTimer.singleShot(0, update_button_widths) + + # Обновляем превью, если в режиме редактирования if edit_mode: self.updatePreview() -- 2.49.0 From 8e9ce356fb890276ec9709739cedb4e281c98b78 Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 14:39:36 +0700 Subject: [PATCH 4/7] feat(dialogs): replace Brose buttons to AutoSizeButton --- portprotonqt/dialogs.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 17d33f3..3b0859a 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -415,7 +415,7 @@ class AddGameDialog(QDialog): if exe_path: self.exeEdit.setText(exe_path) - exeBrowseButton = QPushButton(_("Browse..."), self) + exeBrowseButton = AutoSizeButton(_("Browse..."), icon=self.theme_manager.get_icon("search")) exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) exeBrowseButton.clicked.connect(self.browseExe) exeBrowseButton.setObjectName("exeBrowseButton") # Для поиска кнопки @@ -438,7 +438,7 @@ class AddGameDialog(QDialog): if cover_path: self.coverEdit.setText(cover_path) - coverBrowseButton = QPushButton(_("Browse..."), self) + coverBrowseButton = AutoSizeButton(_("Browse..."), icon=self.theme_manager.get_icon("search")) coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE) coverBrowseButton.clicked.connect(self.browseCover) coverBrowseButton.setObjectName("coverBrowseButton") # Для поиска кнопки -- 2.49.0 From eed14797ec53c7cd81c7238cc79d4acc25775577 Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 14:41:47 +0700 Subject: [PATCH 5/7] feat(dialogs): remove vertical scrollbar from drives_scroll --- portprotonqt/dialogs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 3b0859a..b65a775 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -164,8 +164,9 @@ class FileExplorer(QDialog): self.drives_container.setLayout(self.drives_layout) self.drives_scroll.setWidget(self.drives_container) self.drives_scroll.setStyleSheet(self.theme.SCROLL_AREA_STYLE) - self.drives_scroll.setFixedHeight(60) + self.drives_scroll.setFixedHeight(70) self.main_layout.addWidget(self.drives_scroll) + self.drives_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) # Путь self.path_label = QLabel() -- 2.49.0 From 3b27b1abb26eb1a6fe7c78b17654ebf7b92f9484 Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 14:53:56 +0700 Subject: [PATCH 6/7] feat(dialogs): remove spaces --- portprotonqt/dialogs.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index b65a775..8434db4 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -454,8 +454,7 @@ class AddGameDialog(QDialog): self.coverPreview = QLabel(self) self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }") preview_label = QLabel(_("Cover Preview:")) - preview_label.setStyleSheet( - self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") + preview_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }") layout.addRow(preview_label, self.coverPreview) # Dialog buttons -- 2.49.0 From a6562ca48828d7e6d043c2699743229865df01a5 Mon Sep 17 00:00:00 2001 From: dervart Date: Sun, 29 Jun 2025 15:32:02 +0700 Subject: [PATCH 7/7] feat(dialogs): pre-commit fixes --- CHANGELOG.md | 1 + portprotonqt/dialogs.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e70b29..37ccf50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - Статус выделения и наведения на карточки теперь взаимоисключают друг друга - Все desktop файлы создаются с коментарием "Запустить игру {название} через PortProton" - Заполнители в переводах теперь стали более осмысленными +- Изменена компоновка диалога добавления игры для лучшего отображения в Gamescope ### Fixed - Дублирование обводки выделения карточек при быстром перемешении мыши diff --git a/portprotonqt/dialogs.py b/portprotonqt/dialogs.py index 8434db4..f461f57 100644 --- a/portprotonqt/dialogs.py +++ b/portprotonqt/dialogs.py @@ -3,8 +3,7 @@ import tempfile from typing import cast, TYPE_CHECKING from PySide6.QtGui import QPixmap, QIcon from PySide6.QtWidgets import ( - QDialog, QLineEdit, QFormLayout, QPushButton, - QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem + QDialog, QLineEdit, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem ) from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer from icoextract import IconExtractor, IconExtractorError -- 2.49.0