1
0
Fork 0
mirror of synced 2024-06-16 09:34:45 +12:00

RareSettings: Add global options for style sheets and color schemes

* Add an option to select the library view mode.
  This will allow us to instantiate only one library view at startup,
  reducing time and complexity of the process.
This commit is contained in:
loathingKernel 2024-01-28 19:49:01 +02:00
parent 3313f15c9f
commit 4f4689e82b
6 changed files with 89 additions and 90 deletions

View file

@ -5,11 +5,11 @@ import locale
import sys import sys
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import QSettings, Qt from PyQt5.QtCore import QSettings, Qt, pyqtSlot
from PyQt5.QtWidgets import QWidget, QMessageBox from PyQt5.QtWidgets import QWidget, QMessageBox
from rare.components.tabs.settings.widgets.rpc import RPCSettings from rare.components.tabs.settings.widgets.rpc import RPCSettings
from rare.models.options import options from rare.models.options import options, LibraryView
from rare.shared import LegendaryCoreSingleton from rare.shared import LegendaryCoreSingleton
from rare.ui.components.tabs.settings.rare import Ui_RareSettings from rare.ui.components.tabs.settings.rare import Ui_RareSettings
from rare.utils.misc import ( from rare.utils.misc import (
@ -33,34 +33,49 @@ class RareSettings(QWidget, Ui_RareSettings):
self.settings = QSettings(self) self.settings = QSettings(self)
# Select lang # Select lang
language = self.settings.value(*options.language)
self.lang_select.addItem(self.tr("System default"), options.language.default) self.lang_select.addItem(self.tr("System default"), options.language.default)
for lang_code, title in get_translations(): for lang_code, title in get_translations():
self.lang_select.addItem(title, lang_code) self.lang_select.addItem(title, lang_code)
language = self.settings.value(*options.language)
if (index := self.lang_select.findData(language, Qt.UserRole)) > 0: if (index := self.lang_select.findData(language, Qt.UserRole)) > 0:
self.lang_select.setCurrentIndex(index) self.lang_select.setCurrentIndex(index)
else: else:
self.lang_select.setCurrentIndex(0) self.lang_select.setCurrentIndex(0)
self.lang_select.currentIndexChanged.connect(self.on_lang_changed) self.lang_select.currentIndexChanged.connect(self.on_lang_changed)
self.color_select.addItems(get_color_schemes()) self.color_select.addItem(self.tr("None"), "")
if (color := self.settings.value("color_scheme")) in get_color_schemes(): for item in get_color_schemes():
self.color_select.setCurrentIndex(self.color_select.findText(color)) self.color_select.addItem(item, item)
color = self.settings.value(*options.color_scheme)
if (index := self.color_select.findData(color, Qt.UserRole)) > 0:
self.color_select.setCurrentIndex(index)
self.color_select.setDisabled(False) self.color_select.setDisabled(False)
self.style_select.setDisabled(True) self.style_select.setDisabled(True)
else: else:
self.color_select.setCurrentIndex(0) self.color_select.setCurrentIndex(0)
self.color_select.currentIndexChanged.connect(self.on_color_select_changed) self.color_select.currentIndexChanged.connect(self.on_color_select_changed)
self.style_select.addItems(get_style_sheets()) self.style_select.addItem(self.tr("None"), "")
if (style := self.settings.value("style_sheet")) in get_style_sheets(): for item in get_style_sheets():
self.style_select.setCurrentIndex(self.style_select.findText(style)) self.style_select.addItem(item, item)
style = self.settings.value(*options.style_sheet)
if (index := self.style_select.findData(style, Qt.UserRole)) > 0:
self.style_select.setCurrentIndex(index)
self.style_select.setDisabled(False) self.style_select.setDisabled(False)
self.color_select.setDisabled(True) self.color_select.setDisabled(True)
else: else:
self.style_select.setCurrentIndex(0) self.style_select.setCurrentIndex(0)
self.style_select.currentIndexChanged.connect(self.on_style_select_changed) self.style_select.currentIndexChanged.connect(self.on_style_select_changed)
self.view_combo.addItem(self.tr("Game covers"), LibraryView.COVER)
self.view_combo.addItem(self.tr("Vertical list"), LibraryView.VLIST)
view = LibraryView(self.settings.value(*options.library_view))
if (index := self.view_combo.findData(view)) > -1:
self.view_combo.setCurrentIndex(index)
else:
self.view_combo.setCurrentIndex(0)
self.view_combo.currentIndexChanged.connect(self.on_view_combo_changed)
self.rpc = RPCSettings(self) self.rpc = RPCSettings(self)
self.right_layout.insertWidget(1, self.rpc, alignment=Qt.AlignTop) self.right_layout.insertWidget(1, self.rpc, alignment=Qt.AlignTop)
@ -178,27 +193,32 @@ class RareSettings(QWidget, Ui_RareSettings):
self.tr("Permission error, cannot remove {}").format(self.start_menu_link), self.tr("Permission error, cannot remove {}").format(self.start_menu_link),
) )
def on_color_select_changed(self, scheme): @pyqtSlot(int)
def on_color_select_changed(self, index: int):
scheme = self.color_select.itemData(index, Qt.UserRole)
if scheme: if scheme:
self.style_select.setCurrentIndex(0) self.style_select.setCurrentIndex(0)
self.style_select.setDisabled(True) self.style_select.setDisabled(True)
self.settings.setValue("color_scheme", self.color_select.currentText())
set_color_pallete(self.color_select.currentText())
else: else:
self.settings.setValue("color_scheme", "")
self.style_select.setDisabled(False) self.style_select.setDisabled(False)
set_color_pallete("") self.settings.setValue("color_scheme", scheme)
set_color_pallete(scheme)
def on_style_select_changed(self, style): @pyqtSlot(int)
def on_style_select_changed(self, index: int):
style = self.style_select.itemData(index, Qt.UserRole)
if style: if style:
self.color_select.setCurrentIndex(0) self.color_select.setCurrentIndex(0)
self.color_select.setDisabled(True) self.color_select.setDisabled(True)
self.settings.setValue("style_sheet", self.style_select.currentText())
set_style_sheet(self.style_select.currentText())
else: else:
self.settings.setValue("style_sheet", "")
self.color_select.setDisabled(False) self.color_select.setDisabled(False)
set_style_sheet("") self.settings.setValue("style_sheet", style)
set_style_sheet(style)
@pyqtSlot(int)
def on_view_combo_changed(self, index: int):
view = LibraryView(self.view_combo.itemData(index, Qt.UserRole))
self.settings.setValue(options.library_view.key, int(view))
@staticmethod @staticmethod
def open_directory(): def open_directory():

