Change splitter size, include some colored labels.

This commit is contained in:
Lukas Brübach 2025-01-22 14:41:31 +01:00
parent cb71b33a2b
commit 280d1aca26
3 changed files with 46 additions and 18 deletions

View file

@ -1,15 +1,40 @@
#include "edhrec_commander_api_response_card_details_display_widget.h" #include "edhrec_commander_api_response_card_details_display_widget.h"
#include "../../../../game/cards/card_database_manager.h" #include "../../../../game/cards/card_database_manager.h"
EdhrecCommanderApiResponseCardDetailsDisplayWidget::EdhrecCommanderApiResponseCardDetailsDisplayWidget( EdhrecCommanderApiResponseCardDetailsDisplayWidget::EdhrecCommanderApiResponseCardDetailsDisplayWidget(
QWidget *parent, QWidget *parent,
EdhrecCommanderApiResponseCardDetails toDisplay) const EdhrecCommanderApiResponseCardDetails &_toDisplay)
: QWidget(parent) : QWidget(parent), toDisplay(_toDisplay)
{ {
layout = new QHBoxLayout(this); layout = new QVBoxLayout(this);
setLayout(layout); setLayout(layout);
cardPictureWidget = new CardInfoPictureWidget(this); cardPictureWidget = new CardInfoPictureWidget(this);
cardPictureWidget->setCard(CardDatabaseManager::getInstance()->getCard(toDisplay.name)); cardPictureWidget->setCard(CardDatabaseManager::getInstance()->getCard(toDisplay.name));
layout->addWidget(cardPictureWidget);
label = new QLabel(this);
label->setText(toDisplay.label);
label->setAlignment(Qt::AlignHCenter);
// Set label color based on inclusion rate
int inclusionRate = (toDisplay.numDecks * 100) / toDisplay.potentialDecks;
QColor labelColor;
if (inclusionRate <= 30) {
labelColor = QColor(255, 0, 0); // Red
} else if (inclusionRate <= 60) {
int red = 255 - ((inclusionRate - 30) * 2);
int green = (inclusionRate - 30) * 4; // Adjust green to make the transition smoother
labelColor = QColor(red, green, 0); // purple-ish
} else if (inclusionRate <= 90) {
int green = (inclusionRate - 60) * 5; // Increase green
labelColor = QColor(100, green, 100); // Green shades
} else {
labelColor = QColor(100, 200, 100); // Dark Green
}
label->setStyleSheet(QString("color: %1").arg(labelColor.name()));
layout->addWidget(cardPictureWidget);
layout->addWidget(label);
} }

View file

@ -6,17 +6,20 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QWidget> #include <QWidget>
#include <QLabel>
class EdhrecCommanderApiResponseCardDetailsDisplayWidget : public QWidget class EdhrecCommanderApiResponseCardDetailsDisplayWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit EdhrecCommanderApiResponseCardDetailsDisplayWidget(QWidget *parent, explicit EdhrecCommanderApiResponseCardDetailsDisplayWidget(QWidget *parent,
EdhrecCommanderApiResponseCardDetails toDisplay); const EdhrecCommanderApiResponseCardDetails &_toDisplay);
private: private:
QHBoxLayout *layout; EdhrecCommanderApiResponseCardDetails toDisplay;
QVBoxLayout *layout;
CardInfoPictureWidget *cardPictureWidget; CardInfoPictureWidget *cardPictureWidget;
QLabel *label;
}; };
#endif // EDHREC_COMMANDER_API_RESPONSE_CARD_DETAILS_DISPLAY_WIDGET_H #endif // EDHREC_COMMANDER_API_RESPONSE_CARD_DETAILS_DISPLAY_WIDGET_H

View file

@ -1,6 +1,5 @@
#include "edhrec_commander_api_response_display_widget.h" #include "edhrec_commander_api_response_display_widget.h"
#include "../../../../game/cards/card_database_manager.h"
#include "../../../ui/widgets/cards/card_info_picture_widget.h" #include "../../../ui/widgets/cards/card_info_picture_widget.h"
#include "api_response/edhrec_commander_api_response.h" #include "api_response/edhrec_commander_api_response.h"
#include "edhrec_commander_api_response_card_list_display_widget.h" #include "edhrec_commander_api_response_card_list_display_widget.h"
@ -21,12 +20,13 @@ EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget
cardDisplayLayout = new QVBoxLayout(this); cardDisplayLayout = new QVBoxLayout(this);
// Create a QSplitter to hold the ListView and ScrollArea side by side // Create a QSplitter to hold the ListView and ScrollArea holding CardListdisplayWidgets side by side
auto splitter = new QSplitter(this); auto splitter = new QSplitter(this);
splitter->setOrientation(Qt::Horizontal); // Horizontal splitter to divide ListView and ScrollArea splitter->setOrientation(Qt::Horizontal);
// Create the list view auto listView = new QListView(splitter);
auto listView = new QListView(splitter); // Set list view as part of the splitter listView->setMinimumWidth(50);
listView->setMaximumWidth(150);
auto listModel = new QStringListModel(this); auto listModel = new QStringListModel(this);
QStringList widgetNames; QStringList widgetNames;
@ -44,16 +44,16 @@ EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget
} }
// Create a QScrollArea to hold the card display widgets // Create a QScrollArea to hold the card display widgets
scrollArea = new QScrollArea(splitter); // Set scroll area as part of the splitter scrollArea = new QScrollArea(splitter);
scrollArea->setWidgetResizable(true); scrollArea->setWidgetResizable(true);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// Set the cardDisplayLayout inside the scroll area // Set the cardDisplayLayout inside the scroll area
auto scrollWidget = new QWidget(scrollArea); // Create a QWidget to contain the layout auto scrollWidget = new QWidget(scrollArea);
scrollWidget->setLayout(cardDisplayLayout); // Set the layout for the widget scrollWidget->setLayout(cardDisplayLayout);
connect(splitter, &QSplitter::splitterMoved, this, &EdhrecCommanderApiResponseDisplayWidget::onSplitterChange); connect(splitter, &QSplitter::splitterMoved, this, &EdhrecCommanderApiResponseDisplayWidget::onSplitterChange);
scrollArea->setWidget(scrollWidget); // Set the widget inside the scroll area scrollArea->setWidget(scrollWidget);
// Configure the list view // Configure the list view
listModel->setStringList(widgetNames); listModel->setStringList(widgetNames);
@ -77,10 +77,10 @@ EdhrecCommanderApiResponseDisplayWidget::EdhrecCommanderApiResponseDisplayWidget
}); });
// Add splitter to the main layout // Add splitter to the main layout
splitter->addWidget(listView); // Add listView to the splitter splitter->addWidget(listView);
splitter->addWidget(scrollArea); // Add scrollArea to the splitter splitter->addWidget(scrollArea);
layout->addWidget(splitter); // Add the splitter to the main layout layout->addWidget(splitter);
} }
void EdhrecCommanderApiResponseDisplayWidget::onSplitterChange() void EdhrecCommanderApiResponseDisplayWidget::onSplitterChange()