1
0
Fork 0
mirror of synced 2024-06-16 17:44:44 +12:00
Rare/rare/components/tabs/store/search_results.py

93 lines
3.5 KiB
Python
Raw Normal View History

from PyQt5.QtCore import Qt
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QMouseEvent
2021-12-24 22:09:50 +13:00
from PyQt5.QtWidgets import (
QWidget,
QSizePolicy,
QLabel, QScrollArea,
2021-12-24 22:09:50 +13:00
)
from rare.shared.image_manager import ImageSize
from rare.utils.qt_requests import QtRequestManager
2022-06-22 11:38:04 +12:00
from rare.widgets.flow_layout import FlowLayout
from rare.widgets.side_tab import SideTabContents
from .image_widget import ShopImageWidget
class SearchResults(QScrollArea, SideTabContents):
show_info = pyqtSignal(dict)
def __init__(self, api_core, parent=None):
super(SearchResults, self).__init__(parent=parent)
self.implements_scrollarea = True
2021-08-23 08:22:17 +12:00
self.api_core = api_core
self.results_container = QWidget(self)
self.results_container.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.results_layout = FlowLayout(self.results_container)
self.setWidget(self.results_container)
self.setWidgetResizable(True)
# self.main_layout = QVBoxLayout(self)
# self.main_layout.setContentsMargins(0, 0, 0, 0)
# self.main_layout.addWidget(self.results_scrollarea)
2021-08-08 09:42:40 +12:00
self.setEnabled(False)
2021-08-08 09:42:40 +12:00
def load_results(self, text: str):
self.setEnabled(False)
2021-08-08 09:42:40 +12:00
if text != "":
2021-08-23 08:22:17 +12:00
self.api_core.search_game(text, self.show_results)
2021-08-08 09:42:40 +12:00
def show_results(self, results: dict):
for w in self.results_container.findChildren(QLabel, options=Qt.FindDirectChildrenOnly):
self.results_layout.removeWidget(w)
w.deleteLater()
for w in self.results_container.findChildren(SearchResultItem, options=Qt.FindDirectChildrenOnly):
self.results_layout.removeWidget(w)
w.deleteLater()
2021-06-30 10:38:42 +12:00
if not results:
self.results_layout.addWidget(QLabel(self.tr("No results found")))
2021-06-30 10:38:42 +12:00
else:
for res in results:
w = SearchResultItem(self.api_core.cached_manager, res, parent=self.results_container)
2021-06-30 10:38:42 +12:00
w.show_info.connect(self.show_info.emit)
self.results_layout.addWidget(w)
self.results_layout.update()
self.setEnabled(True)
class SearchResultItem(ShopImageWidget):
show_info = pyqtSignal(dict)
def __init__(self, manager: QtRequestManager, result: dict, parent=None):
super(SearchResultItem, self).__init__(manager, parent=parent)
self.setFixedSize(ImageSize.Normal)
self.ui.setupUi(self)
for img in result["keyImages"]:
if img["type"] in ["DieselStoreFrontTall", "OfferImageTall", "Thumbnail", "ProductLogo"]:
self.fetchPixmap(img["url"])
break
else:
print("No image found")
2021-06-10 09:12:49 +12:00
self.ui.title_label.setText(result["title"])
2021-12-24 22:09:50 +13:00
price = result["price"]["totalPrice"]["fmtPrice"]["originalPrice"]
discount_price = result["price"]["totalPrice"]["fmtPrice"]["discountPrice"]
self.ui.price_label.setText(f'{price if price != "0" else self.tr("Free")}')
if price != discount_price:
font = self.ui.price_label.font()
font.setStrikeOut(True)
self.ui.price_label.setFont(font)
self.ui.discount_label.setText(f'{discount_price if discount_price != "0" else self.tr("Free")}')
else:
self.ui.discount_label.setVisible(False)
self.res = result
def mousePressEvent(self, a0: QMouseEvent) -> None:
if a0.button() == Qt.LeftButton:
a0.accept()
self.show_info.emit(self.res)