diff options
Diffstat (limited to 'stats/chartlistmodel.h')
-rw-r--r-- | stats/chartlistmodel.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/stats/chartlistmodel.h b/stats/chartlistmodel.h new file mode 100644 index 000000000..a33f6875a --- /dev/null +++ b/stats/chartlistmodel.h @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-2.0 +// A model to feed to the chart-selection combobox +#ifndef CHART_LIST_MODEL_H +#define CHART_LIST_MODEL_H + +#include "statsstate.h" +#include <vector> +#include <QAbstractListModel> +#include <QString> +#include <QFont> +#include <QIcon> +#include <QPixmap> + +class ChartListModel : public QAbstractListModel { + Q_OBJECT +public: + ChartListModel(); + ~ChartListModel(); + + // Returns index of selected item + int update(const StatsState::ChartList &charts); + + static const constexpr int ChartNameRole = Qt::UserRole + 1; + static const constexpr int IsHeaderRole = Qt::UserRole + 2; + static const constexpr int IconRole = Qt::UserRole + 3; + static const constexpr int IconSizeRole = Qt::UserRole + 4; +private: + struct Item { + bool isHeader; + QString name; + QString fullName; + ChartSubType subtype; + int id; + bool warning; + }; + + struct SubTypeIcons { + QPixmap normal; + QPixmap warning; + }; + QPixmap warningPixmap; + SubTypeIcons subTypeIcons[(size_t)ChartSubType::Count]; + + QFont itemFont; + QFont headerFont; + std::vector<Item> items; + int rowCount(const QModelIndex &parent) const override; + QVariant data(const QModelIndex &index, int role) const override; + Qt::ItemFlags flags(const QModelIndex &index) const override; + void initIcon(ChartSubType type, const char *name, int iconSize); + const QPixmap &getIcon(ChartSubType type, bool warning) const; +}; + +#endif |