1
0
Fork 0
mirror of synced 2024-05-18 19:42:54 +12:00

Store: Clean up store UI by using library widgets

This commit is contained in:
loathingKernel 2023-01-30 01:56:29 +02:00
parent 784fadb2da
commit 6b15c0f2cf
No known key found for this signature in database
GPG key ID: CE0C72D0B53821FD
20 changed files with 1536 additions and 1093 deletions

View file

@ -8,7 +8,7 @@ from .downloads import DownloadsTab
from .games import GamesTab from .games import GamesTab
from .settings import SettingsTab from .settings import SettingsTab
from .settings.debug import DebugSettings from .settings.debug import DebugSettings
from .store import Shop from .store import StoreTab
from .tab_widgets import MainTabBar, TabButtonWidget from .tab_widgets import MainTabBar, TabButtonWidget
@ -39,7 +39,7 @@ class MainTabWidget(QTabWidget):
self.setTabEnabled(self.downloads_index, not self.args.offline) self.setTabEnabled(self.downloads_index, not self.args.offline)
if not self.args.offline: if not self.args.offline:
self.store_tab = Shop(self.core) self.store_tab = StoreTab(self.core, parent=self)
self.store_index = self.addTab(self.store_tab, self.tr("Store (Beta)")) self.store_index = self.addTab(self.store_tab, self.tr("Store (Beta)"))
self.setTabEnabled(self.store_index, not self.args.offline) self.setTabEnabled(self.store_index, not self.args.offline)

View file

@ -1,9 +1,8 @@
from PyQt5.QtGui import QShowEvent, QHideEvent
from PyQt5.QtWidgets import QStackedWidget, QTabWidget
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from rare.shared.rare_core import RareCore from rare.shared import RareCore
from rare.utils.paths import cache_dir from rare.utils.paths import cache_dir
from rare.widgets.side_tab import SideTabWidget
from .game_info import ShopGameInfo from .game_info import ShopGameInfo
from .search_results import SearchResults from .search_results import SearchResults
from .shop_api_core import ShopApiCore from .shop_api_core import ShopApiCore
@ -11,11 +10,12 @@ from .shop_widget import ShopWidget
from .wishlist import WishlistWidget, Wishlist from .wishlist import WishlistWidget, Wishlist
class Shop(QStackedWidget): class StoreTab(SideTabWidget):
init = False
def __init__(self, core: LegendaryCore, parent=None):
super(StoreTab, self).__init__(parent=parent)
self.init = False
def __init__(self, core: LegendaryCore):
super(Shop, self).__init__()
self.core = core self.core = core
self.rcore = RareCore.instance() self.rcore = RareCore.instance()
self.api_core = ShopApiCore( self.api_core = ShopApiCore(
@ -24,32 +24,32 @@ class Shop(QStackedWidget):
self.core.country_code, self.core.country_code,
) )
self.shop = ShopWidget(cache_dir(), self.core, self.api_core) self.shop = ShopWidget(cache_dir(), self.core, self.api_core, parent=self)
self.wishlist_widget = Wishlist(self.api_core) self.shop_index = self.addTab(self.shop, self.tr("Games"))
self.shop.show_game.connect(self.show_game)
self.shop.show_info.connect(self.show_search)
self.store_tabs = QTabWidget(parent=self) self.search = SearchResults(self.api_core, parent=self)
self.store_tabs.addTab(self.shop, self.tr("Games")) self.search_index = self.addTab(self.search, self.tr("Search"))
self.store_tabs.addTab(self.wishlist_widget, self.tr("Wishlist")) self.search.show_info.connect(self.show_game)
# self.search.back_button.clicked.connect(lambda: self.setCurrentIndex(self.shop_index))
self.addWidget(self.store_tabs)
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( self.info = ShopGameInfo(
[i.asset_infos["Windows"].namespace for i in self.rcore.game_list if bool(i.asset_infos)], [i.asset_infos["Windows"].namespace for i in self.rcore.game_list if bool(i.asset_infos)],
self.api_core, self.api_core,
parent=self
) )
self.addWidget(self.info) self.info_index = self.addTab(self.info, self.tr("Information"))
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0)) # self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(self.previous_index))
self.search_results.back_button.clicked.connect(lambda: self.setCurrentIndex(0)) self.wishlist = Wishlist(self.api_core, parent=self)
self.shop.show_info.connect(self.show_search_results) self.wishlist_index = self.addTab(self.wishlist, self.tr("Wishlist"))
self.wishlist.update_wishlist_signal.connect(self.update_wishlist)
self.wishlist.show_game_info.connect(self.show_game)
self.wishlist_widget.show_game_info.connect(self.show_game_info)
self.shop.show_game.connect(self.show_game_info)
self.api_core.update_wishlist.connect(self.update_wishlist) self.api_core.update_wishlist.connect(self.update_wishlist)
self.wishlist_widget.update_wishlist_signal.connect(self.update_wishlist)
self.previous_index = self.shop_index
def showEvent(self, a0: QShowEvent) -> None: def showEvent(self, a0: QShowEvent) -> None:
if a0.spontaneous() or self.init: if a0.spontaneous() or self.init:
@ -68,10 +68,11 @@ class Shop(QStackedWidget):
def update_wishlist(self): def update_wishlist(self):
self.shop.update_wishlist() self.shop.update_wishlist()
def show_game_info(self, data): def show_game(self, data):
self.previous_index = self.currentIndex()
self.info.update_game(data) self.info.update_game(data)
self.setCurrentIndex(2) self.setCurrentIndex(self.info_index)
def show_search_results(self, text: str): def show_search(self, text: str):
self.search_results.load_results(text) self.search.load_results(text)
self.setCurrentIndex(1) self.setCurrentIndex(self.search_index)

View file

