feat(settings): update styles

Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
This commit is contained in:
2025-11-02 16:05:22 +05:00
parent 5fce23f261
commit 06e55db54d

View File

@@ -5,7 +5,7 @@ from typing import cast, TYPE_CHECKING
from PySide6.QtGui import QPixmap, QIcon, QTextCursor, QColor from PySide6.QtGui import QPixmap, QIcon, QTextCursor, QColor
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QDialog, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication, QProgressBar, QScroller, QDialog, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication, QProgressBar, QScroller,
QTabWidget, QTableWidget, QHeaderView, QMessageBox, QTableWidgetItem, QTextEdit, QAbstractItemView, QStackedWidget, QComboBox QTabWidget, QTableWidget, QHeaderView, QMessageBox, QTableWidgetItem, QTextEdit, QAbstractItemView, QStackedWidget, QComboBox, QLineEdit
) )
from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer, QThreadPool, QRunnable, Slot, QProcess, QProcessEnvironment from PySide6.QtCore import Qt, QObject, Signal, QMimeDatabase, QTimer, QThreadPool, QRunnable, Slot, QProcess, QProcessEnvironment
from icoextract import IconExtractor, IconExtractorError from icoextract import IconExtractor, IconExtractorError
@@ -1673,6 +1673,7 @@ class WinetricksDialog(QDialog):
if self.input_manager: if self.input_manager:
self.input_manager.disable_winetricks_mode() self.input_manager.disable_winetricks_mode()
super().reject() super().reject()
class ExeSettingsDialog(QDialog): class ExeSettingsDialog(QDialog):
def __init__(self, parent=None, theme=None, exe_path=None): def __init__(self, parent=None, theme=None, exe_path=None):
super().__init__(parent) super().__init__(parent)
@@ -1699,7 +1700,6 @@ class ExeSettingsDialog(QDialog):
self.locale_options = [] self.locale_options = []
self.logical_core_options = [] self.logical_core_options = []
self.amd_vulkan_drivers = [] self.amd_vulkan_drivers = []
self.branch_name = _("Unknown")
self.setWindowTitle(_("Exe Settings")) self.setWindowTitle(_("Exe Settings"))
self.setModal(True) self.setModal(True)
@@ -2136,12 +2136,12 @@ class ExeSettingsDialog(QDialog):
self.original_display_values[setting['key']] = current_val self.original_display_values[setting['key']] = current_val
elif setting['type'] == 'text': elif setting['type'] == 'text':
text_edit = QTextEdit() line_edit = QLineEdit()
current_val = current.get(setting['key'], setting['default']) current_val = current.get(setting['key'], setting['default'])
text_edit.setPlainText(current_val) line_edit.setText(current_val)
self.advanced_table.setCellWidget(row, 1, text_edit) self.advanced_table.setCellWidget(row, 1, line_edit)
self.advanced_widgets[setting['key']] = text_edit self.advanced_widgets[setting['key']] = line_edit
self.original_display_values[setting['key']] = current_val self.original_display_values[setting['key']] = current_val
# Description column # Description column
@@ -2151,15 +2151,27 @@ class ExeSettingsDialog(QDialog):
desc_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) desc_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter)
self.advanced_table.setItem(row, 2, desc_item) self.advanced_table.setItem(row, 2, desc_item)
self.advanced_table.resizeRowsToContents() # Make sure QLineEdit and QComboBox look consistent
if self.advanced_table.rowCount() > 0: self.advanced_table.setStyleSheet("""
self.advanced_table.setCurrentCell(0, 0) QComboBox, QLineEdit {
padding: 3px 6px;
min-height: 26px;
}
QComboBox::drop-down {
subcontrol-origin: padding;
subcontrol-position: top right;
width: 18px;
}
QTextEdit {
border-radius: 4px;
padding: 4px;
}
""")
def apply_changes(self): def apply_changes(self):
"""Apply changes by collecting diffs from both main and advanced tabs.""" """Apply changes by collecting diffs from both main and advanced tabs."""
changes = [] changes = []
# --- 1. Обычные (toggle) настройки ---
for key, orig_val in self.original_values.items(): for key, orig_val in self.original_values.items():
if key in self.blocked_keys: if key in self.blocked_keys:
continue # Skip blocked keys continue # Skip blocked keys
@@ -2180,28 +2192,24 @@ class ExeSettingsDialog(QDialog):
if new_val != orig_val: if new_val != orig_val:
changes.append(f"{key}={new_val}") changes.append(f"{key}={new_val}")
# --- 2. Advanced настройки ---
for key, widget in self.advanced_widgets.items(): for key, widget in self.advanced_widgets.items():
orig_val = self.original_display_values.get(key, '') orig_val = self.original_display_values.get(key, '')
if isinstance(widget, QComboBox): if isinstance(widget, QComboBox):
new_val = widget.currentText() new_val = widget.currentText()
# приведение disabled к 'disabled'
if new_val.lower() == _('disabled').lower(): if new_val.lower() == _('disabled').lower():
new_val = 'disabled' new_val = 'disabled'
elif isinstance(widget, QTextEdit): elif isinstance(widget, QLineEdit):
new_val = widget.toPlainText().strip() new_val = widget.text().strip()
else: else:
continue continue
if new_val != orig_val: if new_val != orig_val:
changes.append(f"{key}={new_val}") changes.append(f"{key}={new_val}")
# --- 3. Проверка на изменения ---
if not changes: if not changes:
QMessageBox.information(self, _("Info"), _("No changes to apply.")) QMessageBox.information(self, _("Info"), _("No changes to apply."))
return return
# --- 4. Запуск процесса сохранения ---
process = QProcess(self) process = QProcess(self)
process.finished.connect(self.on_edit_db_finished) process.finished.connect(self.on_edit_db_finished)
args = ["cli", "--edit-db", self.exe_path] + changes args = ["cli", "--edit-db", self.exe_path] + changes