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 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 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 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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 + 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 @@ + fill="#ccc"/> \ 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 @@ + fill="#ccc"/> \ 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)