99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtCore import pyqtSignal
|
|
from PyQt5.QtGui import QMouseEvent
|
|
from PyQt5.QtWidgets import (
|
|
QWidget,
|
|
QSizePolicy,
|
|
QLabel, QScrollArea,
|
|
)
|
|
|
|
from rare.shared.image_manager import ImageSize
|
|
from rare.utils.qt_requests import QtRequestManager
|
|
from rare.widgets.flow_layout import FlowLayout
|
|
from rare.widgets.side_tab import SideTabContents
|
|
from .image_widget import ShopImageWidget
|
|
|
|
from .api.debug import DebugDialog
|
|
from .api.models.response import CatalogOfferModel
|
|
|
|
|
|
class SearchResults(QScrollArea, SideTabContents):
|
|
show_info = pyqtSignal(CatalogOfferModel)
|
|
|
|
def __init__(self, api_core, parent=None):
|
|
super(SearchResults, self).__init__(parent=parent)
|
|
self.implements_scrollarea = True
|
|
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)
|
|
|
|
self.setEnabled(False)
|
|
|
|
def load_results(self, text: str):
|
|
self.setEnabled(False)
|
|
if text != "":
|
|
self.api_core.search_game(text, self.show_results)
|
|
|
|
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()
|
|
|
|
if not results:
|
|
self.results_layout.addWidget(QLabel(self.tr("No results found")))
|
|
else:
|
|
for res in results:
|
|
w = SearchResultItem(self.api_core.cached_manager, res, parent=self.results_container)
|
|
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(CatalogOfferModel)
|
|
|
|
def __init__(self, manager: QtRequestManager, catalog_game: CatalogOfferModel, parent=None):
|
|
super(SearchResultItem, self).__init__(manager, parent=parent)
|
|
self.setFixedSize(ImageSize.Normal)
|
|
self.ui.setupUi(self)
|
|
|
|
key_images = catalog_game.key_images
|
|
self.fetchPixmap(key_images.for_dimensions(self.width(), self.height()).url)
|
|
|
|
self.ui.title_label.setText(catalog_game.title)
|
|
|
|
price = catalog_game.price.total_price["fmtPrice"]["originalPrice"]
|
|
discount_price = catalog_game.price.total_price["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.catalog_game = catalog_game
|
|
|
|
def mousePressEvent(self, a0: QMouseEvent) -> None:
|
|
if a0.button() == Qt.LeftButton:
|
|
a0.accept()
|
|
self.show_info.emit(self.catalog_game)
|
|
if a0.button() == Qt.RightButton:
|
|
a0.accept()
|
|
dialog = DebugDialog(self.catalog_game.__dict__, self)
|
|
dialog.show()
|
|
|