diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py
index 22b93fd8..ba47c0f9 100644
--- a/rare/components/tabs/settings/rare.py
+++ b/rare/components/tabs/settings/rare.py
@@ -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():
diff --git a/rare/models/library.py b/rare/models/library.py
index 9318a2fe..c1fef2ac 100644
--- a/rare/models/library.py
+++ b/rare/models/library.py
@@ -1,6 +1,11 @@
from enum import IntEnum
+class LibraryView(IntEnum):
+ COVER = 1
+ VLIST = 2
+
+
class LibraryFilter(IntEnum):
ALL = 1
INSTALLED = 2
diff --git a/rare/models/options.py b/rare/models/options.py
index 42f0529d..66249780 100644
--- a/rare/models/options.py
+++ b/rare/models/options.py
@@ -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']
diff --git a/rare/ui/components/tabs/settings/rare.py b/rare/ui/components/tabs/settings/rare.py
index fc1abaff..c7815ae1 100644
--- a/rare/ui/components/tabs/settings/rare.py
+++ b/rare/ui/components/tabs/settings/rare.py
@@ -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"))
diff --git a/rare/ui/components/tabs/settings/rare.ui b/rare/ui/components/tabs/settings/rare.ui
index 2178d31d..856ac845 100644
--- a/rare/ui/components/tabs/settings/rare.ui
+++ b/rare/ui/components/tabs/settings/rare.ui
@@ -6,8 +6,8 @@
0
0
- 623
- 428
+ 629
+ 447
@@ -28,6 +28,9 @@
Interface
+
+ QFormLayout::FieldsStayAtSizeHint
+
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -39,14 +42,7 @@
-
-
-
-
- 0
- 0
-
-
-
+
-
@@ -56,19 +52,7 @@
-
-
-
-
- 0
- 0
-
-
-
-
-
- None
-
-
-
+
-
@@ -78,21 +62,9 @@
-
-
-
-
- 0
- 0
-
-
-
-
-
- None
-
-
-
+
- -
+
-
@@ -107,6 +79,16 @@
+ -
+
+
+ Library view
+
+
+
+ -
+
+
diff --git a/rare/widgets/rare_app.py b/rare/widgets/rare_app.py
index 51dad2da..ed7b6d57 100644
--- a/rare/widgets/rare_app.py
+++ b/rare/widgets/rare_app.py
@@ -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())