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:
parent
3313f15c9f
commit
4f4689e82b
|
@ -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():
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
from enum import IntEnum
|
||||
|
||||
|
||||
class LibraryView(IntEnum):
|
||||
COVER = 1
|
||||
VLIST = 2
|
||||
|
||||
|
||||
class LibraryFilter(IntEnum):
|
||||
ALL = 1
|
||||
INSTALLED = 2
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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"))
|
||||
|
|
|
@ -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>
|
||||
<widget class="QComboBox" name="style_select"/>
|
||||
</item>
|
||||
</widget>
|
||||
</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>
|
||||
|
|
|
@ -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())
|
||||
|
|
Loading…
Reference in a new issue