View file

@ -1,6 +1,11 @@
from enum import IntEnum from enum import IntEnum
class LibraryView(IntEnum):
COVER = 1
VLIST = 2
class LibraryFilter(IntEnum): class LibraryFilter(IntEnum):
ALL = 1 ALL = 1
INSTALLED = 2 INSTALLED = 2

View file

@ -2,7 +2,7 @@ import locale
import platform as pf import platform as pf
from argparse import Namespace from argparse import Namespace
from typing import Any, Type from typing import Any, Type
from .library import LibraryFilter, LibraryOrder from .library import LibraryFilter, LibraryOrder, LibraryView
class Value(Namespace): class Value(Namespace):
@ -35,13 +35,15 @@ class Defaults(Namespace):
notification = Value(key="notification", default=True, dtype=bool) notification = Value(key="notification", default=True, dtype=bool)
log_games = Value(key="show_console", default=False, dtype=bool) log_games = Value(key="show_console", default=False, dtype=bool)
color_scheme = Value(key="color_scheme", default="", dtype=str)
style_sheet = Value(key="style_sheet", default="RareStyle", dtype=str)
library_view = Value(key="library_view", default=int(LibraryView.COVER), dtype=int)
library_filter = Value( library_filter = Value(
key="library_filter", key="library_filter",
default=int(LibraryFilter.MAC if pf.system() == "Darwin" else LibraryFilter.ALL), dtype=int default=int(LibraryFilter.MAC if pf.system() == "Darwin" else LibraryFilter.ALL), dtype=int
) )
library_order = Value( library_order = Value(key="library_order", default=int(LibraryOrder.TITLE), dtype=int)
key="library_order", default=int(LibraryOrder.TITLE), dtype=int
)
rpc_enable = Value(key="rpc_enable", default=0, dtype=int) rpc_enable = Value(key="rpc_enable", default=0, dtype=int)
rpc_name = Value(key="rpc_game", default=True, dtype=bool) rpc_name = Value(key="rpc_game", default=True, dtype=bool)
@ -51,4 +53,4 @@ class Defaults(Namespace):
options = Defaults() options = Defaults()
__all__ = ['options'] __all__ = ['options', 'LibraryFilter', 'LibraryOrder', 'LibraryView']

View file

