Move the installed and available games count to the head bar.
Moving them to the head bar makes the library containers simpler structurally as there the library's frame can be removed. Remove games_tab UI files as they were getting very thin, what they contained is being setup manually instead Signed-off-by: loathingKernel <142770+loathingKernel@users.noreply.github.com>
This commit is contained in:
parent
61a2a6781d
commit
b8668854db
4 changed files with 52 additions and 166 deletions
|
@ -12,7 +12,6 @@ from rare.shared import (
|
||||||
ApiResultsSingleton,
|
ApiResultsSingleton,
|
||||||
)
|
)
|
||||||
from rare.shared.image_manager import ImageManagerSingleton
|
from rare.shared.image_manager import ImageManagerSingleton
|
||||||
from rare.ui.components.tabs.games.games_tab import Ui_GamesTab
|
|
||||||
from rare.widgets.library_layout import LibraryLayout
|
from rare.widgets.library_layout import LibraryLayout
|
||||||
from rare.widgets.sliding_stack import SlidingStackedWidget
|
from rare.widgets.sliding_stack import SlidingStackedWidget
|
||||||
from .cloud_save_utils import CloudSaveUtils
|
from .cloud_save_utils import CloudSaveUtils
|
||||||
|
@ -42,9 +41,6 @@ class GamesTab(QStackedWidget):
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super(GamesTab, self).__init__(parent=parent)
|
super(GamesTab, self).__init__(parent=parent)
|
||||||
self.ui = Ui_GamesTab()
|
|
||||||
self.ui.setupUi(self)
|
|
||||||
|
|
||||||
self.core = LegendaryCoreSingleton()
|
self.core = LegendaryCoreSingleton()
|
||||||
self.signals = GlobalSignalsSingleton()
|
self.signals = GlobalSignalsSingleton()
|
||||||
self.args = ArgumentsSingleton()
|
self.args = ArgumentsSingleton()
|
||||||
|
@ -60,22 +56,26 @@ class GamesTab(QStackedWidget):
|
||||||
|
|
||||||
self.game_utils = GameUtils(parent=self)
|
self.game_utils = GameUtils(parent=self)
|
||||||
|
|
||||||
self.head_bar = GameListHeadBar(self)
|
self.games = QWidget(parent=self)
|
||||||
|
self.games.setLayout(QVBoxLayout())
|
||||||
|
self.addWidget(self.games)
|
||||||
|
|
||||||
|
self.head_bar = GameListHeadBar(parent=self.games)
|
||||||
self.head_bar.import_clicked.connect(self.show_import)
|
self.head_bar.import_clicked.connect(self.show_import)
|
||||||
self.head_bar.egl_sync_clicked.connect(self.show_egl_sync)
|
self.head_bar.egl_sync_clicked.connect(self.show_egl_sync)
|
||||||
self.ui.games.layout().insertWidget(0, self.head_bar)
|
self.games.layout().addWidget(self.head_bar)
|
||||||
|
|
||||||
self.game_info_tabs = GameInfoTabs(self.dlcs, self.game_utils, self)
|
self.game_info_tabs = GameInfoTabs(self.dlcs, self.game_utils, self)
|
||||||
self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
|
self.game_info_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
|
||||||
self.addWidget(self.game_info_tabs)
|
self.addWidget(self.game_info_tabs)
|
||||||
|
|
||||||
self.game_info_tabs.info.verification_finished.connect(
|
self.game_info_tabs.info.verification_finished.connect(
|
||||||
self.verification_finished
|
self.verification_finished
|
||||||
)
|
)
|
||||||
self.game_info_tabs.info.uninstalled.connect(lambda x: self.setCurrentIndex(0))
|
self.game_info_tabs.info.uninstalled.connect(lambda x: self.setCurrentWidget(self.games))
|
||||||
|
|
||||||
self.import_sync_tabs = ImportSyncTabs(self)
|
self.import_sync_tabs = ImportSyncTabs(self)
|
||||||
self.import_sync_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
|
self.import_sync_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
|
||||||
self.addWidget(self.import_sync_tabs)
|
self.addWidget(self.import_sync_tabs)
|
||||||
|
|
||||||
for i in self.game_list:
|
for i in self.game_list:
|
||||||
|
@ -91,12 +91,9 @@ class GamesTab(QStackedWidget):
|
||||||
self.ue_name = ""
|
self.ue_name = ""
|
||||||
|
|
||||||
self.uninstalled_info_tabs = UninstalledInfoTabs(self)
|
self.uninstalled_info_tabs = UninstalledInfoTabs(self)
|
||||||
self.uninstalled_info_tabs.back_clicked.connect(lambda: self.setCurrentIndex(0))
|
self.uninstalled_info_tabs.back_clicked.connect(lambda: self.setCurrentWidget(self.games))
|
||||||
self.addWidget(self.uninstalled_info_tabs)
|
self.addWidget(self.uninstalled_info_tabs)
|
||||||
|
|
||||||
# navigation
|
|
||||||
self.head_bar.import_game.clicked.connect(lambda: self.setCurrentIndex(2))
|
|
||||||
|
|
||||||
self.no_asset_names = []
|
self.no_asset_names = []
|
||||||
if not self.args.offline:
|
if not self.args.offline:
|
||||||
for game in self.no_assets:
|
for game in self.no_assets:
|
||||||
|
@ -106,19 +103,19 @@ class GamesTab(QStackedWidget):
|
||||||
|
|
||||||
self.installed = self.core.get_installed_list()
|
self.installed = self.core.get_installed_list()
|
||||||
|
|
||||||
self.view_stack = SlidingStackedWidget(self.ui.library_frame)
|
self.view_stack = SlidingStackedWidget(self.games)
|
||||||
self.view_stack.setFrameStyle(QFrame.NoFrame)
|
self.view_stack.setFrameStyle(QFrame.NoFrame)
|
||||||
self.icon_view_scroll = QScrollArea(self.view_stack)
|
self.icon_view_scroll = QScrollArea(self.view_stack)
|
||||||
self.icon_view_scroll.setWidgetResizable(True)
|
self.icon_view_scroll.setWidgetResizable(True)
|
||||||
self.icon_view_scroll.setFrameShape(QFrame.NoFrame)
|
self.icon_view_scroll.setFrameShape(QFrame.StyledPanel)
|
||||||
self.icon_view_scroll.horizontalScrollBar().setDisabled(True)
|
self.icon_view_scroll.horizontalScrollBar().setDisabled(True)
|
||||||
self.list_view_scroll = QScrollArea(self.view_stack)
|
self.list_view_scroll = QScrollArea(self.view_stack)
|
||||||
self.list_view_scroll.setWidgetResizable(True)
|
self.list_view_scroll.setWidgetResizable(True)
|
||||||
self.list_view_scroll.setFrameShape(QFrame.NoFrame)
|
self.list_view_scroll.setFrameShape(QFrame.StyledPanel)
|
||||||
self.list_view_scroll.horizontalScrollBar().setDisabled(True)
|
self.list_view_scroll.horizontalScrollBar().setDisabled(True)
|
||||||
self.icon_view = QWidget(self.icon_view_scroll)
|
self.icon_view = QWidget(self.icon_view_scroll)
|
||||||
self.icon_view.setLayout(LibraryLayout(self.icon_view))
|
self.icon_view.setLayout(LibraryLayout(self.icon_view))
|
||||||
self.icon_view.layout().setContentsMargins(0, 0, 0, 0)
|
self.icon_view.layout().setContentsMargins(0, 13, 0, 0)
|
||||||
self.icon_view.layout().setAlignment(Qt.AlignTop)
|
self.icon_view.layout().setAlignment(Qt.AlignTop)
|
||||||
self.list_view = QWidget(self.list_view_scroll)
|
self.list_view = QWidget(self.list_view_scroll)
|
||||||
self.list_view.setLayout(QVBoxLayout(self.list_view))
|
self.list_view.setLayout(QVBoxLayout(self.list_view))
|
||||||
|
@ -128,7 +125,7 @@ class GamesTab(QStackedWidget):
|
||||||
self.list_view_scroll.setWidget(self.list_view)
|
self.list_view_scroll.setWidget(self.list_view)
|
||||||
self.view_stack.addWidget(self.icon_view_scroll)
|
self.view_stack.addWidget(self.icon_view_scroll)
|
||||||
self.view_stack.addWidget(self.list_view_scroll)
|
self.view_stack.addWidget(self.list_view_scroll)
|
||||||
self.ui.library_frame_layout.addWidget(self.view_stack)
|
self.games.layout().addWidget(self.view_stack)
|
||||||
|
|
||||||
# add installing game widget for icon view: List view not supported
|
# add installing game widget for icon view: List view not supported
|
||||||
self.installing_widget = InstallingGameWidget()
|
self.installing_widget = InstallingGameWidget()
|
||||||
|
@ -188,28 +185,24 @@ class GamesTab(QStackedWidget):
|
||||||
l_widget.update_text()
|
l_widget.update_text()
|
||||||
|
|
||||||
def show_import(self):
|
def show_import(self):
|
||||||
self.setCurrentIndex(2)
|
self.setCurrentWidget(self.import_sync_tabs)
|
||||||
self.import_sync_tabs.show_import()
|
self.import_sync_tabs.show_import()
|
||||||
|
|
||||||
def show_egl_sync(self, idx):
|
def show_egl_sync(self, idx):
|
||||||
self.setCurrentIndex(2)
|
self.setCurrentWidget(self.import_sync_tabs)
|
||||||
self.import_sync_tabs.show_egl_sync()
|
self.import_sync_tabs.show_egl_sync()
|
||||||
|
|
||||||
def show_game_info(self, app_name):
|
def show_game_info(self, app_name):
|
||||||
self.game_info_tabs.update_game(app_name)
|
self.game_info_tabs.update_game(app_name)
|
||||||
self.setCurrentIndex(1)
|
self.setCurrentWidget(self.game_info_tabs)
|
||||||
|
|
||||||
def show_uninstalled_info(self, game):
|
def show_uninstalled_info(self, game):
|
||||||
self.uninstalled_info_tabs.update_game(game)
|
self.uninstalled_info_tabs.update_game(game)
|
||||||
self.setCurrentIndex(3)
|
self.setCurrentWidget(self.uninstalled_info_tabs)
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def update_count_games_label(self):
|
def update_count_games_label(self):
|
||||||
self.ui.count_games_label.setText(
|
self.head_bar.set_games_count(len(self.core.get_installed_list()), len(self.game_list))
|
||||||
self.tr("Installed Games: {}\tAvailable Games: {}").format(
|
|
||||||
len(self.core.get_installed_list()), len(self.game_list)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def setup_game_list(self):
|
def setup_game_list(self):
|
||||||
self.update_count_games_label()
|
self.update_count_games_label()
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
from PyQt5.QtCore import QSize, QSettings, pyqtSignal
|
from PyQt5.QtCore import QSettings, pyqtSignal
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QLineEdit,
|
|
||||||
QLabel,
|
QLabel,
|
||||||
QPushButton,
|
QPushButton,
|
||||||
QWidget,
|
QWidget,
|
||||||
QHBoxLayout,
|
QHBoxLayout,
|
||||||
QComboBox,
|
QComboBox,
|
||||||
)
|
)
|
||||||
|
from qtawesome import IconWidget
|
||||||
|
|
||||||
from rare.shared import ApiResultsSingleton
|
from rare.shared import ApiResultsSingleton
|
||||||
from rare.utils.extra_widgets import SelectViewWidget, ButtonLineEdit
|
from rare.utils.extra_widgets import SelectViewWidget, ButtonLineEdit
|
||||||
|
@ -19,10 +19,7 @@ class GameListHeadBar(QWidget):
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super(GameListHeadBar, self).__init__(parent=parent)
|
super(GameListHeadBar, self).__init__(parent=parent)
|
||||||
self.api_results = ApiResultsSingleton()
|
self.api_results = ApiResultsSingleton()
|
||||||
# self.installed_only = QCheckBox(self.tr("Installed only"))
|
|
||||||
self.settings = QSettings()
|
self.settings = QSettings()
|
||||||
# self.installed_only.setChecked(self.settings.value("installed_only", False, bool))
|
|
||||||
# self.layout.addWidget(self.installed_only)
|
|
||||||
|
|
||||||
self.filter = QComboBox()
|
self.filter = QComboBox()
|
||||||
self.filter.addItems(
|
self.filter.addItems(
|
||||||
|
@ -30,7 +27,8 @@ class GameListHeadBar(QWidget):
|
||||||
self.tr("All games"),
|
self.tr("All games"),
|
||||||
self.tr("Installed only"),
|
self.tr("Installed only"),
|
||||||
self.tr("Offline Games"),
|
self.tr("Offline Games"),
|
||||||
])
|
]
|
||||||
|
)
|
||||||
|
|
||||||
self.available_filters = [
|
self.available_filters = [
|
||||||
"all",
|
"all",
|
||||||
|
@ -75,6 +73,22 @@ class GameListHeadBar(QWidget):
|
||||||
|
|
||||||
checked = QSettings().value("icon_view", True, bool)
|
checked = QSettings().value("icon_view", True, bool)
|
||||||
|
|
||||||
|
installed_tooltip = self.tr("Installed games")
|
||||||
|
self.installed_icon = IconWidget(parent=self)
|
||||||
|
self.installed_icon.setIcon(icon("ph.floppy-disk-back-fill"))
|
||||||
|
self.installed_icon.setToolTip(installed_tooltip)
|
||||||
|
self.installed_label = QLabel(parent=self)
|
||||||
|
font = self.installed_label.font()
|
||||||
|
font.setBold(True)
|
||||||
|
self.installed_label.setFont(font)
|
||||||
|
self.installed_label.setToolTip(installed_tooltip)
|
||||||
|
available_tooltip = self.tr("Available games")
|
||||||
|
self.available_icon = IconWidget(parent=self)
|
||||||
|
self.available_icon.setIcon(icon("ph.floppy-disk-back-light"))
|
||||||
|
self.available_icon.setToolTip(available_tooltip)
|
||||||
|
self.available_label = QLabel(parent=self)
|
||||||
|
self.available_label.setToolTip(available_tooltip)
|
||||||
|
|
||||||
self.view = SelectViewWidget(checked)
|
self.view = SelectViewWidget(checked)
|
||||||
|
|
||||||
self.refresh_list = QPushButton()
|
self.refresh_list = QPushButton()
|
||||||
|
@ -86,14 +100,23 @@ class GameListHeadBar(QWidget):
|
||||||
layout.addStretch(1)
|
layout.addStretch(1)
|
||||||
layout.addWidget(self.import_game)
|
layout.addWidget(self.import_game)
|
||||||
layout.addWidget(self.egl_sync)
|
layout.addWidget(self.egl_sync)
|
||||||
layout.addStretch(1)
|
layout.addStretch(2)
|
||||||
layout.addWidget(self.search_bar)
|
layout.addWidget(self.search_bar)
|
||||||
layout.addStretch(3)
|
layout.addStretch(2)
|
||||||
|
layout.addWidget(self.installed_icon)
|
||||||
|
layout.addWidget(self.installed_label)
|
||||||
|
layout.addWidget(self.available_icon)
|
||||||
|
layout.addWidget(self.available_label)
|
||||||
|
layout.addStretch(2)
|
||||||
layout.addWidget(self.view)
|
layout.addWidget(self.view)
|
||||||
layout.addStretch(1)
|
layout.addStretch(2)
|
||||||
layout.addWidget(self.refresh_list)
|
layout.addWidget(self.refresh_list)
|
||||||
self.setLayout(layout)
|
self.setLayout(layout)
|
||||||
|
|
||||||
|
def set_games_count(self, inst: int, avail: int) -> None:
|
||||||
|
self.installed_label.setText(str(inst))
|
||||||
|
self.available_label.setText(str(avail))
|
||||||
|
|
||||||
def filter_changed(self, i):
|
def filter_changed(self, i):
|
||||||
self.filterChanged.emit(self.available_filters[i])
|
self.filterChanged.emit(self.available_filters[i])
|
||||||
self.settings.setValue("filter", i)
|
self.settings.setValue("filter", i)
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/games_tab.ui'
|
|
||||||
#
|
|
||||||
# Created by: PyQt5 UI code generator 5.15.6
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
|
|
||||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
|
||||||
|
|
||||||
|
|
||||||
class Ui_GamesTab(object):
|
|
||||||
def setupUi(self, GamesTab):
|
|
||||||
GamesTab.setObjectName("GamesTab")
|
|
||||||
GamesTab.resize(104, 42)
|
|
||||||
GamesTab.setWindowTitle("StackedWidget")
|
|
||||||
self.games = QtWidgets.QWidget()
|
|
||||||
self.games.setObjectName("games")
|
|
||||||
self.games_layout = QtWidgets.QVBoxLayout(self.games)
|
|
||||||
self.games_layout.setObjectName("games_layout")
|
|
||||||
self.library_frame = QtWidgets.QFrame(self.games)
|
|
||||||
self.library_frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
|
||||||
self.library_frame.setObjectName("library_frame")
|
|
||||||
self.library_frame_layout = QtWidgets.QVBoxLayout(self.library_frame)
|
|
||||||
self.library_frame_layout.setContentsMargins(0, 0, 0, 0)
|
|
||||||
self.library_frame_layout.setObjectName("library_frame_layout")
|
|
||||||
self.count_games_layout = QtWidgets.QHBoxLayout()
|
|
||||||
self.count_games_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
|
|
||||||
self.count_games_layout.setContentsMargins(6, 6, 6, 6)
|
|
||||||
self.count_games_layout.setObjectName("count_games_layout")
|
|
||||||
self.count_games_label = QtWidgets.QLabel(self.library_frame)
|
|
||||||
self.count_games_label.setText("error")
|
|
||||||
self.count_games_label.setObjectName("count_games_label")
|
|
||||||
self.count_games_layout.addWidget(self.count_games_label, 0, QtCore.Qt.AlignTop)
|
|
||||||
self.library_frame_layout.addLayout(self.count_games_layout)
|
|
||||||
self.games_layout.addWidget(self.library_frame)
|
|
||||||
self.games_layout.setStretch(0, 1)
|
|
||||||
GamesTab.addWidget(self.games)
|
|
||||||
|
|
||||||
self.retranslateUi(GamesTab)
|
|
||||||
GamesTab.setCurrentIndex(0)
|
|
||||||
QtCore.QMetaObject.connectSlotsByName(GamesTab)
|
|
||||||
|
|
||||||
def retranslateUi(self, GamesTab):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
import sys
|
|
||||||
app = QtWidgets.QApplication(sys.argv)
|
|
||||||
GamesTab = QtWidgets.QStackedWidget()
|
|
||||||
ui = Ui_GamesTab()
|
|
||||||
ui.setupUi(GamesTab)
|
|
||||||
GamesTab.show()
|
|
||||||
sys.exit(app.exec_())
|
|
|
@ -1,73 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>GamesTab</class>
|
|
||||||
<widget class="QStackedWidget" name="GamesTab">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>104</width>
|
|
||||||
<height>42</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string notr="true">StackedWidget</string>
|
|
||||||
</property>
|
|
||||||
<property name="currentIndex">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="games">
|
|
||||||
<layout class="QVBoxLayout" name="games_layout" stretch="1">
|
|
||||||
<item>
|
|
||||||
<widget class="QFrame" name="library_frame">
|
|
||||||
<property name="frameShape">
|
|
||||||
<enum>QFrame::StyledPanel</enum>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="library_frame_layout">
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="count_games_layout">
|
|
||||||
<property name="sizeConstraint">
|
|
||||||
<enum>QLayout::SetFixedSize</enum>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<item alignment="Qt::AlignTop">
|
|
||||||
<widget class="QLabel" name="count_games_label">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">error</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
Loading…
Reference in a new issue