#include "mediasectionwidget.h" #include "horizontallistviewgallery.h" #include #include #include #include #include #include MediaSectionWidget::MediaSectionWidget(const QString& title, QEmbyCore* core, QWidget* parent) : QWidget(parent), m_core(core) { setObjectName("media-section"); setStyleSheet("QWidget#media-section { background: transparent; }"); auto *layout = new QVBoxLayout(this); layout->setContentsMargins(40, 20, 40, 0); layout->setSpacing(0); auto *headerContainer = new QWidget(this); headerContainer->setObjectName("section-header"); headerContainer->setStyleSheet("#section-header { background: transparent; }"); m_headerLayout = new QHBoxLayout(headerContainer); m_headerLayout->setContentsMargins(0, 0, 0, 0); m_headerLayout->setSpacing(12); m_titleLabel = new QLabel(title, headerContainer); m_titleLabel->setObjectName("detail-section-title"); m_headerLayout->addWidget(m_titleLabel); m_headerLayout->addStretch(); m_gallery = new HorizontalListViewGallery(core, this); m_gallery->listView()->setProperty("isHorizontalListView", true); connect(m_gallery, &HorizontalListViewGallery::itemClicked, this, &MediaSectionWidget::itemClicked); connect(m_gallery, &HorizontalListViewGallery::playRequested, this, &MediaSectionWidget::playRequested); connect(m_gallery, &HorizontalListViewGallery::favoriteRequested, this, &MediaSectionWidget::favoriteRequested); connect(m_gallery, &HorizontalListViewGallery::moreMenuRequested, this, &MediaSectionWidget::moreMenuRequested); layout->addWidget(headerContainer); layout->addWidget(m_gallery); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); hide(); } HorizontalListViewGallery* MediaSectionWidget::gallery() const { return m_gallery; } void MediaSectionWidget::setTitle(const QString& title) { m_titleLabel->setText(title); } void MediaSectionWidget::setHeaderWidget(QWidget* widget) { if (m_headerWidget && m_headerWidget != widget) { m_headerWidget->hide(); m_headerWidget = nullptr; } if (widget) { m_headerWidget = widget; if (m_headerLayout->indexOf(m_headerWidget) < 0) { m_headerLayout->insertWidget(1, m_headerWidget); } m_headerWidget->show(); } } void MediaSectionWidget::setCardStyle(MediaCardDelegate::CardStyle style) { m_gallery->setCardStyle(style); } void MediaSectionWidget::setGalleryHeight(int height) { m_gallery->setFixedHeight(height); } void MediaSectionWidget::setTileSize(const QSize &size) { m_gallery->setTileSize(size); } void MediaSectionWidget::clear() { m_gallery->setItems(QList()); hide(); } void MediaSectionWidget::setItems(const QList& items) { if (items.isEmpty()) { hide(); } else { m_gallery->setItems(items); show(); } } void MediaSectionWidget::updateItem(const MediaItem& item) { m_gallery->updateItem(item); } QCoro::Task MediaSectionWidget::loadAsync(FetchFunction fetcher) { if (!fetcher) co_return; QPointer safeThis(this); try { QList items = co_await fetcher(); if (safeThis) { safeThis->setItems(items); Q_EMIT safeThis->dataLoaded(items.size()); } } catch(...) { if (safeThis) { safeThis->hide(); } } }