@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_RareSettings(object): class Ui_RareSettings(object):
def setupUi(self, RareSettings): def setupUi(self, RareSettings):
RareSettings.setObjectName("RareSettings") RareSettings.setObjectName("RareSettings")
RareSettings.resize(623, 428) RareSettings.resize(629, 447)
RareSettings.setWindowTitle("RareSettings") RareSettings.setWindowTitle("RareSettings")
self.rare_layout = QtWidgets.QHBoxLayout(RareSettings) self.rare_layout = QtWidgets.QHBoxLayout(RareSettings)
self.rare_layout.setObjectName("rare_layout") self.rare_layout.setObjectName("rare_layout")
@ -28,42 +28,26 @@ class Ui_RareSettings(object):
self.interface_group.setSizePolicy(sizePolicy) self.interface_group.setSizePolicy(sizePolicy)
self.interface_group.setObjectName("interface_group") self.interface_group.setObjectName("interface_group")
self.interface_layout = QtWidgets.QFormLayout(self.interface_group) self.interface_layout = QtWidgets.QFormLayout(self.interface_group)
self.interface_layout.setFieldGrowthPolicy(QtWidgets.QFormLayout.FieldsStayAtSizeHint)
self.interface_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.interface_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.interface_layout.setObjectName("interface_layout") self.interface_layout.setObjectName("interface_layout")
self.lang_label = QtWidgets.QLabel(self.interface_group) self.lang_label = QtWidgets.QLabel(self.interface_group)
self.lang_label.setObjectName("lang_label") self.lang_label.setObjectName("lang_label")
self.interface_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.lang_label) self.interface_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.lang_label)
self.lang_select = QtWidgets.QComboBox(self.interface_group) self.lang_select = QtWidgets.QComboBox(self.interface_group)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.lang_select.sizePolicy().hasHeightForWidth())
self.lang_select.setSizePolicy(sizePolicy)
self.lang_select.setObjectName("lang_select") self.lang_select.setObjectName("lang_select")
self.interface_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lang_select) self.interface_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lang_select)
self.color_label = QtWidgets.QLabel(self.interface_group) self.color_label = QtWidgets.QLabel(self.interface_group)
self.color_label.setObjectName("color_label") self.color_label.setObjectName("color_label")
self.interface_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.color_label) self.interface_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.color_label)
self.color_select = QtWidgets.QComboBox(self.interface_group) self.color_select = QtWidgets.QComboBox(self.interface_group)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.color_select.sizePolicy().hasHeightForWidth())
self.color_select.setSizePolicy(sizePolicy)
self.color_select.setObjectName("color_select") self.color_select.setObjectName("color_select")
self.color_select.addItem("")
self.interface_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.color_select) self.interface_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.color_select)
self.style_label = QtWidgets.QLabel(self.interface_group) self.style_label = QtWidgets.QLabel(self.interface_group)
self.style_label.setObjectName("style_label") self.style_label.setObjectName("style_label")
self.interface_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.style_label) self.interface_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.style_label)
self.style_select = QtWidgets.QComboBox(self.interface_group) self.style_select = QtWidgets.QComboBox(self.interface_group)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.style_select.sizePolicy().hasHeightForWidth())
self.style_select.setSizePolicy(sizePolicy)
self.style_select.setObjectName("style_select") self.style_select.setObjectName("style_select")
self.style_select.addItem("")
self.interface_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.style_select) self.interface_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.style_select)
self.interface_info = QtWidgets.QLabel(self.interface_group) self.interface_info = QtWidgets.QLabel(self.interface_group)
font = QtGui.QFont() font = QtGui.QFont()
@ -71,7 +55,13 @@ class Ui_RareSettings(object):
self.interface_info.setFont(font) self.interface_info.setFont(font)
self.interface_info.setWordWrap(True) self.interface_info.setWordWrap(True)
self.interface_info.setObjectName("interface_info") self.interface_info.setObjectName("interface_info")
self.interface_layout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.interface_info) self.interface_layout.setWidget(4, QtWidgets.QFormLayout.SpanningRole, self.interface_info)
self.view_label = QtWidgets.QLabel(self.interface_group)
self.view_label.setObjectName("view_label")
self.interface_layout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.view_label)
self.view_combo = QtWidgets.QComboBox(self.interface_group)
self.view_combo.setObjectName("view_combo")
self.interface_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.view_combo)
self.left_layout.addWidget(self.interface_group) self.left_layout.addWidget(self.interface_group)
self.settings_group = QtWidgets.QGroupBox(RareSettings) self.settings_group = QtWidgets.QGroupBox(RareSettings)
self.settings_group.setObjectName("settings_group") self.settings_group.setObjectName("settings_group")
@ -149,10 +139,9 @@ class Ui_RareSettings(object):
self.interface_group.setTitle(_translate("RareSettings", "Interface")) self.interface_group.setTitle(_translate("RareSettings", "Interface"))
self.lang_label.setText(_translate("RareSettings", "Language")) self.lang_label.setText(_translate("RareSettings", "Language"))
self.color_label.setText(_translate("RareSettings", "Color scheme")) self.color_label.setText(_translate("RareSettings", "Color scheme"))
self.color_select.setItemText(0, _translate("RareSettings", "None"))
self.style_label.setText(_translate("RareSettings", "Style sheet")) self.style_label.setText(_translate("RareSettings", "Style sheet"))
self.style_select.setItemText(0, _translate("RareSettings", "None"))
self.interface_info.setText(_translate("RareSettings", "Restart Rare to apply changes.")) self.interface_info.setText(_translate("RareSettings", "Restart Rare to apply changes."))
self.view_label.setText(_translate("RareSettings", "Library view"))
self.settings_group.setTitle(_translate("RareSettings", "Behavior")) self.settings_group.setTitle(_translate("RareSettings", "Behavior"))
self.save_size.setText(_translate("RareSettings", "Restore window size on application startup")) self.save_size.setText(_translate("RareSettings", "Restore window size on application startup"))
self.notification.setText(_translate("RareSettings", "Show notifications when downloads complete")) self.notification.setText(_translate("RareSettings", "Show notifications when downloads complete"))

