diff options
Diffstat (limited to 'src/model/SportModel.h')
-rw-r--r-- | src/model/SportModel.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/model/SportModel.h b/src/model/SportModel.h new file mode 100644 index 0000000..5c3bad1 --- /dev/null +++ b/src/model/SportModel.h @@ -0,0 +1,85 @@ +#pragma once + +#include "MedalWinner.h" +#include "CompetitorWithResults.h" +#include <QAbstractListModel> +#include <QNetworkAccessManager> +#include <qcontainerfwd.h> +#include <set> + +#include <QJsonObject> +#include <QJsonDocument> +#include <QString> +#include <QList> +#include "EventInfo.h" + +using namespace std; + +class SportModel : public QAbstractListModel +{ + Q_OBJECT + + Q_PROPERTY(QString discipline READ discipline WRITE setDiscipline); + +public: + enum Role + { + EventName = Qt::UserRole + 1, + Competitors + }; + + explicit SportModel(QObject *parent = nullptr); + + void setDiscipline(QJsonObject discipline) + { + this->o_discipline = QJsonObject(discipline); + } + + virtual int rowCount(const QModelIndex &parent) const override; + virtual QVariant data(const QModelIndex &index, int role) const override; + virtual QHash<int, QByteArray> roleNames() const override; + + set<QString> getCategories(); + QList<CompetitorWithResults*> getCompetitorsByCategory(QString category); // TODO ref instead of obj + QList<MedalWinner*> getCompetitorsWithMedal(); // TODO ref instead of obj + + // filter to change the current competitor list + void lastName(QList<Competitor*> &competitors); // TODO ref instead of obj + void filterByName(QList<Competitor*> &competitors, QString name); // TODO ref instead of obj + void filterByCountry(QList<Competitor*> &competitors, QString nocShort); // TODO ref instead of obj + + // sort functions to change the order of the current competitor list + void sortByName(QList<Competitor*> &competitors); // TODO ref instead of obj + void sortByCountry(QList<Competitor*> &competitors); // TODO ref instead of obj + void sortByResult(QList<CompetitorWithResults*> &competitors); // TODO ref instead of obj + void sortByMedals(QList<MedalWinner*> &competitors); // TODO ref instead of obj + void reverseOrder(QList<Competitor*> &competitors); // TODO ref instead of obj + + // statistic function + void addRelativeToFirst(QList<CompetitorWithResults*> &competitors); // TODO ref instead of obj + + QString discipline() const; + void setDiscipline(const QString &discipline); + +public slots: + void request(QString discipline); + void parseData(); + +private: + QList<EventInfo *> m_sportList; + QString m_discipline; + QNetworkAccessManager m_networkManager; + QNetworkReply *m_reply = nullptr; + + // data from api + QJsonObject o_discipline; + bool validateDiscipline(); + + void filterCompetitors(QList<Competitor*> &competitors, QString filter); // TODO ref instead of obj + + QJsonObject createCompetitorWithMedals(QJsonObject medalComp); + + // function for statistic calculation + float calcRelativeStat(QString ref, QString val); + +}; |