Store: Fix various wishlist issues.
* Use horizontal scrollarea for free games. Based on the same idea as WrapperSettings scrollarea. Both need some adjustments. * Remove debugging dialogs. Need a better way anyways to debug.
This commit is contained in:
parent
766557924a
commit
fb0d5bbe10
|
@ -2,8 +2,8 @@ import datetime
|
||||||
import logging
|
import logging
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal
|
from PyQt5.QtCore import Qt, pyqtSlot, pyqtSignal, QObject, QEvent
|
||||||
from PyQt5.QtGui import QShowEvent, QHideEvent
|
from PyQt5.QtGui import QShowEvent, QHideEvent, QResizeEvent
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QHBoxLayout,
|
QHBoxLayout,
|
||||||
QWidget,
|
QWidget,
|
||||||
|
@ -63,6 +63,38 @@ class LandingPage(SlidingStackedWidget, SideTabContents):
|
||||||
self.slideInWidget(self.details_widget)
|
self.slideInWidget(self.details_widget)
|
||||||
|
|
||||||
|
|
||||||
|
class FreeGamesScroll(QScrollArea):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super(FreeGamesScroll, self).__init__(parent=parent)
|
||||||
|
self.setObjectName(type(self).__name__)
|
||||||
|
|
||||||
|
def setWidget(self, w):
|
||||||
|
super().setWidget(w)
|
||||||
|
w.installEventFilter(self)
|
||||||
|
|
||||||
|
def eventFilter(self, a0: QObject, a1: QEvent) -> bool:
|
||||||
|
if a0 is self.widget() and a1.type() == QEvent.Resize:
|
||||||
|
self.__resize(a0)
|
||||||
|
return a0.event(a1)
|
||||||
|
return False
|
||||||
|
|
||||||
|
def __resize(self, e: QResizeEvent):
|
||||||
|
minh = self.horizontalScrollBar().minimum()
|
||||||
|
maxh = self.horizontalScrollBar().maximum()
|
||||||
|
# lk: when the scrollbar is not visible, min and max are 0
|
||||||
|
if maxh > minh:
|
||||||
|
height = (
|
||||||
|
e.size().height()
|
||||||
|
+ self.rect().height() // 2
|
||||||
|
- self.contentsRect().height() // 2
|
||||||
|
+ self.widget().layout().spacing()
|
||||||
|
+ self.horizontalScrollBar().sizeHint().height()
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
height = e.size().height() + self.rect().height() - self.contentsRect().height()
|
||||||
|
self.setMinimumHeight(max(height, self.minimumHeight()))
|
||||||
|
|
||||||
|
|
||||||
class LandingWidget(QWidget, SideTabContents):
|
class LandingWidget(QWidget, SideTabContents):
|
||||||
show_details = pyqtSignal(CatalogOfferModel)
|
show_details = pyqtSignal(CatalogOfferModel)
|
||||||
|
|
||||||
|
@ -76,10 +108,12 @@ class LandingWidget(QWidget, SideTabContents):
|
||||||
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
||||||
|
|
||||||
self.free_games_now = StoreGroup(self.tr("Free now"), layout=QHBoxLayout, parent=self)
|
self.free_games_now = StoreGroup(self.tr("Free now"), layout=QHBoxLayout, parent=self)
|
||||||
self.free_games_now.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.free_games_now.main_layout.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
|
self.free_games_now.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
|
|
||||||
self.free_games_next = StoreGroup(self.tr("Free next week"), layout=QHBoxLayout, parent=self)
|
self.free_games_next = StoreGroup(self.tr("Free next week"), layout=QHBoxLayout, parent=self)
|
||||||
self.free_games_next.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.free_games_next.main_layout.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
|
||||||
|
self.free_games_next.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
||||||
|
|
||||||
self.discounts_group = StoreGroup(self.tr("Wishlist discounts"), layout=FlowLayout, parent=self)
|
self.discounts_group = StoreGroup(self.tr("Wishlist discounts"), layout=FlowLayout, parent=self)
|
||||||
self.discounts_group.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.discounts_group.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
|
@ -87,10 +121,30 @@ class LandingWidget(QWidget, SideTabContents):
|
||||||
self.games_group = StoreGroup(self.tr("Free to play"), FlowLayout, self)
|
self.games_group = StoreGroup(self.tr("Free to play"), FlowLayout, self)
|
||||||
self.games_group.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
self.games_group.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
|
||||||
self.games_group.loading(False)
|
self.games_group.loading(False)
|
||||||
self.games_group.setVisible(True)
|
self.games_group.setVisible(False)
|
||||||
|
|
||||||
layout.addWidget(self.free_games_now, alignment=Qt.AlignTop)
|
free_scroll = FreeGamesScroll(self)
|
||||||
layout.addWidget(self.free_games_next, alignment=Qt.AlignTop)
|
free_container = QWidget(free_scroll)
|
||||||
|
free_scroll.setWidget(free_container)
|
||||||
|
free_container_layout = QHBoxLayout(free_container)
|
||||||
|
|
||||||
|
free_scroll.setWidgetResizable(True)
|
||||||
|
free_scroll.setFrameShape(QScrollArea.NoFrame)
|
||||||
|
free_scroll.setSizeAdjustPolicy(QScrollArea.AdjustToContents)
|
||||||
|
free_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||||
|
|
||||||
|
free_container_layout.setContentsMargins(0, 0, 0, 0)
|
||||||
|
free_container_layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
|
||||||
|
free_container_layout.setSizeConstraint(QHBoxLayout.SetFixedSize)
|
||||||
|
free_container_layout.addWidget(self.free_games_now)
|
||||||
|
free_container_layout.addWidget(self.free_games_next)
|
||||||
|
|
||||||
|
free_scroll.widget().setAutoFillBackground(False)
|
||||||
|
free_scroll.viewport().setAutoFillBackground(False)
|
||||||
|
|
||||||
|
# layout.addWidget(self.free_games_now, alignment=Qt.AlignTop)
|
||||||
|
# layout.addWidget(self.free_games_next, alignment=Qt.AlignTop)
|
||||||
|
layout.addWidget(free_scroll, alignment=Qt.AlignTop)
|
||||||
layout.addWidget(self.discounts_group, alignment=Qt.AlignTop)
|
layout.addWidget(self.discounts_group, alignment=Qt.AlignTop)
|
||||||
layout.addWidget(self.games_group, alignment=Qt.AlignTop)
|
layout.addWidget(self.games_group, alignment=Qt.AlignTop)
|
||||||
layout.addItem(QSpacerItem(0, 0, QSizePolicy.Fixed, QSizePolicy.Expanding))
|
layout.addItem(QSpacerItem(0, 0, QSizePolicy.Fixed, QSizePolicy.Expanding))
|
||||||
|
@ -113,12 +167,12 @@ class LandingWidget(QWidget, SideTabContents):
|
||||||
self.discounts_group.layout().removeWidget(w)
|
self.discounts_group.layout().removeWidget(w)
|
||||||
w.deleteLater()
|
w.deleteLater()
|
||||||
|
|
||||||
for item in wishlist:
|
for item in filter(lambda x: bool(x.offer.price.totalPrice.discount), wishlist):
|
||||||
if item.offer.price.totalPrice.discount > 0:
|
w = StoreItemWidget(self.api.cached_manager, item.offer)
|
||||||
w = StoreItemWidget(self.api.cached_manager, item.offer)
|
w.show_details.connect(self.show_details)
|
||||||
w.show_details.connect(self.show_details)
|
self.discounts_group.layout().addWidget(w)
|
||||||
self.discounts_group.layout().addWidget(w)
|
have_discounts = any(map(lambda x: bool(x.offer.price.totalPrice.discount), wishlist))
|
||||||
self.discounts_group.setVisible(bool(wishlist))
|
self.discounts_group.setVisible(have_discounts)
|
||||||
self.discounts_group.loading(False)
|
self.discounts_group.loading(False)
|
||||||
|
|
||||||
def __update_free_games(self, free_games: List[CatalogOfferModel]):
|
def __update_free_games(self, free_games: List[CatalogOfferModel]):
|
||||||
|
@ -171,13 +225,15 @@ class LandingWidget(QWidget, SideTabContents):
|
||||||
self.free_games_next.loading(False)
|
self.free_games_next.loading(False)
|
||||||
|
|
||||||
def show_games(self, data):
|
def show_games(self, data):
|
||||||
|
if not data:
|
||||||
|
return
|
||||||
|
|
||||||
for w in self.games_group.findChildren(StoreItemWidget, options=Qt.FindDirectChildrenOnly):
|
for w in self.games_group.findChildren(StoreItemWidget, options=Qt.FindDirectChildrenOnly):
|
||||||
self.games_group.layout().removeWidget(w)
|
self.games_group.layout().removeWidget(w)
|
||||||
w.deleteLater()
|
w.deleteLater()
|
||||||
|
|
||||||
if data:
|
for game in data:
|
||||||
for game in data:
|
w = StoreItemWidget(self.api.cached_manager, game)
|
||||||
w = StoreItemWidget(self.api.cached_manager, game)
|
w.show_details.connect(self.show_details)
|
||||||
w.show_details.connect(self.show_details)
|
self.games_group.layout().addWidget(w)
|
||||||
self.games_group.layout().addWidget(w)
|
|
||||||
self.games_group.loading(False)
|
self.games_group.loading(False)
|
||||||
|
|
|
@ -4,7 +4,6 @@ from typing import List, Callable
|
||||||
from PyQt5.QtCore import pyqtSignal, QObject
|
from PyQt5.QtCore import pyqtSignal, QObject
|
||||||
from PyQt5.QtWidgets import QApplication
|
from PyQt5.QtWidgets import QApplication
|
||||||
|
|
||||||
from rare.components.tabs.store.api.debug import DebugDialog
|
|
||||||
from rare.components.tabs.store.constants import (
|
from rare.components.tabs.store.constants import (
|
||||||
wishlist_query,
|
wishlist_query,
|
||||||
search_query,
|
search_query,
|
||||||
|
@ -154,13 +153,9 @@ class StoreAPI(QObject):
|
||||||
"query": search_query,
|
"query": search_query,
|
||||||
"variables": browse_model.to_dict()
|
"variables": browse_model.to_dict()
|
||||||
}
|
}
|
||||||
# debug = DebugDialog(payload["variables"], None)
|
|
||||||
# debug.exec()
|
|
||||||
self.manager.post(graphql_url, lambda data: self.__handle_browse_games(data, handle_func), payload)
|
self.manager.post(graphql_url, lambda data: self.__handle_browse_games(data, handle_func), payload)
|
||||||
|
|
||||||
def __handle_browse_games(self, data, handle_func):
|
def __handle_browse_games(self, data, handle_func):
|
||||||
# debug = DebugDialog(data, None)
|
|
||||||
# debug.exec()
|
|
||||||
self.browse_active = False
|
self.browse_active = False
|
||||||
if data is None:
|
if data is None:
|
||||||
data = {}
|
data = {}
|
||||||
|
@ -204,8 +199,6 @@ class StoreAPI(QObject):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __handle_get_game(data, handle_func):
|
def __handle_get_game(data, handle_func):
|
||||||
# debug = DebugDialog(data, None)
|
|
||||||
# debug.exec()
|
|
||||||
try:
|
try:
|
||||||
product = DieselProduct.from_dict(data)
|
product = DieselProduct.from_dict(data)
|
||||||
handle_func(product)
|
handle_func(product)
|
||||||
|
@ -229,8 +222,6 @@ class StoreAPI(QObject):
|
||||||
self.authed_manager.post(graphql_url, lambda data: self._handle_add_to_wishlist(data, handle_func), payload)
|
self.authed_manager.post(graphql_url, lambda data: self._handle_add_to_wishlist(data, handle_func), payload)
|
||||||
|
|
||||||
def _handle_add_to_wishlist(self, data, handle_func):
|
def _handle_add_to_wishlist(self, data, handle_func):
|
||||||
# debug = DebugDialog(data, None)
|
|
||||||
# debug.exec()
|
|
||||||
try:
|
try:
|
||||||
response = ResponseModel.from_dict(data)
|
response = ResponseModel.from_dict(data)
|
||||||
data = response.data.wishlist.addToWishlist
|
data = response.data.wishlist.addToWishlist
|
||||||
|
@ -255,8 +246,6 @@ class StoreAPI(QObject):
|
||||||
payload)
|
payload)
|
||||||
|
|
||||||
def _handle_remove_from_wishlist(self, data, handle_func):
|
def _handle_remove_from_wishlist(self, data, handle_func):
|
||||||
# debug = DebugDialog(data, None)
|
|
||||||
# debug.exec()
|
|
||||||
try:
|
try:
|
||||||
response = ResponseModel.from_dict(data)
|
response = ResponseModel.from_dict(data)
|
||||||
data = response.data.wishlist.removeFromWishlist
|
data = response.data.wishlist.removeFromWishlist
|
||||||
|
|
|
@ -11,7 +11,6 @@ from PyQt5.QtWidgets import (
|
||||||
QSizePolicy,
|
QSizePolicy,
|
||||||
)
|
)
|
||||||
|
|
||||||
from rare.components.tabs.store.api.debug import DebugDialog
|
|
||||||
from rare.components.tabs.store.api.models.diesel import DieselProduct, DieselProductDetail, DieselSystemDetail
|
from rare.components.tabs.store.api.models.diesel import DieselProduct, DieselProductDetail, DieselSystemDetail
|
||||||
from rare.components.tabs.store.api.models.response import CatalogOfferModel
|
from rare.components.tabs.store.api.models.response import CatalogOfferModel
|
||||||
from rare.components.tabs.store.store_api import StoreAPI
|
from rare.components.tabs.store.store_api import StoreAPI
|
||||||
|
@ -72,8 +71,6 @@ class DetailsWidget(QWidget, SideTabContents):
|
||||||
self.in_wishlist = False
|
self.in_wishlist = False
|
||||||
|
|
||||||
def update_game(self, offer: CatalogOfferModel):
|
def update_game(self, offer: CatalogOfferModel):
|
||||||
debug = DebugDialog(offer.__dict__, None)
|
|
||||||
debug.exec()
|
|
||||||
self.ui.title.setText(offer.title)
|
self.ui.title.setText(offer.title)
|
||||||
self.title_str = offer.title
|
self.title_str = offer.title
|
||||||
self.id_str = offer.id
|
self.id_str = offer.id
|
||||||
|
|
|
@ -4,7 +4,6 @@ from PyQt5.QtCore import pyqtSignal, Qt
|
||||||
from PyQt5.QtGui import QMouseEvent
|
from PyQt5.QtGui import QMouseEvent
|
||||||
from PyQt5.QtWidgets import QPushButton
|
from PyQt5.QtWidgets import QPushButton
|
||||||
|
|
||||||
from rare.components.tabs.store.api.debug import DebugDialog
|
|
||||||
from rare.components.tabs.store.api.models.response import CatalogOfferModel
|
from rare.components.tabs.store.api.models.response import CatalogOfferModel
|
||||||
from rare.models.image import ImageSize
|
from rare.models.image import ImageSize
|
||||||
from rare.utils.misc import qta_icon
|
from rare.utils.misc import qta_icon
|
||||||
|
@ -27,9 +26,6 @@ class ItemWidget(LoadingImageWidget):
|
||||||
self.show_details.emit(self.catalog_game)
|
self.show_details.emit(self.catalog_game)
|
||||||
if a0.button() == Qt.RightButton:
|
if a0.button() == Qt.RightButton:
|
||||||
a0.accept()
|
a0.accept()
|
||||||
print(self.catalog_game.__dict__)
|
|
||||||
dialog = DebugDialog(self.catalog_game.__dict__, self)
|
|
||||||
dialog.show()
|
|
||||||
|
|
||||||
|
|
||||||
class StoreItemWidget(ItemWidget):
|
class StoreItemWidget(ItemWidget):
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from enum import IntEnum
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, Qt, pyqtSlot
|
from PyQt5.QtCore import pyqtSignal, Qt, pyqtSlot
|
||||||
|
@ -44,6 +45,18 @@ class WishlistPage(SlidingStackedWidget, SideTabContents):
|
||||||
self.slideInWidget(self.details_widget)
|
self.slideInWidget(self.details_widget)
|
||||||
|
|
||||||
|
|
||||||
|
class WishlistOrder(IntEnum):
|
||||||
|
NAME = 1
|
||||||
|
PRICE = 2
|
||||||
|
DISCOUNT = 3
|
||||||
|
DEVELOPER = 4
|
||||||
|
|
||||||
|
|
||||||
|
class WishlistFilter(IntEnum):
|
||||||
|
NONE = 0
|
||||||
|
DISCOUNT = 1
|
||||||
|
|
||||||
|
|
||||||
class WishlistWidget(QWidget, SideTabContents):
|
class WishlistWidget(QWidget, SideTabContents):
|
||||||
show_details = pyqtSignal(CatalogOfferModel)
|
show_details = pyqtSignal(CatalogOfferModel)
|
||||||
update_wishlist_signal = pyqtSignal()
|
update_wishlist_signal = pyqtSignal()
|
||||||
|
@ -55,21 +68,37 @@ class WishlistWidget(QWidget, SideTabContents):
|
||||||
self.ui = Ui_Wishlist()
|
self.ui = Ui_Wishlist()
|
||||||
self.ui.setupUi(self)
|
self.ui.setupUi(self)
|
||||||
self.ui.main_layout.setContentsMargins(0, 0, 3, 0)
|
self.ui.main_layout.setContentsMargins(0, 0, 3, 0)
|
||||||
self.setEnabled(False)
|
|
||||||
self.wishlist = []
|
|
||||||
self.widgets = []
|
|
||||||
|
|
||||||
self.list_layout = FlowLayout(self.ui.list_container)
|
self.wishlist_layout = FlowLayout()
|
||||||
|
self.ui.container_layout.addLayout(self.wishlist_layout, stretch=1)
|
||||||
|
|
||||||
|
sortings = {
|
||||||
|
WishlistOrder.NAME: self.tr("Name"),
|
||||||
|
WishlistOrder.PRICE: self.tr("Price"),
|
||||||
|
WishlistOrder.DISCOUNT: self.tr("Discount"),
|
||||||
|
WishlistOrder.DEVELOPER: self.tr("Developer"),
|
||||||
|
}
|
||||||
|
for data, text in sortings.items():
|
||||||
|
self.ui.order_combo.addItem(text, data)
|
||||||
|
self.ui.order_combo.currentIndexChanged.connect(self.order_wishlist)
|
||||||
|
|
||||||
|
filters = {
|
||||||
|
WishlistFilter.NONE: self.tr("None"),
|
||||||
|
WishlistFilter.DISCOUNT: self.tr("Discount"),
|
||||||
|
}
|
||||||
|
for data, text in filters.items():
|
||||||
|
self.ui.filter_combo.addItem(text, data)
|
||||||
|
self.ui.filter_combo.currentIndexChanged.connect(self.filter_wishlist)
|
||||||
|
|
||||||
self.ui.sort_cb.currentIndexChanged.connect(self.sort_wishlist)
|
|
||||||
self.ui.filter_cb.currentIndexChanged.connect(self.set_filter)
|
|
||||||
self.ui.reload_button.clicked.connect(self.update_wishlist)
|
|
||||||
self.ui.reload_button.setIcon(qta_icon("fa.refresh", color="white"))
|
self.ui.reload_button.setIcon(qta_icon("fa.refresh", color="white"))
|
||||||
|
self.ui.reload_button.clicked.connect(self.update_wishlist)
|
||||||
|
|
||||||
self.ui.reverse.stateChanged.connect(
|
self.ui.reverse_check.stateChanged.connect(
|
||||||
lambda: self.sort_wishlist(sort=self.ui.sort_cb.currentIndex())
|
lambda: self.order_wishlist(self.ui.order_combo.currentIndex())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.setEnabled(False)
|
||||||
|
|
||||||
def showEvent(self, a0: QShowEvent) -> None:
|
def showEvent(self, a0: QShowEvent) -> None:
|
||||||
self.update_wishlist()
|
self.update_wishlist()
|
||||||
return super().showEvent(a0)
|
return super().showEvent(a0)
|
||||||
|
@ -90,70 +119,68 @@ class WishlistWidget(QWidget, SideTabContents):
|
||||||
)
|
)
|
||||||
self.update_wishlist_signal.emit()
|
self.update_wishlist_signal.emit()
|
||||||
|
|
||||||
def set_filter(self, i):
|
@pyqtSlot(int)
|
||||||
count = 0
|
def filter_wishlist(self, index: int = int(WishlistFilter.NONE)):
|
||||||
for w in self.widgets:
|
list_filter = self.ui.filter_combo.itemData(index, Qt.UserRole)
|
||||||
if i == 1 and not w.discount:
|
widgets = self.ui.container.findChildren(WishlistItemWidget, options=Qt.FindDirectChildrenOnly)
|
||||||
w.setVisible(False)
|
for w in widgets:
|
||||||
|
if list_filter == WishlistFilter.NONE:
|
||||||
|
w.setVisible(True)
|
||||||
|
elif list_filter == WishlistFilter.DISCOUNT:
|
||||||
|
w.setVisible(bool(w.catalog_game.price.totalPrice.discount))
|
||||||
else:
|
else:
|
||||||
w.setVisible(True)
|
w.setVisible(True)
|
||||||
count += 1
|
have_visible = any(map(lambda x: x.isVisible(), widgets))
|
||||||
|
self.ui.no_games_label.setVisible(not have_visible)
|
||||||
|
|
||||||
if i == 0:
|
@pyqtSlot(int)
|
||||||
w.setVisible(True)
|
def order_wishlist(self, index: int = int(WishlistOrder.NAME)):
|
||||||
|
list_order = self.ui.order_combo.itemData(index, Qt.UserRole)
|
||||||
if count == 0:
|
widgets = self.ui.container.findChildren(WishlistItemWidget, options=Qt.FindDirectChildrenOnly)
|
||||||
self.ui.no_games_label.setVisible(True)
|
|
||||||
else:
|
|
||||||
self.ui.no_games_label.setVisible(False)
|
|
||||||
|
|
||||||
def sort_wishlist(self, sort=0):
|
|
||||||
widgets = self.ui.list_container.findChildren(WishlistItemWidget, options=Qt.FindDirectChildrenOnly)
|
|
||||||
for w in widgets:
|
for w in widgets:
|
||||||
self.ui.list_container.layout().removeWidget(w)
|
self.wishlist_layout.removeWidget(w)
|
||||||
|
|
||||||
if sort == 0:
|
if list_order == WishlistOrder.NAME:
|
||||||
func = lambda x: x.catalog_game.title
|
def func(x: WishlistItemWidget):
|
||||||
reverse = self.ui.reverse.isChecked()
|
return x.catalog_game.title
|
||||||
elif sort == 1:
|
elif list_order == WishlistOrder.PRICE:
|
||||||
func = lambda x: x.catalog_game.price.totalPrice["fmtPrice"]["discountPrice"]
|
def func(x: WishlistItemWidget):
|
||||||
reverse = self.ui.reverse.isChecked()
|
return x.catalog_game.price.totalPrice.discountPrice
|
||||||
elif sort == 2:
|
elif list_order == WishlistOrder.DEVELOPER:
|
||||||
func = lambda x: x.catalog_game.seller["name"]
|
def func(x: WishlistItemWidget):
|
||||||
reverse = self.ui.reverse.isChecked()
|
return x.catalog_game.seller["name"]
|
||||||
elif sort == 3:
|
elif list_order == WishlistOrder.DISCOUNT:
|
||||||
func = lambda x: 1 - (x.catalog_game.price.totalPrice["discountPrice"] / x.catalog_game.price.totalPrice["originalPrice"])
|
def func(x: WishlistItemWidget):
|
||||||
reverse = not self.ui.reverse.isChecked()
|
discount = x.catalog_game.price.totalPrice.discountPrice
|
||||||
|
original = x.catalog_game.price.totalPrice.originalPrice
|
||||||
|
return 1 - (discount / original)
|
||||||
else:
|
else:
|
||||||
func = lambda x: x.catalog_game.title
|
def func(x: WishlistItemWidget):
|
||||||
reverse = self.ui.reverse.isChecked()
|
return x.catalog_game.title
|
||||||
|
|
||||||
|
reverse = self.ui.reverse_check.isChecked()
|
||||||
widgets = sorted(widgets, key=func, reverse=reverse)
|
widgets = sorted(widgets, key=func, reverse=reverse)
|
||||||
for w in widgets:
|
for w in widgets:
|
||||||
self.ui.list_container.layout().addWidget(w)
|
self.wishlist_layout.addWidget(w)
|
||||||
|
|
||||||
def set_wishlist(self, wishlist: List[WishlistItemModel] = None, sort=0):
|
def set_wishlist(self, wishlist: List[WishlistItemModel] = None):
|
||||||
if wishlist and wishlist[0] == "error":
|
if wishlist and wishlist[0] == "error":
|
||||||
return
|
return
|
||||||
|
|
||||||
if wishlist is not None:
|
widgets = self.ui.container.findChildren(WishlistItemWidget, options=Qt.FindDirectChildrenOnly)
|
||||||
self.wishlist = wishlist
|
for w in widgets:
|
||||||
|
self.wishlist_layout.removeWidget(w)
|
||||||
|
w.deleteLater()
|
||||||
|
|
||||||
for i in self.widgets:
|
self.ui.no_games_label.setVisible(bool(wishlist))
|
||||||
i.deleteLater()
|
|
||||||
|
|
||||||
self.widgets.clear()
|
|
||||||
|
|
||||||
if len(wishlist) == 0:
|
|
||||||
self.ui.no_games_label.setVisible(True)
|
|
||||||
else:
|
|
||||||
self.ui.no_games_label.setVisible(False)
|
|
||||||
|
|
||||||
for game in wishlist:
|
for game in wishlist:
|
||||||
w = WishlistItemWidget(self.api.cached_manager, game.offer, self.ui.list_container)
|
w = WishlistItemWidget(self.api.cached_manager, game.offer, self.ui.container)
|
||||||
w.show_details.connect(self.show_details)
|
w.show_details.connect(self.show_details)
|
||||||
w.delete_from_wishlist.connect(self.delete_from_wishlist)
|
w.delete_from_wishlist.connect(self.delete_from_wishlist)
|
||||||
self.widgets.append(w)
|
self.wishlist_layout.addWidget(w)
|
||||||
self.list_layout.addWidget(w)
|
|
||||||
self.list_layout.update()
|
self.order_wishlist(self.ui.order_combo.currentIndex())
|
||||||
|
self.filter_wishlist(self.ui.filter_combo.currentIndex())
|
||||||
|
|
||||||
self.setEnabled(True)
|
self.setEnabled(True)
|
||||||
|
|
|
@ -14,40 +14,34 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
class Ui_Wishlist(object):
|
class Ui_Wishlist(object):
|
||||||
def setupUi(self, Wishlist):
|
def setupUi(self, Wishlist):
|
||||||
Wishlist.setObjectName("Wishlist")
|
Wishlist.setObjectName("Wishlist")
|
||||||
Wishlist.resize(423, 153)
|
Wishlist.resize(489, 165)
|
||||||
Wishlist.setWindowTitle("Wishlist")
|
Wishlist.setWindowTitle("Wishlist")
|
||||||
self.main_layout = QtWidgets.QVBoxLayout(Wishlist)
|
self.main_layout = QtWidgets.QVBoxLayout(Wishlist)
|
||||||
self.main_layout.setObjectName("main_layout")
|
self.main_layout.setObjectName("main_layout")
|
||||||
self.tool_layout = QtWidgets.QHBoxLayout()
|
self.tool_layout = QtWidgets.QHBoxLayout()
|
||||||
self.tool_layout.setObjectName("tool_layout")
|
self.tool_layout.setObjectName("tool_layout")
|
||||||
self.sort_label = QtWidgets.QLabel(Wishlist)
|
self.order_label = QtWidgets.QLabel(Wishlist)
|
||||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||||
sizePolicy.setHorizontalStretch(0)
|
sizePolicy.setHorizontalStretch(0)
|
||||||
sizePolicy.setVerticalStretch(0)
|
sizePolicy.setVerticalStretch(0)
|
||||||
sizePolicy.setHeightForWidth(self.sort_label.sizePolicy().hasHeightForWidth())
|
sizePolicy.setHeightForWidth(self.order_label.sizePolicy().hasHeightForWidth())
|
||||||
self.sort_label.setSizePolicy(sizePolicy)
|
self.order_label.setSizePolicy(sizePolicy)
|
||||||
self.sort_label.setObjectName("sort_label")
|
self.order_label.setObjectName("order_label")
|
||||||
self.tool_layout.addWidget(self.sort_label)
|
self.tool_layout.addWidget(self.order_label)
|
||||||
self.sort_cb = QtWidgets.QComboBox(Wishlist)
|
self.order_combo = QtWidgets.QComboBox(Wishlist)
|
||||||
self.sort_cb.setObjectName("sort_cb")
|
self.order_combo.setObjectName("order_combo")
|
||||||
self.sort_cb.addItem("")
|
self.tool_layout.addWidget(self.order_combo)
|
||||||
self.sort_cb.addItem("")
|
self.reverse_check = QtWidgets.QCheckBox(Wishlist)
|
||||||
self.sort_cb.addItem("")
|
self.reverse_check.setObjectName("reverse_check")
|
||||||
self.sort_cb.addItem("")
|
self.tool_layout.addWidget(self.reverse_check)
|
||||||
self.tool_layout.addWidget(self.sort_cb)
|
|
||||||
self.reverse = QtWidgets.QCheckBox(Wishlist)
|
|
||||||
self.reverse.setObjectName("reverse")
|
|
||||||
self.tool_layout.addWidget(self.reverse)
|
|
||||||
spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
self.tool_layout.addItem(spacerItem)
|
self.tool_layout.addItem(spacerItem)
|
||||||
self.filter_label = QtWidgets.QLabel(Wishlist)
|
self.filter_label = QtWidgets.QLabel(Wishlist)
|
||||||
self.filter_label.setObjectName("filter_label")
|
self.filter_label.setObjectName("filter_label")
|
||||||
self.tool_layout.addWidget(self.filter_label)
|
self.tool_layout.addWidget(self.filter_label)
|
||||||
self.filter_cb = QtWidgets.QComboBox(Wishlist)
|
self.filter_combo = QtWidgets.QComboBox(Wishlist)
|
||||||
self.filter_cb.setObjectName("filter_cb")
|
self.filter_combo.setObjectName("filter_combo")
|
||||||
self.filter_cb.addItem("")
|
self.tool_layout.addWidget(self.filter_combo)
|
||||||
self.filter_cb.addItem("")
|
|
||||||
self.tool_layout.addWidget(self.filter_cb)
|
|
||||||
spacerItem1 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
spacerItem1 = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
self.tool_layout.addItem(spacerItem1)
|
self.tool_layout.addItem(spacerItem1)
|
||||||
self.reload_button = QtWidgets.QPushButton(Wishlist)
|
self.reload_button = QtWidgets.QPushButton(Wishlist)
|
||||||
|
@ -60,31 +54,28 @@ class Ui_Wishlist(object):
|
||||||
self.reload_button.setObjectName("reload_button")
|
self.reload_button.setObjectName("reload_button")
|
||||||
self.tool_layout.addWidget(self.reload_button)
|
self.tool_layout.addWidget(self.reload_button)
|
||||||
self.main_layout.addLayout(self.tool_layout)
|
self.main_layout.addLayout(self.tool_layout)
|
||||||
self.no_games_label = QtWidgets.QLabel(Wishlist)
|
self.scrollarea = QtWidgets.QScrollArea(Wishlist)
|
||||||
|
self.scrollarea.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
|
||||||
|
self.scrollarea.setWidgetResizable(True)
|
||||||
|
self.scrollarea.setObjectName("scrollarea")
|
||||||
|
self.container = QtWidgets.QWidget()
|
||||||
|
self.container.setGeometry(QtCore.QRect(0, 0, 473, 115))
|
||||||
|
self.container.setObjectName("container")
|
||||||
|
self.container_layout = QtWidgets.QVBoxLayout(self.container)
|
||||||
|
self.container_layout.setObjectName("container_layout")
|
||||||
|
self.no_games_label = QtWidgets.QLabel(self.container)
|
||||||
self.no_games_label.setObjectName("no_games_label")
|
self.no_games_label.setObjectName("no_games_label")
|
||||||
self.main_layout.addWidget(self.no_games_label)
|
self.container_layout.addWidget(self.no_games_label, 0, QtCore.Qt.AlignTop)
|
||||||
self.list_scrollarea = QtWidgets.QScrollArea(Wishlist)
|
self.scrollarea.setWidget(self.container)
|
||||||
self.list_scrollarea.setWidgetResizable(True)
|
self.main_layout.addWidget(self.scrollarea)
|
||||||
self.list_scrollarea.setObjectName("list_scrollarea")
|
|
||||||
self.list_container = QtWidgets.QWidget()
|
|
||||||
self.list_container.setGeometry(QtCore.QRect(0, 0, 407, 83))
|
|
||||||
self.list_container.setObjectName("list_container")
|
|
||||||
self.list_scrollarea.setWidget(self.list_container)
|
|
||||||
self.main_layout.addWidget(self.list_scrollarea)
|
|
||||||
|
|
||||||
self.retranslateUi(Wishlist)
|
self.retranslateUi(Wishlist)
|
||||||
|
|
||||||
def retranslateUi(self, Wishlist):
|
def retranslateUi(self, Wishlist):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
self.sort_label.setText(_translate("Wishlist", "Sort by"))
|
self.order_label.setText(_translate("Wishlist", "Sort by"))
|
||||||
self.sort_cb.setItemText(0, _translate("Wishlist", "Name"))
|
self.reverse_check.setText(_translate("Wishlist", "Reverse"))
|
||||||
self.sort_cb.setItemText(1, _translate("Wishlist", "Price"))
|
self.filter_label.setText(_translate("Wishlist", "Filter by"))
|
||||||
self.sort_cb.setItemText(2, _translate("Wishlist", "Developer"))
|
|
||||||
self.sort_cb.setItemText(3, _translate("Wishlist", "Discount"))
|
|
||||||
self.reverse.setText(_translate("Wishlist", "Reverse"))
|
|
||||||
self.filter_label.setText(_translate("Wishlist", "Filter:"))
|
|
||||||
self.filter_cb.setItemText(0, _translate("Wishlist", "None"))
|
|
||||||
self.filter_cb.setItemText(1, _translate("Wishlist", "Discount"))
|
|
||||||
self.no_games_label.setText(_translate("Wishlist", "No games matching your filter"))
|
self.no_games_label.setText(_translate("Wishlist", "No games matching your filter"))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>423</width>
|
<width>489</width>
|
||||||
<height>153</height>
|
<height>165</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="tool_layout">
|
<layout class="QHBoxLayout" name="tool_layout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="sort_label">
|
<widget class="QLabel" name="order_label">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
@ -30,38 +30,17 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="sort_cb">
|
<widget class="QComboBox" name="order_combo"/>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Name</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Price</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Developer</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Discount</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="reverse">
|
<widget class="QCheckBox" name="reverse_check">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Reverse</string>
|
<string>Reverse</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="tool_hspacer_1">
|
<spacer name="hspacer_left">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
@ -76,26 +55,15 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="filter_label">
|
<widget class="QLabel" name="filter_label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Filter:</string>
|
<string>Filter by</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="filter_cb">
|
<widget class="QComboBox" name="filter_combo"/>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>None</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Discount</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="tool_hspacer_2">
|
<spacer name="hspacer_right">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
|
@ -123,26 +91,31 @@
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="no_games_label">
|
<widget class="QScrollArea" name="scrollarea">
|
||||||
<property name="text">
|
<property name="sizeAdjustPolicy">
|
||||||
<string>No games matching your filter</string>
|
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QScrollArea" name="list_scrollarea">
|
|
||||||
<property name="widgetResizable">
|
<property name="widgetResizable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="list_container">
|
<widget class="QWidget" name="container">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>407</width>
|
<width>473</width>
|
||||||
<height>83</height>
|
<height>115</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="container_layout">
|
||||||
|
<item alignment="Qt::AlignTop">
|
||||||
|
<widget class="QLabel" name="no_games_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>No games matching your filter</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
Loading…
Reference in a new issue