@ -44,74 +44,475 @@ class Constants(QObject):
] ]
game_query = ( game_query = """
"query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, " query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {
"$keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, " Catalog {
"$sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean " searchStore(
"= false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, " allowCountries: $allowCountries
"$effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n " category: $category
"category: $category\n count: $count\n country: $country\n keywords: $keywords\n " count: $count
"locale: $locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n " country: $country
"sortDir: $sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n " keywords: $keywords
"priceRange: $priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: " locale: $locale
"$effectiveDate\n ) {\n elements {\n title\n id\n namespace\n " namespace: $namespace
"description\n effectiveDate\n keyImages {\n type\n url\n }\n " itemNs: $itemNs
" currentPrice\n seller {\n id\n name\n }\n productSlug\n " sortBy: $sortBy
" urlSlug\n url\n tags {\n id\n }\n items {\n id\n " sortDir: $sortDir
" namespace\n }\n customAttributes {\n key\n value\n }\n " releaseDate: $releaseDate
"categories {\n path\n }\n catalogNs @include(if: $withMapping) {\n " start: $start
'mappings(pageType: "productHome") {\n pageSlug\n pageType\n }\n ' tag: $tag
"}\n offerMappings @include(if: $withMapping) {\n pageSlug\n pageType\n " priceRange: $priceRange
"}\n price(country: $country) @include(if: $withPrice) {\n totalPrice {\n " freeGame: $freeGame
"discountPrice\n originalPrice\n voucherDiscount\n discount\n " onSale: $onSale
" currencyCode\n currencyInfo {\n decimals\n }\n fmtPrice(" effectiveDate: $effectiveDate
"locale: $locale) {\n originalPrice\n discountPrice\n " ) {
"intermediatePrice\n }\n }\n lineOffers {\n appliedRules {\n " elements {
" id\n endDate\n discountSetting {\n discountType\n " title
" }\n }\n }\n }\n promotions(category: $category) @include(if: " id
"$withPromotions) {\n promotionalOffers {\n promotionalOffers {\n " namespace
"startDate\n endDate\n discountSetting {\n discountType\n " description
" discountPercentage\n }\n }\n }\n " effectiveDate
"upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n " keyImages {
"endDate\n discountSetting {\n discountType\n " type
"discountPercentage\n }\n }\n }\n }\n }\n paging {\n " url
" count\n total\n }\n }\n }\n}\n " }
) currentPrice
seller {
id
name
}
productSlug
urlSlug
url
tags {
id
}
items {
id
namespace
}
customAttributes {
key
value
}
categories {
path
}
catalogNs @include(if: $withMapping) {
mappings(pageType: "productHome") {
pageSlug
pageType
}
}
offerMappings @include(if: $withMapping) {
pageSlug
pageType
}
price(country: $country) @include(if: $withPrice) {
totalPrice {
discountPrice
originalPrice
voucherDiscount
discount
currencyCode
currencyInfo {
decimals
}
fmtPrice(locale: $locale) {
originalPrice
discountPrice
intermediatePrice
}
}
lineOffers {
appliedRules {
id
endDate
discountSetting {
discountType
}
}
}
}
promotions(category: $category) @include(if: $withPromotions) {
promotionalOffers {
promotionalOffers {
startDate
endDate
discountSetting {
discountType
discountPercentage
}
}
}
upcomingPromotionalOffers {
promotionalOffers {
startDate
endDate
discountSetting {
discountType
discountPercentage
}
}
}
}
}
paging {
count
total
}
}
}
}
"""
search_query = ( search_query = """
"query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, " query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {
"$keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, " Catalog {
"$sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = " searchStore(
"false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, " allowCountries: $allowCountries
"$effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n " category: $category
"category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: " count: $count
"$locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: " country: $country
"$sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: " keywords: $keywords
"$priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {" locale: $locale
"\n elements {\n title\n id\n namespace\n description\n " namespace: $namespace
"effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n " itemNs: $itemNs
"seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n " sortBy: $sortBy
" tags {\n id\n }\n items {\n id\n namespace\n }\n " sortDir: $sortDir
"customAttributes {\n key\n value\n }\n categories {\n path\n " releaseDate: $releaseDate
'}\n catalogNs @include(if: $withMapping) {\n mappings(pageType: "productHome") {\n ' start: $start
" pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) " tag: $tag
"{\n pageSlug\n pageType\n }\n price(country: $country) @include(if: " priceRange: $priceRange
"$withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n " freeGame: $freeGame
"voucherDiscount\n discount\n currencyCode\n currencyInfo {\n " onSale: $onSale
"decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n " effectiveDate: $effectiveDate
"discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n " ) {
" appliedRules {\n id\n endDate\n discountSetting {\n " elements {
"discountType\n }\n }\n }\n }\n promotions(category: " title
"$category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n " id
" startDate\n endDate\n discountSetting {\n " namespace
"discountType\n discountPercentage\n }\n }\n }\n " description
"upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n " effectiveDate
"endDate\n discountSetting {\n discountType\n discountPercentage\n " keyImages {
" }\n }\n }\n }\n }\n paging {\n count\n " type
"total\n }\n }\n }\n}\n " url
) }
currentPrice
seller {
id
name
}
productSlug
urlSlug
url
tags {
id
}
items {
id
namespace
}
customAttributes {
key
value
}
categories {
path
}
catalogNs {
mappings(pageType: "productHome") {
pageSlug
pageType
}
}
offerMappings {
pageSlug
pageType
}
price(country: $country) @include(if: $withPrice) {
totalPrice {
discountPrice
originalPrice
voucherDiscount
discount
currencyCode
currencyInfo {
decimals
}
fmtPrice(locale: $locale) {
originalPrice
discountPrice
intermediatePrice
}
}
lineOffers {
appliedRules {
id
endDate
discountSetting {
discountType
}
}
}
}
promotions(category: $category) @include(if: $withPromotions) {
promotionalOffers {
promotionalOffers {
startDate
endDate
discountSetting {
discountType
discountPercentage
}
}
}
upcomingPromotionalOffers {
promotionalOffers {
startDate
endDate
discountSetting {
discountType
discountPercentage
}
}
}
}
}
paging {
count
total
}
}
}
}
"""
wishlist_query = '\n query wishlistQuery($country:String!, $locale:String) {\n Wishlist {\n wishlistItems {\n elements {\n id\n order\n created\n offerId\n updated\n namespace\n \n offer {\n productSlug\n urlSlug\n title\n id\n namespace\n offerType\n expiryDate\n status\n isCodeRedemptionOnly\n description\n effectiveDate\n keyImages {\n type\n url\n }\n seller {\n id\n name\n }\n productSlug\n urlSlug\n items {\n id\n namespace\n }\n customAttributes {\n key\n value\n }\n catalogNs {\n mappings(pageType: "productHome") {\n pageSlug\n pageType\n }\n }\n offerMappings {\n pageSlug\n pageType\n }\n categories {\n path\n }\n price(country: $country) {\n totalPrice {\n discountPrice\n originalPrice\n voucherDiscount\n discount\n fmtPrice(locale: $locale) {\n originalPrice\n discountPrice\n intermediatePrice\n }\n currencyCode\n currencyInfo {\n decimals\n symbol\n }\n }\n lineOffers {\n appliedRules {\n id\n endDate\n }\n }\n }\n }\n\n }\n }\n }\n }\n' wishlist_query = """
add_to_wishlist_query = "\n mutation removeFromWishlistMutation($namespace: String!, $offerId: String!, $operation: RemoveOperation!) {\n Wishlist {\n removeFromWishlist(namespace: $namespace, offerId: $offerId, operation: $operation) {\n success\n }\n }\n }\n" query wishlistQuery($country:String!, $locale:String) {
remove_from_wishlist_query = "\n mutation removeFromWishlistMutation($namespace: String!, $offerId: String!, $operation: RemoveOperation!) {\n Wishlist {\n removeFromWishlist(namespace: $namespace, offerId: $offerId, operation: $operation) {\n success\n }\n }\n }\n" Wishlist {
coupon_query = "\n query getCoupons($currencyCountry: String!, $identityId: String!, $locale: String) {\n CodeRedemption {\n coupons(currencyCountry: $currencyCountry, identityId: $identityId, includeSalesEventInfo: true) {\n code\n codeStatus\n codeType\n consumptionMetadata {\n amountDisplay {\n amount\n currency\n placement\n symbol\n }\n minSalesPriceDisplay {\n amount\n currency\n placement\n symbol\n }\n }\n endDate\n namespace\n salesEvent(locale: $locale) {\n eventName\n eventSlug\n voucherImages {\n type\n url\n }\n voucherLink\n }\n startDate\n }\n }\n }\n" wishlistItems {
elements {
id
order
created
offerId
updated
namespace
offer(locale: $locale) {
productSlug
urlSlug
title
id
namespace
offerType
expiryDate
status
isCodeRedemptionOnly
description
effectiveDate
keyImages {
type
url
}
seller {
id
name
}
productSlug
urlSlug
items {
id
namespace
}
customAttributes {
key
value
}
catalogNs {
mappings(pageType: "productHome") {
pageSlug
pageType
}
}
offerMappings {
pageSlug
pageType
}
categories {
path
}
price(country: $country) {
totalPrice {
discountPrice
originalPrice
voucherDiscount
discount
fmtPrice(locale: $locale) {
originalPrice
discountPrice
intermediatePrice
}
currencyCode
currencyInfo {
decimals
symbol
}
}
lineOffers {
appliedRules {
id
endDate
}
}
}
}
}
}
}
}
"""
add_to_wishlist_query = """
mutation addWishlistMutation($namespace: String!, $offerId: String!, $country:String!, $locale:String) {
Wishlist {
addToWishlist(namespace: $namespace, offerId: $offerId) {
wishlistItem {
id,
order,
created,
offerId,
updated,
namespace,
isFirstTime
offer {
productSlug
urlSlug
title
id
namespace
offerType
expiryDate
status
isCodeRedemptionOnly
description
effectiveDate
keyImages {
type
url
}
seller {
id
name
}
productSlug
urlSlug
items {
id
namespace
}
customAttributes {
key
value
}
catalogNs {
mappings(pageType: "productHome") {
pageSlug
pageType
}
}
offerMappings {
pageSlug
pageType
}
categories {
path
}
price(country: $country) {
totalPrice {
discountPrice
originalPrice
voucherDiscount
discount
fmtPrice(locale: $locale) {
originalPrice
discountPrice
intermediatePrice
}
currencyCode
currencyInfo {
decimals
symbol
}
}
lineOffers {
appliedRules {
id
endDate
}
}
}
}
}
success
}
}
}
"""
remove_from_wishlist_query = """
mutation removeFromWishlistMutation($namespace: String!, $offerId: String!, $operation: RemoveOperation!) {
Wishlist {
removeFromWishlist(namespace: $namespace, offerId: $offerId, operation: $operation) {
success
}
}
}
"""
coupon_query = """
query getCoupons($currencyCountry: String!, $identityId: String!, $locale: String) {
CodeRedemption {
coupons(currencyCountry: $currencyCountry, identityId: $identityId, includeSalesEventInfo: true) {
code
codeStatus
codeType
consumptionMetadata {
amountDisplay {
amount
currency
placement
symbol
}
minSalesPriceDisplay {
amount
currency
placement
symbol
}
}
endDate
namespace
salesEvent(locale: $locale) {
eventName
eventSlug
voucherImages {
type
url
}
voucherLink
}
startDate
}
}
}
"""
# if __name__ == "__main__":
# from sgqlc import introspection, codegen
#
# coupon = codegen.operation.parse_graphql(coupon_query)
# codegen.schema.
# print(coupon.)

View file

@ -1,53 +1,53 @@
import logging import logging
from PyQt5.QtCore import Qt, QUrl from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QPixmap, QFont, QDesktopServices from PyQt5.QtGui import QFont, QDesktopServices
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QWidget, QWidget,
QLabel, QLabel,
QPushButton, QPushButton,
QHBoxLayout,
QSpacerItem,
QGroupBox,
QTabWidget,
QGridLayout, QGridLayout,
QSizePolicy,
) )
from rare.components.tabs.store.shop_models import ShopGame from rare.components.tabs.store.shop_models import ShopGame
from rare.shared import LegendaryCoreSingleton from rare.shared import LegendaryCoreSingleton
from rare.ui.components.tabs.store.shop_game_info import Ui_shop_info from rare.shared.image_manager import ImageSize
from rare.utils.extra_widgets import ImageLabel from rare.ui.components.tabs.store.shop_game_info import Ui_ShopGameInfo
from rare.utils.misc import qta_icon as icon from rare.utils.misc import icon
from rare.widgets.loading_widget import LoadingWidget from rare.widgets.side_tab import SideTabWidget
from .image_widget import ShopImageWidget
logger = logging.getLogger("ShopInfo") logger = logging.getLogger("ShopInfo")
class ShopGameInfo(QWidget, Ui_shop_info): class ShopGameInfo(QWidget, Ui_ShopGameInfo):
game: ShopGame
data: dict
# TODO Design # TODO Design
def __init__(self, installed_titles: list, api_core): def __init__(self, installed_titles: list, api_core, parent=None):
super(ShopGameInfo, self).__init__() super(ShopGameInfo, self).__init__(parent=parent)
self.setupUi(self) self.setupUi(self)
self.core = LegendaryCoreSingleton() self.core = LegendaryCoreSingleton()
self.api_core = api_core self.api_core = api_core
self.installed = installed_titles self.installed = installed_titles
self.open_store_button.clicked.connect(self.button_clicked) self.open_store_button.clicked.connect(self.button_clicked)
self.image = ImageLabel() self.image = ShopImageWidget(self)
self.image_stack.addWidget(self.image) self.image.setFixedSize(ImageSize.Normal)
self.image_stack.addWidget(LoadingWidget()) self.image_info_layout.insertWidget(0, self.image)
warn_label = QLabel()
warn_label.setPixmap( self.game: ShopGame = None
icon("fa.warning").pixmap(160, 160).scaled(240, 320, Qt.IgnoreAspectRatio) self.data: dict = {}
)
self.image_stack.addWidget(warn_label)
self.wishlist_button.clicked.connect(self.add_to_wishlist) self.wishlist_button.clicked.connect(self.add_to_wishlist)
self.in_wishlist = False self.in_wishlist = False
self.wishlist = [] self.wishlist = []
self.requirements_tabs: SideTabWidget = SideTabWidget(parent=self.requirements_group)
self.requirements_tabs.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.requirements_layout.addWidget(self.requirements_tabs)
self.setDisabled(True)
def handle_wishlist_update(self, data): def handle_wishlist_update(self, data):
if data and data[0] == "error": if data and data[0] == "error":
return return
@ -61,12 +61,15 @@ class ShopGameInfo(QWidget, Ui_shop_info):
self.wishlist_button.setVisible(False) self.wishlist_button.setVisible(False)
def update_game(self, data: dict): def update_game(self, data: dict):
self.image_stack.setCurrentIndex(1)
self.title.setText(data["title"]) self.title.setText(data["title"])
self.title_str = data["title"] self.title_str = data["title"]
self.id_str = data["id"]
self.api_core.get_wishlist(self.handle_wishlist_update) self.api_core.get_wishlist(self.handle_wishlist_update)
for i in reversed(range(self.req_group_box.layout().count())): # lk: delete tabs in inverse order because indices are updated on deletion
self.req_group_box.layout().itemAt(i).widget().deleteLater() while self.requirements_tabs.count():
self.requirements_tabs.widget(0).deleteLater()
self.requirements_tabs.removeTab(0)
self.requirements_tabs.clear()
slug = data["productSlug"] slug = data["productSlug"]
if not slug: if not slug:
for mapping in data["offerMappings"]: for mapping in data["offerMappings"]:
@ -87,13 +90,10 @@ class ShopGameInfo(QWidget, Ui_shop_info):
self.open_store_button.setText(self.tr("Buy Game in Epic Games Store")) self.open_store_button.setText(self.tr("Buy Game in Epic Games Store"))
self.owned_label.setVisible(False) self.owned_label.setVisible(False)
for i in range(self.req_group_box.layout().count()):
self.req_group_box.layout().itemAt(i).widget().deleteLater()
self.price.setText(self.tr("Loading")) self.price.setText(self.tr("Loading"))
self.wishlist_button.setVisible(False) self.wishlist_button.setVisible(False)
# self.title.setText(self.tr("Loading")) # self.title.setText(self.tr("Loading"))
self.image.setPixmap(QPixmap()) # self.image.setPixmap(QPixmap())
self.data = data self.data = data
is_bundle = False is_bundle = False
for i in data["categories"]: for i in data["categories"]:
@ -103,8 +103,8 @@ class ShopGameInfo(QWidget, Ui_shop_info):
# init API request # init API request
if slug: if slug:
self.api_core.get_game(slug, is_bundle, self.data_received) self.api_core.get_game(slug, is_bundle, self.data_received)
else: # else:
self.data_received({}) # self.data_received({})
def add_to_wishlist(self): def add_to_wishlist(self):
if not self.in_wishlist: if not self.in_wishlist:
@ -125,9 +125,10 @@ class ShopGameInfo(QWidget, Ui_shop_info):
try: try:
self.game = ShopGame.from_json(game, self.data) self.game = ShopGame.from_json(game, self.data)
except Exception as e: except Exception as e:
raise e
logger.error(str(e)) logger.error(str(e))
self.price.setText("Error") self.price.setText("Error")
self.req_group_box.setVisible(False) self.requirements_tabs.setEnabled(False)
for img in self.data.get("keyImages"): for img in self.data.get("keyImages"):
if img["type"] in [ if img["type"] in [
"DieselStoreFrontWide", "DieselStoreFrontWide",
@ -135,14 +136,11 @@ class ShopGameInfo(QWidget, Ui_shop_info):
"VaultClosed", "VaultClosed",
"ProductLogo", "ProductLogo",
]: ]:
self.image.update_image(img["url"], self.title_str, size=(240, 320)) self.image.fetchPixmap(img["url"], self.id_str, self.title_str)
self.image_stack.setCurrentIndex(0)
break break
else:
self.image_stack.setCurrentIndex(2)
self.price.setText("") self.price.setText("")
self.discount_price.setText("") self.discount_price.setText("")
self.social_link_gb.setVisible(False) self.social_group.setEnabled(False)
self.tags.setText("") self.tags.setText("")
self.dev.setText(self.data.get("seller", {}).get("name", "")) self.dev.setText(self.data.get("seller", {}).get("name", ""))
return return
@ -170,33 +168,34 @@ class ShopGameInfo(QWidget, Ui_shop_info):
bold_font.setBold(True) bold_font.setBold(True)
if self.game.reqs: if self.game.reqs:
req_tabs = QTabWidget()
for system in self.game.reqs: for system in self.game.reqs:
min_label = QLabel(self.tr("Minimum")) req_widget = QWidget(self.requirements_tabs)
req_layout = QGridLayout(req_widget)
req_layout.setSizeConstraint(QGridLayout.SetFixedSize)
req_widget.layout().setAlignment(Qt.AlignTop)
req_widget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
min_label = QLabel(self.tr("Minimum"), parent=req_widget)
min_label.setFont(bold_font) min_label.setFont(bold_font)
rec_label = QLabel(self.tr("Recommend")) rec_label = QLabel(self.tr("Recommend"), parent=req_widget)
rec_label.setFont(bold_font) rec_label.setFont(bold_font)
req_widget = QWidget() req_layout.addWidget(min_label, 0, 1)
req_widget.setLayout(QGridLayout()) req_layout.addWidget(rec_label, 0, 2)
req_widget.layout().addWidget(min_label, 0, 1) for i, (key, value) in enumerate(self.game.reqs.get(system, {}).items()):
req_widget.layout().addWidget(rec_label, 0, 2) req_layout.addWidget(QLabel(key, parent=req_widget), i + 1, 0)
for i, (key, value) in enumerate( min_label = QLabel(value[0], parent=req_widget)
self.game.reqs.get(system, {}).items() min_label.setWordWrap(False)
): req_layout.addWidget(min_label, i + 1, 1)
req_widget.layout().addWidget(QLabel(key), i + 1, 0) rec_label = QLabel(value[1], parent=req_widget)
min_label = QLabel(value[0]) rec_label.setWordWrap(False)
min_label.setWordWrap(True) req_layout.addWidget(rec_label, i + 1, 2)
req_widget.layout().addWidget(min_label, i + 1, 1) self.requirements_tabs.addTab(req_widget, system)
rec_label = QLabel(value[1]) # self.req_group_box.layout().addWidget(req_tabs)
rec_label.setWordWrap(True) # self.req_group_box.layout().setAlignment(Qt.AlignTop)
req_widget.layout().addWidget(rec_label, i + 1, 2) # else:
req_tabs.addTab(req_widget, system) # self.req_group_box.layout().addWidget(
self.req_group_box.layout().addWidget(req_tabs) # QLabel(self.tr("Could not get requirements"))
else: # )
self.req_group_box.layout().addWidget( self.requirements_tabs.setEnabled(True)
QLabel(self.tr("Could not get requirements"))
)
self.req_group_box.setVisible(True)
if self.game.image_urls.front_tall: if self.game.image_urls.front_tall:
img_url = self.game.image_urls.front_tall img_url = self.game.image_urls.front_tall
elif self.game.image_urls.offer_image_tall: elif self.game.image_urls.offer_image_tall:
@ -205,9 +204,9 @@ class ShopGameInfo(QWidget, Ui_shop_info):
img_url = self.game.image_urls.product_logo img_url = self.game.image_urls.product_logo
else: else:
img_url = "" img_url = ""
self.image.update_image(img_url, self.game.title, (240, 320)) self.image.fetchPixmap(img_url, self.game.id, self.game.title)
self.image_stack.setCurrentIndex(0) # self.image_stack.setCurrentIndex(0)
try: try:
if isinstance(self.game.developer, list): if isinstance(self.game.developer, list):
self.dev.setText(", ".join(self.game.developer)) self.dev.setText(", ".join(self.game.developer))
@ -218,19 +217,10 @@ class ShopGameInfo(QWidget, Ui_shop_info):
self.tags.setText(", ".join(self.game.tags)) self.tags.setText(", ".join(self.game.tags))
# clear Layout # clear Layout
for widget in ( for b in self.social_group.findChildren(SocialButton, options=Qt.FindDirectChildrenOnly):
self.social_link_gb.layout().itemAt(i) self.social_layout.removeWidget(b)
for i in range(self.social_link_gb.layout().count()) b.deleteLater()
):
if not isinstance(widget, QSpacerItem):
widget.widget().deleteLater()
self.social_link_gb.deleteLater()
self.social_link_gb = QGroupBox(self.tr("Social Links"))
self.social_link_gb.setLayout(QHBoxLayout())
self.layout().insertWidget(3, self.social_link_gb)
self.social_link_gb.layout().addStretch(1)
link_count = 0 link_count = 0
for name, url in self.game.links: for name, url in self.game.links:
@ -243,16 +233,13 @@ class ShopGameInfo(QWidget, Ui_shop_info):
logger.error(str(e)) logger.error(str(e))
continue continue
button = SocialButton(icn, url) button = SocialButton(icn, url, parent=self.social_group)
self.social_link_gb.layout().addWidget(button) self.social_layout.addWidget(button)
link_count += 1 link_count += 1
self.social_link_gb.layout().addStretch(1)
if link_count == 0: self.social_group.setEnabled(bool(link_count))
self.social_link_gb.setVisible(False)
else: self.setEnabled(True)
self.social_link_gb.setVisible(True)
self.social_link_gb.layout().addStretch(1)
def add_wishlist_items(self, wishlist): def add_wishlist_items(self, wishlist):
wishlist = wishlist["data"]["Wishlist"]["wishlistItems"]["elements"] wishlist = wishlist["data"]["Wishlist"]["wishlistItems"]["elements"]
@ -264,8 +251,8 @@ class ShopGameInfo(QWidget, Ui_shop_info):
class SocialButton(QPushButton): class SocialButton(QPushButton):
def __init__(self, icn, url): def __init__(self, icn, url, parent=None):
super(SocialButton, self).__init__(icn, "") super(SocialButton, self).__init__(icn, "", parent=parent)
self.url = url self.url = url
self.clicked.connect(lambda: QDesktopServices.openUrl(QUrl(url))) self.clicked.connect(lambda: QDesktopServices.openUrl(QUrl(url)))
self.setToolTip(url) self.setToolTip(url)

