Rename some things.

Took 17 minutes

Took 11 seconds


Took 18 seconds
This commit is contained in:
Lukas Brübach 2025-12-31 16:11:47 +01:00
parent f10c3608c5
commit 42e289b57d
30 changed files with 132 additions and 130 deletions

View file

@ -144,11 +144,11 @@ set(cockatrice_SOURCES
src/interface/widgets/cards/card_size_widget.cpp src/interface/widgets/cards/card_size_widget.cpp
src/interface/widgets/cards/deck_card_zone_display_widget.cpp src/interface/widgets/cards/deck_card_zone_display_widget.cpp
src/interface/widgets/cards/deck_preview_card_picture_widget.cpp src/interface/widgets/cards/deck_preview_card_picture_widget.cpp
src/interface/widgets/deck_analytics/abstract_analytics_panel_widget.cpp
src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp src/interface/widgets/deck_analytics/add_analytics_panel_dialog.cpp
src/interface/widgets/deck_analytics/analytics_panel_widget_factory.cpp
src/interface/widgets/deck_analytics/analytics_panel_widget_registrar.cpp
src/interface/widgets/deck_analytics/deck_analytics_widget.cpp src/interface/widgets/deck_analytics/deck_analytics_widget.cpp
src/interface/widgets/deck_analytics/deck_analytics_widget_base.cpp
src/interface/widgets/deck_analytics/deck_analytics_widget_factory.cpp
src/interface/widgets/deck_analytics/deck_analytics_widget_registrar.cpp
src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp src/interface/widgets/deck_analytics/deck_list_statistics_analyzer.cpp
src/interface/widgets/deck_analytics/resizable_panel.cpp src/interface/widgets/deck_analytics/resizable_panel.cpp
src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp src/interface/widgets/deck_analytics/analyzer_modules/draw_probability/draw_probability_config.cpp

View file

@ -1,10 +1,10 @@
#include "deck_analytics_widget_base.h" #include "abstract_analytics_panel_widget.h"
#include "deck_list_statistics_analyzer.h" #include "deck_list_statistics_analyzer.h"
#include <QPushButton> #include <QPushButton>
AnalyticsWidgetBase::AnalyticsWidgetBase(QWidget *parent, DeckListStatisticsAnalyzer *analyzer) AbstractAnalyticsPanelWidget::AbstractAnalyticsPanelWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer)
: QWidget(parent), analyzer(analyzer) : QWidget(parent), analyzer(analyzer)
{ {
layout = new QVBoxLayout(this); layout = new QVBoxLayout(this);
@ -21,15 +21,15 @@ AnalyticsWidgetBase::AnalyticsWidgetBase(QWidget *parent, DeckListStatisticsAnal
// config button // config button
configureButton = new QPushButton(tr("Configure"), this); configureButton = new QPushButton(tr("Configure"), this);
configureButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); configureButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
connect(configureButton, &QPushButton::clicked, this, &AnalyticsWidgetBase::applyConfigFromDialog); connect(configureButton, &QPushButton::clicked, this, &AbstractAnalyticsPanelWidget::applyConfigFromDialog);
bannerAndSettingsLayout->addWidget(configureButton, 0); bannerAndSettingsLayout->addWidget(configureButton, 0);
layout->addWidget(bannerAndSettingsContainer); layout->addWidget(bannerAndSettingsContainer);
connect(analyzer, &DeckListStatisticsAnalyzer::statsUpdated, this, &AnalyticsWidgetBase::updateDisplay); connect(analyzer, &DeckListStatisticsAnalyzer::statsUpdated, this, &AbstractAnalyticsPanelWidget::updateDisplay);
} }
bool AnalyticsWidgetBase::applyConfigFromDialog() bool AbstractAnalyticsPanelWidget::applyConfigFromDialog()
{ {
QDialog *dlg = createConfigDialog(this); QDialog *dlg = createConfigDialog(this);
if (!dlg) { if (!dlg) {

View file

@ -10,7 +10,7 @@
class DeckListStatisticsAnalyzer; class DeckListStatisticsAnalyzer;
class AnalyticsWidgetBase : public QWidget class AbstractAnalyticsPanelWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
public slots: public slots:
@ -19,7 +19,7 @@ public slots:
virtual QDialog *createConfigDialog(QWidget *parent) = 0; virtual QDialog *createConfigDialog(QWidget *parent) = 0;
public: public:
explicit AnalyticsWidgetBase(QWidget *parent, DeckListStatisticsAnalyzer *analyzer); explicit AbstractAnalyticsPanelWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer);
void setDisplayTitle(const QString &title) void setDisplayTitle(const QString &title)
{ {

View file

@ -1,6 +1,6 @@
#include "add_analytics_panel_dialog.h" #include "add_analytics_panel_dialog.h"
#include "deck_analytics_widget_factory.h" #include "analytics_panel_widget_factory.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QVBoxLayout> #include <QVBoxLayout>
@ -14,7 +14,7 @@ AddAnalyticsPanelDialog::AddAnalyticsPanelDialog(QWidget *parent) : QDialog(pare
typeCombo = new QComboBox(this); typeCombo = new QComboBox(this);
// Populate using descriptors // Populate using descriptors
const auto widgets = DeckAnalyticsWidgetFactory::instance().availableWidgets(); const auto widgets = AnalyticsPanelWidgetFactory::instance().availableWidgets();
for (const auto &desc : widgets) { for (const auto &desc : widgets) {
// Show translated title to user // Show translated title to user

View file

@ -2,7 +2,7 @@
#ifndef COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H #ifndef COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H
#define COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H #define COCKATRICE_ADD_ANALYTICS_PANEL_DIALOG_H
#include "deck_analytics_widget_factory.h" #include "analytics_panel_widget_factory.h"
#include <QComboBox> #include <QComboBox>
#include <QDialog> #include <QDialog>

View file

@ -0,0 +1,33 @@
#include "analytics_panel_widget_factory.h"
#include "abstract_analytics_panel_widget.h"
AnalyticsPanelWidgetFactory &AnalyticsPanelWidgetFactory::instance()
{
static AnalyticsPanelWidgetFactory f;
return f;
}
void AnalyticsPanelWidgetFactory::registerWidget(const Descriptor &desc)
{
widgets.insert(desc.type, desc);
}
AbstractAnalyticsPanelWidget *
AnalyticsPanelWidgetFactory::create(const QString &type, QWidget *parent, DeckListStatisticsAnalyzer *analyzer) const
{
auto it = widgets.find(type);
if (it == widgets.end())
return nullptr;
auto w = it->creator(parent, analyzer);
w->setDisplayTitle(it->title);
return w;
}
QList<AnalyticsPanelWidgetFactory::Descriptor> AnalyticsPanelWidgetFactory::availableWidgets() const
{
return widgets.values();
}

View file

@ -7,13 +7,13 @@
#include <QWidget> #include <QWidget>
#include <functional> #include <functional>
class AnalyticsWidgetBase; class AbstractAnalyticsPanelWidget;
class DeckListStatisticsAnalyzer; class DeckListStatisticsAnalyzer;
class DeckAnalyticsWidgetFactory class AnalyticsPanelWidgetFactory
{ {
public: public:
using Creator = std::function<AnalyticsWidgetBase *(QWidget *, DeckListStatisticsAnalyzer *)>; using Creator = std::function<AbstractAnalyticsPanelWidget *(QWidget *, DeckListStatisticsAnalyzer *)>;
struct Descriptor struct Descriptor
{ {
@ -22,20 +22,21 @@ public:
Creator creator; Creator creator;
}; };
static DeckAnalyticsWidgetFactory &instance(); static AnalyticsPanelWidgetFactory &instance();
// NEW: richer registration // NEW: richer registration
void registerWidget(const Descriptor &desc); void registerWidget(const Descriptor &desc);
AnalyticsWidgetBase *create(const QString &type, QWidget *parent, DeckListStatisticsAnalyzer *analyzer) const; AbstractAnalyticsPanelWidget *
create(const QString &type, QWidget *parent, DeckListStatisticsAnalyzer *analyzer) const;
// NEW: expose widgets to UI // NEW: expose widgets to UI
QList<Descriptor> availableWidgets() const; QList<Descriptor> availableWidgets() const;
private: private:
DeckAnalyticsWidgetFactory() = default; // Ensure private constructor AnalyticsPanelWidgetFactory() = default; // Ensure private constructor
DeckAnalyticsWidgetFactory(const DeckAnalyticsWidgetFactory &) = delete; AnalyticsPanelWidgetFactory(const AnalyticsPanelWidgetFactory &) = delete;
DeckAnalyticsWidgetFactory &operator=(const DeckAnalyticsWidgetFactory &) = delete; AnalyticsPanelWidgetFactory &operator=(const AnalyticsPanelWidgetFactory &) = delete;
QMap<QString, Descriptor> widgets; QMap<QString, Descriptor> widgets;
}; };

View file

@ -0,0 +1 @@
#include "analytics_panel_widget_registrar.h"

View file

@ -0,0 +1,17 @@
#ifndef COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H
#define COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H
#include "analytics_panel_widget_factory.h"
class AnalyticsPanelWidgetRegistrar
{
public:
AnalyticsPanelWidgetRegistrar(const QString &type,
const QString &title,
AnalyticsPanelWidgetFactory::Creator creator)
{
AnalyticsPanelWidgetFactory::instance().registerWidget({type, title, creator});
}
};
#endif // COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H

View file

@ -18,7 +18,7 @@
#include <libcockatrice/card/database/card_database_manager.h> #include <libcockatrice/card/database/card_database_manager.h>
DrawProbabilityWidget::DrawProbabilityWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer) DrawProbabilityWidget::DrawProbabilityWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer)
: AnalyticsWidgetBase(parent, analyzer) : AbstractAnalyticsPanelWidget(parent, analyzer)
{ {
controls = new QWidget(this); controls = new QWidget(this);
controlLayout = new QHBoxLayout(controls); controlLayout = new QHBoxLayout(controls);

View file

@ -1,7 +1,7 @@
#ifndef COCKATRICE_DRAW_PROBABILITY_WIDGET_H #ifndef COCKATRICE_DRAW_PROBABILITY_WIDGET_H
#define COCKATRICE_DRAW_PROBABILITY_WIDGET_H #define COCKATRICE_DRAW_PROBABILITY_WIDGET_H
#include "../../deck_analytics_widget_base.h" #include "../../abstract_analytics_panel_widget.h"
#include "../../deck_list_statistics_analyzer.h" #include "../../deck_list_statistics_analyzer.h"
#include "draw_probability_config.h" #include "draw_probability_config.h"
@ -10,7 +10,7 @@
#include <QSpinBox> #include <QSpinBox>
#include <QTableWidget> #include <QTableWidget>
class DrawProbabilityWidget : public AnalyticsWidgetBase class DrawProbabilityWidget : public AbstractAnalyticsPanelWidget
{ {
Q_OBJECT Q_OBJECT
public: public:

View file

@ -3,7 +3,7 @@
#include "../../../general/display/charts/bars/bar_widget.h" #include "../../../general/display/charts/bars/bar_widget.h"
#include "../../../general/display/charts/bars/color_bar.h" #include "../../../general/display/charts/bars/color_bar.h"
#include "../../../general/display/charts/pies/color_pie.h" #include "../../../general/display/charts/pies/color_pie.h"
#include "../../deck_analytics_widget_registrar.h" #include "../../analytics_panel_widget_registrar.h"
#include "mana_base_config_dialog.h" #include "mana_base_config_dialog.h"
#include <QDialog> #include <QDialog>
@ -12,14 +12,14 @@
namespace namespace
{ {
DeckAnalyticsWidgetRegistrar registerManaBase{ AnalyticsPanelWidgetRegistrar registerManaBase{
"manaBase", ManaBaseWidget::tr("Mana Base"), "manaBase", ManaBaseWidget::tr("Mana Base"),
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaBaseWidget(parent, analyzer); }}; [](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaBaseWidget(parent, analyzer); }};
} // anonymous namespace } // anonymous namespace
ManaBaseWidget::ManaBaseWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaBaseConfig cfg) ManaBaseWidget::ManaBaseWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaBaseConfig cfg)
: AnalyticsWidgetBase(parent, analyzer), config(std::move(cfg)) : AbstractAnalyticsPanelWidget(parent, analyzer), config(std::move(cfg))
{ {
barContainer = new QWidget(this); barContainer = new QWidget(this);
barLayout = new QHBoxLayout(barContainer); barLayout = new QHBoxLayout(barContainer);

View file

@ -8,7 +8,7 @@
#define MANA_BASE_WIDGET_H #define MANA_BASE_WIDGET_H
#include "../../../general/display/banner_widget.h" #include "../../../general/display/banner_widget.h"
#include "../../deck_analytics_widget_base.h" #include "../../abstract_analytics_panel_widget.h"
#include "../../deck_list_statistics_analyzer.h" #include "../../deck_list_statistics_analyzer.h"
#include "mana_base_config.h" #include "mana_base_config.h"
@ -18,7 +18,7 @@
#include <libcockatrice/models/deck_list/deck_list_model.h> #include <libcockatrice/models/deck_list/deck_list_model.h>
#include <utility> #include <utility>
class ManaBaseWidget : public AnalyticsWidgetBase class ManaBaseWidget : public AbstractAnalyticsPanelWidget
{ {
Q_OBJECT Q_OBJECT

View file

@ -7,7 +7,7 @@
#include <QListWidget> #include <QListWidget>
#include <QVBoxLayout> #include <QVBoxLayout>
ManaCurveAddDialog::ManaCurveAddDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent) ManaCurveConfigDialog::ManaCurveConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent)
: QDialog(parent), analyzer(analyzer) : QDialog(parent), analyzer(analyzer)
{ {
auto *lay = new QVBoxLayout(this); auto *lay = new QVBoxLayout(this);
@ -35,8 +35,8 @@ ManaCurveAddDialog::ManaCurveAddDialog(DeckListStatisticsAnalyzer *analyzer, QWi
buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
lay->addWidget(buttons); lay->addWidget(buttons);
connect(buttons, &QDialogButtonBox::accepted, this, &ManaCurveAddDialog::accept); connect(buttons, &QDialogButtonBox::accepted, this, &ManaCurveConfigDialog::accept);
connect(buttons, &QDialogButtonBox::rejected, this, &ManaCurveAddDialog::reject); connect(buttons, &QDialogButtonBox::rejected, this, &ManaCurveConfigDialog::reject);
// populate dynamic data // populate dynamic data
QStringList cats = analyzer->getManaCurveByType().keys(); QStringList cats = analyzer->getManaCurveByType().keys();
@ -50,7 +50,7 @@ ManaCurveAddDialog::ManaCurveAddDialog(DeckListStatisticsAnalyzer *analyzer, QWi
retranslateUi(); retranslateUi();
} }
void ManaCurveAddDialog::retranslateUi() void ManaCurveConfigDialog::retranslateUi()
{ {
labelGroupBy->setText(tr("Group By:")); labelGroupBy->setText(tr("Group By:"));
groupBy->setItemText(0, tr("type")); groupBy->setItemText(0, tr("type"));
@ -65,7 +65,7 @@ void ManaCurveAddDialog::retranslateUi()
showCatRows->setText(tr("Show per-category rows")); showCatRows->setText(tr("Show per-category rows"));
} }
void ManaCurveAddDialog::setFromConfig(const ManaCurveConfig &cfg) void ManaCurveConfigDialog::setFromConfig(const ManaCurveConfig &cfg)
{ {
groupBy->setCurrentText(cfg.groupBy); groupBy->setCurrentText(cfg.groupBy);
// restore filters // restore filters
@ -76,7 +76,7 @@ void ManaCurveAddDialog::setFromConfig(const ManaCurveConfig &cfg)
showCatRows->setChecked(cfg.showCategoryRows); showCatRows->setChecked(cfg.showCategoryRows);
} }
void ManaCurveAddDialog::accept() void ManaCurveConfigDialog::accept()
{ {
cfg.groupBy = groupBy->currentText(); cfg.groupBy = groupBy->currentText();

View file

@ -12,11 +12,11 @@ class QListWidget;
class QCheckBox; class QCheckBox;
class QComboBox; class QComboBox;
class ManaCurveAddDialog : public QDialog class ManaCurveConfigDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ManaCurveAddDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent = nullptr); explicit ManaCurveConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent = nullptr);
void retranslateUi(); void retranslateUi();
void setFromConfig(const ManaCurveConfig &cfg); void setFromConfig(const ManaCurveConfig &cfg);

View file

@ -3,7 +3,7 @@
#include "../../../general/display/charts/bars/bar_chart_background_widget.h" #include "../../../general/display/charts/bars/bar_chart_background_widget.h"
#include "../../../general/display/charts/bars/bar_chart_widget.h" #include "../../../general/display/charts/bars/bar_chart_widget.h"
#include "../../../general/display/charts/bars/segmented_bar_widget.h" #include "../../../general/display/charts/bars/segmented_bar_widget.h"
#include "../../deck_analytics_widget_registrar.h" #include "../../analytics_panel_widget_registrar.h"
#include "../../deck_list_statistics_analyzer.h" #include "../../deck_list_statistics_analyzer.h"
#include "libcockatrice/utility/color.h" #include "libcockatrice/utility/color.h"
#include "libcockatrice/utility/qt_utils.h" #include "libcockatrice/utility/qt_utils.h"
@ -18,14 +18,14 @@
namespace namespace
{ {
DeckAnalyticsWidgetRegistrar registerManaCurve{ AnalyticsPanelWidgetRegistrar registerManaCurve{
"manaCurve", ManaCurveWidget::tr("Mana Curve"), "manaCurve", ManaCurveWidget::tr("Mana Curve"),
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaCurveWidget(parent, analyzer); }}; [](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaCurveWidget(parent, analyzer); }};
} // anonymous namespace } // anonymous namespace
ManaCurveWidget::ManaCurveWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaCurveConfig cfg) ManaCurveWidget::ManaCurveWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaCurveConfig cfg)
: AnalyticsWidgetBase(parent, analyzer), config(cfg) : AbstractAnalyticsPanelWidget(parent, analyzer), config(cfg)
{ {
setLayout(layout); setLayout(layout);
@ -46,14 +46,14 @@ ManaCurveWidget::ManaCurveWidget(QWidget *parent, DeckListStatisticsAnalyzer *an
QDialog *ManaCurveWidget::createConfigDialog(QWidget *parent) QDialog *ManaCurveWidget::createConfigDialog(QWidget *parent)
{ {
auto *dlg = new ManaCurveAddDialog(analyzer, parent); auto *dlg = new ManaCurveConfigDialog(analyzer, parent);
dlg->setFromConfig(config); dlg->setFromConfig(config);
return dlg; return dlg;
} }
QJsonObject ManaCurveWidget::extractConfigFromDialog(QDialog *dlg) const QJsonObject ManaCurveWidget::extractConfigFromDialog(QDialog *dlg) const
{ {
auto *mc = qobject_cast<ManaCurveAddDialog *>(dlg); auto *mc = qobject_cast<ManaCurveConfigDialog *>(dlg);
return mc ? mc->result().toJson() : QJsonObject{}; return mc ? mc->result().toJson() : QJsonObject{};
} }

View file

@ -7,7 +7,7 @@
#ifndef MANA_CURVE_WIDGET_H #ifndef MANA_CURVE_WIDGET_H
#define MANA_CURVE_WIDGET_H #define MANA_CURVE_WIDGET_H
#include "../../deck_analytics_widget_base.h" #include "../../abstract_analytics_panel_widget.h"
#include "mana_curve_category_widget.h" #include "mana_curve_category_widget.h"
#include "mana_curve_config.h" #include "mana_curve_config.h"
#include "mana_curve_total_widget.h" #include "mana_curve_total_widget.h"
@ -17,7 +17,7 @@
class SegmentedBarWidget; class SegmentedBarWidget;
class DeckListStatisticsAnalyzer; class DeckListStatisticsAnalyzer;
class ManaCurveWidget : public AnalyticsWidgetBase class ManaCurveWidget : public AbstractAnalyticsPanelWidget
{ {
Q_OBJECT Q_OBJECT

View file

@ -3,7 +3,7 @@
#include "../../../general/display/charts/bars/bar_widget.h" #include "../../../general/display/charts/bars/bar_widget.h"
#include "../../../general/display/charts/bars/color_bar.h" #include "../../../general/display/charts/bars/color_bar.h"
#include "../../../general/display/charts/pies/color_pie.h" #include "../../../general/display/charts/pies/color_pie.h"
#include "../../deck_analytics_widget_registrar.h" #include "../../analytics_panel_widget_registrar.h"
#include "../../deck_list_statistics_analyzer.h" #include "../../deck_list_statistics_analyzer.h"
#include "mana_devotion_config_dialog.h" #include "mana_devotion_config_dialog.h"
@ -13,14 +13,14 @@
namespace namespace
{ {
DeckAnalyticsWidgetRegistrar registerManaDevotion{ AnalyticsPanelWidgetRegistrar registerManaDevotion{
"manaDevotion", ManaDevotionWidget::tr("Mana Devotion"), "manaDevotion", ManaDevotionWidget::tr("Mana Devotion"),
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDevotionWidget(parent, analyzer); }}; [](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDevotionWidget(parent, analyzer); }};
} // anonymous namespace } // anonymous namespace
ManaDevotionWidget::ManaDevotionWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaDevotionConfig cfg) ManaDevotionWidget::ManaDevotionWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer, ManaDevotionConfig cfg)
: AnalyticsWidgetBase(parent, analyzer), config(std::move(cfg)) : AbstractAnalyticsPanelWidget(parent, analyzer), config(std::move(cfg))
{ {
barContainer = new QWidget(this); barContainer = new QWidget(this);
barLayout = new QHBoxLayout(barContainer); barLayout = new QHBoxLayout(barContainer);

View file

@ -7,12 +7,12 @@
#ifndef MANA_DEVOTION_WIDGET_H #ifndef MANA_DEVOTION_WIDGET_H
#define MANA_DEVOTION_WIDGET_H #define MANA_DEVOTION_WIDGET_H
#include "../../../general/display/banner_widget.h" #include "../../../general/display/banner_widget.h"
#include "../../deck_analytics_widget_base.h" #include "../../abstract_analytics_panel_widget.h"
#include "mana_devotion_config.h" #include "mana_devotion_config.h"
#include <QHBoxLayout> #include <QHBoxLayout>
class ManaDevotionWidget : public AnalyticsWidgetBase class ManaDevotionWidget : public AbstractAnalyticsPanelWidget
{ {
Q_OBJECT Q_OBJECT

View file

@ -9,7 +9,7 @@
static const QStringList kColors = {"W", "U", "B", "R", "G", "C"}; static const QStringList kColors = {"W", "U", "B", "R", "G", "C"};
ManaDistributionAddDialog::ManaDistributionAddDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent) ManaDistributionConfigDialog::ManaDistributionConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent)
: QDialog(parent), analyzer(analyzer) : QDialog(parent), analyzer(analyzer)
{ {
auto *lay = new QVBoxLayout(this); auto *lay = new QVBoxLayout(this);
@ -35,15 +35,15 @@ ManaDistributionAddDialog::ManaDistributionAddDialog(DeckListStatisticsAnalyzer
buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
lay->addWidget(buttons); lay->addWidget(buttons);
connect(buttons, &QDialogButtonBox::accepted, this, &ManaDistributionAddDialog::accept); connect(buttons, &QDialogButtonBox::accepted, this, &ManaDistributionConfigDialog::accept);
connect(buttons, &QDialogButtonBox::rejected, this, &ManaDistributionAddDialog::reject); connect(buttons, &QDialogButtonBox::rejected, this, &ManaDistributionConfigDialog::reject);
displayType->addItems({"pie", "bar"}); // combo items displayType->addItems({"pie", "bar"}); // combo items
retranslateUi(); retranslateUi();
} }
void ManaDistributionAddDialog::retranslateUi() void ManaDistributionConfigDialog::retranslateUi()
{ {
labelDisplayType->setText(tr("Top display type:")); labelDisplayType->setText(tr("Top display type:"));
displayType->setItemText(0, tr("pie")); displayType->setItemText(0, tr("pie"));
@ -56,7 +56,7 @@ void ManaDistributionAddDialog::retranslateUi()
// QDialogButtonBox buttons are automatically translated // QDialogButtonBox buttons are automatically translated
} }
void ManaDistributionAddDialog::setFromConfig(const ManaDistributionConfig &cfgIn) void ManaDistributionConfigDialog::setFromConfig(const ManaDistributionConfig &cfgIn)
{ {
cfg = cfgIn; cfg = cfgIn;
@ -68,7 +68,7 @@ void ManaDistributionAddDialog::setFromConfig(const ManaDistributionConfig &cfgI
showColorRows->setChecked(cfg.showColorRows); showColorRows->setChecked(cfg.showColorRows);
} }
void ManaDistributionAddDialog::accept() void ManaDistributionConfigDialog::accept()
{ {
cfg.displayType = displayType->currentText(); cfg.displayType = displayType->currentText();

View file

@ -13,11 +13,11 @@ class QListWidget;
class QCheckBox; class QCheckBox;
class DeckListStatisticsAnalyzer; class DeckListStatisticsAnalyzer;
class ManaDistributionAddDialog : public QDialog class ManaDistributionConfigDialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ManaDistributionAddDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent = nullptr); explicit ManaDistributionConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent = nullptr);
void retranslateUi(); void retranslateUi();
void setFromConfig(const ManaDistributionConfig &cfg); void setFromConfig(const ManaDistributionConfig &cfg);

View file

@ -1,6 +1,6 @@
#include "mana_distribution_widget.h" #include "mana_distribution_widget.h"
#include "../../deck_analytics_widget_registrar.h" #include "../../analytics_panel_widget_registrar.h"
#include "mana_distribution_config_dialog.h" #include "mana_distribution_config_dialog.h"
#include <QComboBox> #include <QComboBox>
@ -10,8 +10,7 @@
namespace namespace
{ {
AnalyticsPanelWidgetRegistrar registerManaDistribution{
DeckAnalyticsWidgetRegistrar registerManaDistribution{
"manaProdDevotion", ManaDistributionWidget::tr("Mana Production + Devotion"), "manaProdDevotion", ManaDistributionWidget::tr("Mana Production + Devotion"),
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDistributionWidget(parent, analyzer); }}; [](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDistributionWidget(parent, analyzer); }};
@ -20,7 +19,7 @@ DeckAnalyticsWidgetRegistrar registerManaDistribution{
static const QStringList kColors = {"W", "U", "B", "R", "G", "C"}; static const QStringList kColors = {"W", "U", "B", "R", "G", "C"};
ManaDistributionWidget::ManaDistributionWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer) ManaDistributionWidget::ManaDistributionWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer)
: AnalyticsWidgetBase(parent, analyzer) : AbstractAnalyticsPanelWidget(parent, analyzer)
{ {
container = new QWidget(this); container = new QWidget(this);
containerLayout = new QVBoxLayout(container); containerLayout = new QVBoxLayout(container);
@ -117,7 +116,7 @@ void ManaDistributionWidget::updateDisplay()
QDialog *ManaDistributionWidget::createConfigDialog(QWidget *parent) QDialog *ManaDistributionWidget::createConfigDialog(QWidget *parent)
{ {
auto *dlg = new ManaDistributionAddDialog(analyzer, parent); auto *dlg = new ManaDistributionConfigDialog(analyzer, parent);
dlg->setWindowTitle(tr("Mana Distribution Settings")); dlg->setWindowTitle(tr("Mana Distribution Settings"));
dlg->setFromConfig(config); dlg->setFromConfig(config);

View file

@ -3,7 +3,7 @@
#include "../../../general/display/charts/bars/color_bar.h" #include "../../../general/display/charts/bars/color_bar.h"
#include "../../../general/display/charts/pies/color_pie.h" #include "../../../general/display/charts/pies/color_pie.h"
#include "../../deck_analytics_widget_base.h" #include "../../abstract_analytics_panel_widget.h"
#include "../../deck_list_statistics_analyzer.h" #include "../../deck_list_statistics_analyzer.h"
#include "mana_distribution_config.h" #include "mana_distribution_config.h"
#include "mana_distribution_single_display_widget.h" #include "mana_distribution_single_display_widget.h"
@ -13,7 +13,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWidget> #include <QWidget>
class ManaDistributionWidget : public AnalyticsWidgetBase class ManaDistributionWidget : public AbstractAnalyticsPanelWidget
{ {
Q_OBJECT Q_OBJECT
public: public:

View file

@ -1,12 +1,8 @@
#include "deck_analytics_widget.h" #include "deck_analytics_widget.h"
#include "abstract_analytics_panel_widget.h"
#include "add_analytics_panel_dialog.h" #include "add_analytics_panel_dialog.h"
#include "analyzer_modules/mana_base/mana_base_widget.h" #include "analytics_panel_widget_factory.h"
#include "analyzer_modules/mana_curve/mana_curve_widget.h"
#include "analyzer_modules/mana_devotion/mana_devotion_widget.h"
#include "analyzer_modules/mana_distribution/mana_distribution_widget.h"
#include "deck_analytics_widget_base.h"
#include "deck_analytics_widget_factory.h"
#include "deck_list_statistics_analyzer.h" #include "deck_list_statistics_analyzer.h"
#include "resizable_panel.h" #include "resizable_panel.h"
@ -86,8 +82,8 @@ void DeckAnalyticsWidget::onAddPanel()
return; return;
} }
AnalyticsWidgetBase *analyticsWidget = AbstractAnalyticsPanelWidget *analyticsWidget =
DeckAnalyticsWidgetFactory::instance().create(selection, this, statsAnalyzer); AnalyticsPanelWidgetFactory::instance().create(selection, this, statsAnalyzer);
if (!analyticsWidget) { if (!analyticsWidget) {
return; return;
} }
@ -100,7 +96,9 @@ void DeckAnalyticsWidget::onAddPanel()
addPanelInstance(selection, analyticsWidget, analyticsWidget->saveConfig()); addPanelInstance(selection, analyticsWidget, analyticsWidget->saveConfig());
} }
void DeckAnalyticsWidget::addPanelInstance(const QString &typeId, AnalyticsWidgetBase *panel, const QJsonObject &cfg) void DeckAnalyticsWidget::addPanelInstance(const QString &typeId,
AbstractAnalyticsPanelWidget *panel,
const QJsonObject &cfg)
{ {
panel->loadConfig(cfg); panel->loadConfig(cfg);
panel->updateDisplay(); panel->updateDisplay();
@ -164,7 +162,7 @@ void DeckAnalyticsWidget::addDefaultPanels()
QVector<DefaultPanel> defaults = {{"manaCurve", {}}, {"manaBase", {}}, {"manaDevotion", {}}}; QVector<DefaultPanel> defaults = {{"manaCurve", {}}, {"manaBase", {}}, {"manaDevotion", {}}};
for (auto &d : defaults) { for (auto &d : defaults) {
AnalyticsWidgetBase *w = DeckAnalyticsWidgetFactory::instance().create(d.type, this, statsAnalyzer); AbstractAnalyticsPanelWidget *w = AnalyticsPanelWidgetFactory::instance().create(d.type, this, statsAnalyzer);
if (!w) { if (!w) {
continue; continue;
} }
@ -197,7 +195,7 @@ bool DeckAnalyticsWidget::loadLayoutInternal()
QString type = o["type"].toString(); QString type = o["type"].toString();
QJsonObject cfg = o["config"].toObject(); QJsonObject cfg = o["config"].toObject();
AnalyticsWidgetBase *w = DeckAnalyticsWidgetFactory::instance().create(type, this, statsAnalyzer); AbstractAnalyticsPanelWidget *w = AnalyticsPanelWidgetFactory::instance().create(type, this, statsAnalyzer);
if (!w) { if (!w) {
continue; continue;
} }

View file

@ -7,7 +7,7 @@
#ifndef DECK_ANALYTICS_WIDGET_H #ifndef DECK_ANALYTICS_WIDGET_H
#define DECK_ANALYTICS_WIDGET_H #define DECK_ANALYTICS_WIDGET_H
#include "deck_analytics_widget_base.h" #include "abstract_analytics_panel_widget.h"
#include "deck_list_statistics_analyzer.h" #include "deck_list_statistics_analyzer.h"
#include "resizable_panel.h" #include "resizable_panel.h"
@ -46,7 +46,7 @@ protected:
int indexOfSelectedWrapper() const; int indexOfSelectedWrapper() const;
private: private:
void addPanelInstance(const QString &typeId, AnalyticsWidgetBase *panel, const QJsonObject &cfg = {}); void addPanelInstance(const QString &typeId, AbstractAnalyticsPanelWidget *panel, const QJsonObject &cfg = {});
QVBoxLayout *layout; QVBoxLayout *layout;
QWidget *controlContainer; QWidget *controlContainer;

View file

@ -1,33 +0,0 @@
#include "deck_analytics_widget_factory.h"
#include "deck_analytics_widget_base.h"
DeckAnalyticsWidgetFactory &DeckAnalyticsWidgetFactory::instance()
{
static DeckAnalyticsWidgetFactory f;
return f;
}
void DeckAnalyticsWidgetFactory::registerWidget(const Descriptor &desc)
{
widgets.insert(desc.type, desc);
}
AnalyticsWidgetBase *
DeckAnalyticsWidgetFactory::create(const QString &type, QWidget *parent, DeckListStatisticsAnalyzer *analyzer) const
{
auto it = widgets.find(type);
if (it == widgets.end())
return nullptr;
auto w = it->creator(parent, analyzer);
w->setDisplayTitle(it->title);
return w;
}
QList<DeckAnalyticsWidgetFactory::Descriptor> DeckAnalyticsWidgetFactory::availableWidgets() const
{
return widgets.values();
}

View file

@ -1 +0,0 @@
#include "deck_analytics_widget_registrar.h"

View file

@ -1,15 +0,0 @@
#ifndef COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H
#define COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H
#include "deck_analytics_widget_factory.h"
class DeckAnalyticsWidgetRegistrar
{
public:
DeckAnalyticsWidgetRegistrar(const QString &type, const QString &title, DeckAnalyticsWidgetFactory::Creator creator)
{
DeckAnalyticsWidgetFactory::instance().registerWidget({type, title, creator});
}
};
#endif // COCKATRICE_DECK_ANALYTICS_WIDGET_REGISTRAR_H

View file

@ -7,7 +7,7 @@
#include <QPixmap> #include <QPixmap>
#include <QtGlobal> #include <QtGlobal>
ResizablePanel::ResizablePanel(const QString &_typeId, AnalyticsWidgetBase *analyticsPanel, QWidget *parent) ResizablePanel::ResizablePanel(const QString &_typeId, AbstractAnalyticsPanelWidget *analyticsPanel, QWidget *parent)
: QWidget(parent), panel(analyticsPanel), typeId(_typeId) : QWidget(parent), panel(analyticsPanel), typeId(_typeId)
{ {
setAcceptDrops(true); setAcceptDrops(true);

View file

@ -1,7 +1,7 @@
#ifndef COCKATRICE_RESIZABLE_PANEL_H #ifndef COCKATRICE_RESIZABLE_PANEL_H
#define COCKATRICE_RESIZABLE_PANEL_H #define COCKATRICE_RESIZABLE_PANEL_H
#include "deck_analytics_widget_base.h" #include "abstract_analytics_panel_widget.h"
#include <QApplication> #include <QApplication>
#include <QDrag> #include <QDrag>
@ -19,7 +19,9 @@ class ResizablePanel : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit ResizablePanel(const QString &typeId, AnalyticsWidgetBase *analyticsPanel, QWidget *parent = nullptr); explicit ResizablePanel(const QString &typeId,
AbstractAnalyticsPanelWidget *analyticsPanel,
QWidget *parent = nullptr);
void setSelected(bool selected); void setSelected(bool selected);
void setHeightFromSaved(int h); void setHeightFromSaved(int h);
@ -33,7 +35,7 @@ public:
return typeId; return typeId;
} }
AnalyticsWidgetBase *panel; AbstractAnalyticsPanelWidget *panel;
signals: signals:
void dragStarted(ResizablePanel *panel); void dragStarted(ResizablePanel *panel);