revert 39c0db91a6
revert feat(dialogs): rewrite class AddGameDialog from @Vector_null
This commit is contained in:
@ -6,7 +6,7 @@ from PySide6.QtWidgets import (
|
|||||||
QDialog, QLineEdit, QFormLayout, QPushButton,
|
QDialog, QLineEdit, QFormLayout, QPushButton,
|
||||||
QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem
|
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 icoextract import IconExtractor, IconExtractorError
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from portprotonqt.config_utils import get_portproton_location
|
from portprotonqt.config_utils import get_portproton_location
|
||||||
@ -383,16 +383,15 @@ class AddGameDialog(QDialog):
|
|||||||
self.theme_manager = ThemeManager()
|
self.theme_manager = ThemeManager()
|
||||||
self.edit_mode = edit_mode
|
self.edit_mode = edit_mode
|
||||||
self.original_name = game_name
|
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.setWindowTitle(_("Edit Game") if edit_mode else _("Add Game"))
|
||||||
self.setModal(True)
|
self.setModal(True)
|
||||||
self.setFixedWidth(600)
|
|
||||||
self.setStyleSheet(self.theme.MAIN_WINDOW_STYLE + self.theme.MESSAGE_BOX_STYLE)
|
self.setStyleSheet(self.theme.MAIN_WINDOW_STYLE + self.theme.MESSAGE_BOX_STYLE)
|
||||||
|
|
||||||
layout = QFormLayout(self)
|
layout = QFormLayout(self)
|
||||||
layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft)
|
layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft)
|
||||||
layout.setFormAlignment(Qt.AlignmentFlag.AlignLeft)
|
|
||||||
layout.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.ExpandingFieldsGrow)
|
|
||||||
|
|
||||||
# Game name
|
# Game name
|
||||||
self.nameEdit = QLineEdit(self)
|
self.nameEdit = QLineEdit(self)
|
||||||
@ -400,60 +399,46 @@ class AddGameDialog(QDialog):
|
|||||||
if game_name:
|
if game_name:
|
||||||
self.nameEdit.setText(game_name)
|
self.nameEdit.setText(game_name)
|
||||||
name_label = QLabel(_("Game Name:"))
|
name_label = QLabel(_("Game Name:"))
|
||||||
name_label.setStyleSheet(
|
name_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
||||||
self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
|
||||||
layout.addRow(name_label, self.nameEdit)
|
layout.addRow(name_label, self.nameEdit)
|
||||||
|
|
||||||
# Exe path
|
# 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 = QLineEdit(self)
|
||||||
self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE)
|
self.exeEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE)
|
||||||
if exe_path:
|
if exe_path:
|
||||||
self.exeEdit.setText(exe_path)
|
self.exeEdit.setText(exe_path)
|
||||||
|
|
||||||
exeBrowseButton = QPushButton(_("Browse..."), self)
|
exeBrowseButton = QPushButton(_("Browse..."), self)
|
||||||
exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE)
|
exeBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE)
|
||||||
exeBrowseButton.clicked.connect(self.browseExe)
|
exeBrowseButton.clicked.connect(self.browseExe)
|
||||||
exeBrowseButton.setObjectName("exeBrowseButton") # Для поиска кнопки
|
|
||||||
|
|
||||||
# Добавляем поле ввода для exe
|
exeLayout = QHBoxLayout()
|
||||||
layout.addRow(exe_label, self.exeEdit)
|
exeLayout.addWidget(self.exeEdit)
|
||||||
|
exeLayout.addWidget(exeBrowseButton)
|
||||||
# Добавляем кнопку обзора под полем ввода с выравниванием
|
exe_label = QLabel(_("Path to Executable:"))
|
||||||
empty_label = QLabel("")
|
exe_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
||||||
empty_label.setFixedWidth(exe_label.sizeHint().width())
|
layout.addRow(exe_label, exeLayout)
|
||||||
layout.addRow(empty_label, exeBrowseButton)
|
|
||||||
|
|
||||||
# Cover path
|
# 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 = QLineEdit(self)
|
||||||
self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE)
|
self.coverEdit.setStyleSheet(self.theme.ADDGAME_INPUT_STYLE)
|
||||||
if cover_path:
|
if cover_path:
|
||||||
self.coverEdit.setText(cover_path)
|
self.coverEdit.setText(cover_path)
|
||||||
|
|
||||||
coverBrowseButton = QPushButton(_("Browse..."), self)
|
coverBrowseButton = QPushButton(_("Browse..."), self)
|
||||||
coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE)
|
coverBrowseButton.setStyleSheet(self.theme.ACTION_BUTTON_STYLE)
|
||||||
coverBrowseButton.clicked.connect(self.browseCover)
|
coverBrowseButton.clicked.connect(self.browseCover)
|
||||||
coverBrowseButton.setObjectName("coverBrowseButton") # Для поиска кнопки
|
|
||||||
|
|
||||||
# Добавляем поле ввода для обложки
|
coverLayout = QHBoxLayout()
|
||||||
layout.addRow(cover_label, self.coverEdit)
|
coverLayout.addWidget(self.coverEdit)
|
||||||
|
coverLayout.addWidget(coverBrowseButton)
|
||||||
# Добавляем кнопку обзора под полем ввода с выравниванием
|
cover_label = QLabel(_("Custom Cover:"))
|
||||||
layout.addRow(empty_label, coverBrowseButton)
|
cover_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
||||||
|
layout.addRow(cover_label, coverLayout)
|
||||||
|
|
||||||
# Preview
|
# Preview
|
||||||
self.coverPreview = QLabel(self)
|
self.coverPreview = QLabel(self)
|
||||||
self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }")
|
self.coverPreview.setStyleSheet(self.theme.CONTENT_STYLE + " QLabel { color: #ffffff; }")
|
||||||
preview_label = QLabel(_("Cover Preview:"))
|
preview_label = QLabel(_("Cover Preview:"))
|
||||||
preview_label.setStyleSheet(
|
preview_label.setStyleSheet(self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
||||||
self.theme.PARAMS_TITLE_STYLE + " QLabel { color: #ffffff; font-size: 14px; font-weight: bold; }")
|
|
||||||
layout.addRow(preview_label, self.coverPreview)
|
layout.addRow(preview_label, self.coverPreview)
|
||||||
|
|
||||||
# Dialog buttons
|
# Dialog buttons
|
||||||
@ -467,28 +452,21 @@ class AddGameDialog(QDialog):
|
|||||||
self.button_layout.addWidget(self.cancel_button)
|
self.button_layout.addWidget(self.cancel_button)
|
||||||
layout.addRow(self.button_layout)
|
layout.addRow(self.button_layout)
|
||||||
|
|
||||||
# Подключение сигналов
|
|
||||||
self.select_button.clicked.connect(self.accept)
|
self.select_button.clicked.connect(self.accept)
|
||||||
self.cancel_button.clicked.connect(self.reject)
|
self.cancel_button.clicked.connect(self.reject)
|
||||||
|
|
||||||
self.coverEdit.textChanged.connect(self.updatePreview)
|
self.coverEdit.textChanged.connect(self.updatePreview)
|
||||||
self.exeEdit.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:
|
if edit_mode:
|
||||||
self.updatePreview()
|
self.updatePreview()
|
||||||
|
|
||||||
def browseExe(self):
|
def browseExe(self):
|
||||||
"""Открывает файловый менеджер для выбора exe-файла"""
|
"""Открывает файловый менеджер для выбора exe-файла"""
|
||||||
try:
|
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)
|
file_explorer.file_signal.file_selected.connect(self.onExeSelected)
|
||||||
|
|
||||||
# Центрируем FileExplorer относительно родительского виджета
|
# Центрируем FileExplorer относительно родительского виджета
|
||||||
@ -507,6 +485,7 @@ class AddGameDialog(QDialog):
|
|||||||
def onExeSelected(self, file_path):
|
def onExeSelected(self, file_path):
|
||||||
"""Обработчик выбора файла в FileExplorer"""
|
"""Обработчик выбора файла в FileExplorer"""
|
||||||
self.exeEdit.setText(file_path)
|
self.exeEdit.setText(file_path)
|
||||||
|
self.last_exe_path = file_path # Update last selected exe path
|
||||||
if not self.edit_mode:
|
if not self.edit_mode:
|
||||||
# Автоматически заполняем имя игры, если не в режиме редактирования
|
# Автоматически заполняем имя игры, если не в режиме редактирования
|
||||||
game_name = os.path.splitext(os.path.basename(file_path))[0]
|
game_name = os.path.splitext(os.path.basename(file_path))[0]
|
||||||
@ -518,7 +497,9 @@ class AddGameDialog(QDialog):
|
|||||||
def browseCover(self):
|
def browseCover(self):
|
||||||
"""Открывает файловый менеджер для выбора изображения обложки"""
|
"""Открывает файловый менеджер для выбора изображения обложки"""
|
||||||
try:
|
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)
|
file_explorer.file_signal.file_selected.connect(self.onCoverSelected)
|
||||||
|
|
||||||
# Центрируем FileExplorer относительно родительского виджета
|
# Центрируем FileExplorer относительно родительского виджета
|
||||||
@ -538,6 +519,7 @@ class AddGameDialog(QDialog):
|
|||||||
"""Обработчик выбора файла обложки в FileExplorer"""
|
"""Обработчик выбора файла обложки в FileExplorer"""
|
||||||
if file_path and os.path.splitext(file_path)[1].lower() in ('.png', '.jpg', '.jpeg', '.bmp'):
|
if file_path and os.path.splitext(file_path)[1].lower() in ('.png', '.jpg', '.jpeg', '.bmp'):
|
||||||
self.coverEdit.setText(file_path)
|
self.coverEdit.setText(file_path)
|
||||||
|
self.last_cover_path = file_path # Update last selected cover path
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Selected file is not a valid image: {file_path}")
|
logger.warning(f"Selected file is not a valid image: {file_path}")
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user