Took 22 minutes
This commit is contained in:
Lukas Brübach 2025-12-05 23:27:45 +01:00
parent 7c7f2dd8d5
commit 66667a68cd
5 changed files with 127 additions and 2 deletions

View file

@ -282,6 +282,8 @@ set(cockatrice_SOURCES
src/interface/widgets/tabs/visual_deck_storage/tab_deck_storage_visual.cpp
src/interface/key_signals.cpp
src/interface/logger.cpp
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.cpp
src/interface/widgets/tabs/api/edhrec/display/commander/edhrec_commander_api_response_bracket_navigation_widget.h
)
add_subdirectory(sounds)

View file

@ -0,0 +1,90 @@
#include "edhrec_commander_api_response_bracket_navigation_widget.h"
EdhrecCommanderApiResponseBracketNavigationWidget::EdhrecCommanderApiResponseBracketNavigationWidget(QWidget *parent)
: QWidget(parent)
{
layout = new QGridLayout(this);
setLayout(layout);
gameChangerLabel = new QLabel(this);
layout->addWidget(gameChangerLabel, 1, 0, 1, 2);
for (int i = 0; i < gameChangerOptions.length(); i++) {
QString option = gameChangerOptions.at(i);
QString label = option.isEmpty() ? "All" : option.at(0).toUpper() + option.mid(1);
QPushButton *optionButton = new QPushButton(label, this);
gameChangerButtons[option] = optionButton;
layout->addWidget(optionButton, 2, i);
connect(optionButton, &QPushButton::clicked, this, [=, this]() {
selectedGameChanger = option;
updateOptionButtonSelection(gameChangerButtons, option);
});
}
updateOptionButtonSelection(gameChangerButtons, "");
retranslateUi();
// applyOptionsFromUrl(baseUrl);
}
void EdhrecCommanderApiResponseBracketNavigationWidget::retranslateUi()
{
gameChangerLabel->setText(tr("Game Changers"));
}
void EdhrecCommanderApiResponseBracketNavigationWidget::applyOptionsFromUrl(const QString &url)
{
QString cleanedUrl = url;
// Remove base and file extension
if (cleanedUrl.startsWith("https://json.edhrec.com/pages/")) {
cleanedUrl = cleanedUrl.mid(QString("https://json.edhrec.com/pages/").length());
}
if (cleanedUrl.endsWith(".json")) {
cleanedUrl.chop(5);
}
// Expecting something like: "commanders/the-ur-dragon/core/expensive"
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
QStringList parts = cleanedUrl.split('/', Qt::SkipEmptyParts);
#else
QStringList parts = cleanedUrl.split('/', QString::SkipEmptyParts);
#endif
if (parts.size() < 2) {
return;
}
QString commanderName = parts[1];
QString gameChangerOpt, budgetOpt;
// Define valid sets
QSet<QString> validGameChangers = {"exhibition", "core", "upgraded", "optimized", "cedh"};
// Check remaining parts after commander
for (int i = 2; i < parts.size(); ++i) {
QString part = parts[i].toLower();
if (validGameChangers.contains(part)) {
gameChangerOpt = part;
}
}
// Validate and apply
if (!gameChangerButtons.contains(gameChangerOpt)) {
gameChangerOpt.clear();
}
selectedGameChanger = gameChangerOpt;
updateOptionButtonSelection(gameChangerButtons, selectedGameChanger);
}
void EdhrecCommanderApiResponseBracketNavigationWidget::updateOptionButtonSelection(
QMap<QString, QPushButton *> &buttons,
const QString &selectedKey)
{
for (auto it = buttons.begin(); it != buttons.end(); ++it) {
it.value()->setStyleSheet(it.key() == selectedKey ? "background-color: lightblue; font-weight: bold;" : "");
}
}

View file

@ -0,0 +1,33 @@
#ifndef COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BRACKET_NAVIGATION_WIDGET_H
#define COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BRACKET_NAVIGATION_WIDGET_H
#include <QGridLayout>
#include <QLabel>
#include <QPushButton>
#include <QWidget>
class EdhrecCommanderApiResponseBracketNavigationWidget : public QWidget
{
Q_OBJECT
public:
explicit EdhrecCommanderApiResponseBracketNavigationWidget(QWidget *parent);
void retranslateUi();
void applyOptionsFromUrl(const QString &url);
signals:
void requestUrl(QString url);
private:
QGridLayout *layout;
QLabel *gameChangerLabel;
QStringList gameChangerOptions = {"", "exhibition", "core", "upgraded", "optimized", "cedh"};
QString selectedGameChanger;
QMap<QString, QPushButton *> gameChangerButtons;
void updateOptionButtonSelection(QMap<QString, QPushButton *> &buttons, const QString &selectedKey);
QString buildComboUrl() const;
};
#endif // COCKATRICE_EDHREC_COMMANDER_API_RESPONSE_BRACKET_NAVIGATION_WIDGET_H

View file

@ -111,7 +111,7 @@ void EdhrecCommanderApiResponseNavigationWidget::applyOptionsFromUrl(const QStri
QString gameChangerOpt, budgetOpt;
// Define valid sets
QSet<QString> validGameChangers = {"core", "upgraded", "optimized"};
QSet<QString> validGameChangers = {"exhibition", "core", "upgraded", "optimized", "cedh"};
QSet<QString> validBudgets = {"budget", "expensive"};
// Check remaining parts after commander

View file

@ -38,7 +38,7 @@ private:
QLabel *gameChangerLabel;
QLabel *budgetLabel;
QStringList gameChangerOptions = {"", "core", "upgraded", "optimized"};
QStringList gameChangerOptions = {"", "exhibition", "core", "upgraded", "optimized", "cedh"};
QStringList budgetOptions = {"", "budget", "expensive"};
QString selectedGameChanger;