View file

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>623</width> <width>629</width>
<height>428</height> <height>447</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -28,6 +28,9 @@
<string>Interface</string> <string>Interface</string>
</property> </property>
<layout class="QFormLayout" name="interface_layout"> <layout class="QFormLayout" name="interface_layout">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::FieldsStayAtSizeHint</enum>
</property>
<property name="labelAlignment"> <property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
@ -39,14 +42,7 @@
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QComboBox" name="lang_select"> <widget class="QComboBox" name="lang_select"/>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="color_label"> <widget class="QLabel" name="color_label">
@ -56,19 +52,7 @@
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QComboBox" name="color_select"> <widget class="QComboBox" name="color_select"/>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>None</string>
</property>
</item>
</widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="style_label"> <widget class="QLabel" name="style_label">
@ -78,21 +62,9 @@
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QComboBox" name="style_select"> <widget class="QComboBox" name="style_select"/>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>None</string>
</property>
</item>
</widget>
</item> </item>
<item row="3" column="0" colspan="2"> <item row="4" column="0" colspan="2">
<widget class="QLabel" name="interface_info"> <widget class="QLabel" name="interface_info">
<property name="font"> <property name="font">
<font> <font>
@ -107,6 +79,16 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0">
<widget class="QLabel" name="view_label">
<property name="text">
<string>Library view</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="view_combo"/>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>

View file

@ -23,6 +23,7 @@ from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMessageBox from PyQt5.QtWidgets import QApplication, QMessageBox
import rare.resources.resources import rare.resources.resources
from rare.models.options import options
from rare.utils import paths from rare.utils import paths
from rare.utils.misc import set_color_pallete, set_style_sheet, get_static_style from rare.utils.misc import set_color_pallete, set_style_sheet, get_static_style
@ -123,17 +124,17 @@ class RareApp(QApplication):
# lk: store the default qt style name from the system on startup as a property for later reference # lk: store the default qt style name from the system on startup as a property for later reference
self.setProperty("rareDefaultQtStyle", self.style().objectName()) self.setProperty("rareDefaultQtStyle", self.style().objectName())
if ( if (
self.settings.value("color_scheme", None) is None self.settings.value(options.style_sheet.key, None) is None
and self.settings.value("style_sheet", None) is None and self.settings.value(options.color_scheme.key, None) is None
): ):
self.settings.setValue("color_scheme", "") self.settings.setValue(options.color_scheme.key, options.color_scheme.default)
self.settings.setValue("style_sheet", "RareStyle") self.settings.setValue(options.style_sheet.key, options.style_sheet.default)
if color_scheme := self.settings.value("color_scheme", False): if color_scheme := self.settings.value(options.color_scheme.key, False):
self.settings.setValue("style_sheet", "") self.settings.setValue(options.style_sheet.key, "")
set_color_pallete(color_scheme) set_color_pallete(color_scheme)
elif style_sheet := self.settings.value("style_sheet", False): elif style_sheet := self.settings.value(options.style_sheet.key, False):
self.settings.setValue("color_scheme", "") self.settings.setValue(options.color_scheme.key, "")
set_style_sheet(style_sheet) set_style_sheet(style_sheet)
else: else:
self.setStyleSheet(get_static_style()) self.setStyleSheet(get_static_style())