Give the banner widget a buddy and the ability to show/hide the buddy when clicked.

This commit is contained in:
Lukas Brübach 2025-01-22 13:14:58 +01:00
parent b80acd9864
commit 9089eeecf2
3 changed files with 40 additions and 10 deletions

View file

@ -13,9 +13,10 @@ EdhrecCommanderApiResponseCardListDisplayWidget::EdhrecCommanderApiResponseCardL
layout = new QVBoxLayout(this); layout = new QVBoxLayout(this);
setLayout(layout); setLayout(layout);
auto header = new BannerWidget(toDisplay.header, Qt::Vertical, 80, this); auto header = new BannerWidget(this, toDisplay.header);
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff); flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
header->setBuddy(flowWidget);
foreach (EdhrecCommanderApiResponseCardDetails card_detail, toDisplay.cardViews) { foreach (EdhrecCommanderApiResponseCardDetails card_detail, toDisplay.cardViews) {
auto widget = new EdhrecCommanderApiResponseCardDetailsDisplayWidget(flowWidget, card_detail); auto widget = new EdhrecCommanderApiResponseCardDetailsDisplayWidget(flowWidget, card_detail);

View file

@ -1,9 +1,11 @@
#include "banner_widget.h" #include "banner_widget.h"
#include <QVBoxLayout>
#include <QPainter>
#include <QLinearGradient>
BannerWidget::BannerWidget(const QString& text, Qt::Orientation orientation, int transparency, QWidget* parent) #include <QLinearGradient>
#include <QMouseEvent>
#include <QPainter>
#include <QVBoxLayout>
BannerWidget::BannerWidget(QWidget *parent, const QString &text, Qt::Orientation orientation, int transparency)
: QWidget(parent), gradientOrientation(orientation), transparency(qBound(0, transparency, 100)) : QWidget(parent), gradientOrientation(orientation), transparency(qBound(0, transparency, 100))
{ {
// Create the banner label and set properties // Create the banner label and set properties
@ -19,6 +21,20 @@ BannerWidget::BannerWidget(const QString& text, Qt::Orientation orientation, int
// Set minimum height for the widget // Set minimum height for the widget
setMinimumHeight(100); setMinimumHeight(100);
connect(this, &BannerWidget::buddyVisibilityChanged, this, &BannerWidget::toggleBuddyVisibility);
}
void BannerWidget::mousePressEvent(QMouseEvent *event)
{
QWidget::mousePressEvent(event);
emit buddyVisibilityChanged();
}
void BannerWidget::toggleBuddyVisibility() const
{
if (buddy) {
buddy->setVisible(!buddy->isVisible());
}
} }
void BannerWidget::paintEvent(QPaintEvent* event) void BannerWidget::paintEvent(QPaintEvent* event)

View file

@ -1,15 +1,23 @@
#ifndef BANNER_WIDGET_H #ifndef BANNER_WIDGET_H
#define BANNER_WIDGET_H #define BANNER_WIDGET_H
#include <QWidget>
#include <QLabel> #include <QLabel>
#include <QWidget>
class BannerWidget : public QWidget class BannerWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit BannerWidget(const QString& text, Qt::Orientation orientation = Qt::Vertical, int transparency = 80, QWidget* parent = nullptr); explicit BannerWidget(QWidget *parent,
const QString &text,
Qt::Orientation orientation = Qt::Vertical,
int transparency = 80);
void mousePressEvent(QMouseEvent *event);
void setBuddy(QWidget *_buddy)
{
buddy = _buddy;
}
protected: protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;
@ -18,6 +26,11 @@ private:
QLabel *bannerLabel; QLabel *bannerLabel;
Qt::Orientation gradientOrientation; Qt::Orientation gradientOrientation;
int transparency; // Transparency percentage for the gradient int transparency; // Transparency percentage for the gradient
QWidget *buddy;
signals:
void buddyVisibilityChanged();
private slots:
void toggleBuddyVisibility() const;
}; };
#endif // BANNER_WIDGET_H #endif // BANNER_WIDGET_H