Filter options for Games: Installed / offline
This commit is contained in:
parent
80eec00ccd
commit
d7c481bbaf
2 changed files with 39 additions and 14 deletions
|
@ -1,5 +1,6 @@
|
|||
from PyQt5.QtCore import QSettings, QSize
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QCheckBox, QLineEdit, QPushButton, QStackedLayout, QLabel
|
||||
from PyQt5.QtCore import QSettings, QSize, pyqtSignal
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton, QStackedLayout, \
|
||||
QLabel, QComboBox
|
||||
from qtawesome import icon
|
||||
|
||||
from rare.components.tabs.games.game_info import InfoTabs
|
||||
|
@ -51,11 +52,10 @@ class Games(QWidget):
|
|||
self.game_list = GameList(core, self, offline)
|
||||
|
||||
self.head_bar.search_bar.textChanged.connect(
|
||||
lambda: self.game_list.filter(self.head_bar.search_bar.text()))
|
||||
lambda: self.game_list.search(self.head_bar.search_bar.text()))
|
||||
|
||||
self.head_bar.filter_changed_signal.connect(self.game_list.filter)
|
||||
|
||||
self.head_bar.installed_only.stateChanged.connect(lambda:
|
||||
self.game_list.installed_only(
|
||||
self.head_bar.installed_only.isChecked()))
|
||||
self.layout.addWidget(self.head_bar)
|
||||
self.layout.addWidget(self.game_list)
|
||||
# self.layout.addStretch(1)
|
||||
|
@ -70,14 +70,22 @@ class Games(QWidget):
|
|||
|
||||
|
||||
class GameListHeadBar(QWidget):
|
||||
filter_changed_signal = pyqtSignal(str)
|
||||
|
||||
def __init__(self, parent):
|
||||
super(GameListHeadBar, self).__init__(parent=parent)
|
||||
self.layout = QHBoxLayout()
|
||||
self.installed_only = QCheckBox(self.tr("Installed only"))
|
||||
# self.installed_only = QCheckBox(self.tr("Installed only"))
|
||||
self.settings = QSettings()
|
||||
self.installed_only.setChecked(self.settings.value("installed_only", False, bool))
|
||||
self.layout.addWidget(self.installed_only)
|
||||
# self.installed_only.setChecked(self.settings.value("installed_only", False, bool))
|
||||
# self.layout.addWidget(self.installed_only)
|
||||
|
||||
self.filter = QComboBox()
|
||||
self.filter.addItems([self.tr("All"),
|
||||
self.tr("Installed only"),
|
||||
self.tr("Offline Games")])
|
||||
self.filter.currentIndexChanged.connect(self.filter_changed)
|
||||
self.layout.addWidget(self.filter)
|
||||
self.layout.addStretch(1)
|
||||
|
||||
self.import_game = QPushButton(icon("mdi.import", color="white"), self.tr("Import Game"))
|
||||
|
@ -107,3 +115,11 @@ class GameListHeadBar(QWidget):
|
|||
self.layout.addWidget(self.refresh_list)
|
||||
|
||||
self.setLayout(self.layout)
|
||||
|
||||
def filter_changed(self, i):
|
||||
if i == 0:
|
||||
self.filter_changed_signal.emit("")
|
||||
elif i == 1:
|
||||
self.filter_changed_signal.emit("installed")
|
||||
elif i == 2:
|
||||
self.filter_changed_signal.emit("offline")
|
||||
|
|
|
@ -165,7 +165,7 @@ class GameList(QStackedWidget):
|
|||
self.setCurrentIndex(1)
|
||||
|
||||
if self.settings.value("installed_only", False, bool):
|
||||
self.installed_only(True)
|
||||
self.filter(True)
|
||||
|
||||
def is_finished(self):
|
||||
if psutil.pid_exists(self.active_game[1]):
|
||||
|
@ -223,7 +223,7 @@ class GameList(QStackedWidget):
|
|||
self.widgets[app_name][1].launch_button.setDisabled(True)
|
||||
self.widgets[app_name][1].launch_button.setText(self.tr("Game running"))
|
||||
|
||||
def filter(self, text: str):
|
||||
def search(self, text: str):
|
||||
for t in self.widgets.values():
|
||||
for w in t:
|
||||
if text.lower() in w.game.app_title.lower() + w.game.app_name.lower():
|
||||
|
@ -231,11 +231,20 @@ class GameList(QStackedWidget):
|
|||
else:
|
||||
w.setVisible(False)
|
||||
|
||||
def installed_only(self, i_o: bool):
|
||||
def filter(self, filter="installed"):
|
||||
for t in self.widgets.values():
|
||||
for w in t:
|
||||
w.setVisible(not (not self.core.is_installed(w.game.app_name) and i_o))
|
||||
self.settings.setValue("installed_only", i_o)
|
||||
if filter == "installed":
|
||||
w.setVisible(self.core.is_installed(w.game.app_name))
|
||||
elif filter == "offline":
|
||||
if self.core.is_installed(w.game.app_name):
|
||||
w.setVisible(w.igame.can_run_offline)
|
||||
else:
|
||||
w.setVisible(False)
|
||||
else:
|
||||
# All visible
|
||||
w.setVisible(True)
|
||||
self.settings.setValue("filter", filter)
|
||||
|
||||
def update_list(self, icon_view=True):
|
||||
self.settings.setValue("icon_view", icon_view)
|
||||
|
|
Loading…
Reference in a new issue