View file

@ -1,15 +1,18 @@
import logging import logging
from PyQt5 import QtGui from PyQt5 import QtGui
from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtGui import QFont from PyQt5.QtGui import QFont
from PyQt5.QtNetwork import QNetworkAccessManager from PyQt5.QtNetwork import QNetworkAccessManager
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout, QSizePolicy
from rare.components.tabs.store.shop_models import ImageUrlModel from rare.components.tabs.store.shop_models import ImageUrlModel
from rare.shared.image_manager import ImageSize
from rare.ui.components.tabs.store.wishlist_widget import Ui_WishlistWidget from rare.ui.components.tabs.store.wishlist_widget import Ui_WishlistWidget
from rare.utils.extra_widgets import ImageLabel from rare.utils.extra_widgets import ImageLabel
from rare.utils.misc import qta_icon as icon from rare.utils.misc import qta_icon
from rare.widgets.elide_label import ElideLabel
from .image_widget import ShopImageWidget
logger = logging.getLogger("GameWidgets") logger = logging.getLogger("GameWidgets")
@ -17,17 +20,18 @@ logger = logging.getLogger("GameWidgets")
class GameWidget(QWidget): class GameWidget(QWidget):
show_info = pyqtSignal(dict) show_info = pyqtSignal(dict)
def __init__(self, path, json_info=None, width=300): def __init__(self, path, json_info=None):
super(GameWidget, self).__init__() super(GameWidget, self).__init__()
self.manager = QNetworkAccessManager() self.manager = QNetworkAccessManager()
self.width = width
self.path = path self.path = path
if json_info: if json_info:
self.init_ui(json_info) self.init_ui(json_info)
def init_ui(self, json_info): def init_ui(self, json_info):
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.image = ImageLabel() self.layout.setSizeConstraint(QVBoxLayout.SetFixedSize)
self.image = ShopImageWidget(self)
self.image.setFixedSize(ImageSize.Wide)
self.layout.addWidget(self.image) self.layout.addWidget(self.image)
mini_layout = QHBoxLayout() mini_layout = QHBoxLayout()
self.layout.addLayout(mini_layout) self.layout.addLayout(mini_layout)
@ -37,10 +41,10 @@ class GameWidget(QWidget):
self.setLayout(self.layout) self.setLayout(self.layout)
return return
self.title_label = QLabel(json_info.get("title")) self.title_label = ElideLabel(json_info.get("title"), parent=self)
self.title_label.setWordWrap(True) self.title_label.setWordWrap(False)
mini_layout.addWidget(self.title_label) mini_layout.addWidget(self.title_label)
mini_layout.addStretch(1) # mini_layout.addStretch(1)
price = json_info["price"]["totalPrice"]["fmtPrice"]["originalPrice"] price = json_info["price"]["totalPrice"]["fmtPrice"]["originalPrice"]
discount_price = json_info["price"]["totalPrice"]["fmtPrice"]["discountPrice"] discount_price = json_info["price"]["totalPrice"]["fmtPrice"]["discountPrice"]
@ -49,14 +53,16 @@ class GameWidget(QWidget):
font = QFont() font = QFont()
font.setStrikeOut(True) font.setStrikeOut(True)
price_label.setFont(font) price_label.setFont(font)
mini_layout.addWidget( free_label = QLabel(discount_price if discount_price != "0" else self.tr("Free"))
QLabel(discount_price if discount_price != "0" else self.tr("Free")) free_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
) free_label.setAlignment(Qt.AlignRight)
mini_layout.addWidget(price_label) mini_layout.addWidget(free_label)
else: else:
if price == "0": if price == "0":
price_label.setText(self.tr("Free")) price_label.setText(self.tr("Free"))
mini_layout.addWidget(price_label) price_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
price_label.setAlignment(Qt.AlignRight)
mini_layout.addWidget(price_label)
for c in r'<>?":|\/*': for c in r'<>?":|\/*':
json_info["title"] = json_info["title"].replace(c, "") json_info["title"] = json_info["title"].replace(c, "")
@ -74,19 +80,13 @@ class GameWidget(QWidget):
]: ]:
if img["type"] == "VaultClosed" and self.title != "Mystery Game": if img["type"] == "VaultClosed" and self.title != "Mystery Game":
continue continue
self.image.update_image( self.image.fetchPixmap(img["url"], json_info["id"], json_info["title"])
img["url"],
json_info["title"],
(self.width, int(self.width * 9 / 16)),
)
break break
else: else:
logger.info(", ".join([img["type"] for img in json_info["keyImages"]])) logger.info(", ".join([img["type"] for img in json_info["keyImages"]]))
self.setLayout(self.layout) self.setLayout(self.layout)
self.setFixedSize(self.width + 10, self.width * 9 // 16 + 50)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None: def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
self.show_info.emit(self.json_info) self.show_info.emit(self.json_info)

View file

@ -0,0 +1,76 @@
from typing import Dict
from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import (
QPixmap,
QImage, QMovie,
)
from PyQt5.QtWidgets import QLabel
from rare.utils.qt_requests import QtRequestManager
from rare.widgets.image_widget import ImageWidget
class WaitingSpinner(QLabel):
def __init__(self, autostart=False, parent=None):
super(WaitingSpinner, self).__init__(parent=parent)
self.setObjectName(type(self).__name__)
self.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
self.movie = QMovie(":/images/loader.gif")
self.setMovie(self.movie)
if autostart:
self.movie.start()
def setGeometry(self, a0: QRect) -> None:
self.rect().moveCenter(self.parent().rect().center())
super(WaitingSpinner, self).setGeometry(self.rect())
def start(self):
self.movie.start()
def stop(self):
self.movie.stop()
class ShopImageWidget(ImageWidget):
__image_cache: Dict[str, Dict[str, QPixmap]] = {}
def __init__(self, parent=None):
super(ShopImageWidget, self).__init__(parent=parent)
self.spinner = WaitingSpinner(parent=self)
self.spinner.setVisible(False)
self.manager = QtRequestManager("bytes")
self.app_id = ""
self.orientation = ""
def fetchPixmap(self, url, app_id: str, title: str = ""):
self.setPixmap(QPixmap())
self.app_id = app_id
if self._image_size.size.width() > self._image_size.size.height():
self.orientation = "wide"
else:
self.orientation = "tall"
if ShopImageWidget.__image_cache.get(self.app_id, None) is not None:
if pixmap := ShopImageWidget.__image_cache[self.app_id].get(self.orientation, None):
self.setPixmap(pixmap)
return
self.spinner.setFixedSize(self._image_size.size)
self.spinner.setVisible(True)
self.spinner.start()
self.manager.get(
url, self.__on_image_ready, payload={
"resize": 1, "w": self._image_size.size.width(), "h": self._image_size.size.height()
}
)
def __on_image_ready(self, data):
cover = QImage()
cover.loadFromData(data)
cover = cover.scaled(self._image_size.size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
cover = cover.convertToFormat(QImage.Format_ARGB32_Premultiplied)
cover = QPixmap(cover)
ShopImageWidget.__image_cache.update({self.app_id: {self.orientation: cover}})
super(ShopImageWidget, self).setPixmap(cover)
self.spinner.stop()
self.spinner.setVisible(False)

View file

@ -6,105 +6,106 @@ from PyQt5.QtWidgets import (
QVBoxLayout, QVBoxLayout,
QHBoxLayout, QHBoxLayout,
QLabel, QLabel,
QScrollArea, QFrame,
QGroupBox, QSizePolicy,
QPushButton,
QStackedWidget,
) )
from rare.utils.extra_widgets import ImageLabel, WaitingSpinner from rare.shared.image_manager import ImageSize
from rare.widgets.flow_layout import FlowLayout from rare.widgets.flow_layout import FlowLayout
from widgets.elide_label import ElideLabel
from .image_widget import ShopImageWidget
class SearchResults(QStackedWidget): class SearchResults(QWidget):
show_info = pyqtSignal(dict) show_info = pyqtSignal(dict)
def __init__(self, api_core): def __init__(self, api_core, parent=None):
super(SearchResults, self).__init__() super(SearchResults, self).__init__(parent=parent)
self.search_result_widget = QWidget()
self.api_core = api_core self.api_core = api_core
self.addWidget(self.search_result_widget)
self.results_frame = QFrame(self)
self.results_frame.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.results_frame.setFrameStyle(QFrame.StyledPanel)
self.resutls_layout = FlowLayout(self.results_frame)
self.results_frame.setLayout(self.resutls_layout)
self.main_layout = QVBoxLayout() self.main_layout = QVBoxLayout()
self.back_button = QPushButton(self.tr("Back")) self.main_layout.setContentsMargins(0, 0, 0, 0)
self.main_layout.addWidget(self.back_button) self.main_layout.addWidget(self.results_frame)
self.main_layout.addWidget(self.back_button)
self.result_area = QScrollArea()
self.widget = QWidget()
self.result_area.setWidgetResizable(True)
self.main_layout.addWidget(self.result_area)
self.result_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.result_area.setWidget(self.widget) self.setLayout(self.main_layout)
self.layout = FlowLayout() self.setEnabled(False)
self.widget.setLayout(self.layout)
self.search_result_widget.setLayout(self.main_layout)
self.addWidget(WaitingSpinner())
self.setCurrentIndex(1)
def load_results(self, text: str): def load_results(self, text: str):
self.setCurrentIndex(1) self.setEnabled(False)
if text != "": if text != "":
self.api_core.search_game(text, self.show_results) self.api_core.search_game(text, self.show_results)
def show_results(self, results: dict): def show_results(self, results: dict):
self.widget.deleteLater() for w in self.results_frame.findChildren(QLabel, options=Qt.FindDirectChildrenOnly):
self.widget = QWidget() self.results_frame.layout().removeWidget(w)
self.layout = FlowLayout() w.deleteLater()
for w in self.results_frame.findChildren(_SearchResultItem, options=Qt.FindDirectChildrenOnly):
self.results_frame.layout().removeWidget(w)
w.deleteLater()
if not results: if not results:
self.layout.addWidget(QLabel(self.tr("No results found"))) self.results_frame.layout().addWidget(QLabel(self.tr("No results found")))
else: else:
for res in results: for res in results:
w = _SearchResultItem(res) w = _SearchResultItem(res, parent=self.results_frame)
w.show_info.connect(self.show_info.emit) w.show_info.connect(self.show_info.emit)
self.layout.addWidget(w) self.results_frame.layout().addWidget(w)
self.widget.setLayout(self.layout) self.setEnabled(True)
self.result_area.setWidget(self.widget)
self.setCurrentIndex(0)
class _SearchResultItem(QGroupBox): class _SearchResultItem(QFrame):
res: dict res: dict
show_info = pyqtSignal(dict) show_info = pyqtSignal(dict)
def __init__(self, result: dict): def __init__(self, result: dict, parent=None):
super(_SearchResultItem, self).__init__() super(_SearchResultItem, self).__init__(parent=parent)
self.layout = QVBoxLayout() self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
self.image = ImageLabel() self.widget_layout = QVBoxLayout()
self.widget_layout.setSizeConstraint(QVBoxLayout.SetFixedSize)
self.image = ShopImageWidget(parent=self)
self.image.setFixedSize(ImageSize.Normal)
for img in result["keyImages"]: for img in result["keyImages"]:
if img["type"] == "DieselStoreFrontTall": if img["type"] in ["DieselStoreFrontTall", "OfferImageTall", "Thumbnail", "ProductLogo"]:
width = 240 self.image.fetchPixmap(img["url"], result["id"], result["title"])
self.image.update_image(img["url"], result["title"], (width, 360))
break break
else: else:
print("No image found") print("No image found")
self.layout.addWidget(self.image) self.widget_layout.addWidget(self.image)
self.res = result self.res = result
self.title = QLabel(self.res["title"]) self.title = ElideLabel(self.res["title"], parent=self)
title_font = QFont() title_font = QFont()
title_font.setPixelSize(15) title_font.setPixelSize(15)
self.title.setFont(title_font) self.title.setFont(title_font)
self.title.setWordWrap(True) self.title.setWordWrap(False)
self.layout.addWidget(self.title) self.widget_layout.addWidget(self.title)
price = result["price"]["totalPrice"]["fmtPrice"]["originalPrice"] price = result["price"]["totalPrice"]["fmtPrice"]["originalPrice"]
discount_price = result["price"]["totalPrice"]["fmtPrice"]["discountPrice"] discount_price = result["price"]["totalPrice"]["fmtPrice"]["discountPrice"]
price_layout = QHBoxLayout() price_layout = QHBoxLayout()
price_label = QLabel(price if price != "0" else self.tr("Free")) price_layout.addStretch(1)
price_label = QLabel(price if price != "0" else self.tr("Free"), parent=self)
price_label.setAlignment(Qt.AlignRight)
price_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
price_layout.addWidget(price_label) price_layout.addWidget(price_label)
if price != discount_price: if price != discount_price:
font = QFont() font = QFont()
font.setStrikeOut(True) font.setStrikeOut(True)
price_label.setFont(font) price_label.setFont(font)
price_layout.addWidget(QLabel(discount_price)) discount_label = QLabel(discount_price if discount_price != "0" else self.tr("Free"), parent=self)
discount_label.setAlignment(Qt.AlignRight)
discount_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
price_layout.addWidget(discount_label)
# self.discount_price = QLabel(f"{self.tr('Discount price: ')}{discount_price}") # self.discount_price = QLabel(f"{self.tr('Discount price: ')}{discount_price}")
self.layout.addLayout(price_layout) self.widget_layout.addLayout(price_layout)
self.setLayout(self.layout) self.setLayout(self.widget_layout)
self.setFixedWidth(260)
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None: def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
if a0.button() == 1: if a0.button() == 1:

View file

@ -173,8 +173,9 @@ class ShopApiCore(QObject):
try: try:
handle_func(data) handle_func(data)
except Exception as e: except Exception as e:
raise e
logger.error(str(e)) logger.error(str(e))
handle_func({}) # handle_func({})
# needs a captcha # needs a captcha
def add_to_wishlist(self, namespace, offer_id, handle_func: callable): def add_to_wishlist(self, namespace, offer_id, handle_func: callable):

View file

@ -1,5 +1,6 @@
import datetime import datetime
from dataclasses import dataclass from dataclasses import dataclass
from typing import List, Dict
class ImageUrlModel: class ImageUrlModel:
@ -43,19 +44,21 @@ class ShopGame:
def __init__( def __init__(
self, self,
title: str = "", title: str = "",
id: str = "",
image_urls: ImageUrlModel = None, image_urls: ImageUrlModel = None,
social_links: dict = None, social_links: Dict = None,
langs: list = None, langs: Dict = None,
reqs: dict = None, reqs: Dict = None,
publisher: str = "", publisher: str = "",
developer: str = "", developer: str = "",
original_price: str = "", original_price: str = "",
discount_price: str = "", discount_price: str = "",
tags: list = None, tags: List = None,
namespace: str = "", namespace: str = "",
offer_id: str = "", offer_id: str = "",
): ):
self.title = title self.title = title
self.id = id
self.image_urls = image_urls self.image_urls = image_urls
self.links = [] self.links = []
if social_links: if social_links:
@ -66,13 +69,13 @@ class ShopGame:
) )
else: else:
self.links = [] self.links = []
self.languages = langs self.languages = langs if langs is not None else {}
self.reqs = reqs self.reqs = reqs if reqs is not None else {}
self.publisher = publisher self.publisher = publisher
self.developer = developer self.developer = developer
self.price = original_price self.price = original_price
self.discount_price = discount_price self.discount_price = discount_price
self.tags = tags self.tags = tags if tags is not None else []
self.namespace = namespace self.namespace = namespace
self.offer_id = offer_id self.offer_id = offer_id
@ -89,46 +92,50 @@ class ShopGame:
api_data = page api_data = page
break break
tmp = cls() tmp = cls()
tmp.title = search_data.get("title", "Fail") if search_data:
tmp.image_urls = ImageUrlModel.from_json(search_data["keyImages"]) tmp.title = search_data.get("title", "Fail")
links = api_data["data"]["socialLinks"] tmp.id = search_data.get("id")
tmp.links = [] tmp.image_urls = ImageUrlModel.from_json(search_data["keyImages"])
for item in links: if not tmp.developer:
if item.startswith("link"): for i in search_data["customAttributes"]:
tmp.links.append(tuple((item.replace("link", ""), links[item]))) if i["key"] == "developerName":
tmp.available_voice_langs = api_data["data"]["requirements"].get( tmp.developer = i["value"]
"languages", "Failed" tmp.price = search_data["price"]["totalPrice"]["fmtPrice"]["originalPrice"]
) tmp.discount_price = search_data["price"]["totalPrice"]["fmtPrice"][
tmp.reqs = {} "discountPrice"
for i, system in enumerate(api_data["data"]["requirements"].get("systems", [])): ]
try: tmp.namespace = search_data["namespace"]
tmp.reqs[system["systemType"]] = {} tmp.offer_id = search_data["id"]
except KeyError:
continue if api_data:
for req in system["details"]: links = api_data["data"]["socialLinks"]
tmp.links = []
for item in links:
if item.startswith("link"):
tmp.links.append(tuple((item.replace("link", ""), links[item])))
tmp.available_voice_langs = api_data["data"]["requirements"].get(
"languages", "Failed"
)
tmp.reqs = {}
for i, system in enumerate(api_data["data"]["requirements"].get("systems", [])):
try: try:
tmp.reqs[system["systemType"]][req["title"]] = ( tmp.reqs[system["systemType"]] = {}
req["minimum"],
req["recommended"],
)
except KeyError: except KeyError:
pass continue
tmp.publisher = api_data["data"]["meta"].get("publisher", "") for req in system["details"]:
tmp.developer = api_data["data"]["meta"].get("developer", "") try:
if not tmp.developer: tmp.reqs[system["systemType"]][req["title"]] = (
for i in search_data["customAttributes"]: req["minimum"],
if i["key"] == "developerName": req["recommended"],
tmp.developer = i["value"] )
tmp.price = search_data["price"]["totalPrice"]["fmtPrice"]["originalPrice"] except KeyError:
tmp.discount_price = search_data["price"]["totalPrice"]["fmtPrice"][ pass
"discountPrice" tmp.publisher = api_data["data"]["meta"].get("publisher", "")
] tmp.developer = api_data["data"]["meta"].get("developer", "")
tmp.tags = [ tmp.tags = [
i.replace("_", " ").capitalize() i.replace("_", " ").capitalize()
for i in api_data["data"]["meta"].get("tags", []) for i in api_data["data"]["meta"].get("tags", [])
] ]
tmp.namespace = search_data["namespace"]
tmp.offer_id = search_data["id"]
return tmp return tmp

