From f542e11b254fa913df399e97237456b7d8aeef46 Mon Sep 17 00:00:00 2001
From: loathingKernel <142770+loathingKernel@users.noreply.github.com>
Date: Sun, 18 Feb 2024 19:27:19 +0200
Subject: [PATCH 1/5] HeadBar: better alignment to center
---
rare/components/tabs/games/head_bar.py | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/rare/components/tabs/games/head_bar.py b/rare/components/tabs/games/head_bar.py
index b80527cb..10fd39d8 100644
--- a/rare/components/tabs/games/head_bar.py
+++ b/rare/components/tabs/games/head_bar.py
@@ -7,11 +7,11 @@ from PyQt5.QtWidgets import (
QComboBox,
QToolButton,
QMenu,
- QAction,
+ QAction, QSpacerItem, QSizePolicy,
)
-from rare.shared import RareCore
from rare.models.options import options, LibraryFilter, LibraryOrder
+from rare.shared import RareCore
from rare.utils.extra_widgets import ButtonLineEdit
from rare.utils.misc import icon
@@ -105,6 +105,7 @@ class GameListHeadBar(QWidget):
integrations.setPopupMode(QToolButton.InstantPopup)
self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search Game"))
+ self.search_bar.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
self.search_bar.setObjectName("SearchBar")
self.search_bar.setFrame(False)
self.search_bar.setMinimumWidth(250)
@@ -133,16 +134,14 @@ class GameListHeadBar(QWidget):
layout.setContentsMargins(0, 5, 0, 5)
layout.addWidget(self.filter)
layout.addWidget(self.order)
- layout.addStretch(0)
- layout.addWidget(integrations)
- layout.addStretch(3)
+ layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
layout.addWidget(self.search_bar)
- layout.addStretch(4)
layout.addWidget(self.installed_icon)
layout.addWidget(self.installed_label)
layout.addWidget(self.available_icon)
layout.addWidget(self.available_label)
- layout.addStretch(4)
+ layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
+ layout.addWidget(integrations)
layout.addWidget(self.refresh_list)
def set_games_count(self, inst: int, avail: int) -> None:
From 8dbce8e9f2f92f18452a7c44e7d4e90d04ebcc02 Mon Sep 17 00:00:00 2001
From: loathingKernel <142770+loathingKernel@users.noreply.github.com>
Date: Wed, 21 Feb 2024 13:21:44 +0200
Subject: [PATCH 2/5] Rare: rename `icon` function to `qta_icon`
---
rare/commands/launcher/cloud_sync_dialog.py | 8 +++----
rare/components/dialogs/install_dialog.py | 10 ++++----
rare/components/dialogs/login/__init__.py | 8 +++----
.../components/dialogs/login/browser_login.py | 4 ++--
rare/components/dialogs/move_dialog.py | 4 ++--
rare/components/dialogs/selective_dialog.py | 4 ++--
rare/components/dialogs/uninstall_dialog.py | 4 ++--
rare/components/tabs/account/__init__.py | 4 ++--
.../tabs/games/game_info/cloud_saves.py | 8 +++----
.../tabs/games/game_info/game_dlc.py | 6 ++---
.../tabs/games/game_info/game_info.py | 16 ++++++-------
.../tabs/games/game_widgets/icon_widget.py | 6 ++---
.../tabs/games/game_widgets/list_widget.py | 6 ++---
rare/components/tabs/games/head_bar.py | 17 +++++++------
.../tabs/games/integrations/eos_group.py | 12 +++++-----
.../tabs/games/integrations/ubisoft_group.py | 12 +++++-----
.../tabs/settings/widgets/env_vars_model.py | 10 ++++----
.../tabs/settings/widgets/wrappers.py | 8 +++----
.../tabs/games/integrations/eos_widget.py | 24 +++++++++----------
.../tabs/games/integrations/eos_widget.ui | 22 ++++++++---------
rare/utils/misc.py | 2 +-
rare/widgets/collapsible_widget.py | 6 ++---
rare/widgets/dialogs.py | 4 ++--
rare/widgets/indicator_edit.py | 2 +-
rare/widgets/side_tab.py | 4 ++--
25 files changed, 105 insertions(+), 106 deletions(-)
diff --git a/rare/commands/launcher/cloud_sync_dialog.py b/rare/commands/launcher/cloud_sync_dialog.py
index 5af0de0f..1a861039 100644
--- a/rare/commands/launcher/cloud_sync_dialog.py
+++ b/rare/commands/launcher/cloud_sync_dialog.py
@@ -9,7 +9,7 @@ from legendary.core import LegendaryCore
from legendary.models.game import InstalledGame
from rare.ui.components.tabs.games.game_info.cloud_sync_widget import Ui_CloudSyncWidget
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.dialogs import ButtonDialog, game_title
logger = getLogger("CloudSyncDialog")
@@ -41,7 +41,7 @@ class CloudSyncDialog(ButtonDialog):
layout.addWidget(sync_widget)
self.accept_button.setText(self.tr("Skip"))
- self.accept_button.setIcon(icon("fa.chevron-right"))
+ self.accept_button.setIcon(qta_icon("fa.chevron-right"))
self.setCentralLayout(layout)
@@ -62,8 +62,8 @@ class CloudSyncDialog(ButtonDialog):
self.sync_ui.date_info_local.setText(dt_local.strftime("%A, %d. %B %Y %X") if dt_local else "None")
self.sync_ui.date_info_remote.setText(dt_remote.strftime("%A, %d. %B %Y %X") if dt_remote else "None")
- self.sync_ui.icon_local.setPixmap(icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
- self.sync_ui.icon_remote.setPixmap(icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
+ self.sync_ui.icon_local.setPixmap(qta_icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
+ self.sync_ui.icon_remote.setPixmap(qta_icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
self.sync_ui.upload_button.clicked.connect(self.__on_upload)
self.sync_ui.download_button.clicked.connect(self.__on_download)
diff --git a/rare/components/dialogs/install_dialog.py b/rare/components/dialogs/install_dialog.py
index 00c7f49e..b1250db7 100644
--- a/rare/components/dialogs/install_dialog.py
+++ b/rare/components/dialogs/install_dialog.py
@@ -13,7 +13,7 @@ from rare.models.install import InstallDownloadModel, InstallQueueItemModel, Ins
from rare.shared.workers.install_info import InstallInfoWorker
from rare.ui.components.dialogs.install_dialog import Ui_InstallDialog
from rare.ui.components.dialogs.install_dialog_advanced import Ui_InstallDialogAdvanced
-from rare.utils.misc import format_size, icon
+from rare.utils.misc import format_size, qta_icon
from rare.widgets.collapsible_widget import CollapsibleFrame
from rare.widgets.dialogs import ActionDialog, game_title
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
@@ -63,17 +63,17 @@ class InstallDialog(ActionDialog):
super(InstallDialog, self).__init__(parent=parent)
header = self.tr("Install")
- bicon = icon("ri.install-line")
+ bicon = qta_icon("ri.install-line")
if options.repair_mode:
header = self.tr("Repair")
- bicon = icon("fa.wrench")
+ bicon = qta_icon("fa.wrench")
if options.repair_and_update:
header = self.tr("Repair and update")
elif options.update:
header = self.tr("Update")
elif options.reset_sdl:
header = self.tr("Modify")
- bicon = icon("fa.gear")
+ bicon = qta_icon("fa.gear")
self.setWindowTitle(game_title(header, rgame.app_title))
self.setSubtitle(game_title(header, rgame.app_title))
@@ -198,7 +198,7 @@ class InstallDialog(ActionDialog):
self.accept_button.setObjectName("InstallButton")
self.action_button.setText(self.tr("Verify"))
- self.action_button.setIcon(icon("fa.check"))
+ self.action_button.setIcon(qta_icon("fa.check"))
self.setCentralWidget(install_widget)
diff --git a/rare/components/dialogs/login/__init__.py b/rare/components/dialogs/login/__init__.py
index ba876b58..32a2ee5e 100644
--- a/rare/components/dialogs/login/__init__.py
+++ b/rare/components/dialogs/login/__init__.py
@@ -7,7 +7,7 @@ from legendary.core import LegendaryCore
from rare.shared import ArgumentsSingleton
from rare.ui.components.dialogs.login.landing_page import Ui_LandingPage
from rare.ui.components.dialogs.login.login_dialog import Ui_LoginDialog
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.dialogs import BaseDialog
from rare.widgets.sliding_stack import SlidingStackedWidget
from .browser_login import BrowserLogin
@@ -99,9 +99,9 @@ class LoginDialog(BaseDialog):
self.login_stack.setCurrentWidget(self.landing_page)
- self.ui.exit_button.setIcon(icon("fa.remove"))
- self.ui.back_button.setIcon(icon("fa.chevron-left"))
- self.ui.next_button.setIcon(icon("fa.chevron-right"))
+ self.ui.exit_button.setIcon(qta_icon("fa.remove"))
+ self.ui.back_button.setIcon(qta_icon("fa.chevron-left"))
+ self.ui.next_button.setIcon(qta_icon("fa.chevron-right"))
# lk: Set next as the default button only to stop closing the dialog when pressing enter
self.ui.exit_button.setAutoDefault(False)
diff --git a/rare/components/dialogs/login/browser_login.py b/rare/components/dialogs/login/browser_login.py
index 136d1876..df15855f 100644
--- a/rare/components/dialogs/login/browser_login.py
+++ b/rare/components/dialogs/login/browser_login.py
@@ -9,7 +9,7 @@ from legendary.utils import webview_login
from rare.lgndr.core import LegendaryCore
from rare.ui.components.dialogs.login.browser_login import Ui_BrowserLogin
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.utils.paths import get_rare_executable
from rare.widgets.indicator_edit import IndicatorLineEdit, IndicatorReasonsCommon
@@ -34,7 +34,7 @@ class BrowserLogin(QFrame):
)
self.sid_edit.line_edit.setEchoMode(QLineEdit.Password)
self.ui.link_text.setText(self.login_url)
- self.ui.copy_button.setIcon(icon("mdi.content-copy", "fa.copy"))
+ self.ui.copy_button.setIcon(qta_icon("mdi.content-copy", "fa.copy"))
self.ui.copy_button.clicked.connect(self.copy_link)
self.ui.form_layout.setWidget(
self.ui.form_layout.getWidgetPosition(self.ui.sid_label)[0],
diff --git a/rare/components/dialogs/move_dialog.py b/rare/components/dialogs/move_dialog.py
index a9bf56e4..38ea2a14 100644
--- a/rare/components/dialogs/move_dialog.py
+++ b/rare/components/dialogs/move_dialog.py
@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import QVBoxLayout, QHBoxLayout, QLabel, QFileDialog, QLayo
from rare.models.install import MoveGameModel
from rare.models.game import RareGame
from rare.shared import RareCore
-from rare.utils.misc import path_size, format_size, icon
+from rare.utils.misc import path_size, format_size, qta_icon
from rare.widgets.dialogs import ActionDialog, game_title
from rare.widgets.elide_label import ElideLabel
from rare.widgets.indicator_edit import PathEdit, IndicatorReasons, IndicatorReasonsCommon
@@ -76,7 +76,7 @@ class MoveDialog(ActionDialog):
self.setCentralLayout(layout)
self.accept_button.setText(self.tr("Move"))
- self.accept_button.setIcon(icon("mdi.folder-move-outline"))
+ self.accept_button.setIcon(qta_icon("mdi.folder-move-outline"))
self.action_button.setHidden(True)
diff --git a/rare/components/dialogs/selective_dialog.py b/rare/components/dialogs/selective_dialog.py
index 3bdab291..85814d3b 100644
--- a/rare/components/dialogs/selective_dialog.py
+++ b/rare/components/dialogs/selective_dialog.py
@@ -3,7 +3,7 @@ from PyQt5.QtWidgets import QVBoxLayout, QGroupBox
from rare.models.game import RareGame
from rare.models.install import SelectiveDownloadsModel
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.dialogs import ButtonDialog, game_title
from rare.widgets.selective_widget import SelectiveWidget
@@ -31,7 +31,7 @@ class SelectiveDialog(ButtonDialog):
self.setCentralLayout(layout)
self.accept_button.setText(self.tr("Verify"))
- self.accept_button.setIcon(icon("fa.check"))
+ self.accept_button.setIcon(qta_icon("fa.check"))
self.options: SelectiveDownloadsModel = SelectiveDownloadsModel(rgame.app_name)
diff --git a/rare/components/dialogs/uninstall_dialog.py b/rare/components/dialogs/uninstall_dialog.py
index a935e07b..337bc1b6 100644
--- a/rare/components/dialogs/uninstall_dialog.py
+++ b/rare/components/dialogs/uninstall_dialog.py
@@ -6,7 +6,7 @@ from PyQt5.QtWidgets import (
from rare.models.game import RareGame
from rare.models.install import UninstallOptionsModel
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.dialogs import ButtonDialog, game_title
@@ -39,7 +39,7 @@ class UninstallDialog(ButtonDialog):
self.setCentralLayout(layout)
self.accept_button.setText(self.tr("Uninstall"))
- self.accept_button.setIcon(icon("ri.uninstall-line"))
+ self.accept_button.setIcon(qta_icon("ri.uninstall-line"))
self.accept_button.setObjectName("UninstallButton")
if rgame.sdl_name is not None:
diff --git a/rare/components/tabs/account/__init__.py b/rare/components/tabs/account/__init__.py
index 7e45c5e4..30c95e9a 100644
--- a/rare/components/tabs/account/__init__.py
+++ b/rare/components/tabs/account/__init__.py
@@ -4,7 +4,7 @@ from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton
from rare.shared import LegendaryCoreSingleton, GlobalSignalsSingleton
-from rare.utils.misc import icon, ExitCodes
+from rare.utils.misc import qta_icon, ExitCodes
class AccountWidget(QWidget):
@@ -20,7 +20,7 @@ class AccountWidget(QWidget):
if not username:
username = "Offline"
- self.open_browser = QPushButton(icon("fa.external-link"), self.tr("Account settings"))
+ self.open_browser = QPushButton(qta_icon("fa.external-link"), self.tr("Account settings"))
self.open_browser.clicked.connect(
lambda: webbrowser.open(
"https://www.epicgames.com/account/personal?productName=epicgames"
diff --git a/rare/components/tabs/games/game_info/cloud_saves.py b/rare/components/tabs/games/game_info/cloud_saves.py
index 30d76f73..c87769fb 100644
--- a/rare/components/tabs/games/game_info/cloud_saves.py
+++ b/rare/components/tabs/games/game_info/cloud_saves.py
@@ -22,7 +22,7 @@ from rare.shared import RareCore
from rare.shared.workers.wine_resolver import WineSavePathResolver
from rare.ui.components.tabs.games.game_info.cloud_settings_widget import Ui_CloudSettingsWidget
from rare.ui.components.tabs.games.game_info.cloud_sync_widget import Ui_CloudSyncWidget
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.utils.metrics import timelogger
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
from rare.widgets.loading_widget import LoadingWidget
@@ -45,8 +45,8 @@ class CloudSaves(QWidget, SideTabContents):
self.core = RareCore.instance().core()
self.settings = QSettings()
- self.sync_ui.icon_local.setPixmap(icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
- self.sync_ui.icon_remote.setPixmap(icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
+ self.sync_ui.icon_local.setPixmap(qta_icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
+ self.sync_ui.icon_remote.setPixmap(qta_icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
self.sync_ui.upload_button.clicked.connect(self.upload)
self.sync_ui.download_button.clicked.connect(self.download)
@@ -73,7 +73,7 @@ class CloudSaves(QWidget, SideTabContents):
self.cloud_save_path_edit
)
- self.compute_save_path_button = QPushButton(icon("fa.magic"), self.tr("Calculate path"))
+ self.compute_save_path_button = QPushButton(qta_icon("fa.magic"), self.tr("Calculate path"))
self.compute_save_path_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
self.compute_save_path_button.clicked.connect(self.compute_save_path)
self.cloud_ui.main_layout.addRow(None, self.compute_save_path_button)
diff --git a/rare/components/tabs/games/game_info/game_dlc.py b/rare/components/tabs/games/game_info/game_dlc.py
index 77b20115..93311580 100644
--- a/rare/components/tabs/games/game_info/game_dlc.py
+++ b/rare/components/tabs/games/game_info/game_dlc.py
@@ -10,7 +10,7 @@ from rare.ui.components.tabs.games.game_info.game_dlc import Ui_GameDlc
from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget
from rare.widgets.image_widget import ImageWidget, ImageSize
from rare.widgets.side_tab import SideTabContents
-from rare.utils.misc import widget_object_name, icon
+from rare.utils.misc import widget_object_name, qta_icon
class GameDlcWidget(QFrame):
@@ -57,7 +57,7 @@ class InstalledGameDlcWidget(GameDlcWidget):
self.ui.action_button.setObjectName("UninstallButton")
self.ui.action_button.clicked.connect(self.uninstall_dlc)
self.ui.action_button.setText(self.tr("Uninstall DLC"))
- self.ui.action_button.setIcon(icon("ri.uninstall-line"))
+ self.ui.action_button.setIcon(qta_icon("ri.uninstall-line"))
# lk: don't reference `self.rdlc` here because the object has been deleted
rdlc.signals.game.uninstalled.connect(self.__uninstalled)
@@ -78,7 +78,7 @@ class AvailableGameDlcWidget(GameDlcWidget):
self.ui.action_button.setObjectName("InstallButton")
self.ui.action_button.clicked.connect(self.install_dlc)
self.ui.action_button.setText(self.tr("Install DLC"))
- self.ui.action_button.setIcon(icon("ri.install-line"))
+ self.ui.action_button.setIcon(qta_icon("ri.install-line"))
# lk: don't reference `self.rdlc` here because the object has been deleted
rdlc.signals.game.installed.connect(self.__installed)
diff --git a/rare/components/tabs/games/game_info/game_info.py b/rare/components/tabs/games/game_info/game_info.py
index c7f353e8..c914da90 100644
--- a/rare/components/tabs/games/game_info/game_info.py
+++ b/rare/components/tabs/games/game_info/game_info.py
@@ -20,7 +20,7 @@ from rare.models.game import RareGame
from rare.shared import RareCore
from rare.shared.workers import VerifyWorker, MoveWorker
from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo
-from rare.utils.misc import format_size, icon, style_hyperlink
+from rare.utils.misc import format_size, qta_icon, style_hyperlink
from rare.widgets.image_widget import ImageWidget, ImageSize
from rare.widgets.side_tab import SideTabContents
from rare.components.dialogs.move_dialog import MoveDialog, is_game_dir
@@ -41,14 +41,14 @@ class GameInfo(QWidget, SideTabContents):
self.ui.modify_button.setObjectName("InstallButton")
self.ui.uninstall_button.setObjectName("UninstallButton")
- self.ui.install_button.setIcon(icon("ri.install-line"))
- self.ui.import_button.setIcon(icon("mdi.application-import"))
+ self.ui.install_button.setIcon(qta_icon("ri.install-line"))
+ self.ui.import_button.setIcon(qta_icon("mdi.application-import"))
- self.ui.modify_button.setIcon(icon("fa.gear"))
- self.ui.verify_button.setIcon(icon("fa.check"))
- self.ui.repair_button.setIcon(icon("fa.wrench"))
- self.ui.move_button.setIcon(icon("mdi.folder-move-outline"))
- self.ui.uninstall_button.setIcon(icon("ri.uninstall-line"))
+ self.ui.modify_button.setIcon(qta_icon("fa.gear"))
+ self.ui.verify_button.setIcon(qta_icon("fa.check"))
+ self.ui.repair_button.setIcon(qta_icon("fa.wrench"))
+ self.ui.move_button.setIcon(qta_icon("mdi.folder-move-outline"))
+ self.ui.uninstall_button.setIcon(qta_icon("ri.uninstall-line"))
self.rcore = RareCore.instance()
self.core = RareCore.instance().core()
diff --git a/rare/components/tabs/games/game_widgets/icon_widget.py b/rare/components/tabs/games/game_widgets/icon_widget.py
index 9ec78ba4..2f3ddd35 100644
--- a/rare/components/tabs/games/game_widgets/icon_widget.py
+++ b/rare/components/tabs/games/game_widgets/icon_widget.py
@@ -10,7 +10,7 @@ from PyQt5.QtWidgets import (
QPushButton,
)
-from rare.utils.misc import icon, widget_object_name
+from rare.utils.misc import qta_icon, widget_object_name
from rare.widgets.elide_label import ElideLabel
@@ -59,13 +59,13 @@ class IconWidget(object):
# play button
self.launch_btn = QPushButton(parent=self.mini_widget)
self.launch_btn.setObjectName(f"{type(self).__name__}Button")
- self.launch_btn.setIcon(icon("ei.play-alt", color="white"))
+ self.launch_btn.setIcon(qta_icon("ei.play-alt", color="white"))
self.launch_btn.setIconSize(QSize(20, 20))
self.launch_btn.setFixedSize(QSize(widget.width() // 4, widget.width() // 4))
self.install_btn = QPushButton(parent=self.mini_widget)
self.install_btn.setObjectName(f"{type(self).__name__}Button")
- self.install_btn.setIcon(icon("ri.install-fill", color="white"))
+ self.install_btn.setIcon(qta_icon("ri.install-fill", color="white"))
self.install_btn.setIconSize(QSize(20, 20))
self.install_btn.setFixedSize(QSize(widget.width() // 4, widget.width() // 4))
diff --git a/rare/components/tabs/games/game_widgets/list_widget.py b/rare/components/tabs/games/game_widgets/list_widget.py
index a45cdf01..045a851f 100644
--- a/rare/components/tabs/games/game_widgets/list_widget.py
+++ b/rare/components/tabs/games/game_widgets/list_widget.py
@@ -9,7 +9,7 @@ from PyQt5.QtWidgets import (
QWidget,
)
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.elide_label import ElideLabel
@@ -40,13 +40,13 @@ class ListWidget(object):
self.install_btn = QPushButton(parent=widget)
self.install_btn.setObjectName(f"{type(self).__name__}Button")
- self.install_btn.setIcon(icon("ri.install-line"))
+ self.install_btn.setIcon(qta_icon("ri.install-line"))
self.install_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.install_btn.setFixedWidth(120)
self.launch_btn = QPushButton(parent=widget)
self.launch_btn.setObjectName(f"{type(self).__name__}Button")
- self.launch_btn.setIcon(icon("ei.play-alt"))
+ self.launch_btn.setIcon(qta_icon("ei.play-alt"))
self.launch_btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.launch_btn.setFixedWidth(120)
diff --git a/rare/components/tabs/games/head_bar.py b/rare/components/tabs/games/head_bar.py
index 10fd39d8..e0fbfb36 100644
--- a/rare/components/tabs/games/head_bar.py
+++ b/rare/components/tabs/games/head_bar.py
@@ -13,7 +13,7 @@ from PyQt5.QtWidgets import (
from rare.models.options import options, LibraryFilter, LibraryOrder
from rare.shared import RareCore
from rare.utils.extra_widgets import ButtonLineEdit
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
class GameListHeadBar(QWidget):
@@ -83,15 +83,15 @@ class GameListHeadBar(QWidget):
integrations_menu = QMenu(parent=self)
import_action = QAction(
- icon("mdi.import", "fa.arrow-down"), self.tr("Import Game"), integrations_menu
+ qta_icon("mdi.import", "fa.arrow-down"), self.tr("Import Game"), integrations_menu
)
import_action.triggered.connect(self.goto_import)
- egl_sync_action = QAction(icon("mdi.sync", "fa.refresh"), self.tr("Sync with EGL"), integrations_menu)
+ egl_sync_action = QAction(qta_icon("mdi.sync", "fa.refresh"), self.tr("Sync with EGL"), integrations_menu)
egl_sync_action.triggered.connect(self.goto_egl_sync)
eos_ubisoft_action = QAction(
- icon("mdi.rocket", "fa.rocket"), self.tr("Epic Overlay and Ubisoft"), integrations_menu
+ qta_icon("mdi.rocket", "fa.rocket"), self.tr("Epic Overlay and Ubisoft"), integrations_menu
)
eos_ubisoft_action.triggered.connect(self.goto_eos_ubisoft)
@@ -104,15 +104,14 @@ class GameListHeadBar(QWidget):
integrations.setMenu(integrations_menu)
integrations.setPopupMode(QToolButton.InstantPopup)
- self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search Game"))
+ self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search"))
self.search_bar.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
self.search_bar.setObjectName("SearchBar")
- self.search_bar.setFrame(False)
self.search_bar.setMinimumWidth(250)
installed_tooltip = self.tr("Installed games")
self.installed_icon = QLabel(parent=self)
- self.installed_icon.setPixmap(icon("ph.floppy-disk-back-fill").pixmap(QSize(16, 16)))
+ self.installed_icon.setPixmap(qta_icon("ph.floppy-disk-back-fill").pixmap(QSize(16, 16)))
self.installed_icon.setToolTip(installed_tooltip)
self.installed_label = QLabel(parent=self)
font = self.installed_label.font()
@@ -121,13 +120,13 @@ class GameListHeadBar(QWidget):
self.installed_label.setToolTip(installed_tooltip)
available_tooltip = self.tr("Available games")
self.available_icon = QLabel(parent=self)
- self.available_icon.setPixmap(icon("ph.floppy-disk-back-light").pixmap(QSize(16, 16)))
+ self.available_icon.setPixmap(qta_icon("ph.floppy-disk-back-light").pixmap(QSize(16, 16)))
self.available_icon.setToolTip(available_tooltip)
self.available_label = QLabel(parent=self)
self.available_label.setToolTip(available_tooltip)
self.refresh_list = QPushButton(parent=self)
- self.refresh_list.setIcon(icon("fa.refresh")) # Reload icon
+ self.refresh_list.setIcon(qta_icon("fa.refresh")) # Reload icon
self.refresh_list.clicked.connect(self.__refresh_clicked)
layout = QHBoxLayout(self)
diff --git a/rare/components/tabs/games/integrations/eos_group.py b/rare/components/tabs/games/integrations/eos_group.py
index 0f8efb95..fae747be 100644
--- a/rare/components/tabs/games/integrations/eos_group.py
+++ b/rare/components/tabs/games/integrations/eos_group.py
@@ -22,7 +22,7 @@ from rare.models.game import RareEosOverlay
from rare.shared import RareCore
from rare.ui.components.tabs.games.integrations.eos_widget import Ui_EosWidget
from rare.utils import config_helper as config
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.elide_label import ElideLabel
logger = getLogger("EpicOverlay")
@@ -102,15 +102,15 @@ class EosPrefixWidget(QFrame):
if not self.overlay.is_installed and not self.overlay.available_paths(self.prefix):
self.setDisabled(True)
- self.indicator.setPixmap(icon("fa.circle-o", color="grey").pixmap(20, 20))
+ self.indicator.setPixmap(qta_icon("fa.circle-o", color="grey").pixmap(20, 20))
self.overlay_label.setText(self.overlay.active_path(self.prefix))
self.button.setText(self.tr("Unavailable"))
return
if self.overlay.is_enabled(self.prefix):
- self.indicator.setPixmap(icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
+ self.indicator.setPixmap(qta_icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
else:
- self.indicator.setPixmap(icon("fa.times-circle-o", color="red").pixmap(QSize(20, 20)))
+ self.indicator.setPixmap(qta_icon("fa.times-circle-o", color="red").pixmap(QSize(20, 20)))
install_path = os.path.normpath(p) if (p := self.overlay.install_path) else ""
@@ -171,8 +171,8 @@ class EosGroup(QGroupBox):
self.ui.install_page_layout.setAlignment(Qt.AlignTop)
self.ui.info_page_layout.setAlignment(Qt.AlignTop)
- self.ui.install_button.setIcon(icon("ri.install-line"))
- self.ui.uninstall_button.setIcon(icon("ri.uninstall-line"))
+ self.ui.install_button.setIcon(qta_icon("ri.install-line"))
+ self.ui.uninstall_button.setIcon(qta_icon("ri.uninstall-line"))
self.installed_path_label = ElideLabel(parent=self)
self.installed_version_label = ElideLabel(parent=self)
diff --git a/rare/components/tabs/games/integrations/ubisoft_group.py b/rare/components/tabs/games/integrations/ubisoft_group.py
index b73d44bd..5de288cf 100644
--- a/rare/components/tabs/games/integrations/ubisoft_group.py
+++ b/rare/components/tabs/games/integrations/ubisoft_group.py
@@ -20,7 +20,7 @@ from rare.lgndr.core import LegendaryCore
from rare.shared import RareCore
from rare.shared.workers.worker import Worker
from rare.utils.metrics import timelogger
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.elide_label import ElideLabel
from rare.widgets.loading_widget import LoadingWidget
@@ -104,7 +104,7 @@ class UbiLinkWidget(QFrame):
self.ubi_account_id = ubi_account_id
self.ok_indicator = QLabel(parent=self)
- self.ok_indicator.setPixmap(icon("fa.circle-o", color="grey").pixmap(20, 20))
+ self.ok_indicator.setPixmap(qta_icon("fa.circle-o", color="grey").pixmap(20, 20))
self.ok_indicator.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
self.title_label = ElideLabel(game.app_title, parent=self)
@@ -116,7 +116,7 @@ class UbiLinkWidget(QFrame):
if activated:
self.link_button.setText(self.tr("Already activated"))
self.link_button.setDisabled(True)
- self.ok_indicator.setPixmap(icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
+ self.ok_indicator.setPixmap(qta_icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
layout = QHBoxLayout(self)
layout.setContentsMargins(-1, 0, 0, 0)
@@ -127,7 +127,7 @@ class UbiLinkWidget(QFrame):
def activate(self):
self.link_button.setDisabled(True)
# self.ok_indicator.setPixmap(icon("mdi.loading", color="grey").pixmap(20, 20))
- self.ok_indicator.setPixmap(icon("mdi.transit-connection-horizontal", color="grey").pixmap(20, 20))
+ self.ok_indicator.setPixmap(qta_icon("mdi.transit-connection-horizontal", color="grey").pixmap(20, 20))
if self.args.debug:
worker = UbiConnectWorker(RareCore.instance().core(), None, None)
@@ -140,11 +140,11 @@ class UbiLinkWidget(QFrame):
def worker_finished(self, error):
if not error:
- self.ok_indicator.setPixmap(icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
+ self.ok_indicator.setPixmap(qta_icon("fa.check-circle-o", color="green").pixmap(QSize(20, 20)))
self.link_button.setDisabled(True)
self.link_button.setText(self.tr("Already activated"))
else:
- self.ok_indicator.setPixmap(icon("fa.times-circle-o", color="red").pixmap(QSize(20, 20)))
+ self.ok_indicator.setPixmap(qta_icon("fa.times-circle-o", color="red").pixmap(QSize(20, 20)))
self.ok_indicator.setToolTip(error)
self.link_button.setText(self.tr("Try again"))
self.link_button.setDisabled(False)
diff --git a/rare/components/tabs/settings/widgets/env_vars_model.py b/rare/components/tabs/settings/widgets/env_vars_model.py
index d6332218..8acb8cf4 100644
--- a/rare/components/tabs/settings/widgets/env_vars_model.py
+++ b/rare/components/tabs/settings/widgets/env_vars_model.py
@@ -8,7 +8,7 @@ from PyQt5.QtCore import Qt, QModelIndex, QAbstractTableModel, pyqtSlot
from PyQt5.QtGui import QFont
from rare.lgndr.core import LegendaryCore
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
if platform.system() != "Windows":
from rare.utils.compat.wine import get_wine_environment
@@ -139,12 +139,12 @@ class EnvVarsTableModel(QAbstractTableModel):
if orientation == Qt.Vertical:
if section < self.__data_length():
if self.__is_readonly(section) or not self.__is_local(section):
- return icon("mdi.lock", "ei.lock")
+ return qta_icon("mdi.lock", "ei.lock")
if self.__is_global(section) and self.__is_local(section):
- return icon("mdi.refresh", "ei.refresh")
+ return qta_icon("mdi.refresh", "ei.refresh")
if self.__is_local(section):
- return icon("mdi.delete", "ei.remove-sign")
- return icon("mdi.plus", "ei.plus-sign")
+ return qta_icon("mdi.delete", "ei.remove-sign")
+ return qta_icon("mdi.plus", "ei.plus-sign")
if role == Qt.TextAlignmentRole:
return Qt.AlignVCenter + Qt.AlignHCenter
return None
diff --git a/rare/components/tabs/settings/widgets/wrappers.py b/rare/components/tabs/settings/widgets/wrappers.py
index b54acb46..b226b3dc 100644
--- a/rare/components/tabs/settings/widgets/wrappers.py
+++ b/rare/components/tabs/settings/widgets/wrappers.py
@@ -21,7 +21,7 @@ from PyQt5.QtWidgets import (
from rare.models.wrapper import Wrapper
from rare.shared import RareCore
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
from rare.widgets.dialogs import ButtonDialog, game_title
if pf.system() in {"Linux", "FreeBSD"}:
@@ -45,7 +45,7 @@ class WrapperEditDialog(ButtonDialog):
self.setCentralLayout(self.widget_layout)
self.accept_button.setText(self.tr("Save"))
- self.accept_button.setIcon(icon("fa.edit"))
+ self.accept_button.setIcon(qta_icon("fa.edit"))
self.accept_button.setEnabled(False)
self.result: Tuple = ()
@@ -108,7 +108,7 @@ class WrapperWidget(QFrame):
text_lbl.setEnabled(wrapper.is_editable)
image_lbl = QLabel(parent=self)
- image_lbl.setPixmap(icon("mdi.drag-vertical").pixmap(QSize(20, 20)))
+ image_lbl.setPixmap(qta_icon("mdi.drag-vertical").pixmap(QSize(20, 20)))
edit_action = QAction("Edit", parent=self)
edit_action.triggered.connect(self.__on_edit)
@@ -119,7 +119,7 @@ class WrapperWidget(QFrame):
manage_menu.addActions([edit_action, delete_action])
manage_button = QToolButton(parent=self)
- manage_button.setIcon(icon("mdi.menu"))
+ manage_button.setIcon(qta_icon("mdi.menu"))
manage_button.setMenu(manage_menu)
manage_button.setPopupMode(QToolButton.InstantPopup)
manage_button.setEnabled(wrapper.is_editable)
diff --git a/rare/ui/components/tabs/games/integrations/eos_widget.py b/rare/ui/components/tabs/games/integrations/eos_widget.py
index 3efcf3f9..7a3d245c 100644
--- a/rare/ui/components/tabs/games/integrations/eos_widget.py
+++ b/rare/ui/components/tabs/games/integrations/eos_widget.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/integrations/eos_widget.ui'
#
-# Created by: PyQt5 UI code generator 5.15.9
+# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EosWidget(object):
def setupUi(self, EosWidget):
EosWidget.setObjectName("EosWidget")
- EosWidget.resize(464, 98)
+ EosWidget.resize(465, 98)
EosWidget.setWindowTitle("GroupBox")
self.eos_layout = QtWidgets.QVBoxLayout(EosWidget)
self.eos_layout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint)
@@ -27,8 +27,8 @@ class Ui_EosWidget(object):
self.install_page_layout.setContentsMargins(0, 0, 0, 0)
self.install_page_layout.setObjectName("install_page_layout")
self.install_label_layout = QtWidgets.QFormLayout()
- self.install_label_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
- self.install_label_layout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
+ self.install_label_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
+ self.install_label_layout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.install_label_layout.setObjectName("install_label_layout")
self.install_label = QtWidgets.QLabel(self.install_page)
self.install_label.setObjectName("install_label")
@@ -43,7 +43,7 @@ class Ui_EosWidget(object):
self.install_button = QtWidgets.QPushButton(self.install_page)
self.install_button.setMinimumSize(QtCore.QSize(140, 0))
self.install_button.setObjectName("install_button")
- self.install_button_layout.addWidget(self.install_button)
+ self.install_button_layout.addWidget(self.install_button, 0, QtCore.Qt.AlignTop)
self.install_page_layout.addLayout(self.install_button_layout)
self.install_page_layout.setStretch(0, 1)
self.overlay_stack.addWidget(self.install_page)
@@ -53,8 +53,8 @@ class Ui_EosWidget(object):
self.info_page_layout.setContentsMargins(0, 0, 0, 0)
self.info_page_layout.setObjectName("info_page_layout")
self.info_label_layout = QtWidgets.QFormLayout()
- self.info_label_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
- self.info_label_layout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
+ self.info_label_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTop|QtCore.Qt.AlignTrailing)
+ self.info_label_layout.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
self.info_label_layout.setObjectName("info_label_layout")
self.version_label = QtWidgets.QLabel(self.info_page)
self.version_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
@@ -70,11 +70,11 @@ class Ui_EosWidget(object):
self.update_button = QtWidgets.QPushButton(self.info_page)
self.update_button.setMinimumSize(QtCore.QSize(140, 0))
self.update_button.setObjectName("update_button")
- self.info_button_layout.addWidget(self.update_button)
+ self.info_button_layout.addWidget(self.update_button, 0, QtCore.Qt.AlignTop)
self.uninstall_button = QtWidgets.QPushButton(self.info_page)
self.uninstall_button.setMinimumSize(QtCore.QSize(140, 0))
self.uninstall_button.setObjectName("uninstall_button")
- self.info_button_layout.addWidget(self.uninstall_button)
+ self.info_button_layout.addWidget(self.uninstall_button, 0, QtCore.Qt.AlignTop)
self.info_page_layout.addLayout(self.info_button_layout)
self.info_page_layout.setStretch(0, 1)
self.overlay_stack.addWidget(self.info_page)
@@ -86,11 +86,11 @@ class Ui_EosWidget(object):
def retranslateUi(self, EosWidget):
_translate = QtCore.QCoreApplication.translate
EosWidget.setTitle(_translate("EosWidget", "Epic Overlay"))
- self.install_label.setText(_translate("EosWidget", "Status:"))
+ self.install_label.setText(_translate("EosWidget", "Version"))
self.install_text.setText(_translate("EosWidget", "Epic Online Services Overlay is not installed"))
self.install_button.setText(_translate("EosWidget", "Install"))
- self.version_label.setText(_translate("EosWidget", "Version:"))
- self.path_label.setText(_translate("EosWidget", "Path:"))
+ self.version_label.setText(_translate("EosWidget", "Version"))
+ self.path_label.setText(_translate("EosWidget", "Install folder"))
self.update_button.setText(_translate("EosWidget", "Update"))
self.uninstall_button.setText(_translate("EosWidget", "Uninstall"))
diff --git a/rare/ui/components/tabs/games/integrations/eos_widget.ui b/rare/ui/components/tabs/games/integrations/eos_widget.ui
index 81dad003..4dec2a31 100644
--- a/rare/ui/components/tabs/games/integrations/eos_widget.ui
+++ b/rare/ui/components/tabs/games/integrations/eos_widget.ui
@@ -6,7 +6,7 @@
0
0
- 464
+ 465
98
@@ -42,15 +42,15 @@
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
- Status:
+ Version
@@ -68,7 +68,7 @@
0
- -
+
-
@@ -102,15 +102,15 @@
-
- Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+ Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
- Version:
+ Version
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -120,7 +120,7 @@
-
- Path:
+ Install folder
Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
@@ -131,7 +131,7 @@
-
-
-
+
-
@@ -144,7 +144,7 @@
- -
+
-
diff --git a/rare/utils/misc.py b/rare/utils/misc.py
index 50d81193..1d016cf3 100644
--- a/rare/utils/misc.py
+++ b/rare/utils/misc.py
@@ -157,7 +157,7 @@ def format_size(b: Union[int, float]) -> str:
b /= 1024
-def icon(icn_str: str, fallback: str = None, **kwargs):
+def qta_icon(icn_str: str, fallback: str = None, **kwargs):
try:
return qtawesome.icon(icn_str, **kwargs)
except Exception as e:
diff --git a/rare/widgets/collapsible_widget.py b/rare/widgets/collapsible_widget.py
index bd5d8ab6..553d8c34 100644
--- a/rare/widgets/collapsible_widget.py
+++ b/rare/widgets/collapsible_widget.py
@@ -13,7 +13,7 @@ from PyQt5.QtWidgets import (
QLabel,
)
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
class CollapsibleBase(object):
@@ -108,7 +108,7 @@ class CollapsibleFrame(QFrame, CollapsibleBase):
self.toggle_button = QToolButton(self)
self.toggle_button.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
- self.toggle_button.setIcon(icon("fa.arrow-right"))
+ self.toggle_button.setIcon(qta_icon("fa.arrow-right"))
self.toggle_button.setCheckable(True)
self.toggle_button.setChecked(False)
@@ -150,7 +150,7 @@ class CollapsibleFrame(QFrame, CollapsibleBase):
return super(CollapsibleFrame, self).sizeHint()
def animationStart(self, checked):
- arrow_type = icon("fa.arrow-down") if checked else icon("fa.arrow-right")
+ arrow_type = qta_icon("fa.arrow-down") if checked else qta_icon("fa.arrow-right")
self.toggle_button.setIcon(arrow_type)
super(CollapsibleFrame, self).animationStart(checked)
diff --git a/rare/widgets/dialogs.py b/rare/widgets/dialogs.py
index 83628d1f..836b3b55 100644
--- a/rare/widgets/dialogs.py
+++ b/rare/widgets/dialogs.py
@@ -14,7 +14,7 @@ from PyQt5.QtWidgets import (
QLayout, QSpacerItem, QSizePolicy, QLabel,
)
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon
def game_title(text: str, app_title: str) -> str:
@@ -79,7 +79,7 @@ class ButtonDialog(BaseDialog):
self.reject_button = QPushButton(self)
self.reject_button.setText(self.tr("Cancel"))
- self.reject_button.setIcon(icon("fa.remove"))
+ self.reject_button.setIcon(qta_icon("fa.remove"))
self.reject_button.setAutoDefault(False)
self.reject_button.clicked.connect(self.reject)
diff --git a/rare/widgets/indicator_edit.py b/rare/widgets/indicator_edit.py
index 93132126..83c1cd6a 100644
--- a/rare/widgets/indicator_edit.py
+++ b/rare/widgets/indicator_edit.py
@@ -27,7 +27,7 @@ from PyQt5.QtWidgets import (
QFileIconProvider,
)
-from rare.utils.misc import icon as qta_icon
+from rare.utils.misc import qta_icon
logger = getLogger("IndicatorEdit")
diff --git a/rare/widgets/side_tab.py b/rare/widgets/side_tab.py
index c08b2953..25b04481 100644
--- a/rare/widgets/side_tab.py
+++ b/rare/widgets/side_tab.py
@@ -21,7 +21,7 @@ from PyQt5.QtWidgets import (
QScrollArea, QLayout, QSizePolicy,
)
-from rare.utils.misc import icon as qta_icon
+from rare.utils.misc import qta_icon
logger = getLogger("SideTab")
@@ -29,7 +29,7 @@ logger = getLogger("SideTab")
class SideTabBar(QTabBar):
def __init__(self, padding: int = -1, parent=None):
super(SideTabBar, self).__init__(parent=parent)
- self.setObjectName("SideTabBar")
+ self.setObjectName(type(self).__name__)
self.padding = padding
self.fm = QFontMetrics(self.font())
From 5bf353ec37c07b82b5a4096b120ddeca3ca2131e Mon Sep 17 00:00:00 2001
From: loathingKernel <142770+loathingKernel@users.noreply.github.com>
Date: Wed, 21 Feb 2024 20:25:03 +0200
Subject: [PATCH 3/5] Rare: Replace QToolButton with QPushButton
QToolButton is not really designed to be used in the way we did and since
QPushButton supports having a menu attached to, we can replace tool buttons
in most cases.
* Fix the presentation of the TabButtonWidget by updating RareStyle's css
* Reduce the size of the top tab bar to save vertical space.
* Remove infoLabel property
---
rare/components/dialogs/login/import_login.py | 2 +-
rare/components/tabs/__init__.py | 15 ++-
rare/components/tabs/games/head_bar.py | 6 +-
.../tabs/games/integrations/egl_sync_group.py | 1 -
.../tabs/settings/widgets/wrappers.py | 6 +-
rare/components/tabs/store/game_info.py | 2 +-
rare/components/tabs/store/game_widgets.py | 2 +-
rare/components/tabs/store/wishlist.py | 2 +-
rare/components/tabs/tab_widgets.py | 22 ++-
rare/resources/static_css/__init__.py | Bin 4107 -> 4331 bytes
rare/resources/static_css/stylesheet.py | 18 ++-
rare/resources/static_css/stylesheet.qss | 10 ++
.../stylesheets/ChildOfMetropolis/__init__.py | Bin 26305 -> 26532 bytes
.../ChildOfMetropolis/stylesheet.qss | 116 +++++++++-------
.../stylesheets/RareStyle/__init__.py | Bin 26419 -> 26452 bytes
.../stylesheets/RareStyle/drop-down.svg | 2 +-
.../stylesheets/RareStyle/sort-down.svg | 2 +-
.../stylesheets/RareStyle/sort-up.svg | 2 +-
.../stylesheets/RareStyle/stylesheet.qss | 127 ++++++++++--------
.../components/dialogs/login/import_login.py | 10 +-
.../components/dialogs/login/import_login.ui | 8 +-
.../tabs/games/integrations/egl_sync_group.py | 2 +-
.../tabs/games/integrations/egl_sync_group.ui | 2 +-
rare/utils/extra_widgets.py | 11 +-
rare/utils/misc.py | 10 +-
rare/widgets/indicator_edit.py | 4 +-
26 files changed, 222 insertions(+), 160 deletions(-)
diff --git a/rare/components/dialogs/login/import_login.py b/rare/components/dialogs/login/import_login.py
index 9aa4980c..b02905c4 100644
--- a/rare/components/dialogs/login/import_login.py
+++ b/rare/components/dialogs/login/import_login.py
@@ -54,7 +54,7 @@ class ImportLogin(QFrame):
else:
self.ui.status_label.setText(self.text_egl_notfound)
- self.ui.prefix_tool.clicked.connect(self.prefix_path)
+ self.ui.prefix_button.clicked.connect(self.prefix_path)
self.ui.prefix_combo.editTextChanged.connect(self.changed.emit)
def get_wine_prefixes(self):
diff --git a/rare/components/tabs/__init__.py b/rare/components/tabs/__init__.py
index a959c2d7..20fa6633 100644
--- a/rare/components/tabs/__init__.py
+++ b/rare/components/tabs/__init__.py
@@ -2,7 +2,7 @@ from PyQt5.QtCore import QSize, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction, QShortcut, QMessageBox
from rare.shared import RareCore, LegendaryCoreSingleton, GlobalSignalsSingleton, ArgumentsSingleton
-from rare.utils.misc import icon, ExitCodes
+from rare.utils.misc import qta_icon, ExitCodes
from .account import AccountWidget
from .downloads import DownloadsTab
from .games import GamesTab
@@ -18,6 +18,7 @@ class MainTabWidget(QTabWidget):
def __init__(self, parent):
super(MainTabWidget, self).__init__(parent=parent)
+
self.rcore = RareCore.instance()
self.core = LegendaryCoreSingleton()
self.signals = GlobalSignalsSingleton()
@@ -47,29 +48,29 @@ class MainTabWidget(QTabWidget):
self.setTabEnabled(space_index, False)
self.tab_bar.expanded = space_index
# Button
- button_index = self.addTab(QWidget(self), "")
+ button_index = self.addTab(QWidget(self), qta_icon("mdi.account-circle", fallback="fa.user"), "")
self.setTabEnabled(button_index, False)
self.account_widget = AccountWidget(self)
self.account_widget.exit_app.connect(self.__on_exit_app)
account_action = QWidgetAction(self)
account_action.setDefaultWidget(self.account_widget)
- account_button = TabButtonWidget("mdi.account-circle", "Account", fallback_icon="fa.user")
- account_button.setMenu(QMenu())
- account_button.menu().addAction(account_action)
+ account_button = TabButtonWidget(qta_icon("mdi.menu", fallback="fa.align-justify"), tooltip="Menu")
+ account_menu = QMenu(account_button)
+ account_menu.addAction(account_action)
+ account_button.setMenu(account_menu)
self.tab_bar.setTabButton(
button_index, MainTabBar.RightSide, account_button
)
self.settings_tab = SettingsTab(self)
- self.settings_index = self.addTab(self.settings_tab, icon("fa.gear"), "")
+ self.settings_index = self.addTab(self.settings_tab, qta_icon("fa.gear"), "")
self.settings_tab.about.update_available_ready.connect(
lambda: self.tab_bar.setTabText(self.settings_index, "(!)")
)
# Open game list on click on Games tab button
self.tabBarClicked.connect(self.mouse_clicked)
- self.setIconSize(QSize(24, 24))
# shortcuts
QShortcut("Alt+1", self).activated.connect(lambda: self.setCurrentIndex(self.games_index))
diff --git a/rare/components/tabs/games/head_bar.py b/rare/components/tabs/games/head_bar.py
index e0fbfb36..c000e994 100644
--- a/rare/components/tabs/games/head_bar.py
+++ b/rare/components/tabs/games/head_bar.py
@@ -5,7 +5,6 @@ from PyQt5.QtWidgets import (
QWidget,
QHBoxLayout,
QComboBox,
- QToolButton,
QMenu,
QAction, QSpacerItem, QSizePolicy,
)
@@ -99,10 +98,9 @@ class GameListHeadBar(QWidget):
integrations_menu.addAction(egl_sync_action)
integrations_menu.addAction(eos_ubisoft_action)
- integrations = QToolButton(parent=self)
+ integrations = QPushButton(parent=self)
integrations.setText(self.tr("Integrations"))
integrations.setMenu(integrations_menu)
- integrations.setPopupMode(QToolButton.InstantPopup)
self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search"))
self.search_bar.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
@@ -130,7 +128,7 @@ class GameListHeadBar(QWidget):
self.refresh_list.clicked.connect(self.__refresh_clicked)
layout = QHBoxLayout(self)
- layout.setContentsMargins(0, 5, 0, 5)
+ layout.setContentsMargins(0, 0, 0, 0)
layout.addWidget(self.filter)
layout.addWidget(self.order)
layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Fixed))
diff --git a/rare/components/tabs/games/integrations/egl_sync_group.py b/rare/components/tabs/games/integrations/egl_sync_group.py
index 531d2a4d..f2478bfe 100644
--- a/rare/components/tabs/games/integrations/egl_sync_group.py
+++ b/rare/components/tabs/games/integrations/egl_sync_group.py
@@ -46,7 +46,6 @@ class EGLSyncGroup(QGroupBox):
)
self.egl_path_info = ElideLabel(parent=self)
- self.egl_path_info.setProperty("infoLabel", 1)
self.ui.egl_sync_layout.setWidget(
self.ui.egl_sync_layout.getWidgetPosition(self.ui.egl_path_info_label)[0],
QFormLayout.FieldRole, self.egl_path_info
diff --git a/rare/components/tabs/settings/widgets/wrappers.py b/rare/components/tabs/settings/widgets/wrappers.py
index b226b3dc..b508bf33 100644
--- a/rare/components/tabs/settings/widgets/wrappers.py
+++ b/rare/components/tabs/settings/widgets/wrappers.py
@@ -15,7 +15,6 @@ from PyQt5.QtWidgets import (
QWidget,
QScrollArea,
QAction,
- QToolButton,
QMenu, QStackedWidget, QPushButton, QLineEdit, QVBoxLayout, QComboBox,
)
@@ -118,10 +117,9 @@ class WrapperWidget(QFrame):
manage_menu = QMenu(parent=self)
manage_menu.addActions([edit_action, delete_action])
- manage_button = QToolButton(parent=self)
- manage_button.setIcon(qta_icon("mdi.menu"))
+ manage_button = QPushButton(parent=self)
+ manage_button.setIcon(qta_icon("mdi.menu", fallback="fa.align-justify"))
manage_button.setMenu(manage_menu)
- manage_button.setPopupMode(QToolButton.InstantPopup)
manage_button.setEnabled(wrapper.is_editable)
if not wrapper.is_editable:
manage_button.setToolTip(self.tr("Manage through settings"))
diff --git a/rare/components/tabs/store/game_info.py b/rare/components/tabs/store/game_info.py
index 65045040..263f91e9 100644
--- a/rare/components/tabs/store/game_info.py
+++ b/rare/components/tabs/store/game_info.py
@@ -17,7 +17,7 @@ from rare.components.tabs.store.shop_models import ShopGame
from rare.shared import LegendaryCoreSingleton
from rare.ui.components.tabs.store.shop_game_info import Ui_shop_info
from rare.utils.extra_widgets import ImageLabel
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon as icon
from rare.widgets.loading_widget import LoadingWidget
logger = logging.getLogger("ShopInfo")
diff --git a/rare/components/tabs/store/game_widgets.py b/rare/components/tabs/store/game_widgets.py
index 7cc2c1f8..8085965b 100644
--- a/rare/components/tabs/store/game_widgets.py
+++ b/rare/components/tabs/store/game_widgets.py
@@ -9,7 +9,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout
from rare.components.tabs.store.shop_models import ImageUrlModel
from rare.ui.components.tabs.store.wishlist_widget import Ui_WishlistWidget
from rare.utils.extra_widgets import ImageLabel
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon as icon
logger = logging.getLogger("GameWidgets")
diff --git a/rare/components/tabs/store/wishlist.py b/rare/components/tabs/store/wishlist.py
index 140ad8ad..fbac0713 100644
--- a/rare/components/tabs/store/wishlist.py
+++ b/rare/components/tabs/store/wishlist.py
@@ -5,7 +5,7 @@ from rare.components.tabs.store import ShopApiCore
from rare.components.tabs.store.game_widgets import WishlistWidget
from rare.ui.components.tabs.store.wishlist import Ui_Wishlist
from rare.utils.extra_widgets import WaitingSpinner
-from rare.utils.misc import icon
+from rare.utils.misc import qta_icon as icon
class Wishlist(QStackedWidget, Ui_Wishlist):
diff --git a/rare/components/tabs/tab_widgets.py b/rare/components/tabs/tab_widgets.py
index b3212fb4..dfa01d8c 100644
--- a/rare/components/tabs/tab_widgets.py
+++ b/rare/components/tabs/tab_widgets.py
@@ -1,15 +1,13 @@
-from PyQt5.QtCore import QSize
-from PyQt5.QtWidgets import QTabBar, QToolButton
-
-from rare.utils.misc import icon
+from PyQt5.QtGui import QIcon
+from PyQt5.QtWidgets import QTabBar, QSizePolicy, QPushButton
class MainTabBar(QTabBar):
def __init__(self, parent=None):
super(MainTabBar, self).__init__(parent=parent)
- self.setObjectName("MainTabBar")
+ self.setObjectName(type(self).__name__)
font = self.font()
- font.setPointSize(font.pointSize() + 2)
+ font.setPointSize(font.pointSize() + 1)
font.setBold(True)
self.setFont(font)
self.expanded = -1
@@ -24,11 +22,9 @@ class MainTabBar(QTabBar):
return size
-class TabButtonWidget(QToolButton):
- def __init__(self, button_icon: str, tool_tip: str, fallback_icon=None, parent=None):
+class TabButtonWidget(QPushButton):
+ def __init__(self, icon: QIcon, tooltip: str = "", parent=None):
super(TabButtonWidget, self).__init__(parent=parent)
- self.setText("Icon")
- self.setPopupMode(QToolButton.InstantPopup)
- self.setIcon(icon(button_icon, fallback_icon, scale_factor=1.25))
- self.setToolTip(tool_tip)
- self.setIconSize(QSize(25, 25))
+ self.setObjectName(type(self).__name__)
+ self.setIcon(icon)
+ self.setToolTip(tooltip)
diff --git a/rare/resources/static_css/__init__.py b/rare/resources/static_css/__init__.py
index 70c3b9628c6a7bd1c6cf9f7ae59eda0194322447..82dc333850d6cc2a6a44f58375da455bb646dac1 100644
GIT binary patch
literal 4331
zcmcJSO>fg!6o&Wt6$TcxBdB6KP8>8WP)8cEK?9nP1wqIk*N{=0l*H|re?QN2la!P)
z8nGafW&7T9-t(T%>pV)H{`53y*6nij;aPIscTY=KMx#f`o3LG9Z<>&->%T+OD-=eL
z*f`&Wst;{ae}0zy{xN(JJYQd4Eib|*>DHU%x6iNpA~|{8CpX1eTAXF4QTeYIZ(hB8
z_3MM=#l=O^e5_U@w^?8A5to-&>rJ1$
z?$6hoFdBX8-*5Ir-?vp?CC`)k;bOEH#^e2!Erx2kUpcH-i=k{6!>n8k^JX#B#bPL?
zi=j;y!z6I87ekJIIza}xrelAGY$;9!;zR@_G7vJP!W=Euy$ZEJn6nmS0qU6NF&5H7
zgcQsiyAv)YXGqP}=D9(;;aN^u&NFrkv@@=h_pTEmhh@gjl+{u#c2c!i6Qu&Nf@8|n
zvNpqZgHDZnn2FHtZO`FS;6;VhL_}kP)?DVuH0+OA8^fo9TLnrU<1k0MMk3`t#=cjH
zuNjgPBt^=w+i_2|#(FMCIDiBPZ76N7I(Cd?fj!yAJh+bZn6(a0Gp-yf6Lhc&0=^9L
zXj!e1^2$X3$!m&+(VMfM5f^!AtyMNga*C9g1%8!Wt(?gB*eIeo;knThp7qqox1gr1
zQ$ui=z&3y|!-FYT!+Xp
ziZO_`v6mrdB~t^#3?8Ksja41H1Y1@~hU6G6*GkZ)W*H=_XU6Ah{O7onv&O{h$Y&Y<-j|C&Oa6Ki7v{?ynYVYH~4I2)!QC7ze6`J0)H$i%g
zmN{|?*!>;*cG)B%RM@cQtqvYI+m{?WLu}(SA3hqQ24ziPxQ>6mQ?8OSh
zmPmG6!@eEgfe?5%vepM(075Wgu(zUQXOyco90;7arW>m2a&^mJ@zfnGrfVcy}~R9p<>k;
zT!S6wHB6n4vHwAI%F4~IvR=%S^Thlyf#krGQ^gqDb2aZq X7ZnYP@SIU9z%#7Zd
z`B>Ejn69ejRC7kylOmX#0?7uB#w8%@^l?5o3E%?TEymnf
zFCfSM6?Hf5k&3mzj`MN6kF1$=J{mdeB?r-XXi57_7bhUXglTY
z4>Kp9IICILJ5k^ULacLGPG!gC`C#o?NuCjQQtTbk_s?;D^Gr@a$cc_Co?XT~&SUP;
ze>hn6P8v^V&ytd7Yt)Wo3V~o1Gb!S^X&wSn`mKiX$w7!GGw&UC?RaN{aoJ6KqhmI$
zTF*@F89`@&{b%18gIH~%5GN;6h3B06aH!1`mqR~cN*u6-2q7IWbjh}cegy4fEmoVC1Z9y$ky9
zJ8}i`%rH1Oi{tl`QBw;E^KRv8%i5H&z1!+P@_yUMizpih-t-{a!`G5$vnFFXP4L3+
zCQm=BU)zV%kkbkTzlZD^zZab5o`7o3K{?DtzmV*}pa&r9ah$KQqWtWc48f2j`xVG-G~QIF~(boH$B1Trm#3+X0@l&hME0c;Z;K
zewR1{V`bw(>_g*?9ryg=u||!a9T01RwS8}*>8x~C84ofwdU*HScvW47yWhsUt`-vw
zyM(I6AAP{%!xM3F#aP6h!#lBv>sa(|2L>$`5~sU#HSYSoCOCfU!L~(<{{$Y
zd%Pp>{eWxLAFo@daeuF$5xe+);JxRmXJ18T+i$L${{2mQH#`^<;P!&_?X&B9;M=uW
zkhgE&qZyCc-E;RILhP&K)$a+&QJP4R
zQ^2niPekX4=jkqFH(|3~u2;nA?Q+$h+?>XLtvCJ+-Tk*b`}F5dej9AzHgNuWlw*4n$??TwSNCB`_#2h=TZiPN7?JN+kD#ADce;4q`H$S4IZ&^
zzD;G9nymW#Ec@d_`oeg=xx89kq;1x2w%PBWUv-o0D
z`XGC8ago&@%JuuS%Pz|%Wvg}8eOT?X7KrTM728$HE;hUF!C=sCHL-nzAdi=UMe|Iav0?;b9cZel|Q%j`YQ{uPf;DWxuGGeKlG3lj*V_
zH_Lw7F8iir&iR~CL2F0LzJPx;6{mn&j`=c%aLz%SdXo7N#4$*ony{bP8|LuJ!^jH}
z#!wbuju{QIYrmY%6DQDT0&M}xL{#;hF^4|Jma-C|g|mg)DqroC1!u!4wCpR^TC>m#
zptaCy5adTU5N2wGtyATIG~+}K>YP!tS0Ky11t$tl=Fo=lEugo7&@juD3%))XvewqQ
zCz#LKn=(pHCce^@GJ=1a)M13T5+i3AuQB?BU(j6Z7I15~Bk0Bk`VdRo@MMd;DY7aw
z7410Gr-pMX3TRrE`0A4qJrX_}w(4MH%7Z0FZNa)x7txp(>cps7&-o4y{u%MD!V2SD
zphpRZkyUoZN$C+$=L{p-isVTomaL}}b#{p!EdYAs73MwX}+pIX-W+oo{8HXdyi6fFyLN!5rxoJeI4Eve^xbI59`B3HuJS
zPtVrSX7J>ZlSZf!8(roME6cUE=IrT{S`UNX7*X}o0{LonkfN5_YP1r&W{z2HMo-Y%
z2pbbBsV~qY{KUEn1S@5MOe@9OG>az8N1)9)U1%9=E35(0Tr`_TSVD~$3-HaD@HO~q
zO#cWD<6=acLyRh|Vo!SLHWuNS^HFo4jo_G}Vd*J`xo7vO(8btH*fW}1L`MRl(H`Uu
zN2`*uv1rE0$W8X;&DB?{K`%$)N$`|sPZ*j#AWRRk%zwH_U&3R=t%)%_R=)n2
z?R%8*J?unvxg!@y1w$X0o7%2bdbMP&$44`DFoJdxvZJqz1Dbkz;T-OSU#1Lm)(&G8
zh^lXhI0!AfW~#YpAJhsXX+PEv#-c#4unaycOFgV=~iXMR#
zc7OYWR+vrRG{%9B7Wae}TOZ~M`hYM+d!rUI*ilO}-D+3ch&D7UU%$+ePaedrM`YCj
z+ssERRy4c2*;6nd>p843M%Id5$kTQ^>xFIuLSzpz8Yp%Z`-S%<8QUi~?K1Xidz0C9
zyw{B`_d5vDIpK&Ngg(l%f<&+vdUuo)!HhAJta4?ly}Id1?{ca*d}ODa!E3*=>bNC9Fp@bV?qgBl_P+8x
z<7qAO?$-XX)-X5g;}sIU+Q=ziO!Lw=Or=HI${4{dkC_)Q0Aqna?2hCtI#^i~R{Fu(
zFb|y@535>B?Bmf7K+<9>A#UI3)lr+E$Qkbzyr@Oqu+~YV9-@L`|M2}19u+-m({5qC
zdE+^JOZe(AH+{R!k?E~$=dsh8O?Cs{aS!jl9oOY$y8CvFoQ*p~zjJcmS?w0H=&>3EGMUDyQ_;;ck=k`@#)*as?GRQc0B%b_Ga=Vn?K2h
zZ=Ve^e%rdf*?gYmLA(7YZXY4UeoZ6?2kBy$z6Df#A5bwEGzmptu2umnXOMfAS3-@6zllcPaiyJv|6Nzewf!)726FEBSw}w?9sU`=$^6
E1D=6Zf&c&j
diff --git a/rare/resources/static_css/stylesheet.py b/rare/resources/static_css/stylesheet.py
index 099886b1..551826e7 100644
--- a/rare/resources/static_css/stylesheet.py
+++ b/rare/resources/static_css/stylesheet.py
@@ -5,7 +5,7 @@ from typing import Union, Type
import qstylizer.style
from PyQt5.QtCore import QDir, QObject
from PyQt5.QtGui import QColor
-from PyQt5.pyrcc import RCCResourceLibrary, CONSTANT_COMPRESSLEVEL_DEFAULT, CONSTANT_COMPRESSTHRESHOLD_DEFAULT
+from PyQt5.pyrcc import RCCResourceLibrary, CONSTANT_COMPRESSTHRESHOLD_DEFAULT
from PyQt5.sip import wrappertype
from rare.utils.misc import widget_object_name
@@ -64,6 +64,13 @@ def css_name(widget: Union[wrappertype, QObject, Type], subwidget: str = ""):
css = qstylizer.style.StyleSheet()
+# InfoLabel
+css.QLabel["#InfoLabel"].setValues(
+ color="#999",
+ fontStyle="italic",
+ fontWeight="normal",
+)
+
# [Un]InstallButton
css.QPushButton["#InstallButton"].setValues(
borderColor=QColor(0, 180, 0).name(),
@@ -197,6 +204,15 @@ css.QPushButton[css_name(SelectViewWidget, "Button")].setValues(
)
+# ButtonLineEdit
+from rare.utils.extra_widgets import ButtonLineEdit
+css.QPushButton[css_name(ButtonLineEdit, "Button")].setValues(
+ backgroundColor="transparent",
+ border="0px",
+ padding="0px",
+)
+
+
if __name__ == "__main__":
with open("stylesheet.qss", "w") as qss:
qss.write(f'\n/* This file is auto-generated from "{os.path.basename(__file__)}". DO NOT EDIT!!! */\n\n')
diff --git a/rare/resources/static_css/stylesheet.qss b/rare/resources/static_css/stylesheet.qss
index 4b74aebd..051a419d 100644
--- a/rare/resources/static_css/stylesheet.qss
+++ b/rare/resources/static_css/stylesheet.qss
@@ -1,6 +1,11 @@
/* This file is auto-generated from "stylesheet.py". DO NOT EDIT!!! */
+QLabel#InfoLabel {
+ color: #999;
+ font-style: italic;
+ font-weight: normal;
+}
QPushButton#InstallButton {
border-color: #00b400;
background-color: #007800;
@@ -106,3 +111,8 @@ QPushButton#SelectViewWidgetButton {
border: none;
background-color: transparent;
}
+QPushButton#ButtonLineEditButton {
+ background-color: transparent;
+ border: 0px;
+ padding: 0px;
+}
diff --git a/rare/resources/stylesheets/ChildOfMetropolis/__init__.py b/rare/resources/stylesheets/ChildOfMetropolis/__init__.py
index 990d81d113ef585a8af911a96fc18901fb881e63..592d3ddaa6d5eafbd3928b2c1ccd33d180360d96 100644
GIT binary patch
literal 26532
zcmeI*NpB?Al?C8Ee?{6_xT+xuB#WcaUKnbi;f>J}dRSP7KqiwC8>K3lMalBN@AI7)
zn3*I+in1G)QHH}A@rL{Ecg;B9u{i(hCyW35dUZSS)3@Jzd-ZyCy|{dPz4(v6
zes*)Xc=6fI;`_so_wwJpm!17Tzx(_TzyHI(|7!8O*RL1Lug~6mwR*Ss=Imm%xO%g=
z`TFYJ;xaTAf4NHc`D*d{?Yo;_?d)7$zx`$;dG*b=Z?A6_pWS@=_IkCm^XHo{uSZV5
zyg0i#Tl{u${_8JxzW8Bx_x8Fx(DG{Oe~(|~I{M;=qvJ1r*w2`wlU#?nPKP$n#|IgG
zk^cSsX6!4^8Jp)&Fsl^I$jswVI>^YQ%iL%7JkyL^o#{6#zbb{fWs~+mIn>Ha*2D*X
zW{R5>vSxW9LAX6y=2~TzQ6u-0G$r$nmo$W%x$=?t~08dLy!I6NM=%rWl)i-1>Yk
z&s#Bf8;^VC!HmqFV{M8@9*fHQ^Je^$E>he(ie$MSiGS2lSdU=*Z1d!Kk~H@-P7G}{
zIkn;%HNR_dULH}o8~WRF<*pVNfWo&B30J^+gK(yK-cn
zFRYMjKi7~wm(jXRxF7oHF0NKNBvzPm#HD2f-e5nb}A|(x;W&Krt57TyDiyVgLDo=a34A=1f#B6J4
z)H+N0DkTqgE(H+h^f?m9fX+@hlYR>9V=+
zFzev#6)lF3)7&3q#92n1<~qVtD4c{MUE!HcmRTwH@u+imnXwxl$c($m!e(9Mq93|B
z&bXyEJmxtT2!&NBu!r@JbJ6N$+SuUKJ{;sphMLRaBkWTl7q
zkbN&&(<5ur4GqFU_TU@mX=e{!N6Ya*6w*SjWjIr<;#`~2^dPe6i7%2w{^ye?=F}&v
z_dKQQ??~FZ2w$R^+-z}_nULl(_pN$S&z#*xw-Jq`P&mX-*6Qrc5|ez==zYIgTm3;l
zJS#l1W@geR`S(MCRu4i|wA0*q+8`{e<7ufqwyOUY#psoX&?vt@5d)dA8>%ao4Mh^1
zXLj50k+zGp#iHRs+@UQtMNqAmHkuM$Vgi4S@I2Q>Sq=K`wobxvkm83`Xz!*~6d!~a
zsKyWLC+UZNtMrK|Jf|KcQFwqiDyP$o62aEk3sv4rqh^+utbotcJktw_Lp>C5-W@|)
z_}#0>PtVpm&+l2T`XG(cfmNb?HVYbu!eLrYaGrH}3XSnamKBR65!Ir6iZElVuc0nQ
zD>QksSa8p}qJEV&R7l9WGJ_}=*%w(Q(uD^)K8S3GS;GuSui7p8g&$Uf(=PH``#9}E
zdJ=~MFNK`&pLdA?)ZpcLq(WVea4#dk?4oYQ$0niBDkj>*6&!$g;$oTKqF!dxT=6{A
z=%~?_-@RH>}H6MX24LO1Kve~LzFXaH++del!B$9AQz*p!mdw*Yq^@d
zs*Z!qMq!S$%ry2SE5_qOp_wkWpf!9nKSdh8371fijUZrc6CSFMP){6(g2>^)r!+?X
zJj*C@HeU8ZeK&f7wkM;s`+43C#rSh5;6@y(IMge=x^+{i@*L00=%g4)I$F=TWITu)
z3KOE?3~jz9yUN7XOMaU>)26-o1@%x!UI~S>+{wJSs=VP8b~jH(Yt_HDtj`bBUA!KS
z$5x@B>X4)88ilT(Ulc?d)PdtPj(fEfw1v*`l~B;z3M0M6zVLFI5$rB+z(lbl0_(qd
zKFOTc70o!jl%>QzwBtoI$g{<&dJ+XWikI^fZRMd}Ehcy=i}J_DK<=ym^wASZp}jt{
zJ@cPXj1(##et_mte(M{VB_EKNC~RKKqC$NZednkK*Hvca|LOP=t+UA)9=K0)J`V
zrcF8t^~4h%Lhq7~`3;wcp(4_0if<+-G(Ha^p_OD__xv-JP$)nT+{tD%#fzJt!Zi!4
zuajZBiu0w`eCfMzUxew7!|b%+#rak0#2+q6p*_FyiEPVnNytY;d-x6yytBKoNFYC`
z0-+2ay`asER=+|T5!9MmEcEk
zJ``kjIZ1|Tb(N9oY%xM75Kg@-cEqrlA)(kze<~Ko8O84O
z@i0CSyhI_IlXXNbY?Kq5@j?-P$vkw=!mZGA->NnI#b-mI*(M`-ue@MCgIj3k%oApn
zV^k3(nV%NPFN@}!3o~ZPAp6U6}tMa
zS-^878+J*eN%h5wvMDT5^_n5`+uQMGIfPHB>Fi0Y9Q}j`7^Mp1S*X}=$hhoI5_=wT
zBX_G~Sr-yQfMmr`=pH6L>Y`TUp)K2rIGF%`Lt5)Yx>jN7Z*FU3(F&Pm+)~K1s$90A
zm*%NZfh_nGmwZLO9d_<~K()nddQy;4>MB~h%-XUJo5+502WvZVQR@Y#_(SBe$AhX)
z65v(WMj;p5iwkieZul%c@y*N$1rcj)=nmD)kcq{DoDS9dZX|kuRs52V!0uQ!6xbUU
zwYtH5))ODC_R{Cnpw`a4T7uW{X!sd_4h8iqU7*Qx&0rUJ#aD_nS;0<4tw92sRC9%5
zDA?EVAdzi-dtFv!Ict+ZHKeWqaO!z((ne)YmO=|96?
z#w07FkP*Df9)?HD)u_Nro@A#$n|wt!hN<>>e05b#;>=#_EG
!*#3CuI
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
z
diff --git a/rare/resources/stylesheets/ChildOfMetropolis/stylesheet.qss b/rare/resources/stylesheets/ChildOfMetropolis/stylesheet.qss
index 1cfc9718..d9ea0f3a 100644
--- a/rare/resources/stylesheets/ChildOfMetropolis/stylesheet.qss
+++ b/rare/resources/stylesheets/ChildOfMetropolis/stylesheet.qss
@@ -20,7 +20,6 @@ disabled: #43474d #767778 -- border for disabled widgets
alternate: #3c3f41 #A3DAAA -- border color for gradient backgrounds on widgets like Tabs and Popups
[Special]
-info-normal: #bbb #4D5059 -- infoLabel
install-normal: #070 #F9A7FF -- install
install-hover: #050 #BB7DBF -- install
install-disabled: #020 #7D5380 -- install
@@ -48,12 +47,6 @@ QLabel:disabled {
padding: 0px;
selection-background-color: #71DA7E;
}
-QLabel[infoLabel="1"] {
- color: #4D5059;
- font-style: italic;
- font-weight: normal;
-}
-
QMenu,
QListView,
@@ -101,6 +94,7 @@ QScrollBar {
background-color: #DADDDE;
selection-background-color: #71DA7E;
}
+
QLineEdit,
QTextEdit,
QTimeEdit,
@@ -111,11 +105,22 @@ QSpinBox,
QDoubleSpinBox,
QProgressBar,
QPushButton {
- height: 1.30em;
+ min-height: 1.30em;
+}
+QLineEdit,
+QTextEdit
+QTimeEdit,
+QDateEdit,
+QDateTimeEdit,
+QSpinBox,
+QDoubleSpinBox,
+QProgressBar {
+ max-height: 1.30em;
}
QToolButton {
- height: 1.10em;
+ min-height: 1.10em;
}
+
QFrame[frameShape="0"] {
border-width: 0px;
}
@@ -314,12 +319,15 @@ QToolButton {
padding-left: 6px;
padding-right: 6px;
}
-QPushButton::menu-indicator {
+/*
+QPushButton::menu-indicator,
+QToolButton::menu-indicator {
subcontrol-position: right center;
subcontrol-origin: padding;
left: -2px;
border-style: none;
}
+*/
QGroupBox,
QCheckBox,
@@ -451,12 +459,6 @@ QSizeGrip {
height: 4px;
}
-QLineEdit#SearchBar {
- padding: 3px;
- border-radius: 5px;
- background-color: #DADDDE;
-}
-
QTabWidget::pane {
}
QTabWidget::tab-bar {
@@ -610,6 +612,39 @@ QTabBar::tab:right:selected:disabled {
border-left-color: transparent;
}
+QStatusBar {
+ border-width: 1px;
+ border-style: solid;
+ border-color: transparent;
+ border-top-color: #5CD3FF;
+ border-bottom-color: #A3DAAA;
+ background: qlineargradient(
+ x1: 0, y1: 3,
+ x2: 0, y2: 0,
+ stop: 0 #A3DAAA,
+ stop: 1 #C2C4C5);
+}
+
+QToolTip {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #5CD3FF;
+ border-radius: 4px;
+ padding: 1px;
+ opacity: 200;
+}
+
+QBalloonTip {
+ color: #36393F;
+ background-color: #C2C4C5;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #5CD3FF;
+ border-radius: 4px;
+ padding: 1px;
+}
+
+/* Main tab bar styling */
QTabBar#MainTabBar {
border-width: 1px;
border-style: solid;
@@ -651,6 +686,17 @@ QTabBar#MainTabBar::tab:top:selected {
border-color: #5CD3FF;
border-bottom-color: #C2C4C5;
}
+QPushButton#TabButtonWidget,
+QToolButton#TabButtonWidget {
+ padding: 0px;
+ border-color: rgb( 51, 54, 59);
+}
+QPushButton#TabButtonWidget:disabled,
+QToolButton#TabButtonWidget:disabled {
+ border-color: rgb( 41, 43, 47);
+}
+
+/* Side tab bar styling */
QTabBar#SideTabBar {
border-width: 1px;
border-style: solid;
@@ -688,36 +734,10 @@ QTabBar#SideTabBar::tab:disabled {
background-color: transparent;
}
-QStatusBar {
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- border-top-color: #5CD3FF;
- border-bottom-color: #A3DAAA;
- background: qlineargradient(
- x1: 0, y1: 3,
- x2: 0, y2: 0,
- stop: 0 #A3DAAA,
- stop: 1 #C2C4C5);
-}
-
-QToolTip {
- border-width: 1px;
- border-style: solid;
- border-color: #5CD3FF;
- border-radius: 4px;
- padding: 1px;
- opacity: 200;
-}
-
-QBalloonTip {
- color: #36393F;
- background-color: #C2C4C5;
- border-width: 1px;
- border-style: solid;
- border-color: #5CD3FF;
- border-radius: 4px;
- padding: 1px;
+/* Search bar styling */
+QLineEdit#SearchBar {
+ border-radius: 5px;
+ background-color: #DADDDE;
}
/* Wrapper settings styling */
@@ -745,3 +765,7 @@ QLabel#WrapperSettingsLabel {
border-color: #71DA7E;
background-color: #BCBEBF;
}
+QLabel#WrapperSettingsLabel:disabled {
+ border-color: rgb( 67, 71, 77);
+ background-color: rgb( 32, 34, 37);
+}
diff --git a/rare/resources/stylesheets/RareStyle/__init__.py b/rare/resources/stylesheets/RareStyle/__init__.py
index cac9ca629582e7f73652326a29cd17d20567a70e..cf9bfd6ecb2ca7e87cb36f0b047e28b962ea9452 100644
GIT binary patch
literal 26452
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
vuza$T|7Q=#xckh$fA@*M`vw{PP#vi
+ fill="#ccc"/>
\ No newline at end of file
diff --git a/rare/resources/stylesheets/RareStyle/sort-down.svg b/rare/resources/stylesheets/RareStyle/sort-down.svg
index 29f5f7b6..5f9a6633 100644
--- a/rare/resources/stylesheets/RareStyle/sort-down.svg
+++ b/rare/resources/stylesheets/RareStyle/sort-down.svg
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/rare/resources/stylesheets/RareStyle/sort-up.svg b/rare/resources/stylesheets/RareStyle/sort-up.svg
index 7a2d0ddc..4a9e3549 100644
--- a/rare/resources/stylesheets/RareStyle/sort-up.svg
+++ b/rare/resources/stylesheets/RareStyle/sort-up.svg
@@ -1,4 +1,4 @@
\ No newline at end of file
diff --git a/rare/resources/stylesheets/RareStyle/stylesheet.qss b/rare/resources/stylesheets/RareStyle/stylesheet.qss
index 796d92b5..ea905143 100644
--- a/rare/resources/stylesheets/RareStyle/stylesheet.qss
+++ b/rare/resources/stylesheets/RareStyle/stylesheet.qss
@@ -6,7 +6,7 @@ disabled: #43474d rgb( 67, 71, 77) -- disabled font color
rgba( 67, 71, 77, 25%) == rgb( 41, 43, 47)
[Background]
normal: #202225 rgb( 32, 34, 37) -- main background color
-editable: #333344 rgb( 51, 51, 68) -- background color for reactive/editable widgets (TextEdits, ProgressBars etc)
+editable: #272733 rgb( 38, 38, 51) -- background color for reactive/editable widgets (TextEdits, ProgressBars etc)
hover: #222233 rgb( 34, 34, 51) -- background color when hovering over reactive widgets (Buttons, Headers)
selection: #2f4f4f rgb( 47, 79, 79) -- background color for selectable widgets
alternate: #282a2e rgb( 40, 42, 46) -- background color for alternating rows in List/Tree/TableViews and for ScrollBars
@@ -20,7 +20,6 @@ disabled: #43474d rgb( 67, 71, 77) -- border for disabled widgets
alternate: #3c3f41 rgb( 60, 63, 65) -- border color for gradient backgrounds on widgets like Tabs and Popups
[Special]
-info-normal: #bbb rgb(187, 187, 187) -- infoLabel
install-normal: #070 rgb( 0, 119, 0) -- install
install-hover: #050 rgb( 0, 85, 0) -- install
install-disabled: #020 rgb( 0, 34, 0) -- install
@@ -48,12 +47,6 @@ QLabel:disabled {
padding: 0px;
selection-background-color: rgb( 47, 79, 79);
}
-QLabel[infoLabel="1"] {
- color: rgb(187, 187, 187);
- font-style: italic;
- font-weight: normal;
-}
-
QMenu,
QListView,
@@ -98,9 +91,10 @@ QDoubleSpinBox,
QProgressBar,
QScrollBar {
border-color: rgb( 47, 79, 79);
- background-color: rgb( 51, 51, 68);
+ background-color: rgb( 38, 38, 51);
selection-background-color: rgb( 47, 79, 79);
}
+
QLineEdit,
QTextEdit,
QTimeEdit,
@@ -111,11 +105,22 @@ QSpinBox,
QDoubleSpinBox,
QProgressBar,
QPushButton {
- height: 1.30em;
+ min-height: 1.30em;
+}
+QLineEdit,
+QTextEdit
+QTimeEdit,
+QDateEdit,
+QDateTimeEdit,
+QSpinBox,
+QDoubleSpinBox,
+QProgressBar {
+ max-height: 1.30em;
}
QToolButton {
- height: 1.10em;
+ min-height: 1.10em;
}
+
QFrame[frameShape="0"] {
border-width: 0px;
}
@@ -230,7 +235,7 @@ QScrollBar::handle {
border-width: 1px;
border-style: solid;
border-color: rgb( 72, 61, 139);
- background-color: rgb( 51, 51, 68);
+ background-color: rgb( 38, 38, 51);
border-radius: 2px;
min-height: 30px;
min-width: 30px;
@@ -314,12 +319,15 @@ QToolButton {
padding-left: 6px;
padding-right: 6px;
}
-QPushButton::menu-indicator {
+/*
+QPushButton::menu-indicator,
+QToolButton::menu-indicator {
subcontrol-position: right center;
subcontrol-origin: padding;
left: -2px;
border-style: none;
}
+*/
QGroupBox,
QCheckBox,
@@ -451,12 +459,6 @@ QSizeGrip {
height: 4px;
}
-QLineEdit#SearchBar {
- padding: 3px;
- border-radius: 5px;
- background-color: rgb( 51, 51, 68);
-}
-
QTabWidget::pane {
}
QTabWidget::tab-bar {
@@ -610,6 +612,39 @@ QTabBar::tab:right:selected:disabled {
border-left-color: transparent;
}
+QStatusBar {
+ border-width: 1px;
+ border-style: solid;
+ border-color: transparent;
+ border-top-color: rgb( 72, 61, 139);
+ border-bottom-color: rgb( 60, 63, 65);
+ background: qlineargradient(
+ x1: 0, y1: 3,
+ x2: 0, y2: 0,
+ stop: 0 rgb( 60, 63, 65),
+ stop: 1 rgb( 32, 34, 37));
+}
+
+QToolTip {
+ border-width: 1px;
+ border-style: solid;
+ border-color: rgb( 72, 61, 139);
+ border-radius: 4px;
+ padding: 1px;
+ opacity: 200;
+}
+
+QBalloonTip {
+ color: rgb(238, 238, 238);
+ background-color: rgb( 32, 34, 37);
+ border-width: 1px;
+ border-style: solid;
+ border-color: rgb( 72, 61, 139);
+ border-radius: 4px;
+ padding: 1px;
+}
+
+/* Main tab bar styling */
QTabBar#MainTabBar {
border-width: 1px;
border-style: solid;
@@ -632,7 +667,7 @@ QTabBar#MainTabBar::tab {
margin-right: 3px;
border-top-color: transparent;
border-bottom-color: rgb( 72, 61, 139);
- padding: 5px;
+ padding: 3px 5px;
}/*
QTabBar#MainTabBar::tab:top:first,
QTabBar#MainTabBar::tab:bottom:first {
@@ -651,6 +686,17 @@ QTabBar#MainTabBar::tab:top:selected {
border-color: rgb( 72, 61, 139);
border-bottom-color: rgb( 32, 34, 37);
}
+QPushButton#TabButtonWidget,
+QToolButton#TabButtonWidget {
+ padding: 0px;
+ border-color: rgb( 51, 54, 59);
+}
+QPushButton#TabButtonWidget:disabled,
+QToolButton#TabButtonWidget:disabled {
+ border-color: rgb( 41, 43, 47);
+}
+
+/* Side tab bar styling */
QTabBar#SideTabBar {
border-width: 1px;
border-style: solid;
@@ -688,41 +734,16 @@ QTabBar#SideTabBar::tab:disabled {
background-color: transparent;
}
-QStatusBar {
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- border-top-color: rgb( 72, 61, 139);
- border-bottom-color: rgb( 60, 63, 65);
- background: qlineargradient(
- x1: 0, y1: 3,
- x2: 0, y2: 0,
- stop: 0 rgb( 60, 63, 65),
- stop: 1 rgb( 32, 34, 37));
-}
-
-QToolTip {
- border-width: 1px;
- border-style: solid;
- border-color: rgb( 72, 61, 139);
- border-radius: 4px;
- padding: 1px;
- opacity: 200;
-}
-
-QBalloonTip {
- color: rgb(238, 238, 238);
- background-color: rgb( 32, 34, 37);
- border-width: 1px;
- border-style: solid;
- border-color: rgb( 72, 61, 139);
- border-radius: 4px;
- padding: 1px;
+/* Search bar styling */
+QLineEdit#SearchBar {
+ border-radius: 5px;
+ background-color: rgb( 38, 38, 51);
}
/* Wrapper settings styling */
QPushButton#WrapperWidgetButton,
QToolButton#WrapperWidgetButton {
+ padding: 0px;
border-color: rgb( 51, 54, 59);
}
QPushButton#WrapperWidgetButton:disabled,
@@ -731,7 +752,7 @@ QToolButton#WrapperWidgetButton:disabled {
}
QScrollArea#WrapperSettingsScroll {
border-color: rgb( 47, 79, 79);
- background-color: rgb( 40, 42, 46);
+ background-color: rgb( 38, 38, 51);
}
QScrollBar#WrapperSettingsScrollBar {
background-color: rgb( 40, 42, 46);
@@ -743,9 +764,9 @@ QLabel#WrapperSettingsLabel {
padding: 2px;
color: #999;
border-color: rgb( 47, 79, 79);
- background-color: rgb( 40, 42, 46);
+ background-color: rgb( 38, 38, 51);
}
QLabel#WrapperSettingsLabel:disabled {
border-color: rgb( 67, 71, 77);
background-color: rgb( 32, 34, 37);
-}
\ No newline at end of file
+}
diff --git a/rare/ui/components/dialogs/login/import_login.py b/rare/ui/components/dialogs/login/import_login.py
index e6105982..277ac81f 100644
--- a/rare/ui/components/dialogs/login/import_login.py
+++ b/rare/ui/components/dialogs/login/import_login.py
@@ -14,7 +14,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ImportLogin(object):
def setupUi(self, ImportLogin):
ImportLogin.setObjectName("ImportLogin")
- ImportLogin.resize(233, 156)
+ ImportLogin.resize(256, 143)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
@@ -52,9 +52,9 @@ class Ui_ImportLogin(object):
self.prefix_combo.setEditable(True)
self.prefix_combo.setObjectName("prefix_combo")
self.prefix_layout.addWidget(self.prefix_combo)
- self.prefix_tool = QtWidgets.QToolButton(ImportLogin)
- self.prefix_tool.setObjectName("prefix_tool")
- self.prefix_layout.addWidget(self.prefix_tool)
+ self.prefix_button = QtWidgets.QPushButton(ImportLogin)
+ self.prefix_button.setObjectName("prefix_button")
+ self.prefix_layout.addWidget(self.prefix_button)
self.prefix_layout.setStretch(0, 1)
self.form_layout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.prefix_layout)
self.prefix_label = QtWidgets.QLabel(ImportLogin)
@@ -85,7 +85,7 @@ class Ui_ImportLogin(object):
def retranslateUi(self, ImportLogin):
_translate = QtCore.QCoreApplication.translate
self.title_label.setText(_translate("ImportLogin", "Import existing session from EGL"))
- self.prefix_tool.setText(_translate("ImportLogin", "Browse"))
+ self.prefix_button.setText(_translate("ImportLogin", "Browse..."))
self.prefix_label.setText(_translate("ImportLogin", "Select prefix"))
self.info_label.setText(_translate("ImportLogin", "Please select the Wine prefix where Epic Games Launcher is installed. You will get logged out from EGL in the process."))
diff --git a/rare/ui/components/dialogs/login/import_login.ui b/rare/ui/components/dialogs/login/import_login.ui
index c396215a..f6a6f3c3 100644
--- a/rare/ui/components/dialogs/login/import_login.ui
+++ b/rare/ui/components/dialogs/login/import_login.ui
@@ -6,8 +6,8 @@
0
0
- 233
- 156
+ 256
+ 143
@@ -69,9 +69,9 @@
-
-
+
- Browse
+ Browse...
diff --git a/rare/ui/components/tabs/games/integrations/egl_sync_group.py b/rare/ui/components/tabs/games/integrations/egl_sync_group.py
index d59c2b2a..42ce39db 100644
--- a/rare/ui/components/tabs/games/integrations/egl_sync_group.py
+++ b/rare/ui/components/tabs/games/integrations/egl_sync_group.py
@@ -45,7 +45,7 @@ class Ui_EGLSyncGroup(object):
def retranslateUi(self, EGLSyncGroup):
_translate = QtCore.QCoreApplication.translate
EGLSyncGroup.setTitle(_translate("EGLSyncGroup", "Sync with Epic Games Launcher"))
- self.egl_path_edit_label.setText(_translate("EGLSyncGroup", "Prefix/Manifest path"))
+ self.egl_path_edit_label.setText(_translate("EGLSyncGroup", "Manifest path"))
self.egl_sync_check_label.setText(_translate("EGLSyncGroup", "Enable automatic sync"))
self.egl_sync_check.setText(_translate("EGLSyncGroup", "This will immediately synchronize with EGL"))
self.egl_path_info_label.setText(_translate("EGLSyncGroup", "Estimated path"))
diff --git a/rare/ui/components/tabs/games/integrations/egl_sync_group.ui b/rare/ui/components/tabs/games/integrations/egl_sync_group.ui
index 10b71aab..b01fa592 100644
--- a/rare/ui/components/tabs/games/integrations/egl_sync_group.ui
+++ b/rare/ui/components/tabs/games/integrations/egl_sync_group.ui
@@ -29,7 +29,7 @@
-
- Prefix/Manifest path
+ Manifest path
diff --git a/rare/utils/extra_widgets.py b/rare/utils/extra_widgets.py
index dfecc958..e5e9ca3d 100644
--- a/rare/utils/extra_widgets.py
+++ b/rare/utils/extra_widgets.py
@@ -9,10 +9,9 @@ from PyQt5.QtWidgets import (
QWidget,
QPushButton,
QLineEdit,
- QToolButton,
)
-from rare.utils.misc import icon as qta_icon
+from rare.utils.misc import qta_icon
from rare.utils.paths import cache_dir
from rare.utils.qt_requests import QtRequests
@@ -117,14 +116,12 @@ class ButtonLineEdit(QLineEdit):
super(ButtonLineEdit, self).__init__(parent=parent)
self.setObjectName(type(self).__name__)
- self.button = QToolButton(self)
+ self.button = QPushButton(self)
self.button.setObjectName(f"{type(self).__name__}Button")
- self.button.setIcon(qta_icon(icon_name, color="white"))
- self.button.setStyleSheet(
- f"QToolButton#{self.button.objectName()} {{border: 0px; padding: 0px;}}"
- )
+ self.button.setIcon(qta_icon(icon_name))
self.button.setCursor(Qt.ArrowCursor)
self.button.clicked.connect(self.buttonClicked.emit)
+
self.setPlaceholderText(placeholder_text)
frame_width = self.style().pixelMetric(QStyle.PM_DefaultFrameWidth)
button_size = self.button.sizeHint()
diff --git a/rare/utils/misc.py b/rare/utils/misc.py
index 1d016cf3..b630db5c 100644
--- a/rare/utils/misc.py
+++ b/rare/utils/misc.py
@@ -101,8 +101,9 @@ def set_color_pallete(color_scheme: str) -> None:
if custom_palette is not None:
qApp.setPalette(custom_palette)
qApp.setStyleSheet(static)
- icon_color = qApp.palette().color(QPalette.Foreground).name()
- qtawesome.set_defaults(color=icon_color)
+ icon_color_normal = qApp.palette().color(QPalette.Foreground).name()
+ icon_color_disabled = qApp.palette().color(QPalette.Foreground).name()
+ qtawesome.set_defaults(color=icon_color_normal, color_disabled=icon_color_disabled)
def get_color_schemes() -> Iterable[str]:
@@ -124,8 +125,9 @@ def set_style_sheet(style_sheet: str) -> None:
file.close()
qApp.setStyleSheet(stylesheet + static)
- icon_color = qApp.palette().color(QPalette.Text).name()
- qtawesome.set_defaults(color="#eeeeee")
+ icon_color_normal = qApp.palette().color(QPalette.Text).name()
+ icon_color_disabled = qApp.palette().color(QPalette.Text).name()
+ qtawesome.set_defaults(color="#eee", color_disabled="#eee")
def get_style_sheets() -> Iterable[str]:
diff --git a/rare/widgets/indicator_edit.py b/rare/widgets/indicator_edit.py
index 83c1cd6a..0255069a 100644
--- a/rare/widgets/indicator_edit.py
+++ b/rare/widgets/indicator_edit.py
@@ -24,7 +24,7 @@ from PyQt5.QtWidgets import (
QCompleter,
QFileSystemModel,
QStyledItemDelegate,
- QFileIconProvider,
+ QFileIconProvider, QPushButton,
)
from rare.utils.misc import qta_icon
@@ -304,7 +304,7 @@ class PathEdit(IndicatorLineEdit):
)
self.setObjectName(type(self).__name__)
self.line_edit.setMinimumSize(QSize(250, 0))
- self.path_select = QToolButton(self)
+ self.path_select = QPushButton(self)
self.path_select.setObjectName(f"{type(self).__name__}Button")
layout = self.layout()
layout.addWidget(self.path_select)
From 715ac06719a8a4a82fe710784514425abe134735 Mon Sep 17 00:00:00 2001
From: loathingKernel <142770+loathingKernel@users.noreply.github.com>
Date: Wed, 21 Feb 2024 20:39:10 +0200
Subject: [PATCH 4/5] Launcher: Move UI files under `commands` to mirror
project structure
---
rare/commands/launcher/console_dialog.py | 2 +-
rare/ui/{launcher => commands}/__init__.py | 0
rare/ui/commands/launcher/__init__.py | 0
rare/ui/{ => commands}/launcher/console_env.py | 0
rare/ui/{ => commands}/launcher/console_env.ui | 0
5 files changed, 1 insertion(+), 1 deletion(-)
rename rare/ui/{launcher => commands}/__init__.py (100%)
create mode 100644 rare/ui/commands/launcher/__init__.py
rename rare/ui/{ => commands}/launcher/console_env.py (100%)
rename rare/ui/{ => commands}/launcher/console_env.ui (100%)
diff --git a/rare/commands/launcher/console_dialog.py b/rare/commands/launcher/console_dialog.py
index 1a76701d..9df2c137 100644
--- a/rare/commands/launcher/console_dialog.py
+++ b/rare/commands/launcher/console_dialog.py
@@ -13,7 +13,7 @@ from PyQt5.QtWidgets import (
QSizePolicy, QTableWidgetItem, QHeaderView, QApplication,
)
-from rare.ui.launcher.console_env import Ui_ConsoleEnv
+from rare.ui.commands.launcher.console_env import Ui_ConsoleEnv
from rare.widgets.dialogs import dialog_title, game_title
diff --git a/rare/ui/launcher/__init__.py b/rare/ui/commands/__init__.py
similarity index 100%
rename from rare/ui/launcher/__init__.py
rename to rare/ui/commands/__init__.py
diff --git a/rare/ui/commands/launcher/__init__.py b/rare/ui/commands/launcher/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/rare/ui/launcher/console_env.py b/rare/ui/commands/launcher/console_env.py
similarity index 100%
rename from rare/ui/launcher/console_env.py
rename to rare/ui/commands/launcher/console_env.py
diff --git a/rare/ui/launcher/console_env.ui b/rare/ui/commands/launcher/console_env.ui
similarity index 100%
rename from rare/ui/launcher/console_env.ui
rename to rare/ui/commands/launcher/console_env.ui
From 243b92248e7ef7714546e00059b6b40f24a9fe07 Mon Sep 17 00:00:00 2001
From: loathingKernel <142770+loathingKernel@users.noreply.github.com>
Date: Wed, 21 Feb 2024 20:55:10 +0200
Subject: [PATCH 5/5] MainTabWidget: Remove icon from account tab
---
rare/components/tabs/__init__.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rare/components/tabs/__init__.py b/rare/components/tabs/__init__.py
index 20fa6633..688d0ea7 100644
--- a/rare/components/tabs/__init__.py
+++ b/rare/components/tabs/__init__.py
@@ -48,14 +48,14 @@ class MainTabWidget(QTabWidget):
self.setTabEnabled(space_index, False)
self.tab_bar.expanded = space_index
# Button
- button_index = self.addTab(QWidget(self), qta_icon("mdi.account-circle", fallback="fa.user"), "")
+ button_index = self.addTab(QWidget(self), "")
self.setTabEnabled(button_index, False)
self.account_widget = AccountWidget(self)
self.account_widget.exit_app.connect(self.__on_exit_app)
account_action = QWidgetAction(self)
account_action.setDefaultWidget(self.account_widget)
- account_button = TabButtonWidget(qta_icon("mdi.menu", fallback="fa.align-justify"), tooltip="Menu")
+ account_button = TabButtonWidget(qta_icon("mdi.account-circle", fallback="fa.user"), tooltip="Menu")
account_menu = QMenu(account_button)
account_menu.addAction(account_action)
account_button.setMenu(account_menu)