Add Wishlist tab in store
This commit is contained in:
parent
8fbf0bcacf
commit
cc54474e75
10 changed files with 631 additions and 13 deletions
|
@ -6,6 +6,7 @@ from rare.components.tabs.shop.game_info import ShopGameInfo
|
|||
from rare.components.tabs.shop.search_results import SearchResults
|
||||
from rare.components.tabs.shop.shop_api_core import ShopApiCore
|
||||
from rare.components.tabs.shop.shop_widget import ShopWidget
|
||||
from rare.components.tabs.shop.wishlist import WishlistWidget, Wishlist
|
||||
|
||||
|
||||
class Shop(QStackedWidget):
|
||||
|
@ -14,35 +15,42 @@ class Shop(QStackedWidget):
|
|||
def __init__(self, core: LegendaryCore):
|
||||
super(Shop, self).__init__()
|
||||
self.core = core
|
||||
self.api_core = ShopApiCore(self.core.egs.session.headers["Authorization"])
|
||||
|
||||
self.shop_api = ShopApiCore(self.core.egs.session.headers["Authorization"])
|
||||
|
||||
self.shop = ShopWidget(cache_dir, core, self.shop_api)
|
||||
self.shop = ShopWidget(cache_dir, core, self.api_core)
|
||||
self.wishlist_widget = Wishlist(self.api_core)
|
||||
|
||||
self.store_tabs = QTabWidget()
|
||||
self.store_tabs.addTab(self.shop, self.tr("Games"))
|
||||
self.store_tabs.addTab(self.wishlist_widget, self.tr("Wishlist"))
|
||||
# self.store_tabs.addTab(self.browse_games, self.tr("Browse"))
|
||||
|
||||
self.addWidget(self.store_tabs)
|
||||
|
||||
self.search_results = SearchResults(self.shop_api)
|
||||
self.search_results = SearchResults(self.api_core)
|
||||
self.addWidget(self.search_results)
|
||||
self.search_results.show_info.connect(self.show_game_info)
|
||||
|
||||
self.info = ShopGameInfo([i.asset_info.namespace for i in self.core.get_game_list(True)], self.shop_api)
|
||||
self.info = ShopGameInfo([i.asset_info.namespace for i in self.core.get_game_list(True)], self.api_core)
|
||||
self.addWidget(self.info)
|
||||
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
||||
|
||||
self.search_results.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
||||
self.shop.show_info.connect(self.show_search_results)
|
||||
|
||||
self.wishlist_widget.show_game_info.connect(self.show_game_info)
|
||||
self.shop.show_game.connect(self.show_game_info)
|
||||
self.shop_api.update_wishlist.connect(self.shop.update_wishlist)
|
||||
self.api_core.update_wishlist.connect(self.update_wishlist)
|
||||
self.wishlist_widget.update_wishlist_signal.connect(self.update_wishlist)
|
||||
|
||||
def update_wishlist(self):
|
||||
self.shop.update_wishlist()
|
||||
|
||||
def load(self):
|
||||
if not self.init:
|
||||
self.init = True
|
||||
self.shop.load()
|
||||
self.wishlist_widget.update_wishlist()
|
||||
|
||||
def show_game_info(self, data):
|
||||
self.info.update_game(data)
|
||||
|
|
|
@ -5,7 +5,10 @@ from PyQt5.QtCore import pyqtSignal
|
|||
from PyQt5.QtGui import QFont
|
||||
from PyQt5.QtNetwork import QNetworkAccessManager
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout
|
||||
from qtawesome import icon
|
||||
|
||||
from rare.components.tabs.shop.shop_models import ImageUrlModel
|
||||
from rare.ui.components.tabs.store.wishlist_widget import Ui_WishlistWidget
|
||||
from rare.utils.extra_widgets import ImageLabel
|
||||
|
||||
logger = logging.getLogger("GameWidgets")
|
||||
|
@ -71,3 +74,52 @@ class GameWidgetDiscount(GameWidget):
|
|||
price_label.setFont(font)
|
||||
h_layout.addWidget(QLabel(discount_price if discount_price != "0" else self.tr("Free")))
|
||||
h_layout.addWidget(price_label)
|
||||
|
||||
|
||||
class WishlistWidget(QWidget, Ui_WishlistWidget):
|
||||
open_game = pyqtSignal(dict)
|
||||
delete_from_wishlist = pyqtSignal(dict)
|
||||
|
||||
def __init__(self, game: dict):
|
||||
super(WishlistWidget, self).__init__()
|
||||
self.setupUi(self)
|
||||
self.game = game
|
||||
self.title_label.setText(game.get("title"))
|
||||
for attr in game["customAttributes"]:
|
||||
if attr["key"] == "developerName":
|
||||
self.developer.setText(attr["value"])
|
||||
break
|
||||
else:
|
||||
self.developer.setText(game["seller"]["name"])
|
||||
original_price = game['price']['totalPrice']['fmtPrice']['originalPrice']
|
||||
discount_price = game['price']['totalPrice']['fmtPrice']['discountPrice']
|
||||
|
||||
self.price.setText(original_price if original_price != "0" else self.tr("Free"))
|
||||
# if discount
|
||||
if original_price != discount_price:
|
||||
self.discount = True
|
||||
font = QFont()
|
||||
font.setStrikeOut(True)
|
||||
self.price.setFont(font)
|
||||
self.discount_price.setText(discount_price)
|
||||
else:
|
||||
self.discount = False
|
||||
self.discount_price.setVisible(False)
|
||||
|
||||
self.image = ImageLabel()
|
||||
self.layout().insertWidget(0, self.image)
|
||||
image_model = ImageUrlModel.from_json(game["keyImages"])
|
||||
url = image_model.front_wide
|
||||
if not url:
|
||||
url = image_model.offer_image_wide
|
||||
self.image.update_image(url, game.get("title"), (240, 135))
|
||||
self.delete_button.setIcon(icon("mdi.delete", color="white"))
|
||||
self.delete_button.clicked.connect(lambda: self.delete_from_wishlist.emit(self.game))
|
||||
|
||||
def mousePressEvent(self, e: QtGui.QMouseEvent) -> None:
|
||||
# left button
|
||||
if e.button() == 1:
|
||||
self.open_game.emit(self.game)
|
||||
# right
|
||||
elif e.button() == 2:
|
||||
pass # self.showMenu(e)
|
||||
|
|
|
@ -5,13 +5,14 @@ from dataclasses import dataclass
|
|||
from rare.utils.utils import get_lang
|
||||
|
||||
|
||||
class _ImageUrlModel:
|
||||
class ImageUrlModel:
|
||||
def __init__(self, front_tall: str = "", offer_image_tall: str = "",
|
||||
thumbnail: str = "", front_wide: str = ""):
|
||||
thumbnail: str = "", front_wide: str = "", offer_image_wide: str = ""):
|
||||
self.front_tall = front_tall
|
||||
self.offer_image_tall = offer_image_tall
|
||||
self.thumbnail = thumbnail
|
||||
self.front_wide = front_wide
|
||||
self.offer_image_wide = offer_image_wide
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_data: list):
|
||||
|
@ -25,12 +26,14 @@ class _ImageUrlModel:
|
|||
tmp.front_wide = item["url"]
|
||||
elif item["type"] == "OfferImageTall":
|
||||
tmp.offer_image_tall = item["url"]
|
||||
elif item["type"] == "OfferImageWide":
|
||||
tmp.offer_image_wide = item["url"]
|
||||
return tmp
|
||||
|
||||
|
||||
class ShopGame:
|
||||
# TODO: Copyrights etc
|
||||
def __init__(self, title: str = "", image_urls: _ImageUrlModel = None, social_links: dict = None,
|
||||
def __init__(self, title: str = "", image_urls: ImageUrlModel = None, social_links: dict = None,
|
||||
langs: list = None, reqs: dict = None, publisher: str = "", developer: str = "",
|
||||
original_price: str = "", discount_price: str = "", tags: list = None, namespace: str = "",
|
||||
offer_id: str = ""):
|
||||
|
@ -64,7 +67,7 @@ class ShopGame:
|
|||
api_data = api_data["pages"][0]
|
||||
tmp = cls()
|
||||
tmp.title = search_data.get("title", "Fail")
|
||||
tmp.image_urls = _ImageUrlModel.from_json(search_data["keyImages"])
|
||||
tmp.image_urls = ImageUrlModel.from_json(search_data["keyImages"])
|
||||
links = api_data["data"]["socialLinks"]
|
||||
tmp.links = []
|
||||
for item in links:
|
||||
|
|
|
@ -39,7 +39,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
|||
self.locale = get_lang()
|
||||
self.update_games_allowed = True
|
||||
|
||||
self.free_games_now = QGroupBox(self.tr("Free Games"))
|
||||
self.free_games_now = QGroupBox(self.tr("Now Free"))
|
||||
self.free_games_now.setLayout(QHBoxLayout())
|
||||
self.free_widget.layout().addWidget(self.free_games_now)
|
||||
self.coming_free_games = QGroupBox(self.tr("Free Games next week"))
|
||||
|
@ -88,6 +88,8 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
|
|||
self.discount_widget.setLayout(FlowLayout())
|
||||
discounts = 0
|
||||
for game in wishlist:
|
||||
if not game:
|
||||
continue
|
||||
if game["offer"]["price"]["totalPrice"]["discount"] > 0:
|
||||
w = GameWidgetDiscount(self.path, game["offer"])
|
||||
w.show_info.connect(self.show_game.emit)
|
||||
|
|
80
rare/components/tabs/shop/wishlist.py
Normal file
80
rare/components/tabs/shop/wishlist.py
Normal file
|
@ -0,0 +1,80 @@
|
|||
from PyQt5.QtCore import pyqtSignal
|
||||
from PyQt5.QtWidgets import QStackedWidget, QMessageBox
|
||||
|
||||
from rare.components.tabs.shop import ShopApiCore
|
||||
from rare.components.tabs.shop.game_widgets import WishlistWidget
|
||||
from rare.ui.components.tabs.store.wishlist import Ui_Wishlist
|
||||
from rare.utils.extra_widgets import WaitingSpinner
|
||||
|
||||
|
||||
class Wishlist(QStackedWidget, Ui_Wishlist):
|
||||
show_game_info = pyqtSignal(dict)
|
||||
update_wishlist_signal = pyqtSignal()
|
||||
|
||||
def __init__(self, api_core: ShopApiCore):
|
||||
super(Wishlist, self).__init__()
|
||||
self.api_core = api_core
|
||||
self.setupUi(self)
|
||||
self.addWidget(WaitingSpinner())
|
||||
# self.setContentsMargins(100, 0, 100, 0)
|
||||
self.setCurrentIndex(1)
|
||||
self.wishlist = []
|
||||
self.widgets = []
|
||||
|
||||
self.sort_cb.currentIndexChanged.connect(lambda i: self.set_wishlist(self.wishlist, i))
|
||||
self.filter_cb.currentIndexChanged.connect(self.set_filter)
|
||||
|
||||
def update_wishlist(self):
|
||||
self.setCurrentIndex(1)
|
||||
self.api_core.get_wishlist(self.set_wishlist)
|
||||
|
||||
def delete_from_wishlist(self, game):
|
||||
self.api_core.remove_from_wishlist(game["namespace"], game["id"],
|
||||
lambda success: self.update_wishlist() if success else
|
||||
QMessageBox.warning(self, "Error",
|
||||
self.tr("Could not remove game from wishlist")))
|
||||
self.update_wishlist_signal.emit()
|
||||
|
||||
def set_filter(self, i):
|
||||
count = 0
|
||||
for w in self.widgets:
|
||||
if i == 1 and not w.discount:
|
||||
w.setVisible(False)
|
||||
else:
|
||||
w.setVisible(True)
|
||||
count += 1
|
||||
|
||||
if i == 0:
|
||||
w.setVisible(True)
|
||||
|
||||
if count == 0:
|
||||
self.no_games_label.setVisible(True)
|
||||
else:
|
||||
self.no_games_label.setVisible(False)
|
||||
|
||||
def set_wishlist(self, wishlist, sort=0):
|
||||
self.wishlist = wishlist
|
||||
|
||||
for i in self.widgets:
|
||||
i.setParent(None)
|
||||
|
||||
if sort == 0:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]["title"])
|
||||
elif sort == 1:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]['price']['totalPrice']['fmtPrice']['discountPrice'])
|
||||
elif sort == 2:
|
||||
sorted_list = sorted(wishlist, key=lambda x: x["offer"]["seller"]["name"])
|
||||
elif sort == 3:
|
||||
sorted_list = sorted(wishlist, key=lambda x: 1 - (
|
||||
x["offer"]["price"]["totalPrice"]["discountPrice"] / x["offer"]["price"]["totalPrice"][
|
||||
"originalPrice"]))
|
||||
else:
|
||||
sorted_list = wishlist
|
||||
self.widgets.clear()
|
||||
for game in sorted_list:
|
||||
w = WishlistWidget(game["offer"])
|
||||
self.widgets.append(w)
|
||||
self.list_layout.addWidget(w)
|
||||
w.open_game.connect(self.show_game_info.emit)
|
||||
w.delete_from_wishlist.connect(self.delete_from_wishlist)
|
||||
self.setCurrentIndex(0)
|
104
rare/ui/components/tabs/store/wishlist.py
Normal file
104
rare/ui/components/tabs/store/wishlist.py
Normal file
|
@ -0,0 +1,104 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'wishlist.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# 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_Wishlist(object):
|
||||
def setupUi(self, Wishlist):
|
||||
Wishlist.setObjectName("Wishlist")
|
||||
Wishlist.resize(736, 398)
|
||||
self.page = QtWidgets.QWidget()
|
||||
self.page.setObjectName("page")
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(self.page)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.scroll_area = QtWidgets.QScrollArea(self.page)
|
||||
self.scroll_area.setWidgetResizable(True)
|
||||
self.scroll_area.setObjectName("scroll_area")
|
||||
self.scroll_widget = QtWidgets.QWidget()
|
||||
self.scroll_widget.setGeometry(QtCore.QRect(0, 0, 716, 378))
|
||||
self.scroll_widget.setObjectName("scroll_widget")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scroll_widget)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.title_label = QtWidgets.QLabel(self.scroll_widget)
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(15)
|
||||
self.title_label.setFont(font)
|
||||
self.title_label.setObjectName("title_label")
|
||||
self.verticalLayout_2.addWidget(self.title_label)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.sort_label = QtWidgets.QLabel(self.scroll_widget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.sort_label.sizePolicy().hasHeightForWidth())
|
||||
self.sort_label.setSizePolicy(sizePolicy)
|
||||
self.sort_label.setObjectName("sort_label")
|
||||
self.horizontalLayout.addWidget(self.sort_label)
|
||||
self.sort_cb = QtWidgets.QComboBox(self.scroll_widget)
|
||||
self.sort_cb.setObjectName("sort_cb")
|
||||
self.sort_cb.addItem("")
|
||||
self.sort_cb.addItem("")
|
||||
self.sort_cb.addItem("")
|
||||
self.sort_cb.addItem("")
|
||||
self.horizontalLayout.addWidget(self.sort_cb)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.filter_label = QtWidgets.QLabel(self.scroll_widget)
|
||||
self.filter_label.setObjectName("filter_label")
|
||||
self.horizontalLayout.addWidget(self.filter_label)
|
||||
self.filter_cb = QtWidgets.QComboBox(self.scroll_widget)
|
||||
self.filter_cb.setObjectName("filter_cb")
|
||||
self.filter_cb.addItem("")
|
||||
self.filter_cb.addItem("")
|
||||
self.horizontalLayout.addWidget(self.filter_cb)
|
||||
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem1)
|
||||
self.verticalLayout_2.addLayout(self.horizontalLayout)
|
||||
self.list_layout = QtWidgets.QVBoxLayout()
|
||||
self.list_layout.setObjectName("list_layout")
|
||||
self.verticalLayout_2.addLayout(self.list_layout)
|
||||
self.no_games_label = QtWidgets.QLabel(self.scroll_widget)
|
||||
self.no_games_label.setObjectName("no_games_label")
|
||||
self.verticalLayout_2.addWidget(self.no_games_label)
|
||||
spacerItem2 = QtWidgets.QSpacerItem(379, 218, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout_2.addItem(spacerItem2)
|
||||
self.scroll_area.setWidget(self.scroll_widget)
|
||||
self.verticalLayout.addWidget(self.scroll_area)
|
||||
Wishlist.addWidget(self.page)
|
||||
|
||||
self.retranslateUi(Wishlist)
|
||||
QtCore.QMetaObject.connectSlotsByName(Wishlist)
|
||||
|
||||
def retranslateUi(self, Wishlist):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Wishlist.setWindowTitle(_translate("Wishlist", "StackedWidget"))
|
||||
self.title_label.setText(_translate("Wishlist", "Wishlist"))
|
||||
self.sort_label.setText(_translate("Wishlist", "Sort by"))
|
||||
self.sort_cb.setItemText(0, _translate("Wishlist", "Name"))
|
||||
self.sort_cb.setItemText(1, _translate("Wishlist", "Price"))
|
||||
self.sort_cb.setItemText(2, _translate("Wishlist", "Developer"))
|
||||
self.sort_cb.setItemText(3, _translate("Wishlist", "Discount"))
|
||||
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"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
Wishlist = QtWidgets.QStackedWidget()
|
||||
ui = Ui_Wishlist()
|
||||
ui.setupUi(Wishlist)
|
||||
Wishlist.show()
|
||||
sys.exit(app.exec_())
|
165
rare/ui/components/tabs/store/wishlist.ui
Normal file
165
rare/ui/components/tabs/store/wishlist.ui
Normal file
|
@ -0,0 +1,165 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Wishlist</class>
|
||||
<widget class="QStackedWidget" name="Wishlist">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>736</width>
|
||||
<height>398</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>StackedWidget</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="page">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scroll_area">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scroll_widget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>716</width>
|
||||
<height>378</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="title_label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>15</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Wishlist</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="sort_label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sort by</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="sort_cb">
|
||||
<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>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="filter_label">
|
||||
<property name="text">
|
||||
<string>Filter:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="filter_cb">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>None</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Discount</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="list_layout"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="no_games_label">
|
||||
<property name="text">
|
||||
<string>No games matching your filter</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>379</width>
|
||||
<height>218</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
89
rare/ui/components/tabs/store/wishlist_widget.py
Normal file
89
rare/ui/components/tabs/store/wishlist_widget.py
Normal file
|
@ -0,0 +1,89 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'wishlist_widget.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# 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_WishlistWidget(object):
|
||||
def setupUi(self, WishlistWidget):
|
||||
WishlistWidget.setObjectName("WishlistWidget")
|
||||
WishlistWidget.resize(523, 172)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout(WishlistWidget)
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.widget = QtWidgets.QWidget(WishlistWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.widget.sizePolicy().hasHeightForWidth())
|
||||
self.widget.setSizePolicy(sizePolicy)
|
||||
self.widget.setObjectName("widget")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.title_label = QtWidgets.QLabel(self.widget)
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(16)
|
||||
self.title_label.setFont(font)
|
||||
self.title_label.setWordWrap(True)
|
||||
self.title_label.setObjectName("title_label")
|
||||
self.verticalLayout_2.addWidget(self.title_label)
|
||||
self.developer = QtWidgets.QLabel(self.widget)
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(12)
|
||||
self.developer.setFont(font)
|
||||
self.developer.setObjectName("developer")
|
||||
self.verticalLayout_2.addWidget(self.developer)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.discount_price = QtWidgets.QLabel(self.widget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.discount_price.sizePolicy().hasHeightForWidth())
|
||||
self.discount_price.setSizePolicy(sizePolicy)
|
||||
self.discount_price.setObjectName("discount_price")
|
||||
self.horizontalLayout_2.addWidget(self.discount_price)
|
||||
self.price = QtWidgets.QLabel(self.widget)
|
||||
self.price.setObjectName("price")
|
||||
self.horizontalLayout_2.addWidget(self.price)
|
||||
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
|
||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||
self.verticalLayout_2.addItem(spacerItem)
|
||||
self.horizontalLayout.addWidget(self.widget)
|
||||
self.delete_button = QtWidgets.QPushButton(WishlistWidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.delete_button.sizePolicy().hasHeightForWidth())
|
||||
self.delete_button.setSizePolicy(sizePolicy)
|
||||
self.delete_button.setText("")
|
||||
self.delete_button.setObjectName("delete_button")
|
||||
self.horizontalLayout.addWidget(self.delete_button)
|
||||
|
||||
self.retranslateUi(WishlistWidget)
|
||||
QtCore.QMetaObject.connectSlotsByName(WishlistWidget)
|
||||
|
||||
def retranslateUi(self, WishlistWidget):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
WishlistWidget.setWindowTitle(_translate("WishlistWidget", "Form"))
|
||||
self.title_label.setText(_translate("WishlistWidget", "TextLabel"))
|
||||
self.developer.setText(_translate("WishlistWidget", "TextLabel"))
|
||||
self.discount_price.setText(_translate("WishlistWidget", "TextLabel"))
|
||||
self.price.setText(_translate("WishlistWidget", "TextLabel"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
WishlistWidget = QtWidgets.QWidget()
|
||||
ui = Ui_WishlistWidget()
|
||||
ui.setupUi(WishlistWidget)
|
||||
WishlistWidget.show()
|
||||
sys.exit(app.exec_())
|
110
rare/ui/components/tabs/store/wishlist_widget.ui
Normal file
110
rare/ui/components/tabs/store/wishlist_widget.ui
Normal file
|
@ -0,0 +1,110 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>WishlistWidget</class>
|
||||
<widget class="QWidget" name="WishlistWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>523</width>
|
||||
<height>172</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="title_label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="developer">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="discount_price">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="price">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="delete_button">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -2,6 +2,7 @@ import io
|
|||
import os
|
||||
from logging import getLogger
|
||||
|
||||
import PIL
|
||||
from PIL import Image
|
||||
from PyQt5.QtCore import Qt, QRect, QSize, QPoint, pyqtSignal, QSettings
|
||||
from PyQt5.QtGui import QMovie, QPixmap
|
||||
|
@ -287,10 +288,14 @@ class ImageLabel(QLabel):
|
|||
self.setPixmap(QPixmap())
|
||||
except RuntimeError:
|
||||
return
|
||||
try:
|
||||
image: Image.Image = Image.open(io.BytesIO(data))
|
||||
except PIL.UnidentifiedImageError:
|
||||
print(self.name)
|
||||
return
|
||||
image = image.resize((self.img_size[0], self.img_size[1]))
|
||||
|
||||
if QSettings().value("cache_images", True, bool):
|
||||
if QSettings().value("cache_images", False, bool):
|
||||
image.save(os.path.join(self.path, self.name), format="png")
|
||||
byte_array = io.BytesIO()
|
||||
image.save(byte_array, format="PNG")
|
||||
|
|
Loading…
Reference in a new issue