View file

@ -1,14 +1,15 @@
import datetime import datetime
import logging import logging
from typing import List
from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QGroupBox, QGroupBox,
QScrollArea,
QCheckBox, QCheckBox,
QLabel, QLabel,
QPushButton, QPushButton,
QHBoxLayout, QHBoxLayout,
QWidget, QSizePolicy,
) )
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
@ -24,17 +25,12 @@ logger = logging.getLogger("Shop")
# noinspection PyAttributeOutsideInit,PyBroadException # noinspection PyAttributeOutsideInit,PyBroadException
class ShopWidget(QScrollArea, Ui_ShopWidget): class ShopWidget(QWidget, Ui_ShopWidget):
show_info = pyqtSignal(str) show_info = pyqtSignal(str)
show_game = pyqtSignal(dict) show_game = pyqtSignal(dict)
free_game_widgets = []
active_search_request = False
next_search = ""
wishlist: list = []
def __init__(self, path, core: LegendaryCore, shop_api: ShopApiCore): def __init__(self, path, core: LegendaryCore, shop_api: ShopApiCore, parent=None):
super(ShopWidget, self).__init__() super(ShopWidget, self).__init__(parent=parent)
self.setWidgetResizable(True)
self.setupUi(self) self.setupUi(self)
self.path = path self.path = path
self.core = core self.core = core
@ -43,10 +39,17 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.tags = [] self.tags = []
self.types = [] self.types = []
self.update_games_allowed = True self.update_games_allowed = True
self.free_widget.setLayout(FlowLayout()) free_games_container_layout = QHBoxLayout(self.free_games_container)
free_games_container_layout.setContentsMargins(0, 0, 0, 3)
self.free_games_container.setLayout(free_games_container_layout)
self.free_games_container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.free_games_scrollarea.setDisabled(True)
self.free_games_scrollarea.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.free_stack.addWidget(WaitingSpinner()) self.free_game_widgets = []
self.free_stack.setCurrentIndex(1) self.active_search_request = False
self.next_search = ""
self.wishlist: List = []
self.discount_widget.setLayout(FlowLayout()) self.discount_widget.setLayout(FlowLayout())
self.discount_stack.addWidget(WaitingSpinner()) self.discount_stack.addWidget(WaitingSpinner())
@ -59,7 +62,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.search_bar = ButtonLineEdit( self.search_bar = ButtonLineEdit(
"fa.search", placeholder_text=self.tr("Search Games") "fa.search", placeholder_text=self.tr("Search Games")
) )
self.layout().insertWidget(0, self.search_bar) self.games_container_layout.insertWidget(0, self.search_bar)
# self.search_bar.textChanged.connect(self.search_games) # self.search_bar.textChanged.connect(self.search_games)
@ -110,42 +113,47 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
try: try:
if game["offer"]["price"]["totalPrice"]["discount"] > 0: if game["offer"]["price"]["totalPrice"]["discount"] > 0:
w = GameWidget(self.path, game["offer"]) w = GameWidget(self.path, game["offer"])
w.show_info.connect(self.show_game.emit) w.show_info.connect(self.show_game)
self.discount_widget.layout().addWidget(w) self.discount_widget.layout().addWidget(w)
discounts += 1 discounts += 1
except Exception as e: except Exception as e:
logger.warning(f"{game} {e}") logger.warning(f"{game} {e}")
continue continue
self.discounts_gb.setVisible(discounts > 0) self.discounts_group.setVisible(discounts > 0)
self.discount_stack.setCurrentIndex(0) self.discount_stack.setCurrentIndex(0)
# fix widget overlay # fix widget overlay
self.discount_widget.layout().update() self.discount_widget.layout().update()
def add_free_games(self, free_games: list): def add_free_games(self, free_games: list):
for i in range(self.free_widget.layout().count()): for w in self.free_games_container.layout().findChildren(QGroupBox, options=Qt.FindDirectChildrenOnly):
item = self.free_widget.layout().itemAt(i) self.free_games_container.layout().removeWidget(w)
if item: w.deleteLater()
item.widget().deleteLater()
if free_games and free_games[0] == "error": if free_games and free_games[0] == "error":
self.free_widget.layout().addWidget( self.free_games_container.layout().addWidget(
QLabel(self.tr("Failed to fetch free games: {}").format(free_games[1])) QLabel(self.tr("Failed to fetch free games: {}").format(free_games[1]))
) )
btn = QPushButton(self.tr("Reload")) btn = QPushButton(self.tr("Reload"))
self.free_widget.layout().addWidget(btn) self.free_games_container.layout().addWidget(btn)
btn.clicked.connect( btn.clicked.connect(
lambda: self.api_core.get_free_games(self.add_free_games) lambda: self.api_core.get_free_games(self.add_free_games)
) )
self.free_stack.setCurrentIndex(0) self.free_games_container.setEnabled(True)
return return
self.free_games_now = QGroupBox(self.tr("Now Free")) self.free_games_now = QGroupBox(self.tr("Free now"), parent=self.free_games_container)
self.free_games_now.setLayout(QHBoxLayout()) free_games_now_layout = QHBoxLayout(self.free_games_now)
self.free_widget.layout().addWidget(self.free_games_now) free_games_now_layout.setContentsMargins(0, 0, 0, 0)
self.free_games_now.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.free_games_now.setLayout(free_games_now_layout)
self.free_games_container.layout().addWidget(self.free_games_now)
self.coming_free_games = QGroupBox(self.tr("Free Games next week")) self.free_games_next = QGroupBox(self.tr("Free next week"), parent=self.free_games_container)
self.coming_free_games.setLayout(QHBoxLayout()) free_games_next_layout = QHBoxLayout(self.free_games_next)
self.free_widget.layout().addWidget(self.coming_free_games) free_games_next_layout.setContentsMargins(0, 0, 0, 0)
self.free_games_next.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
self.free_games_next.setLayout(free_games_next_layout)
self.free_games_container.layout().addWidget(self.free_games_next)
date = datetime.datetime.now() date = datetime.datetime.now()
free_games_now = [] free_games_now = []
@ -197,7 +205,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
now_free = 0 now_free = 0
for free_game in free_games_now: for free_game in free_games_now:
w = GameWidget(self.path, free_game) w = GameWidget(self.path, free_game)
w.show_info.connect(self.show_game.emit) w.show_info.connect(self.show_game)
self.free_games_now.layout().addWidget(w) self.free_games_now.layout().addWidget(w)
self.free_game_widgets.append(w) self.free_game_widgets.append(w)
now_free += 1 now_free += 1
@ -210,10 +218,15 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
for free_game in coming_free_games: for free_game in coming_free_games:
w = GameWidget(self.path, free_game) w = GameWidget(self.path, free_game)
if free_game["title"] != "Mystery Game": if free_game["title"] != "Mystery Game":
w.show_info.connect(self.show_game.emit) w.show_info.connect(self.show_game)
self.coming_free_games.layout().addWidget(w) self.free_games_next.layout().addWidget(w)
# self.coming_free_games.setFixedWidth(int(40 + len(coming_free_games) * 300)) # self.coming_free_games.setFixedWidth(int(40 + len(coming_free_games) * 300))
self.free_stack.setCurrentIndex(0)
self.free_games_scrollarea.setMinimumHeight(
self.free_games_now.sizeHint().height() + self.free_games_scrollarea.horizontalScrollBar().sizeHint().height()
)
self.free_games_scrollarea.update()
self.free_games_scrollarea.setEnabled(True)
def show_search_results(self): def show_search_results(self):
if self.search_bar.text(): if self.search_bar.text():
@ -255,10 +268,10 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
self.checkboxes = [] self.checkboxes = []
for groupbox, variables in [ for groupbox, variables in [
(self.genre_gb, constants.categories), (self.genre_group, constants.categories),
(self.platform_gb, constants.platforms), (self.platform_group, constants.platforms),
(self.others_gb, constants.others), (self.others_group, constants.others),
(self.type_gb, constants.types), (self.type_group, constants.types),
]: ]:
for text, tag in variables: for text, tag in variables:
@ -307,12 +320,12 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
if removed_type and removed_type in self.types: if removed_type and removed_type in self.types:
self.types.remove(removed_type) self.types.remove(removed_type)
if (self.types or self.price) or self.tags or self.on_discount.isChecked(): if (self.types or self.price) or self.tags or self.on_discount.isChecked():
self.free_game_group_box.setVisible(False) self.free_games_scrollarea.setVisible(False)
self.discounts_gb.setVisible(False) self.discounts_group.setVisible(False)
else: else:
self.free_game_group_box.setVisible(True) self.free_games_scrollarea.setVisible(True)
if len(self.discounts_gb.layout().children()) > 0: if len(self.discounts_group.layout().children()) > 0:
self.discounts_gb.setVisible(True) self.discounts_group.setVisible(True)
self.game_stack.setCurrentIndex(1) self.game_stack.setCurrentIndex(1)

