From 8fbf0bcacff7f7e9f0834d2641b205ebbd1eebfd Mon Sep 17 00:00:00 2001 From: Dummerle Date: Wed, 25 Aug 2021 00:01:53 +0200 Subject: [PATCH] Merge Browse and free games in one tab --- .../extra/{Console.py => console.py} | 0 .../game_widgets/base_installed_widget.py | 3 +- rare/components/tabs/settings/rare.py | 2 +- rare/components/tabs/shop/__init__.py | 11 +- rare/components/tabs/shop/browse_games.py | 130 -------- rare/components/tabs/shop/constants.py | 1 + rare/components/tabs/shop/game_info.py | 6 +- rare/components/tabs/shop/game_widgets.py | 11 - rare/components/tabs/shop/search_results.py | 1 - rare/components/tabs/shop/shop_api_core.py | 2 +- rare/components/tabs/shop/shop_widget.py | 204 +++++++++---- rare/ui/components/tabs/settings/rare.py | 194 +++++------- rare/ui/components/tabs/settings/rare.ui | 149 +++++---- .../components/tabs/store/shop_game_info.py | 12 +- .../components/tabs/store/shop_game_info.ui | 52 ++-- rare/ui/components/tabs/store/store.py | 146 +++++++-- rare/ui/components/tabs/store/store.ui | 289 ++++++++++++++---- 17 files changed, 713 insertions(+), 500 deletions(-) rename rare/components/extra/{Console.py => console.py} (100%) delete mode 100644 rare/components/tabs/shop/browse_games.py diff --git a/rare/components/extra/Console.py b/rare/components/extra/console.py similarity index 100% rename from rare/components/extra/Console.py rename to rare/components/extra/console.py diff --git a/rare/components/tabs/games/game_widgets/base_installed_widget.py b/rare/components/tabs/games/game_widgets/base_installed_widget.py index 46e80148..8eb0ee2a 100644 --- a/rare/components/tabs/games/game_widgets/base_installed_widget.py +++ b/rare/components/tabs/games/game_widgets/base_installed_widget.py @@ -7,9 +7,8 @@ from PyQt5.QtWidgets import QGroupBox, QMessageBox, QAction from custom_legendary.core import LegendaryCore from custom_legendary.models.game import InstalledGame -from rare import cache_dir from rare.components.dialogs.uninstall_dialog import UninstallDialog -from rare.components.extra.Console import ConsoleWindow +from rare.components.extra.console import ConsoleWindow from rare.utils import legendary_utils from rare.utils.utils import create_desktop_link diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index e5ac84df..c479d1e6 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -37,7 +37,7 @@ class RareSettings(QWidget, Ui_RareSettings): (self.notification, "notification", True), (self.save_size, "save_size", False), (self.log_games, "show_console", False), - (self.image_cache, "cache_images", True) + # (self.image_cache, "cache_images", True) ] self.settings = QSettings() diff --git a/rare/components/tabs/shop/__init__.py b/rare/components/tabs/shop/__init__.py index 513264df..2e84af9d 100644 --- a/rare/components/tabs/shop/__init__.py +++ b/rare/components/tabs/shop/__init__.py @@ -2,7 +2,6 @@ from PyQt5.QtWidgets import QStackedWidget, QTabWidget from custom_legendary.core import LegendaryCore from rare import cache_dir -from rare.components.tabs.shop.browse_games import BrowseGames from rare.components.tabs.shop.game_info import ShopGameInfo from rare.components.tabs.shop.search_results import SearchResults from rare.components.tabs.shop.shop_api_core import ShopApiCore @@ -19,12 +18,10 @@ class Shop(QStackedWidget): self.shop_api = ShopApiCore(self.core.egs.session.headers["Authorization"]) self.shop = ShopWidget(cache_dir, core, self.shop_api) - self.browse_games = BrowseGames(cache_dir, self.shop_api) self.store_tabs = QTabWidget() self.store_tabs.addTab(self.shop, self.tr("Games")) - self.store_tabs.addTab(self.browse_games, self.tr("Browse")) - self.store_tabs.tabBarClicked.connect(lambda x: self.browse_games.load() if x == 1 else None) + # self.store_tabs.addTab(self.browse_games, self.tr("Browse")) self.addWidget(self.store_tabs) @@ -40,11 +37,7 @@ class Shop(QStackedWidget): self.shop.show_info.connect(self.show_search_results) self.shop.show_game.connect(self.show_game_info) - self.browse_games.show_game.connect(self.show_game_info) - self.shop_api.update_wishlist.connect(self.update_wishlist) - - def update_wishlist(self): - self.shop.update_wishlist() + self.shop_api.update_wishlist.connect(self.shop.update_wishlist) def load(self): if not self.init: diff --git a/rare/components/tabs/shop/browse_games.py b/rare/components/tabs/shop/browse_games.py deleted file mode 100644 index cb125207..00000000 --- a/rare/components/tabs/shop/browse_games.py +++ /dev/null @@ -1,130 +0,0 @@ -import datetime -import logging -import random - -from PyQt5.QtCore import pyqtSignal -from PyQt5.QtWidgets import QWidget, QCheckBox, QVBoxLayout, QLabel - -from rare.components.tabs.shop.constants import Constants -from rare.components.tabs.shop.game_widgets import GameWidget -from rare.components.tabs.shop.shop_models import BrowseModel -from rare.ui.components.tabs.store.browse_games import Ui_browse_games -from rare.utils.extra_widgets import FlowLayout, WaitingSpinner -from rare.utils.utils import get_lang - -logger = logging.getLogger("BrowseGames") - - -class BrowseGames(QWidget, Ui_browse_games): - show_game = pyqtSignal(dict) - init = False - price = "" - tags = [] - types = [] - - def __init__(self, path, api_core): - super(BrowseGames, self).__init__() - self.setupUi(self) - self.api_core = api_core - self.path = path - self.games_widget = QWidget() - self.games_widget.setLayout(FlowLayout()) - self.games.setWidget(self.games_widget) - - self.stack.addWidget(WaitingSpinner()) - - self.clear_price.toggled.connect(lambda: self.prepare_request("") if self.clear_price.isChecked() else None) - self.free_button.toggled.connect(lambda: self.prepare_request("free") if self.free_button.isChecked() else None) - self.under10.toggled.connect( - lambda: self.prepare_request("[0, 1000)") if self.under10.isChecked() else None) - self.under20.toggled.connect( - lambda: self.prepare_request("[0, 2000)") if self.under20.isChecked() else None) - self.under30.toggled.connect( - lambda: self.prepare_request("[0, 3000)") if self.under30.isChecked() else None) - self.above.toggled.connect(lambda: self.prepare_request("[1499,]") if self.above.isChecked() else None) - self.on_discount.toggled.connect(lambda: self.prepare_request("sale") if self.on_discount.isChecked() else None) - - constants = Constants() - - for groupbox, variables in [(self.genre_gb, constants.categories), - (self.platform_gb, constants.platforms), - (self.others_gb, constants.others)]: - - for text, tag in variables: - checkbox = CheckBox(text, tag) - checkbox.activated.connect(lambda x: self.prepare_request(added_tag=x)) - checkbox.deactivated.connect(lambda x: self.prepare_request(removed_tag=x)) - groupbox.layout().addWidget(checkbox) - - for text, tag in constants.types: - checkbox = CheckBox(text, tag) - checkbox.activated.connect(lambda x: self.prepare_request(added_type=x)) - checkbox.deactivated.connect(lambda x: self.prepare_request(removed_type=x)) - self.type_gb.layout().addWidget(checkbox) - - def load(self): - if not self.init: - self.prepare_request() - self.init = True - - def prepare_request(self, price: str = None, added_tag: int = 0, removed_tag: int = 0, - added_type: str = "", removed_type: str = ""): - - if price is not None: - self.price = price - if added_tag != 0: - self.tags.append(added_tag) - if removed_tag != 0 and removed_tag in self.tags: - self.tags.remove(removed_tag) - - if added_type: - self.types.append(added_type) - if removed_type and removed_type in self.types: - self.types.remove(removed_type) - - locale = get_lang() - self.stack.setCurrentIndex(2) - date = f"[,{datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%X')}.{str(random.randint(0, 999)).zfill(3)}Z]" - - browse_model = BrowseModel(locale=locale, date=date, count=30, price=self.price) - browse_model.tag = "|".join(self.tags) - - if self.types: - browse_model.category = "|".join(self.types) - - self.api_core.browse_games(browse_model, self.show_games) - - def show_games(self, data): - QWidget().setLayout(self.games_widget.layout()) - - if data: - self.games_widget.setLayout(FlowLayout()) - - for game in data: - w = GameWidget(self.path, game, 275) - self.games_widget.layout().addWidget(w) - w.show_info.connect(self.show_game.emit) - - else: - self.games_widget.setLayout(QVBoxLayout()) - self.games_widget.layout().addWidget( - QLabel(self.tr("Could not get games matching the filter"))) - self.games_widget.layout().addStretch(1) - self.stack.setCurrentIndex(0) - - -class CheckBox(QCheckBox): - activated = pyqtSignal(str) - deactivated = pyqtSignal(str) - - def __init__(self, text, tag): - super(CheckBox, self).__init__(text) - self.tag = tag - - self.toggled.connect(self.handle_toggle) - - def handle_toggle(self): - if self.isChecked(): - self.activated.emit(self.tag) - else: - self.deactivated.emit(self.tag) diff --git a/rare/components/tabs/shop/constants.py b/rare/components/tabs/shop/constants.py index b424fb70..b9f108d9 100644 --- a/rare/components/tabs/shop/constants.py +++ b/rare/components/tabs/shop/constants.py @@ -107,3 +107,4 @@ search_query = "query searchStoreQuery($allowCountries: String, $category: Strin 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" 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" 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" +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" diff --git a/rare/components/tabs/shop/game_info.py b/rare/components/tabs/shop/game_info.py index 4e06e502..e2309e85 100644 --- a/rare/components/tabs/shop/game_info.py +++ b/rare/components/tabs/shop/game_info.py @@ -77,9 +77,9 @@ class ShopGameInfo(QWidget, Ui_shop_info): def add_to_wishlist(self): if not self.in_wishlist: return - self.api_core.add_to_wishlist(self.game.namespace, self.game.offer_id, - lambda success: self.wishlist_button.setText(self.tr("Remove from wishlist")) - if success else self.wishlist_button.setText("Something goes wrong")) + # self.api_core.add_to_wishlist(self.game.namespace, self.game.offer_id, + # lambda success: self.wishlist_button.setText(self.tr("Remove from wishlist")) + # if success else self.wishlist_button.setText("Something goes wrong")) else: self.api_core.remove_from_wishlist(self.game.namespace, self.game.offer_id, lambda success: self.wishlist_button.setVisible(False) diff --git a/rare/components/tabs/shop/game_widgets.py b/rare/components/tabs/shop/game_widgets.py index 6d5ef422..b2aa32b6 100644 --- a/rare/components/tabs/shop/game_widgets.py +++ b/rare/components/tabs/shop/game_widgets.py @@ -53,17 +53,6 @@ class GameWidget(QWidget): def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None: self.show_info.emit(self.json_info) - @classmethod - def from_request(cls, name, path, shop_api): - c = cls(path) - shop_api.search_game(name, c.handle_response) - return c - - def handle_response(self, data): - - data = data["data"]["Catalog"]["searchStore"]["elements"][0] - self.init_ui(data) - class GameWidgetDiscount(GameWidget): def __init__(self, *args, **kwargs): diff --git a/rare/components/tabs/shop/search_results.py b/rare/components/tabs/shop/search_results.py index 3585610b..f97180c9 100644 --- a/rare/components/tabs/shop/search_results.py +++ b/rare/components/tabs/shop/search_results.py @@ -40,7 +40,6 @@ class SearchResults(QStackedWidget): self.api_core.search_game(text, self.show_results) def show_results(self, results: dict): - results = results["data"]["Catalog"]["searchStore"]["elements"] QVBoxLayout().addWidget(self.widget) self.widget = QWidget() self.layout = FlowLayout() diff --git a/rare/components/tabs/shop/shop_api_core.py b/rare/components/tabs/shop/shop_api_core.py index 516dd79f..4a27ac3d 100644 --- a/rare/components/tabs/shop/shop_api_core.py +++ b/rare/components/tabs/shop/shop_api_core.py @@ -60,7 +60,7 @@ class ShopApiCore(QObject): self.manager.post(graphql_url, payload, lambda data: self._handle_search(data, handle_func)) def _handle_search(self, data, handle_func): - handle_func(data) + handle_func(data["data"]["Catalog"]["searchStore"]["elements"]) def browse_games(self, browse_model: BrowseModel, handle_func): if self.browse_active: diff --git a/rare/components/tabs/shop/shop_widget.py b/rare/components/tabs/shop/shop_widget.py index 45150592..979036f4 100644 --- a/rare/components/tabs/shop/shop_widget.py +++ b/rare/components/tabs/shop/shop_widget.py @@ -1,14 +1,15 @@ import datetime import logging +import random -from PyQt5.QtCore import Qt, pyqtSignal, QStringListModel -from PyQt5.QtNetwork import QNetworkAccessManager -from PyQt5.QtWidgets import QWidget, QCompleter, QGroupBox, QHBoxLayout, QScrollArea +from PyQt5.QtCore import Qt, pyqtSignal +from PyQt5.QtWidgets import QWidget, QCompleter, QGroupBox, QHBoxLayout, QScrollArea, QCheckBox, QVBoxLayout, QLabel from custom_legendary.core import LegendaryCore from rare.components.tabs.shop import ShopApiCore -from rare.components.tabs.shop.constants import search_query +from rare.components.tabs.shop.constants import Constants from rare.components.tabs.shop.game_widgets import GameWidget, GameWidgetDiscount +from rare.components.tabs.shop.shop_models import BrowseModel from rare.ui.components.tabs.store.store import Ui_ShopWidget from rare.utils.extra_widgets import WaitingSpinner, FlowLayout, ButtonLineEdit from rare.utils.utils import get_lang @@ -31,26 +32,35 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): self.setupUi(self) self.path = path self.core = core - self.shop_api = shop_api - self.manager = QNetworkAccessManager() - self.free_games_widget = QWidget() - self.free_games_widget.setLayout(FlowLayout()) + self.api_core = shop_api + self.price = "" + self.tags = [] + self.types = [] + self.locale = get_lang() + self.update_games_allowed = True + self.free_games_now = QGroupBox(self.tr("Free Games")) self.free_games_now.setLayout(QHBoxLayout()) - self.free_games_widget.layout().addWidget(self.free_games_now) + self.free_widget.layout().addWidget(self.free_games_now) self.coming_free_games = QGroupBox(self.tr("Free Games next week")) self.coming_free_games.setLayout(QHBoxLayout()) - self.free_games_widget.layout().addWidget(self.coming_free_games) - self.free_games_stack.addWidget(WaitingSpinner()) - self.free_games_stack.addWidget(self.free_games_widget) + self.free_game_group_box.layout().addWidget(self.coming_free_games) + self.free_stack.addWidget(WaitingSpinner()) + self.free_stack.setCurrentIndex(1) + + self.discount_widget.setLayout(FlowLayout()) + self.discount_stack.addWidget(WaitingSpinner()) + self.discount_stack.setCurrentIndex(1) + + self.game_widget.setLayout(FlowLayout()) + self.game_stack.addWidget(WaitingSpinner()) + self.game_stack.setCurrentIndex(1) self.completer = QCompleter() self.completer.setCaseSensitivity(Qt.CaseInsensitive) - self.data = [] - self.search_bar = ButtonLineEdit("fa.search", placeholder_text=self.tr("Search Games")) - self.scrollAreaWidgetContents.layout().insertWidget(0, self.search_bar) + self.layout().insertWidget(0, self.search_bar) # self.search_bar.textChanged.connect(self.search_games) @@ -58,46 +68,32 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): self.search_bar.returnPressed.connect(self.show_search_results) self.search_bar.buttonClicked.connect(self.show_search_results) + self.init_filter() + # self.search_bar.textChanged.connect(self.load_completer) - self.wishlist_gb.setLayout(FlowLayout()) - self.wishlist_gb.setVisible(False) - self.locale = get_lang() - - def load_completer(self, text): - if text != "": - - payload = { - "query": search_query, - "variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", - "count": 20, - "country": self.locale.upper(), "keywords": text, "locale": self.locale, - "sortDir": "DESC", - "allowCountries": self.locale.upper(), - "start": 0, "tag": "", "withMapping": False, "withPrice": True} - } - self.search_request_manager.post("https://www.epicgames.com/graphql", payload) def load(self): # load free games - self.shop_api.get_free_games(self.add_free_games) + self.api_core.get_free_games(self.add_free_games) # load wishlist - self.shop_api.get_wishlist(self.add_wishlist_items) + self.api_core.get_wishlist(self.add_wishlist_items) + self.prepare_request() def update_wishlist(self): - self.shop_api.get_wishlist(self.add_wishlist_items) + self.api_core.get_wishlist(self.add_wishlist_items) def add_wishlist_items(self, wishlist): - QWidget().setLayout(self.wishlist_gb.layout()) + QWidget().setLayout(self.discount_widget.layout()) - self.wishlist_gb.setLayout(FlowLayout()) + self.discount_widget.setLayout(FlowLayout()) discounts = 0 for game in wishlist: if game["offer"]["price"]["totalPrice"]["discount"] > 0: w = GameWidgetDiscount(self.path, game["offer"]) w.show_info.connect(self.show_game.emit) - self.wishlist_gb.layout().addWidget(w) + self.discount_widget.layout().addWidget(w) discounts += 1 - self.wishlist_gb.setVisible(discounts > 0) + self.discounts_gb.setVisible(discounts > 0) def add_free_games(self, free_games): date = datetime.datetime.now() @@ -108,7 +104,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): coming_free_games.append(game) continue try: - # parse datetime + # parse datetime to check if game is next week or now try: end_date = datetime.datetime.strptime( game["promotions"]["upcomingPromotionalOffers"][0]["promotionalOffers"][0]["endDate"], @@ -131,6 +127,7 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): '%Y-%m-%dT%H:%M:%S.%fZ') except Exception as e: print(e) + logger.warning(str(e)) continue except TypeError: @@ -140,30 +137,133 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): free_games_now.append(game) elif start_date > date: coming_free_games.append(game) - + # free games now for free_game in free_games_now: - w = GameWidget(self.path, free_game) + w = GameWidgetDiscount(self.path, free_game) w.show_info.connect(self.show_game.emit) self.free_games_now.layout().addWidget(w) self.free_game_widgets.append(w) self.free_games_now.layout().addStretch(1) + + # free games next week for free_game in coming_free_games: w = GameWidget(self.path, free_game) if free_game["title"] != "Mystery Game": w.show_info.connect(self.show_game.emit) self.coming_free_games.layout().addWidget(w) - self.free_game_widgets.append(w) - self.coming_free_games.layout().addStretch(1) # self.coming_free_games.setFixedWidth(int(40 + len(coming_free_games) * 300)) - self.free_games_stack.setCurrentIndex(1) - - def set_completer(self, search_data): - search_data = search_data["data"]["Catalog"]["searchStore"]["elements"] - titles = [i.get("title") for i in search_data] - model = QStringListModel() - model.setStringList(titles) - self.completer.setModel(model) + self.free_stack.setCurrentIndex(0) def show_search_results(self): self.show_info.emit(self.search_bar.text()) + + def init_filter(self): + + self.none_price.toggled.connect(lambda: self.prepare_request("") if self.none_price.isChecked() else None) + self.free_button.toggled.connect(lambda: self.prepare_request("free") if self.free_button.isChecked() else None) + self.under10.toggled.connect( + lambda: self.prepare_request("[0, 1000)") if self.under10.isChecked() else None) + self.under20.toggled.connect( + lambda: self.prepare_request("[0, 2000)") if self.under20.isChecked() else None) + self.under30.toggled.connect( + lambda: self.prepare_request("[0, 3000)") if self.under30.isChecked() else None) + self.above.toggled.connect(lambda: self.prepare_request("[1499,]") if self.above.isChecked() else None) + self.on_discount.toggled.connect(lambda: self.prepare_request("sale") if self.on_discount.isChecked() else None) + + constants = Constants() + + self.checkboxes = [] + + for groupbox, variables in [(self.genre_gb, constants.categories), + (self.platform_gb, constants.platforms), + (self.others_gb, constants.others), + (self.type_gb, constants.types)]: + + for text, tag in variables: + checkbox = CheckBox(text, tag) + checkbox.activated.connect(lambda x: self.prepare_request(added_tag=x)) + checkbox.deactivated.connect(lambda x: self.prepare_request(removed_tag=x)) + groupbox.layout().addWidget(checkbox) + self.checkboxes.append(checkbox) + self.reset_button.clicked.connect(self.reset_filters) + + def reset_filters(self): + self.update_games_allowed = False + for cb in self.checkboxes: + cb.setChecked(False) + self.none_price.setChecked(True) + + self.tags = [] + self.types = [] + self.update_games_allowed = True + self.prepare_request("") + + def prepare_request(self, price: str = "", added_tag: int = 0, removed_tag: int = 0, + added_type: str = "", removed_type: str = ""): + if not self.update_games_allowed: + return + + self.price = price + if added_tag != 0: + self.tags.append(added_tag) + if removed_tag != 0 and removed_tag in self.tags: + self.tags.remove(removed_tag) + + if added_type: + self.types.append(added_type) + if removed_type and removed_type in self.types: + self.types.remove(removed_type) + if (self.types or self.price) or self.tags: + self.free_game_group_box.setVisible(False) + self.discounts_gb.setVisible(False) + else: + self.free_game_group_box.setVisible(True) + if len(self.discounts_gb.layout().children()) > 0: + self.discounts_gb.setVisible(True) + + locale = get_lang() + self.game_stack.setCurrentIndex(1) + date = f"[,{datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%dT%X')}.{str(random.randint(0, 999)).zfill(3)}Z]" + + browse_model = BrowseModel(locale=locale, date=date, count=20, price=self.price) + browse_model.tag = "|".join(self.tags) + + if self.types: + browse_model.category = "|".join(self.types) + + self.api_core.browse_games(browse_model, self.show_games) + + def show_games(self, data): + QWidget().setLayout(self.game_widget.layout()) + if data: + self.game_widget.setLayout(FlowLayout()) + + for game in data: + w = GameWidget(self.path, game, 275) + self.game_widget.layout().addWidget(w) + w.show_info.connect(self.show_game.emit) + + else: + self.game_widget.setLayout(QVBoxLayout()) + self.game_widget.layout().addWidget( + QLabel(self.tr("Could not get games matching the filter"))) + self.game_widget.layout().addStretch(1) + self.game_stack.setCurrentIndex(0) + + +class CheckBox(QCheckBox): + activated = pyqtSignal(str) + deactivated = pyqtSignal(str) + + def __init__(self, text, tag): + super(CheckBox, self).__init__(text) + self.tag = tag + + self.toggled.connect(self.handle_toggle) + + def handle_toggle(self): + if self.isChecked(): + self.activated.emit(self.tag) + else: + self.deactivated.emit(self.tag) diff --git a/rare/ui/components/tabs/settings/rare.py b/rare/ui/components/tabs/settings/rare.py index 6f97a33c..bc12ac26 100644 --- a/rare/ui/components/tabs/settings/rare.py +++ b/rare/ui/components/tabs/settings/rare.py @@ -14,93 +14,12 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_RareSettings(object): def setupUi(self, RareSettings): RareSettings.setObjectName("RareSettings") - RareSettings.resize(694, 532) - + RareSettings.resize(544, 532) self.rare_layout = QtWidgets.QGridLayout(RareSettings) self.rare_layout.setObjectName("rare_layout") - self.settings_group = QtWidgets.QGroupBox(RareSettings) - self.settings_group.setObjectName("settings_group") - self.behavior_layout = QtWidgets.QGridLayout(self.settings_group) - self.behavior_layout.setObjectName("behavior_layout") - self.confirm_start = QtWidgets.QCheckBox(self.settings_group) - self.confirm_start.setObjectName("confirm_start") - self.behavior_layout.addWidget(self.confirm_start, 2, 0, 1, 1) - self.notification = QtWidgets.QCheckBox(self.settings_group) - self.notification.setObjectName("notification") - self.behavior_layout.addWidget(self.notification, 4, 0, 1, 1) - self.auto_update = QtWidgets.QCheckBox(self.settings_group) - self.auto_update.setObjectName("auto_update") - self.behavior_layout.addWidget(self.auto_update, 1, 0, 1, 1) - - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.behavior_layout.addItem(spacerItem, 2, 1, 2, 1) - self.auto_update = QtWidgets.QCheckBox(self.settings_group) - self.auto_update.setObjectName("auto_update") - self.behavior_layout.addWidget(self.auto_update, 1, 0, 1, 1) - self.save_size = QtWidgets.QCheckBox(self.settings_group) - self.save_size.setObjectName("save_size") - self.behavior_layout.addWidget(self.save_size, 5, 0, 1, 1) - self.auto_sync_cloud = QtWidgets.QCheckBox(self.settings_group) - self.auto_sync_cloud.setObjectName("auto_sync_cloud") - self.behavior_layout.addWidget(self.auto_sync_cloud, 3, 0, 1, 1) - self.notification = QtWidgets.QCheckBox(self.settings_group) - self.notification.setObjectName("notification") - self.behavior_layout.addWidget(self.notification, 4, 0, 1, 1) - self.sys_tray = QtWidgets.QCheckBox(self.settings_group) - self.sys_tray.setObjectName("sys_tray") - self.behavior_layout.addWidget(self.sys_tray, 0, 0, 1, 1) - self.log_games = QtWidgets.QCheckBox(self.settings_group) - self.log_games.setObjectName("log_games") - self.behavior_layout.addWidget(self.log_games, 6, 0, 1, 1) - self.confirm_start = QtWidgets.QCheckBox(self.settings_group) - self.confirm_start.setObjectName("confirm_start") - self.behavior_layout.addWidget(self.confirm_start, 2, 0, 1, 1) - self.sys_tray = QtWidgets.QCheckBox(self.settings_group) - self.sys_tray.setObjectName("sys_tray") - self.behavior_layout.addWidget(self.sys_tray, 0, 0, 1, 1) - self.image_cache = QtWidgets.QCheckBox(self.settings_group) - self.image_cache.setObjectName("image_cache") - self.behavior_layout.addWidget(self.image_cache, 6, 0, 1, 1) - self.rare_layout.addWidget(self.settings_group, 2, 0, 1, 1, QtCore.Qt.AlignTop) - self.interface_group = QtWidgets.QGroupBox(RareSettings) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.interface_group.sizePolicy().hasHeightForWidth()) - self.interface_group.setSizePolicy(sizePolicy) - self.interface_group.setObjectName("interface_group") - self.interface_layout = QtWidgets.QGridLayout(self.interface_group) - self.interface_layout.setObjectName("interface_layout") - self.style_label = QtWidgets.QLabel(self.interface_group) - self.style_label.setObjectName("style_label") - self.interface_layout.addWidget(self.style_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.interface_layout.addItem(spacerItem1, 1, 2, 1, 1) - self.lang_select = QtWidgets.QComboBox(self.interface_group) - self.lang_select.setObjectName("lang_select") - self.interface_layout.addWidget(self.lang_select, 0, 1, 1, 1) - self.color_select = QtWidgets.QComboBox(self.interface_group) - self.color_select.setObjectName("color_select") - self.color_select.addItem("") - self.interface_layout.addWidget(self.color_select, 1, 1, 1, 1) - self.style_select = QtWidgets.QComboBox(self.interface_group) - self.style_select.setObjectName("style_select") - self.style_select.addItem("") - self.interface_layout.addWidget(self.style_select, 2, 1, 1, 1) - self.lang_label = QtWidgets.QLabel(self.interface_group) - self.lang_label.setObjectName("lang_label") - self.interface_layout.addWidget(self.lang_label, 0, 0, 1, 1, QtCore.Qt.AlignRight) - self.color_label = QtWidgets.QLabel(self.interface_group) - self.color_label.setObjectName("color_label") - self.interface_layout.addWidget(self.color_label, 1, 0, 1, 1, QtCore.Qt.AlignRight) - self.interface_info = QtWidgets.QLabel(self.interface_group) - font = QtGui.QFont() - font.setItalic(True) - self.interface_info.setFont(font) - self.interface_info.setWordWrap(True) - self.interface_info.setObjectName("interface_info") - self.interface_layout.addWidget(self.interface_info, 3, 0, 1, 3) - self.rare_layout.addWidget(self.interface_group, 1, 0, 1, 1, QtCore.Qt.AlignTop) + self.rpc_layout = QtWidgets.QVBoxLayout() + self.rpc_layout.setObjectName("rpc_layout") + self.rare_layout.addLayout(self.rpc_layout, 1, 1, 1, 1) self.groupBox = QtWidgets.QGroupBox(RareSettings) self.groupBox.setObjectName("groupBox") self.verticalLayout = QtWidgets.QVBoxLayout(self.groupBox) @@ -112,11 +31,34 @@ class Ui_RareSettings(object): self.startmenu_link.setObjectName("startmenu_link") self.verticalLayout.addWidget(self.startmenu_link) self.rare_layout.addWidget(self.groupBox, 2, 1, 1, 1, QtCore.Qt.AlignTop) - self.rpc_layout = QtWidgets.QVBoxLayout() - self.rpc_layout.setObjectName("rpc_layout") - self.rare_layout.addLayout(self.rpc_layout, 1, 1, 1, 1) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.rare_layout.addItem(spacerItem2, 3, 0, 1, 2) + self.settings_group = QtWidgets.QGroupBox(RareSettings) + self.settings_group.setObjectName("settings_group") + self.behavior_layout = QtWidgets.QGridLayout(self.settings_group) + self.behavior_layout.setObjectName("behavior_layout") + self.confirm_start = QtWidgets.QCheckBox(self.settings_group) + self.confirm_start.setObjectName("confirm_start") + self.behavior_layout.addWidget(self.confirm_start, 2, 0, 1, 1) + spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.behavior_layout.addItem(spacerItem, 2, 1, 2, 1) + self.auto_sync_cloud = QtWidgets.QCheckBox(self.settings_group) + self.auto_sync_cloud.setObjectName("auto_sync_cloud") + self.behavior_layout.addWidget(self.auto_sync_cloud, 3, 0, 1, 1) + self.sys_tray = QtWidgets.QCheckBox(self.settings_group) + self.sys_tray.setObjectName("sys_tray") + self.behavior_layout.addWidget(self.sys_tray, 0, 0, 1, 1) + self.save_size = QtWidgets.QCheckBox(self.settings_group) + self.save_size.setObjectName("save_size") + self.behavior_layout.addWidget(self.save_size, 5, 0, 1, 1) + self.notification = QtWidgets.QCheckBox(self.settings_group) + self.notification.setObjectName("notification") + self.behavior_layout.addWidget(self.notification, 4, 0, 1, 1) + self.auto_update = QtWidgets.QCheckBox(self.settings_group) + self.auto_update.setObjectName("auto_update") + self.behavior_layout.addWidget(self.auto_update, 1, 0, 1, 1) + self.log_games = QtWidgets.QCheckBox(self.settings_group) + self.log_games.setObjectName("log_games") + self.behavior_layout.addWidget(self.log_games, 6, 0, 1, 1) + self.rare_layout.addWidget(self.settings_group, 2, 0, 1, 1, QtCore.Qt.AlignTop) self.log_dir_group = QtWidgets.QGroupBox(RareSettings) self.log_dir_group.setObjectName("log_dir_group") self.log_dir_layout = QtWidgets.QVBoxLayout(self.log_dir_group) @@ -132,16 +74,50 @@ class Ui_RareSettings(object): self.log_dir_size_label.setWordWrap(True) self.log_dir_size_label.setObjectName("log_dir_size_label") self.log_dir_layout.addWidget(self.log_dir_size_label) - self.rare_layout.addWidget(self.log_dir_group, 0, 1, 1, 1) + self.rare_layout.addWidget(self.log_dir_group, 0, 1, 1, 1, QtCore.Qt.AlignTop) + self.interface_group = QtWidgets.QGroupBox(RareSettings) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.interface_group.sizePolicy().hasHeightForWidth()) + self.interface_group.setSizePolicy(sizePolicy) + self.interface_group.setObjectName("interface_group") + self.interface_layout = QtWidgets.QGridLayout(self.interface_group) + self.interface_layout.setObjectName("interface_layout") + self.color_select = QtWidgets.QComboBox(self.interface_group) + self.color_select.setObjectName("color_select") + self.color_select.addItem("") + self.interface_layout.addWidget(self.color_select, 1, 1, 1, 1) + self.style_label = QtWidgets.QLabel(self.interface_group) + self.style_label.setObjectName("style_label") + self.interface_layout.addWidget(self.style_label, 2, 0, 1, 1, QtCore.Qt.AlignRight) + self.style_select = QtWidgets.QComboBox(self.interface_group) + self.style_select.setObjectName("style_select") + self.style_select.addItem("") + self.interface_layout.addWidget(self.style_select, 2, 1, 1, 1) + spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.interface_layout.addItem(spacerItem1, 1, 2, 1, 1) + self.interface_info = QtWidgets.QLabel(self.interface_group) + font = QtGui.QFont() + font.setItalic(True) + self.interface_info.setFont(font) + self.interface_info.setWordWrap(True) + self.interface_info.setObjectName("interface_info") + self.interface_layout.addWidget(self.interface_info, 3, 0, 1, 3) + self.lang_label = QtWidgets.QLabel(self.interface_group) + self.lang_label.setObjectName("lang_label") + self.interface_layout.addWidget(self.lang_label, 0, 0, 1, 1, QtCore.Qt.AlignRight) + self.lang_select = QtWidgets.QComboBox(self.interface_group) + self.lang_select.setObjectName("lang_select") + self.interface_layout.addWidget(self.lang_select, 0, 1, 1, 1) + self.color_label = QtWidgets.QLabel(self.interface_group) + self.color_label.setObjectName("color_label") + self.interface_layout.addWidget(self.color_label, 1, 0, 1, 1, QtCore.Qt.AlignRight) + self.rare_layout.addWidget(self.interface_group, 1, 0, 1, 1, QtCore.Qt.AlignTop) self.img_dir_group = QtWidgets.QGroupBox(RareSettings) self.img_dir_group.setObjectName("img_dir_group") self.img_dir_layout = QtWidgets.QVBoxLayout(self.img_dir_group) self.img_dir_layout.setObjectName("img_dir_layout") - self.rare_layout.addWidget(self.img_dir_group, 0, 0, 1, 1) - self.label = QtWidgets.QLabel(self.img_dir_group) - self.label.setWordWrap(True) - self.label.setObjectName("label") - self.img_dir_layout.addWidget(self.label) self.rare_layout.addWidget(self.img_dir_group, 0, 0, 1, 1, QtCore.Qt.AlignTop) spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.rare_layout.addItem(spacerItem2, 3, 0, 1, 2) @@ -152,40 +128,28 @@ class Ui_RareSettings(object): def retranslateUi(self, RareSettings): _translate = QtCore.QCoreApplication.translate RareSettings.setWindowTitle(_translate("RareSettings", "RareSettings")) + self.groupBox.setTitle(_translate("RareSettings", "Shortcuts")) + self.desktop_link.setText(_translate("RareSettings", "Create Desktop link")) + self.startmenu_link.setText(_translate("RareSettings", "Create start menu link")) self.settings_group.setTitle(_translate("RareSettings", "Behavior")) self.confirm_start.setText(_translate("RareSettings", "Confirm game launch")) - self.auto_update.setText(_translate("RareSettings", "Update games on application startup")) - self.save_size.setText(_translate("RareSettings", "Restore window size on application startup")) self.auto_sync_cloud.setText(_translate("RareSettings", "Automatically sync with cloud")) - self.notification.setText(_translate("RareSettings", "Show notification on download completion")) self.sys_tray.setText(_translate("RareSettings", "Exit to System tray")) - self.log_games.setText(_translate("RareSettings", "Show console for game debug")) + self.save_size.setText(_translate("RareSettings", "Restore window size on application startup")) self.notification.setText(_translate("RareSettings", "Show notification on download completion")) self.auto_update.setText(_translate("RareSettings", "Update games on application startup")) - self.save_size.setText(_translate("RareSettings", "Restore window size on application startup")) - self.auto_sync_cloud.setText(_translate("RareSettings", "Automatically sync with cloud")) - self.confirm_start.setText(_translate("RareSettings", "Confirm game launch")) - self.sys_tray.setText(_translate("RareSettings", "Exit to System tray")) - self.image_cache.setText(_translate("RareSettings", "Cache images in store")) + self.log_games.setText(_translate("RareSettings", "Open console for game output")) self.log_dir_group.setTitle(_translate("RareSettings", "Logs")) self.log_dir_open_button.setText(_translate("RareSettings", "Open Log directory")) self.log_dir_clean_button.setText(_translate("RareSettings", "Clean Log directory")) self.interface_group.setTitle(_translate("RareSettings", "Interface")) - self.style_label.setText(_translate("RareSettings", "Style Sheet")) self.color_select.setItemText(0, _translate("RareSettings", "None")) + self.style_label.setText(_translate("RareSettings", "Style Sheet")) self.style_select.setItemText(0, _translate("RareSettings", "None")) + self.interface_info.setText(_translate("RareSettings", "Restart Rare to apply.")) self.lang_label.setText(_translate("RareSettings", "Language")) self.color_label.setText(_translate("RareSettings", "Color Scheme")) - self.interface_info.setText(_translate("RareSettings", "Restart Rare to apply.")) - self.groupBox.setTitle(_translate("RareSettings", "Shortcuts")) - self.desktop_link.setText(_translate("RareSettings", "Create Desktop link")) - self.startmenu_link.setText(_translate("RareSettings", "Create start menu link")) - self.log_dir_group.setTitle(_translate("RareSettings", "Logs")) - self.log_dir_open_button.setText(_translate("RareSettings", "Open Log directory")) - self.log_dir_clean_button.setText(_translate("RareSettings", "Clean Log directory")) self.img_dir_group.setTitle(_translate("RareSettings", "Image Cache Directory")) - self.label.setText(_translate("RareSettings", - "To change image directory, edit XDG_DATA_HOME variable. To change cache directory edit XDG_CACHE_HOME variable")) if __name__ == "__main__": diff --git a/rare/ui/components/tabs/settings/rare.ui b/rare/ui/components/tabs/settings/rare.ui index 377f874c..238f0325 100644 --- a/rare/ui/components/tabs/settings/rare.ui +++ b/rare/ui/components/tabs/settings/rare.ui @@ -2,16 +2,24 @@ RareSettings - - RareSettings - - - - - - - - + + + 0 + 0 + 544 + 532 + + + + RareSettings + + + + + + + + Shortcuts @@ -37,63 +45,70 @@ Behavior - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Restore window size on application startup - - - - - - - Show notification on download completion - - - - - - - Automatically sync with cloud - - - - - - - Confirm game launch - - - - - - - Update games on application startup - - - - - - - Exit to System tray - - - - + + + + + Confirm game launch + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Automatically sync with cloud + + + + + + + Exit to System tray + + + + + + + Restore window size on application startup + + + + + + + Show notification on download completion + + + + + + + Update games on application startup + + + + + + + Open console for game output + + + + diff --git a/rare/ui/components/tabs/store/shop_game_info.py b/rare/ui/components/tabs/store/shop_game_info.py index 80a089f5..a4bed440 100644 --- a/rare/ui/components/tabs/store/shop_game_info.py +++ b/rare/ui/components/tabs/store/shop_game_info.py @@ -8,7 +8,7 @@ # 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_shop_info(object): @@ -28,11 +28,17 @@ class Ui_shop_info(object): self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName("verticalLayout_2") self.title = QtWidgets.QLabel(shop_info) - self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + font = QtGui.QFont() + font.setPointSize(18) + self.title.setFont(font) + self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.title.setObjectName("title") self.verticalLayout_2.addWidget(self.title) self.dev = QtWidgets.QLabel(shop_info) - self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + font = QtGui.QFont() + font.setPointSize(14) + self.dev.setFont(font) + self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.dev.setObjectName("dev") self.verticalLayout_2.addWidget(self.dev) self.owned_label = QtWidgets.QLabel(shop_info) diff --git a/rare/ui/components/tabs/store/shop_game_info.ui b/rare/ui/components/tabs/store/shop_game_info.ui index 82437277..88ea4608 100644 --- a/rare/ui/components/tabs/store/shop_game_info.ui +++ b/rare/ui/components/tabs/store/shop_game_info.ui @@ -34,23 +34,33 @@ - - Error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - + + + 18 + + + + Error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + - - - TextLabel - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - + + + + 14 + + + + TextLabel + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + @@ -76,13 +86,13 @@ - - - - TextLabel - - - + + + + TextLabel + + + diff --git a/rare/ui/components/tabs/store/store.py b/rare/ui/components/tabs/store/store.py index d27baade..ef6ac08e 100644 --- a/rare/ui/components/tabs/store/store.py +++ b/rare/ui/components/tabs/store/store.py @@ -14,42 +14,150 @@ from PyQt5 import QtCore, QtWidgets class Ui_ShopWidget(object): def setupUi(self, ShopWidget): ShopWidget.setObjectName("ShopWidget") - ShopWidget.resize(697, 362) - self.verticalLayout = QtWidgets.QVBoxLayout(ShopWidget) - self.verticalLayout.setObjectName("verticalLayout") + ShopWidget.resize(850, 572) + self.verticalLayout_7 = QtWidgets.QVBoxLayout(ShopWidget) + self.verticalLayout_7.setObjectName("verticalLayout_7") + self.horizontalLayout_2 = QtWidgets.QHBoxLayout() + self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.scrollArea = QtWidgets.QScrollArea(ShopWidget) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() - self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 677, 342)) + self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 828, 550)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") - self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.free_game_group_box = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) + self.horizontalLayout = QtWidgets.QHBoxLayout(self.scrollAreaWidgetContents) + self.horizontalLayout.setObjectName("horizontalLayout") + self.widget = QtWidgets.QWidget(self.scrollAreaWidgetContents) + self.widget.setObjectName("widget") + self.verticalLayout = QtWidgets.QVBoxLayout(self.widget) + self.verticalLayout.setObjectName("verticalLayout") + self.free_game_group_box = QtWidgets.QGroupBox(self.widget) self.free_game_group_box.setObjectName("free_game_group_box") - self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box) + self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.free_game_group_box) + self.verticalLayout_3.setObjectName("verticalLayout_3") + self.free_stack = QtWidgets.QStackedWidget(self.free_game_group_box) + self.free_stack.setObjectName("free_stack") + self.free_widget = QtWidgets.QWidget() + self.free_widget.setObjectName("free_widget") + self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.free_widget) + self.verticalLayout_8.setObjectName("verticalLayout_8") + self.free_stack.addWidget(self.free_widget) + 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_widget = QtWidgets.QWidget() + self.discount_widget.setObjectName("discount_widget") + self.discount_stack.addWidget(self.discount_widget) + self.verticalLayout_6.addWidget(self.discount_stack) + self.verticalLayout.addWidget(self.discounts_gb) + self.filter_game_gb = QtWidgets.QGroupBox(self.widget) + self.filter_game_gb.setObjectName("filter_game_gb") + self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.filter_game_gb) + self.verticalLayout_4.setObjectName("verticalLayout_4") + self.game_stack = QtWidgets.QStackedWidget(self.filter_game_gb) + self.game_stack.setObjectName("game_stack") + self.game_widget = QtWidgets.QWidget() + self.game_widget.setObjectName("game_widget") + self.game_stack.addWidget(self.game_widget) + self.verticalLayout_4.addWidget(self.game_stack) + self.verticalLayout.addWidget(self.filter_game_gb) + self.horizontalLayout.addWidget(self.widget) + self.filter_gb = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.filter_gb.sizePolicy().hasHeightForWidth()) + self.filter_gb.setSizePolicy(sizePolicy) + self.filter_gb.setMinimumSize(QtCore.QSize(150, 0)) + self.filter_gb.setMaximumSize(QtCore.QSize(16777215, 16777215)) + self.filter_gb.setObjectName("filter_gb") + self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.filter_gb) self.verticalLayout_2.setObjectName("verticalLayout_2") - self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box) - self.free_games_stack.setObjectName("free_games_stack") - self.verticalLayout_2.addWidget(self.free_games_stack) - self.verticalLayout_3.addWidget(self.free_game_group_box) - self.wishlist_gb = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) - self.wishlist_gb.setObjectName("wishlist_gb") - self.verticalLayout_3.addWidget(self.wishlist_gb) + self.reset_button = QtWidgets.QPushButton(self.filter_gb) + self.reset_button.setObjectName("reset_button") + self.verticalLayout_2.addWidget(self.reset_button) + self.price_gb = QtWidgets.QGroupBox(self.filter_gb) + self.price_gb.setObjectName("price_gb") + self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.price_gb) + self.verticalLayout_9.setObjectName("verticalLayout_9") + self.none_price = QtWidgets.QRadioButton(self.price_gb) + self.none_price.setChecked(True) + self.none_price.setObjectName("none_price") + self.verticalLayout_9.addWidget(self.none_price) + self.free_button = QtWidgets.QRadioButton(self.price_gb) + self.free_button.setObjectName("free_button") + self.verticalLayout_9.addWidget(self.free_button) + self.under10 = QtWidgets.QRadioButton(self.price_gb) + self.under10.setObjectName("under10") + self.verticalLayout_9.addWidget(self.under10) + self.under20 = QtWidgets.QRadioButton(self.price_gb) + self.under20.setObjectName("under20") + self.verticalLayout_9.addWidget(self.under20) + self.under30 = QtWidgets.QRadioButton(self.price_gb) + self.under30.setObjectName("under30") + self.verticalLayout_9.addWidget(self.under30) + self.above = QtWidgets.QRadioButton(self.price_gb) + self.above.setObjectName("above") + self.verticalLayout_9.addWidget(self.above) + self.on_discount = QtWidgets.QRadioButton(self.price_gb) + self.on_discount.setObjectName("on_discount") + self.verticalLayout_9.addWidget(self.on_discount) + self.verticalLayout_2.addWidget(self.price_gb) + self.platform_gb = QtWidgets.QGroupBox(self.filter_gb) + self.platform_gb.setObjectName("platform_gb") + self.verticalLayout_13 = QtWidgets.QVBoxLayout(self.platform_gb) + self.verticalLayout_13.setObjectName("verticalLayout_13") + self.verticalLayout_2.addWidget(self.platform_gb) + self.genre_gb = QtWidgets.QGroupBox(self.filter_gb) + self.genre_gb.setObjectName("genre_gb") + self.verticalLayout_12 = QtWidgets.QVBoxLayout(self.genre_gb) + self.verticalLayout_12.setObjectName("verticalLayout_12") + self.verticalLayout_2.addWidget(self.genre_gb) + self.type_gb = QtWidgets.QGroupBox(self.filter_gb) + self.type_gb.setObjectName("type_gb") + self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.type_gb) + self.verticalLayout_11.setObjectName("verticalLayout_11") + self.verticalLayout_2.addWidget(self.type_gb) + self.others_gb = QtWidgets.QGroupBox(self.filter_gb) + self.others_gb.setObjectName("others_gb") + self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.others_gb) + self.verticalLayout_10.setObjectName("verticalLayout_10") + self.verticalLayout_2.addWidget(self.others_gb) spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.verticalLayout_3.addItem(spacerItem) + self.verticalLayout_2.addItem(spacerItem) + self.horizontalLayout.addWidget(self.filter_gb) self.scrollArea.setWidget(self.scrollAreaWidgetContents) - self.verticalLayout.addWidget(self.scrollArea) + self.horizontalLayout_2.addWidget(self.scrollArea) + self.verticalLayout_7.addLayout(self.horizontalLayout_2) self.retranslateUi(ShopWidget) - self.free_games_stack.setCurrentIndex(-1) QtCore.QMetaObject.connectSlotsByName(ShopWidget) def retranslateUi(self, ShopWidget): _translate = QtCore.QCoreApplication.translate ShopWidget.setWindowTitle(_translate("ShopWidget", "Form")) self.free_game_group_box.setTitle(_translate("ShopWidget", "Free Games")) - self.wishlist_gb.setTitle(_translate("ShopWidget", "Discounts from your wishlist")) + self.discounts_gb.setTitle(_translate("ShopWidget", "Discounts from your wishlist")) + self.filter_game_gb.setTitle(_translate("ShopWidget", "Games")) + self.filter_gb.setTitle(_translate("ShopWidget", "Filter")) + self.reset_button.setText(_translate("ShopWidget", "Reset")) + self.price_gb.setTitle(_translate("ShopWidget", "Price")) + self.none_price.setText(_translate("ShopWidget", "None")) + self.free_button.setText(_translate("ShopWidget", "Free")) + self.under10.setText(_translate("ShopWidget", "Under 10")) + self.under20.setText(_translate("ShopWidget", "Under 20")) + self.under30.setText(_translate("ShopWidget", "Under 30")) + self.above.setText(_translate("ShopWidget", "14.99 and above")) + self.on_discount.setText(_translate("ShopWidget", "Discount")) + self.platform_gb.setTitle(_translate("ShopWidget", "Platform")) + self.genre_gb.setTitle(_translate("ShopWidget", "Genre")) + self.type_gb.setTitle(_translate("ShopWidget", "Type")) + self.others_gb.setTitle(_translate("ShopWidget", "Other Tags")) if __name__ == "__main__": diff --git a/rare/ui/components/tabs/store/store.ui b/rare/ui/components/tabs/store/store.ui index d215e5a2..b9ddb5f8 100644 --- a/rare/ui/components/tabs/store/store.ui +++ b/rare/ui/components/tabs/store/store.ui @@ -3,73 +3,232 @@ ShopWidget - - 0 - 0 - 697 - 362 - + + 0 + 0 + 850 + 572 + - - Form - - - - - - true + + Form - - - - 0 - 0 - 677 - 342 - - - - - - - Free Games - - - - - - -1 - - - - - - - - - - Discounts from your wishlist - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - + + + + + + + true + + + + + 0 + 0 + 828 + 550 + + + + + + + + + + Free Games + + + + + + + + + + + + + + + + Discounts from your wishlist + + + + + + + + + + + + + + Games + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 150 + 0 + + + + + 16777215 + 16777215 + + + + Filter + + + + + + Reset + + + + + + + Price + + + + + + None + + + true + + + + + + + Free + + + + + + + Under 10 + + + + + + + Under 20 + + + + + + + Under 30 + + + + + + + 14.99 and above + + + + + + + Discount + + + + + + + + + + Platform + + + + + + + + Genre + + + + + + + + Type + + + + + + + + Other Tags + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + +