1
0
Fork 0
mirror of synced 2024-05-23 05:52:53 +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
from logging import getLogger
from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtCore import QSettings, Qt, pyqtSlot
from PyQt5.QtWidgets import QWidget, QMessageBox
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.ui.components.tabs.settings.rare import Ui_RareSettings
from rare.utils.misc import (
@ -33,34 +33,49 @@ class RareSettings(QWidget, Ui_RareSettings):
self.settings = QSettings(self)
# Select lang
language = self.settings.value(*options.language)
self.lang_select.addItem(self.tr("System default"), options.language.default)
for lang_code, title in get_translations():
self.lang_select.addItem(title, lang_code)
language = self.settings.value(*options.language)
if (index := self.lang_select.findData(language, Qt.UserRole)) > 0:
self.lang_select.setCurrentIndex(index)
else:
self.lang_select.setCurrentIndex(0)
self.lang_select.currentIndexChanged.connect(self.on_lang_changed)
self.color_select.addItems(get_color_schemes())
if (color := self.settings.value("color_scheme")) in get_color_schemes():
self.color_select.setCurrentIndex(self.color_select.findText(color))
self.color_select.addItem(self.tr("None"), "")
for item in get_color_schemes():
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.style_select.setDisabled(True)
else:
self.color_select.setCurrentIndex(0)
self.color_select.currentIndexChanged.connect(self.on_color_select_changed)
self.style_select.addItems(get_style_sheets())
if (style := self.settings.value("style_sheet")) in get_style_sheets():
self.style_select.setCurrentIndex(self.style_select.findText(style))
self.style_select.addItem(self.tr("None"), "")
for item in get_style_sheets():
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.color_select.setDisabled(True)
else:
self.style_select.setCurrentIndex(0)
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.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),
)
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:
self.style_select.setCurrentIndex(0)
self.style_select.setDisabled(True)
self.settings.setValue("color_scheme", self.color_select.currentText())
set_color_pallete(self.color_select.currentText())
else:
self.settings.setValue("color_scheme", "")
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:
self.color_select.setCurrentIndex(0)
self.color_select.setDisabled(True)
self.settings.setValue("style_sheet", self.style_select.currentText())
set_style_sheet(self.style_select.currentText())
else:
self.settings.setValue("style_sheet", "")
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
def open_directory():

View file

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

View file

@ -2,7 +2,7 @@ import locale
import platform as pf
from argparse import Namespace
from typing import Any, Type
from .library import LibraryFilter, LibraryOrder
from .library import LibraryFilter, LibraryOrder, LibraryView
class Value(Namespace):
@ -35,13 +35,15 @@ class Defaults(Namespace):
notification = Value(key="notification", default=True, 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(
key="library_filter",
default=int(LibraryFilter.MAC if pf.system() == "Darwin" else LibraryFilter.ALL), dtype=int
)
library_order = Value(
key="library_order", default=int(LibraryOrder.TITLE), dtype=int
)
library_order = Value(key="library_order", default=int(LibraryOrder.TITLE), dtype=int)
rpc_enable = Value(key="rpc_enable", default=0, dtype=int)
rpc_name = Value(key="rpc_game", default=True, dtype=bool)
@ -51,4 +53,4 @@ class Defaults(Namespace):
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):
def setupUi(self, RareSettings):
RareSettings.setObjectName("RareSettings")
RareSettings.resize(623, 428)
RareSettings.resize(629, 447)
RareSettings.setWindowTitle("RareSettings")
self.rare_layout = QtWidgets.QHBoxLayout(RareSettings)
self.rare_layout.setObjectName("rare_layout")
@ -28,42 +28,26 @@ class Ui_RareSettings(object):
self.interface_group.setSizePolicy(sizePolicy)
self.interface_group.setObjectName("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.setObjectName("interface_layout")
self.lang_label = QtWidgets.QLabel(self.interface_group)
self.lang_label.setObjectName("lang_label")
self.interface_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.lang_label)
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.interface_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lang_select)
self.color_label = QtWidgets.QLabel(self.interface_group)
self.color_label.setObjectName("color_label")
self.interface_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.color_label)
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.addItem("")
self.interface_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.color_select)
self.style_label = QtWidgets.QLabel(self.interface_group)
self.style_label.setObjectName("style_label")
self.interface_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.style_label)
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.addItem("")
self.interface_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.style_select)
self.interface_info = QtWidgets.QLabel(self.interface_group)
font = QtGui.QFont()
@ -71,7 +55,13 @@ class Ui_RareSettings(object):
self.interface_info.setFont(font)
self.interface_info.setWordWrap(True)
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.settings_group = QtWidgets.QGroupBox(RareSettings)
self.settings_group.setObjectName("settings_group")
@ -149,10 +139,9 @@ class Ui_RareSettings(object):
self.interface_group.setTitle(_translate("RareSettings", "Interface"))
self.lang_label.setText(_translate("RareSettings", "Language"))
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_select.setItemText(0, _translate("RareSettings", "None"))
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.save_size.setText(_translate("RareSettings", "Restore window size on application startup"))
self.notification.setText(_translate("RareSettings", "Show notifications when downloads complete"))

View file

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

View file

@ -23,6 +23,7 @@ from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QMessageBox
import rare.resources.resources
from rare.models.options import options
from rare.utils import paths
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
self.setProperty("rareDefaultQtStyle", self.style().objectName())
if (
self.settings.value("color_scheme", None) is None
and self.settings.value("style_sheet", None) is None
self.settings.value(options.style_sheet.key, None) is None
and self.settings.value(options.color_scheme.key, None) is None
):
self.settings.setValue("color_scheme", "")
self.settings.setValue("style_sheet", "RareStyle")
self.settings.setValue(options.color_scheme.key, options.color_scheme.default)
self.settings.setValue(options.style_sheet.key, options.style_sheet.default)
if color_scheme := self.settings.value("color_scheme", False):
self.settings.setValue("style_sheet", "")
if color_scheme := self.settings.value(options.color_scheme.key, False):
self.settings.setValue(options.style_sheet.key, "")
set_color_pallete(color_scheme)
elif style_sheet := self.settings.value("style_sheet", False):
self.settings.setValue("color_scheme", "")
elif style_sheet := self.settings.value(options.style_sheet.key, False):
self.settings.setValue(options.color_scheme.key, "")
set_style_sheet(style_sheet)
else:
self.setStyleSheet(get_static_style())