View file

@ -1,23 +1,21 @@
from PyQt5.QtCore import pyqtSignal from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QStackedWidget, QMessageBox from PyQt5.QtWidgets import QMessageBox, QWidget
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.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 from .shop_api_core import ShopApiCore
from .game_widgets import WishlistWidget
class Wishlist(QStackedWidget, Ui_Wishlist): class Wishlist(QWidget, Ui_Wishlist):
show_game_info = pyqtSignal(dict) show_game_info = pyqtSignal(dict)
update_wishlist_signal = pyqtSignal() update_wishlist_signal = pyqtSignal()
def __init__(self, api_core: ShopApiCore): def __init__(self, api_core: ShopApiCore, parent=None):
super(Wishlist, self).__init__() super(Wishlist, self).__init__(parent=parent)
self.api_core = api_core self.api_core = api_core
self.setupUi(self) self.setupUi(self)
self.addWidget(WaitingSpinner()) self.setEnabled(False)
self.setCurrentIndex(1)
self.wishlist = [] self.wishlist = []
self.widgets = [] self.widgets = []
@ -33,7 +31,7 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
) )
def update_wishlist(self): def update_wishlist(self):
self.setCurrentIndex(1) self.setEnabled(False)
self.api_core.get_wishlist(self.set_wishlist) self.api_core.get_wishlist(self.set_wishlist)
def delete_from_wishlist(self, game): def delete_from_wishlist(self, game):
@ -116,4 +114,4 @@ class Wishlist(QStackedWidget, Ui_Wishlist):
self.list_layout.addWidget(w) self.list_layout.addWidget(w)
w.open_game.connect(self.show_game_info.emit) w.open_game.connect(self.show_game_info.emit)
w.delete_from_wishlist.connect(self.delete_from_wishlist) w.delete_from_wishlist.connect(self.delete_from_wishlist)
self.setCurrentIndex(0) self.setEnabled(True)

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/store/shop_game_info.ui' # Form implementation generated from reading ui file 'rare/ui/components/tabs/store/shop_game_info.ui'
# #
# Created by: PyQt5 UI code generator 5.15.6 # Created by: PyQt5 UI code generator 5.15.7
# #
# WARNING: Any manual changes made to this file will be lost when pyuic5 is # 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. # run again. Do not edit this file unless you know what you are doing.
@ -11,113 +11,105 @@
from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_shop_info(object): class Ui_ShopGameInfo(object):
def setupUi(self, shop_info): def setupUi(self, ShopGameInfo):
shop_info.setObjectName("shop_info") ShopGameInfo.setObjectName("ShopGameInfo")
shop_info.resize(702, 468) ShopGameInfo.resize(702, 468)
shop_info.setWindowTitle("Form") ShopGameInfo.setWindowTitle("ShopGameInfo")
self.verticalLayout = QtWidgets.QVBoxLayout(shop_info) self.shop_game_info_layout = QtWidgets.QVBoxLayout(ShopGameInfo)
self.verticalLayout.setObjectName("verticalLayout") self.shop_game_info_layout.setObjectName("shop_game_info_layout")
self.back_button = QtWidgets.QPushButton(shop_info) self.image_info_layout = QtWidgets.QHBoxLayout()
self.back_button.setObjectName("back_button") self.image_info_layout.setObjectName("image_info_layout")
self.verticalLayout.addWidget(self.back_button) self.info_layout = QtWidgets.QGridLayout()
self.horizontalLayout = QtWidgets.QHBoxLayout() self.info_layout.setObjectName("info_layout")
self.horizontalLayout.setObjectName("horizontalLayout") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.image_stack = QtWidgets.QStackedWidget(shop_info) self.info_layout.addItem(spacerItem, 6, 1, 1, 1)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred) self.tags = QtWidgets.QLabel(ShopGameInfo)
sizePolicy.setHorizontalStretch(0) self.tags.setText("tags")
sizePolicy.setVerticalStretch(0) self.tags.setObjectName("tags")
sizePolicy.setHeightForWidth(self.image_stack.sizePolicy().hasHeightForWidth()) self.info_layout.addWidget(self.tags, 5, 0, 1, 2)
self.image_stack.setSizePolicy(sizePolicy) self.discount_price = QtWidgets.QLabel(ShopGameInfo)
self.image_stack.setObjectName("image_stack") self.discount_price.setText("discount")
self.horizontalLayout.addWidget(self.image_stack) self.discount_price.setObjectName("discount_price")
self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.info_layout.addWidget(self.discount_price, 4, 0, 1, 2)
self.verticalLayout_2.setObjectName("verticalLayout_2") self.title = QtWidgets.QLabel(ShopGameInfo)
self.title = QtWidgets.QLabel(shop_info)
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(18) font.setPointSize(18)
self.title.setFont(font) self.title.setFont(font)
self.title.setText("") self.title.setText("title")
self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.title.setObjectName("title") self.title.setObjectName("title")
self.verticalLayout_2.addWidget(self.title) self.info_layout.addWidget(self.title, 0, 0, 1, 2)
self.dev = QtWidgets.QLabel(shop_info) self.button_layout = QtWidgets.QVBoxLayout()
self.button_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.button_layout.setObjectName("button_layout")
self.open_store_button = QtWidgets.QPushButton(ShopGameInfo)
self.open_store_button.setObjectName("open_store_button")
self.button_layout.addWidget(self.open_store_button)
self.wishlist_button = QtWidgets.QPushButton(ShopGameInfo)
self.wishlist_button.setObjectName("wishlist_button")
self.button_layout.addWidget(self.wishlist_button)
self.info_layout.addLayout(self.button_layout, 6, 0, 1, 1)
self.dev = QtWidgets.QLabel(ShopGameInfo)
font = QtGui.QFont() font = QtGui.QFont()
font.setPointSize(14) font.setPointSize(14)
self.dev.setFont(font) self.dev.setFont(font)
self.dev.setText("") self.dev.setText("dev")
self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.dev.setObjectName("dev") self.dev.setObjectName("dev")
self.verticalLayout_2.addWidget(self.dev) self.info_layout.addWidget(self.dev, 1, 0, 1, 2)
self.owned_label = QtWidgets.QLabel(shop_info) self.owned_label = QtWidgets.QLabel(ShopGameInfo)
self.owned_label.setObjectName("owned_label") self.owned_label.setObjectName("owned_label")
self.verticalLayout_2.addWidget(self.owned_label) self.info_layout.addWidget(self.owned_label, 2, 0, 1, 2)
self.price = QtWidgets.QLabel(shop_info) self.price = QtWidgets.QLabel(ShopGameInfo)
self.price.setText("") self.price.setText("price")
self.price.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.price.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.price.setObjectName("price") self.price.setObjectName("price")
self.verticalLayout_2.addWidget(self.price) self.info_layout.addWidget(self.price, 3, 0, 1, 2)
self.discount_price = QtWidgets.QLabel(shop_info) self.social_group = QtWidgets.QGroupBox(ShopGameInfo)
self.discount_price.setText("") sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
self.discount_price.setObjectName("discount_price")
self.verticalLayout_2.addWidget(self.discount_price)
self.tags = QtWidgets.QLabel(shop_info)
self.tags.setText("")
self.tags.setObjectName("tags")
self.verticalLayout_2.addWidget(self.tags)
self.open_store_button = QtWidgets.QPushButton(shop_info)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.open_store_button.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.social_group.sizePolicy().hasHeightForWidth())
self.open_store_button.setSizePolicy(sizePolicy) self.social_group.setSizePolicy(sizePolicy)
self.open_store_button.setObjectName("open_store_button") self.social_group.setObjectName("social_group")
self.verticalLayout_2.addWidget(self.open_store_button) self.social_layout = QtWidgets.QHBoxLayout(self.social_group)
self.wishlist_button = QtWidgets.QPushButton(shop_info) self.social_layout.setObjectName("social_layout")
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) self.info_layout.addWidget(self.social_group, 7, 0, 1, 2)
sizePolicy.setHorizontalStretch(0) self.image_info_layout.addLayout(self.info_layout)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.wishlist_button.sizePolicy().hasHeightForWidth())
self.wishlist_button.setSizePolicy(sizePolicy)
self.wishlist_button.setObjectName("wishlist_button")
self.verticalLayout_2.addWidget(self.wishlist_button)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem)
self.horizontalLayout.addLayout(self.verticalLayout_2)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1) self.image_info_layout.addItem(spacerItem1)
self.verticalLayout.addLayout(self.horizontalLayout) self.shop_game_info_layout.addLayout(self.image_info_layout)
self.req_group_box = QtWidgets.QGroupBox(shop_info) self.requirements_group = QtWidgets.QGroupBox(ShopGameInfo)
self.req_group_box.setObjectName("req_group_box") sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
self.gridLayout_2 = QtWidgets.QGridLayout(self.req_group_box) sizePolicy.setHorizontalStretch(0)
self.gridLayout_2.setObjectName("gridLayout_2") sizePolicy.setVerticalStretch(0)
self.verticalLayout.addWidget(self.req_group_box) sizePolicy.setHeightForWidth(self.requirements_group.sizePolicy().hasHeightForWidth())
self.social_link_gb = QtWidgets.QGroupBox(shop_info) self.requirements_group.setSizePolicy(sizePolicy)
self.social_link_gb.setObjectName("social_link_gb") self.requirements_group.setObjectName("requirements_group")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.social_link_gb) self.requirements_layout = QtWidgets.QHBoxLayout(self.requirements_group)
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.requirements_layout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.addWidget(self.social_link_gb) self.requirements_layout.setObjectName("requirements_layout")
self.shop_game_info_layout.addWidget(self.requirements_group)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout.addItem(spacerItem2) self.shop_game_info_layout.addItem(spacerItem2)
self.retranslateUi(shop_info) self.retranslateUi(ShopGameInfo)
self.image_stack.setCurrentIndex(-1)
def retranslateUi(self, shop_info): def retranslateUi(self, ShopGameInfo):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
self.back_button.setText(_translate("shop_info", "Back")) self.open_store_button.setText(_translate("ShopGameInfo", "Buy in Epic Games Store"))
self.owned_label.setText(_translate("shop_info", "You already own this game")) self.wishlist_button.setText(_translate("ShopGameInfo", "Add to wishlist"))
self.open_store_button.setText(_translate("shop_info", "Buy Game in Epic Games Store")) self.owned_label.setText(_translate("ShopGameInfo", "You already own this game"))
self.wishlist_button.setText(_translate("shop_info", "Add to wishlist")) self.social_group.setTitle(_translate("ShopGameInfo", "Links"))
self.req_group_box.setTitle(_translate("shop_info", "Requirements")) self.requirements_group.setTitle(_translate("ShopGameInfo", "System requirements"))
self.social_link_gb.setTitle(_translate("shop_info", "Social Links"))
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
shop_info = QtWidgets.QWidget() ShopGameInfo = QtWidgets.QWidget()
ui = Ui_shop_info() ui = Ui_ShopGameInfo()
ui.setupUi(shop_info) ui.setupUi(ShopGameInfo)
shop_info.show() ShopGameInfo.show()
sys.exit(app.exec_()) sys.exit(app.exec_())

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>shop_info</class> <class>ShopGameInfo</class>
<widget class="QWidget" name="shop_info"> <widget class="QWidget" name="ShopGameInfo">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
@ -11,34 +11,41 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string notr="true">Form</string> <string notr="true">ShopGameInfo</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="shop_game_info_layout">
<item> <item>
<widget class="QPushButton" name="back_button"> <layout class="QHBoxLayout" name="image_info_layout">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QStackedWidget" name="image_stack"> <layout class="QGridLayout" name="info_layout">
<property name="sizePolicy"> <item row="6" column="1">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred"> <spacer name="horizontalSpacer">
<horstretch>0</horstretch> <property name="orientation">
<verstretch>0</verstretch> <enum>Qt::Horizontal</enum>
</sizepolicy> </property>
</property> <property name="sizeHint" stdset="0">
<property name="currentIndex"> <size>
<number>-1</number> <width>40</width>
</property> <height>20</height>
</widget> </size>
</item> </property>
<item> </spacer>
<layout class="QVBoxLayout" name="verticalLayout_2"> </item>
<item> <item row="5" column="0" colspan="2">
<widget class="QLabel" name="tags">
<property name="text">
<string notr="true">tags</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLabel" name="discount_price">
<property name="text">
<string notr="true">discount</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="title"> <widget class="QLabel" name="title">
<property name="font"> <property name="font">
<font> <font>
@ -46,14 +53,35 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string/> <string notr="true">title</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="6" column="0">
<layout class="QVBoxLayout" name="button_layout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QPushButton" name="open_store_button">
<property name="text">
<string>Buy in Epic Games Store</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="wishlist_button">
<property name="text">
<string>Add to wishlist</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<widget class="QLabel" name="dev"> <widget class="QLabel" name="dev">
<property name="font"> <property name="font">
<font> <font>
@ -61,87 +89,48 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string notr="true"/> <string notr="true">dev</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="2" column="0" colspan="2">
<widget class="QLabel" name="owned_label"> <widget class="QLabel" name="owned_label">
<property name="text"> <property name="text">
<string>You already own this game</string> <string>You already own this game</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="3" column="0" colspan="2">
<widget class="QLabel" name="price"> <widget class="QLabel" name="price">
<property name="text"> <property name="text">
<string notr="true"/> <string notr="true">price</string>
</property> </property>
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item row="7" column="0" colspan="2">
<widget class="QLabel" name="discount_price"> <widget class="QGroupBox" name="social_group">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="tags">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="open_store_button">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="title">
<string>Buy Game in Epic Games Store</string> <string>Links</string>
</property> </property>
<layout class="QHBoxLayout" name="social_layout"/>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="wishlist_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Add to wishlist</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<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> </layout>
</item> </item>
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="image_info_hspacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@ -156,23 +145,34 @@
</layout> </layout>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="req_group_box"> <widget class="QGroupBox" name="requirements_group">
<property name="title"> <property name="sizePolicy">
<string>Requirements</string> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"/> <property name="title">
<string>System requirements</string>
</property>
<layout class="QHBoxLayout" name="requirements_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>
</layout>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="social_link_gb"> <spacer name="shop_game_info_vspacer">
<property name="title">
<string>Social Links</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>

View file

@ -2,153 +2,145 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/store/store.ui' # Form implementation generated from reading ui file 'rare/ui/components/tabs/store/store.ui'
# #
# Created by: PyQt5 UI code generator 5.15.6 # Created by: PyQt5 UI code generator 5.15.7
# #
# WARNING: Any manual changes made to this file will be lost when pyuic5 is # 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. # run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtWidgets from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ShopWidget(object): class Ui_ShopWidget(object):
def setupUi(self, ShopWidget): def setupUi(self, ShopWidget):
ShopWidget.setObjectName("ShopWidget") ShopWidget.setObjectName("ShopWidget")
ShopWidget.resize(850, 572) ShopWidget.resize(843, 569)
ShopWidget.setWindowTitle("Form") ShopWidget.setWindowTitle("Store")
self.verticalLayout_7 = QtWidgets.QVBoxLayout(ShopWidget) self.shop_layout = QtWidgets.QHBoxLayout(ShopWidget)
self.verticalLayout_7.setObjectName("verticalLayout_7") self.shop_layout.setObjectName("shop_layout")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.games_scrollarea = QtWidgets.QScrollArea(ShopWidget)
self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.games_scrollarea.setFrameShape(QtWidgets.QFrame.NoFrame)
self.scrollArea = QtWidgets.QScrollArea(ShopWidget) self.games_scrollarea.setFrameShadow(QtWidgets.QFrame.Plain)
self.scrollArea.setWidgetResizable(True) self.games_scrollarea.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.scrollArea.setObjectName("scrollArea") self.games_scrollarea.setWidgetResizable(True)
self.scrollAreaWidgetContents = QtWidgets.QWidget() self.games_scrollarea.setObjectName("games_scrollarea")
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 828, 550)) self.games_container = QtWidgets.QWidget()
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.games_container.setGeometry(QtCore.QRect(0, 0, 659, 557))
self.horizontalLayout = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents) self.games_container.setObjectName("games_container")
self.horizontalLayout.setObjectName("horizontalLayout") self.games_container_layout = QtWidgets.QVBoxLayout(self.games_container)
self.widget = QtWidgets.QWidget(self.scrollAreaWidgetContents) self.games_container_layout.setContentsMargins(0, 0, 3, 0)
self.widget.setObjectName("widget") self.games_container_layout.setObjectName("games_container_layout")
self.verticalLayout = QtWidgets.QVBoxLayout(self.widget) self.free_games_scrollarea = QtWidgets.QScrollArea(self.games_container)
self.verticalLayout.setObjectName("verticalLayout") self.free_games_scrollarea.setFrameShape(QtWidgets.QFrame.NoFrame)
self.free_game_group_box = QtWidgets.QGroupBox(self.widget) self.free_games_scrollarea.setFrameShadow(QtWidgets.QFrame.Plain)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) self.free_games_scrollarea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
sizePolicy.setHorizontalStretch(0) self.free_games_scrollarea.setWidgetResizable(True)
sizePolicy.setVerticalStretch(0) self.free_games_scrollarea.setObjectName("free_games_scrollarea")
sizePolicy.setHeightForWidth(self.free_game_group_box.sizePolicy().hasHeightForWidth()) self.free_games_container = QtWidgets.QWidget()
self.free_game_group_box.setSizePolicy(sizePolicy) self.free_games_container.setGeometry(QtCore.QRect(0, 0, 656, 182))
self.free_game_group_box.setObjectName("free_game_group_box") self.free_games_container.setObjectName("free_games_container")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.free_game_group_box) self.free_games_scrollarea.setWidget(self.free_games_container)
self.verticalLayout_3.setObjectName("verticalLayout_3") self.games_container_layout.addWidget(self.free_games_scrollarea)
self.free_stack = QtWidgets.QStackedWidget(self.free_game_group_box) self.discounts_group = QtWidgets.QGroupBox(self.games_container)
self.free_stack.setObjectName("free_stack") self.discounts_group.setObjectName("discounts_group")
self.free_widget = QtWidgets.QWidget() self.discounts_layout = QtWidgets.QVBoxLayout(self.discounts_group)
self.free_widget.setObjectName("free_widget") self.discounts_layout.setObjectName("discounts_layout")
self.free_stack.addWidget(self.free_widget) self.discount_stack = QtWidgets.QStackedWidget(self.discounts_group)
self.verticalLayout_3.addWidget(self.free_stack)
self.verticalLayout.addWidget(self.free_game_group_box)
self.discounts_gb = QtWidgets.QGroupBox(self.widget)
self.discounts_gb.setObjectName("discounts_gb")
self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.discounts_gb)
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.discount_stack = QtWidgets.QStackedWidget(self.discounts_gb)
self.discount_stack.setObjectName("discount_stack") self.discount_stack.setObjectName("discount_stack")
self.discount_widget = QtWidgets.QWidget() self.discount_widget = QtWidgets.QWidget()
self.discount_widget.setObjectName("discount_widget") self.discount_widget.setObjectName("discount_widget")
self.discount_stack.addWidget(self.discount_widget) self.discount_stack.addWidget(self.discount_widget)
self.verticalLayout_6.addWidget(self.discount_stack) self.discounts_layout.addWidget(self.discount_stack)
self.verticalLayout.addWidget(self.discounts_gb) self.games_container_layout.addWidget(self.discounts_group)
self.filter_game_gb = QtWidgets.QGroupBox(self.widget) self.games_group = QtWidgets.QGroupBox(self.games_container)
self.filter_game_gb.setObjectName("filter_game_gb") self.games_group.setObjectName("games_group")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.filter_game_gb) self.games_layout = QtWidgets.QVBoxLayout(self.games_group)
self.verticalLayout_4.setObjectName("verticalLayout_4") self.games_layout.setObjectName("games_layout")
self.game_stack = QtWidgets.QStackedWidget(self.filter_game_gb) self.game_stack = QtWidgets.QStackedWidget(self.games_group)
self.game_stack.setObjectName("game_stack") self.game_stack.setObjectName("game_stack")
self.game_widget = QtWidgets.QWidget() self.game_widget = QtWidgets.QWidget()
self.game_widget.setObjectName("game_widget") self.game_widget.setObjectName("game_widget")
self.game_stack.addWidget(self.game_widget) self.game_stack.addWidget(self.game_widget)
self.verticalLayout_4.addWidget(self.game_stack) self.games_layout.addWidget(self.game_stack)
self.verticalLayout.addWidget(self.filter_game_gb) self.games_container_layout.addWidget(self.games_group)
self.horizontalLayout.addWidget(self.widget) self.games_scrollarea.setWidget(self.games_container)
self.filter_gb = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.shop_layout.addWidget(self.games_scrollarea)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) self.filter_scrollarea = QtWidgets.QScrollArea(ShopWidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.filter_gb.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.filter_scrollarea.sizePolicy().hasHeightForWidth())
self.filter_gb.setSizePolicy(sizePolicy) self.filter_scrollarea.setSizePolicy(sizePolicy)
self.filter_gb.setMinimumSize(QtCore.QSize(150, 0)) self.filter_scrollarea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.filter_gb.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.filter_scrollarea.setWidgetResizable(True)
self.filter_gb.setObjectName("filter_gb") self.filter_scrollarea.setObjectName("filter_scrollarea")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.filter_gb) self.filter_container = QtWidgets.QWidget()
self.verticalLayout_2.setObjectName("verticalLayout_2") self.filter_container.setGeometry(QtCore.QRect(0, 0, 162, 553))
self.reset_button = QtWidgets.QPushButton(self.filter_gb) self.filter_container.setObjectName("filter_container")
self.filter_container_layout = QtWidgets.QVBoxLayout(self.filter_container)
self.filter_container_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)
self.filter_container_layout.setObjectName("filter_container_layout")
self.reset_button = QtWidgets.QPushButton(self.filter_container)
self.reset_button.setObjectName("reset_button") self.reset_button.setObjectName("reset_button")
self.verticalLayout_2.addWidget(self.reset_button) self.filter_container_layout.addWidget(self.reset_button)
self.price_gb = QtWidgets.QGroupBox(self.filter_gb) self.price_group = QtWidgets.QGroupBox(self.filter_container)
self.price_gb.setObjectName("price_gb") self.price_group.setObjectName("price_group")
self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.price_gb) self.price_layout = QtWidgets.QVBoxLayout(self.price_group)
self.verticalLayout_9.setObjectName("verticalLayout_9") self.price_layout.setObjectName("price_layout")
self.none_price = QtWidgets.QRadioButton(self.price_gb) self.none_price = QtWidgets.QRadioButton(self.price_group)
self.none_price.setChecked(True) self.none_price.setChecked(True)
self.none_price.setObjectName("none_price") self.none_price.setObjectName("none_price")
self.verticalLayout_9.addWidget(self.none_price) self.price_layout.addWidget(self.none_price)
self.free_button = QtWidgets.QRadioButton(self.price_gb) self.free_button = QtWidgets.QRadioButton(self.price_group)
self.free_button.setObjectName("free_button") self.free_button.setObjectName("free_button")
self.verticalLayout_9.addWidget(self.free_button) self.price_layout.addWidget(self.free_button)
self.under10 = QtWidgets.QRadioButton(self.price_gb) self.under10 = QtWidgets.QRadioButton(self.price_group)
self.under10.setObjectName("under10") self.under10.setObjectName("under10")
self.verticalLayout_9.addWidget(self.under10) self.price_layout.addWidget(self.under10)
self.under20 = QtWidgets.QRadioButton(self.price_gb) self.under20 = QtWidgets.QRadioButton(self.price_group)
self.under20.setObjectName("under20") self.under20.setObjectName("under20")
self.verticalLayout_9.addWidget(self.under20) self.price_layout.addWidget(self.under20)
self.under30 = QtWidgets.QRadioButton(self.price_gb) self.under30 = QtWidgets.QRadioButton(self.price_group)
self.under30.setObjectName("under30") self.under30.setObjectName("under30")
self.verticalLayout_9.addWidget(self.under30) self.price_layout.addWidget(self.under30)
self.above = QtWidgets.QRadioButton(self.price_gb) self.above = QtWidgets.QRadioButton(self.price_group)
self.above.setObjectName("above") self.above.setObjectName("above")
self.verticalLayout_9.addWidget(self.above) self.price_layout.addWidget(self.above)
self.on_discount = QtWidgets.QCheckBox(self.price_gb) self.on_discount = QtWidgets.QCheckBox(self.price_group)
self.on_discount.setObjectName("on_discount") self.on_discount.setObjectName("on_discount")
self.verticalLayout_9.addWidget(self.on_discount) self.price_layout.addWidget(self.on_discount)
self.verticalLayout_2.addWidget(self.price_gb) self.filter_container_layout.addWidget(self.price_group)
self.platform_gb = QtWidgets.QGroupBox(self.filter_gb) self.platform_group = QtWidgets.QGroupBox(self.filter_container)
self.platform_gb.setObjectName("platform_gb") self.platform_group.setObjectName("platform_group")
self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.platform_gb) self.platfrom_layout = QtWidgets.QVBoxLayout(self.platform_group)
self.verticalLayout_13.setObjectName("verticalLayout_13") self.platfrom_layout.setObjectName("platfrom_layout")
self.verticalLayout_2.addWidget(self.platform_gb) self.filter_container_layout.addWidget(self.platform_group)
self.genre_gb = QtWidgets.QGroupBox(self.filter_gb) self.genre_group = QtWidgets.QGroupBox(self.filter_container)
self.genre_gb.setObjectName("genre_gb") self.genre_group.setObjectName("genre_group")
self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.genre_gb) self.genre_layout = QtWidgets.QVBoxLayout(self.genre_group)
self.verticalLayout_12.setObjectName("verticalLayout_12") self.genre_layout.setObjectName("genre_layout")
self.verticalLayout_2.addWidget(self.genre_gb) self.filter_container_layout.addWidget(self.genre_group)
self.type_gb = QtWidgets.QGroupBox(self.filter_gb) self.type_group = QtWidgets.QGroupBox(self.filter_container)
self.type_gb.setObjectName("type_gb") self.type_group.setObjectName("type_group")
self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.type_gb) self.type_layout = QtWidgets.QVBoxLayout(self.type_group)
self.verticalLayout_11.setObjectName("verticalLayout_11") self.type_layout.setObjectName("type_layout")
self.verticalLayout_2.addWidget(self.type_gb) self.filter_container_layout.addWidget(self.type_group)
self.others_gb = QtWidgets.QGroupBox(self.filter_gb) self.others_group = QtWidgets.QGroupBox(self.filter_container)
self.others_gb.setObjectName("others_gb") self.others_group.setObjectName("others_group")
self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.others_gb) self.others_layout = QtWidgets.QVBoxLayout(self.others_group)
self.verticalLayout_10.setObjectName("verticalLayout_10") self.others_layout.setObjectName("others_layout")
self.verticalLayout_2.addWidget(self.others_gb) self.filter_container_layout.addWidget(self.others_group)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.filter_scrollarea.setWidget(self.filter_container)
self.verticalLayout_2.addItem(spacerItem) self.shop_layout.addWidget(self.filter_scrollarea)
self.horizontalLayout.addWidget(self.filter_gb)
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
self.horizontalLayout_2.addWidget(self.scrollArea)
self.verticalLayout_7.addLayout(self.horizontalLayout_2)
self.retranslateUi(ShopWidget) self.retranslateUi(ShopWidget)
def retranslateUi(self, ShopWidget): def retranslateUi(self, ShopWidget):
_translate = QtCore.QCoreApplication.translate _translate = QtCore.QCoreApplication.translate
self.free_game_group_box.setTitle(_translate("ShopWidget", "Free Games")) self.discounts_group.setTitle(_translate("ShopWidget", "Discounts from your wishlist"))
self.discounts_gb.setTitle(_translate("ShopWidget", "Discounts from your wishlist")) self.games_group.setTitle(_translate("ShopWidget", "Games"))
self.filter_game_gb.setTitle(_translate("ShopWidget", "Games"))
self.filter_gb.setTitle(_translate("ShopWidget", "Filter"))
self.reset_button.setText(_translate("ShopWidget", "Reset")) self.reset_button.setText(_translate("ShopWidget", "Reset"))
self.price_gb.setTitle(_translate("ShopWidget", "Price")) self.price_group.setTitle(_translate("ShopWidget", "Price"))
self.none_price.setText(_translate("ShopWidget", "None")) self.none_price.setText(_translate("ShopWidget", "None"))
self.free_button.setText(_translate("ShopWidget", "Free")) self.free_button.setText(_translate("ShopWidget", "Free"))
self.under10.setText(_translate("ShopWidget", "Under 10")) self.under10.setText(_translate("ShopWidget", "Under 10"))
@ -156,10 +148,10 @@ class Ui_ShopWidget(object):
self.under30.setText(_translate("ShopWidget", "Under 30")) self.under30.setText(_translate("ShopWidget", "Under 30"))
self.above.setText(_translate("ShopWidget", "14.99 and above")) self.above.setText(_translate("ShopWidget", "14.99 and above"))
self.on_discount.setText(_translate("ShopWidget", "Discount")) self.on_discount.setText(_translate("ShopWidget", "Discount"))
self.platform_gb.setTitle(_translate("ShopWidget", "Platform")) self.platform_group.setTitle(_translate("ShopWidget", "Platform"))
self.genre_gb.setTitle(_translate("ShopWidget", "Genre")) self.genre_group.setTitle(_translate("ShopWidget", "Genre"))
self.type_gb.setTitle(_translate("ShopWidget", "Type")) self.type_group.setTitle(_translate("ShopWidget", "Type"))
self.others_gb.setTitle(_translate("ShopWidget", "Other Tags")) self.others_group.setTitle(_translate("ShopWidget", "Other Tags"))
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -1,238 +1,246 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>ShopWidget</class> <class>ShopWidget</class>
<widget class="QWidget" name="ShopWidget"> <widget class="QWidget" name="ShopWidget">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>850</width> <width>843</width>
<height>572</height> <height>569</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string notr="true">Form</string> <string notr="true">Store</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_7"> <layout class="QHBoxLayout" name="shop_layout">
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_2"> <widget class="QScrollArea" name="games_scrollarea">
<item> <property name="frameShape">
<widget class="QScrollArea" name="scrollArea"> <enum>QFrame::NoFrame</enum>
<property name="widgetResizable"> </property>
<bool>true</bool> <property name="frameShadow">
</property> <enum>QFrame::Plain</enum>
<widget class="QWidget" name="scrollAreaWidgetContents"> </property>
<property name="geometry"> <property name="sizeAdjustPolicy">
<rect> <enum>QAbstractScrollArea::AdjustToContents</enum>
<x>0</x> </property>
<y>0</y> <property name="widgetResizable">
<width>828</width> <bool>true</bool>
<height>550</height> </property>
</rect> <widget class="QWidget" name="games_container">
</property> <property name="geometry">
<layout class="QHBoxLayout" name="horizontalLayout"> <rect>
<item> <x>0</x>
<widget class="QWidget" name="widget" native="true"> <y>0</y>
<layout class="QVBoxLayout" name="verticalLayout"> <width>659</width>
<item> <height>557</height>
<widget class="QGroupBox" name="free_game_group_box"> </rect>
<property name="sizePolicy"> </property>
<sizepolicy hsizetype="Preferred" vsizetype="Maximum"> <layout class="QVBoxLayout" name="games_container_layout">
<horstretch>0</horstretch> <property name="leftMargin">
<verstretch>0</verstretch> <number>0</number>
</sizepolicy> </property>
</property> <property name="topMargin">
<property name="title"> <number>0</number>
<string>Free Games</string> </property>
</property> <property name="rightMargin">
<layout class="QVBoxLayout" name="verticalLayout_3"> <number>3</number>
<item> </property>
<widget class="QStackedWidget" name="free_stack"> <property name="bottomMargin">
<widget class="QWidget" name="free_widget"/> <number>0</number>
</widget> </property>
</item> <item>
</layout> <widget class="QScrollArea" name="free_games_scrollarea">
</widget> <property name="frameShape">
</item> <enum>QFrame::NoFrame</enum>
<item> </property>
<widget class="QGroupBox" name="discounts_gb"> <property name="frameShadow">
<property name="title"> <enum>QFrame::Plain</enum>
<string>Discounts from your wishlist</string> </property>
</property> <property name="verticalScrollBarPolicy">
<layout class="QVBoxLayout" name="verticalLayout_6"> <enum>Qt::ScrollBarAlwaysOff</enum>
<item> </property>
<widget class="QStackedWidget" name="discount_stack"> <property name="widgetResizable">
<widget class="QWidget" name="discount_widget"/> <bool>true</bool>
</widget> </property>
</item> <widget class="QWidget" name="free_games_container">
</layout> <property name="geometry">
</widget> <rect>
</item> <x>0</x>
<item> <y>0</y>
<widget class="QGroupBox" name="filter_game_gb"> <width>656</width>
<property name="title"> <height>182</height>
<string>Games</string> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_4"> </widget>
<item> </widget>
<widget class="QStackedWidget" name="game_stack"> </item>
<widget class="QWidget" name="game_widget"/> <item>
</widget> <widget class="QGroupBox" name="discounts_group">
</item> <property name="title">
</layout> <string>Discounts from your wishlist</string>
</widget> </property>
</item> <layout class="QVBoxLayout" name="discounts_layout">
</layout> <item>
</widget> <widget class="QStackedWidget" name="discount_stack">
</item> <widget class="QWidget" name="discount_widget"/>
<item> </widget>
<widget class="QGroupBox" name="filter_gb"> </item>
<property name="sizePolicy"> </layout>
<sizepolicy hsizetype="Minimum" vsizetype="Preferred"> </widget>
<horstretch>0</horstretch> </item>
<verstretch>0</verstretch> <item>
</sizepolicy> <widget class="QGroupBox" name="games_group">
</property> <property name="title">
<property name="minimumSize"> <string>Games</string>
<size> </property>
<width>150</width> <layout class="QVBoxLayout" name="games_layout">
<height>0</height> <item>
</size> <widget class="QStackedWidget" name="game_stack">
</property> <widget class="QWidget" name="game_widget"/>
<property name="maximumSize"> </widget>
<size> </item>
<width>16777215</width> </layout>
<height>16777215</height> </widget>
</size> </item>
</property> </layout>
<property name="title"> </widget>
<string>Filter</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="reset_button">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="price_gb">
<property name="title">
<string>Price</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QRadioButton" name="none_price">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="free_button">
<property name="text">
<string>Free</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under10">
<property name="text">
<string>Under 10</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under20">
<property name="text">
<string>Under 20</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under30">
<property name="text">
<string>Under 30</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="above">
<property name="text">
<string>14.99 and above</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="on_discount">
<property name="text">
<string>Discount</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="platform_gb">
<property name="title">
<string>Platform</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_13"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="genre_gb">
<property name="title">
<string>Genre</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_12"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="type_gb">
<property name="title">
<string>Type</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_11"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="others_gb">
<property name="title">
<string>Other Tags</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10"/>
</widget>
</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>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget> </widget>
<resources/> </item>
<connections/> <item>
<widget class="QScrollArea" name="filter_scrollarea">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="filter_container">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>162</width>
<height>553</height>
</rect>
</property>
<layout class="QVBoxLayout" name="filter_container_layout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<item>
<widget class="QPushButton" name="reset_button">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="price_group">
<property name="title">
<string>Price</string>
</property>
<layout class="QVBoxLayout" name="price_layout">
<item>
<widget class="QRadioButton" name="none_price">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="free_button">
<property name="text">
<string>Free</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under10">
<property name="text">
<string>Under 10</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under20">
<property name="text">
<string>Under 20</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="under30">
<property name="text">
<string>Under 30</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="above">
<property name="text">
<string>14.99 and above</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="on_discount">
<property name="text">
<string>Discount</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="platform_group">
<property name="title">
<string>Platform</string>
</property>
<layout class="QVBoxLayout" name="platfrom_layout"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="genre_group">
<property name="title">
<string>Genre</string>
</property>
<layout class="QVBoxLayout" name="genre_layout"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="type_group">
<property name="title">
<string>Type</string>
</property>
<layout class="QVBoxLayout" name="type_layout"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="others_group">
<property name="title">
<string>Other Tags</string>
</property>
<layout class="QVBoxLayout" name="others_layout"/>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui> </ui>

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/store/wishlist.ui' # Form implementation generated from reading ui file 'rare/ui/components/tabs/store/wishlist.ui'
# #
# Created by: PyQt5 UI code generator 5.15.4 # Created by: PyQt5 UI code generator 5.15.7
# #
# WARNING: Any manual changes made to this file will be lost when pyuic5 is # 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. # run again. Do not edit this file unless you know what you are doing.
@ -14,29 +14,19 @@ 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(736, 398) Wishlist.resize(527, 328)
Wishlist.setWindowTitle("StackedWidget") Wishlist.setWindowTitle("Wishlist")
self.page = QtWidgets.QWidget() self.verticalLayout = QtWidgets.QVBoxLayout(Wishlist)
self.page.setObjectName("page")
self.verticalLayout = QtWidgets.QVBoxLayout(self.page)
self.verticalLayout.setObjectName("verticalLayout") self.verticalLayout.setObjectName("verticalLayout")
self.scroll_area = QtWidgets.QScrollArea(self.page) self.title_label = QtWidgets.QLabel(Wishlist)
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 = QtGui.QFont()
font.setPointSize(15) font.setPointSize(15)
self.title_label.setFont(font) self.title_label.setFont(font)
self.title_label.setObjectName("title_label") self.title_label.setObjectName("title_label")
self.verticalLayout_2.addWidget(self.title_label) self.verticalLayout.addWidget(self.title_label)
self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.sort_label = QtWidgets.QLabel(self.scroll_widget) self.sort_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)
@ -44,29 +34,29 @@ class Ui_Wishlist(object):
self.sort_label.setSizePolicy(sizePolicy) self.sort_label.setSizePolicy(sizePolicy)
self.sort_label.setObjectName("sort_label") self.sort_label.setObjectName("sort_label")
self.horizontalLayout.addWidget(self.sort_label) self.horizontalLayout.addWidget(self.sort_label)
self.sort_cb = QtWidgets.QComboBox(self.scroll_widget) self.sort_cb = QtWidgets.QComboBox(Wishlist)
self.sort_cb.setObjectName("sort_cb") self.sort_cb.setObjectName("sort_cb")
self.sort_cb.addItem("") self.sort_cb.addItem("")
self.sort_cb.addItem("") self.sort_cb.addItem("")
self.sort_cb.addItem("") self.sort_cb.addItem("")
self.sort_cb.addItem("") self.sort_cb.addItem("")
self.horizontalLayout.addWidget(self.sort_cb) self.horizontalLayout.addWidget(self.sort_cb)
self.reverse = QtWidgets.QCheckBox(self.scroll_widget) self.reverse = QtWidgets.QCheckBox(Wishlist)
self.reverse.setObjectName("reverse") self.reverse.setObjectName("reverse")
self.horizontalLayout.addWidget(self.reverse) self.horizontalLayout.addWidget(self.reverse)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem) self.horizontalLayout.addItem(spacerItem)
self.filter_label = QtWidgets.QLabel(self.scroll_widget) self.filter_label = QtWidgets.QLabel(Wishlist)
self.filter_label.setObjectName("filter_label") self.filter_label.setObjectName("filter_label")
self.horizontalLayout.addWidget(self.filter_label) self.horizontalLayout.addWidget(self.filter_label)
self.filter_cb = QtWidgets.QComboBox(self.scroll_widget) self.filter_cb = QtWidgets.QComboBox(Wishlist)
self.filter_cb.setObjectName("filter_cb") self.filter_cb.setObjectName("filter_cb")
self.filter_cb.addItem("") self.filter_cb.addItem("")
self.filter_cb.addItem("") self.filter_cb.addItem("")
self.horizontalLayout.addWidget(self.filter_cb) self.horizontalLayout.addWidget(self.filter_cb)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1) self.horizontalLayout.addItem(spacerItem1)
self.reload_button = QtWidgets.QPushButton(self.scroll_widget) self.reload_button = QtWidgets.QPushButton(Wishlist)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
@ -75,18 +65,15 @@ class Ui_Wishlist(object):
self.reload_button.setText("") self.reload_button.setText("")
self.reload_button.setObjectName("reload_button") self.reload_button.setObjectName("reload_button")
self.horizontalLayout.addWidget(self.reload_button) self.horizontalLayout.addWidget(self.reload_button)
self.verticalLayout_2.addLayout(self.horizontalLayout) self.verticalLayout.addLayout(self.horizontalLayout)
self.list_layout = QtWidgets.QVBoxLayout() self.list_layout = QtWidgets.QVBoxLayout()
self.list_layout.setObjectName("list_layout") self.list_layout.setObjectName("list_layout")
self.verticalLayout_2.addLayout(self.list_layout) self.verticalLayout.addLayout(self.list_layout)
self.no_games_label = QtWidgets.QLabel(self.scroll_widget) self.no_games_label = QtWidgets.QLabel(Wishlist)
self.no_games_label.setObjectName("no_games_label") self.no_games_label.setObjectName("no_games_label")
self.verticalLayout_2.addWidget(self.no_games_label) self.verticalLayout.addWidget(self.no_games_label)
spacerItem2 = QtWidgets.QSpacerItem(379, 218, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) spacerItem2 = QtWidgets.QSpacerItem(379, 218, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem2) self.verticalLayout.addItem(spacerItem2)
self.scroll_area.setWidget(self.scroll_widget)
self.verticalLayout.addWidget(self.scroll_area)
Wishlist.addWidget(self.page)
self.retranslateUi(Wishlist) self.retranslateUi(Wishlist)
@ -108,7 +95,7 @@ class Ui_Wishlist(object):
if __name__ == "__main__": if __name__ == "__main__":
import sys import sys
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
Wishlist = QtWidgets.QStackedWidget() Wishlist = QtWidgets.QWidget()
ui = Ui_Wishlist() ui = Ui_Wishlist()
ui.setupUi(Wishlist) ui.setupUi(Wishlist)
Wishlist.show() Wishlist.show()

View file

@ -1,184 +1,163 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>Wishlist</class> <class>Wishlist</class>
<widget class="QStackedWidget" name="Wishlist"> <widget class="QWidget" name="Wishlist">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>736</width> <width>527</width>
<height>398</height> <height>328</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string notr="true">StackedWidget</string> <string notr="true">Wishlist</string>
</property> </property>
<widget class="QWidget" name="page"> <layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout"> <item>
<item> <widget class="QLabel" name="title_label">
<widget class="QScrollArea" name="scroll_area"> <property name="font">
<property name="widgetResizable"> <font>
<bool>true</bool> <pointsize>15</pointsize>
</property> </font>
<widget class="QWidget" name="scroll_widget"> </property>
<property name="geometry"> <property name="text">
<rect> <string>Wishlist</string>
<x>0</x> </property>
<y>0</y> </widget>
<width>716</width> </item>
<height>378</height> <item>
</rect> <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> </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>
<widget class="QCheckBox" name="reverse">
<property name="text">
<string>Reverse</string>
</property>
</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>
<item>
<widget class="QPushButton" name="reload_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</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>
</widget> </item>
</item> <item>
</layout> <widget class="QComboBox" name="sort_cb">
</widget> <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>
<widget class="QCheckBox" name="reverse">
<property name="text">
<string>Reverse</string>
</property>
</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>
<item>
<widget class="QPushButton" name="reload_button">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</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>
<resources/> <resources/>
<connections/> <connections/>

View file

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'rare/ui/components/tabs/store/wishlist_widget.ui' # Form implementation generated from reading ui file 'rare/ui/components/tabs/store/wishlist_widget.ui'
# #
# Created by: PyQt5 UI code generator 5.15.5 # Created by: PyQt5 UI code generator 5.15.7
# #
# WARNING: Any manual changes made to this file will be lost when pyuic5 is # 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. # run again. Do not edit this file unless you know what you are doing.
@ -15,7 +15,7 @@ class Ui_WishlistWidget(object):
def setupUi(self, WishlistWidget): def setupUi(self, WishlistWidget):
WishlistWidget.setObjectName("WishlistWidget") WishlistWidget.setObjectName("WishlistWidget")
WishlistWidget.resize(523, 172) WishlistWidget.resize(523, 172)
WishlistWidget.setWindowTitle("Form") WishlistWidget.setWindowTitle("WishlistWIdget")
self.horizontalLayout = QtWidgets.QHBoxLayout(WishlistWidget) self.horizontalLayout = QtWidgets.QHBoxLayout(WishlistWidget)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.widget = QtWidgets.QWidget(WishlistWidget) self.widget = QtWidgets.QWidget(WishlistWidget)

View file

@ -11,7 +11,7 @@
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string notr="true">Form</string> <string notr="true">WishlistWIdget</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>

View file

@ -17,7 +17,7 @@ from rare.utils.qt_requests import QtRequests
logger = getLogger("ExtraWidgets") logger = getLogger("ExtraWidgets")
# FIXME: move this?
class WaitingSpinner(QLabel): class WaitingSpinner(QLabel):
def __init__(self, parent=None): def __init__(self, parent=None):
super(WaitingSpinner, self).__init__(parent=parent) super(WaitingSpinner, self).__init__(parent=parent)