summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-08-16 07:06:05 +0200
committerOrangerot <purple@orangerot.dev>2024-08-16 07:06:05 +0200
commiteb61690873e234ea28a3f437fb7211c773a449fe (patch)
treed687ed8ec12de3cef8a24e0c54d30f70d2dc5e82
parentc09350b7c9adf6327f0a0475c897a71dd23b6cae (diff)
feat(EventInfo): display EventInfo with List of Competitors
-rw-r--r--CMakeLists.txt16
-rw-r--r--res/gui/EventInfoPage.qml27
-rw-r--r--res/gui/EventsPage.qml7
-rw-r--r--src/model/EventInfo.cpp22
-rw-r--r--src/model/EventInfo.h28
-rw-r--r--src/model/Sport.cpp29
-rw-r--r--src/model/Sport.h8
7 files changed, 118 insertions, 19 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bea6d40..359afe1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,10 +10,6 @@ set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
qt_add_executable(itat_challange_olympics src/main/main.cpp
application.qrc
- src/api/OlympicsAPI.cpp
- src/api/OlympicsAPI.h
- src/model/Sport.cpp
- src/model/Sport.h
)
@@ -23,6 +19,18 @@ qt_add_qml_module(itat_challange_olympics
res/gui/application.qml
res/gui/EventInfoPage.qml
res/gui/EventsPage.qml
+
+ SOURCES
+ src/model/Competitor.cpp
+ src/model/Competitor.h
+ src/model/CompetitorWithResults.cpp
+ src/model/CompetitorWithResults.h
+ src/model/EventInfo.cpp
+ src/model/EventInfo.h
+ src/model/MedalWinner.cpp
+ src/model/MedalWinner.h
+ src/model/Sport.cpp
+ src/model/Sport.h
RESOURCES
res/pictograms/ARC_small.svg
diff --git a/res/gui/EventInfoPage.qml b/res/gui/EventInfoPage.qml
index 956507e..d04716b 100644
--- a/res/gui/EventInfoPage.qml
+++ b/res/gui/EventInfoPage.qml
@@ -4,7 +4,8 @@ import QtQuick.Controls
Page {
id: root
- property string event_id
+ property string eventName
+ property list<string> competitors
header: ToolBar {
ToolButton {
@@ -18,7 +19,29 @@ Page {
id: pageTitle
font.pixelSize: 20
anchors.centerIn: parent
- text: qsTr("Event Info")
+ text: eventName
+ }
+ }
+
+ ListView {
+ id: listView
+ anchors.fill: parent
+ topMargin: 48
+ leftMargin: 48
+ bottomMargin: 48
+ rightMargin: 48
+ spacing: 20
+ model: competitors
+ delegate: ItemDelegate {
+ text: modelData
+ width: listView.width - listView.leftMargin - listView.rightMargin
+ height: avatar.implicitHeight + 32
+ leftPadding: avatar.implicitWidth + 32
+
+ Image {
+ id: avatar
+ // source: "images/" + modelData.replace(" ", "_") + ".png"
+ }
}
}
diff --git a/res/gui/EventsPage.qml b/res/gui/EventsPage.qml
index 5e4adf3..129d742 100644
--- a/res/gui/EventsPage.qml
+++ b/res/gui/EventsPage.qml
@@ -21,12 +21,13 @@ Page {
spacing: 20
model: sports
delegate: ItemDelegate {
- required property string sportName
- text: sportName
+ required property string eventName
+ required property list<string> competitors
+ text: eventName
width: listView.width - listView.leftMargin - listView.rightMargin
height: avatar.implicitHeight + 32
leftPadding: avatar.implicitWidth + 32
- onClicked: root.StackView.view.push("EventInfoPage.qml", { event_id: 1 })
+ onClicked: root.StackView.view.push("EventInfoPage.qml", { eventName, competitors })
Image {
id: avatar
diff --git a/src/model/EventInfo.cpp b/src/model/EventInfo.cpp
new file mode 100644
index 0000000..e9ecd46
--- /dev/null
+++ b/src/model/EventInfo.cpp
@@ -0,0 +1,22 @@
+#include <QObject>
+#include "EventInfo.h"
+
+EventInfo::EventInfo(QObject *parent) : QObject(parent) {
+}
+
+QString EventInfo::eventName() const {
+ return m_eventName;
+}
+
+void EventInfo::setEventName(const QString &newEventName) {
+ m_eventName = newEventName;
+}
+
+QList<QString> EventInfo::competitors() const {
+ return m_competitors;
+}
+
+void EventInfo::setCompetitors(const QList<QString> &newCompetitors) {
+ m_competitors = newCompetitors;
+}
+
diff --git a/src/model/EventInfo.h b/src/model/EventInfo.h
new file mode 100644
index 0000000..7f937b2
--- /dev/null
+++ b/src/model/EventInfo.h
@@ -0,0 +1,28 @@
+#ifndef ITAT_CHALLANGE_OLYMPICS_EVENT_H
+#define ITAT_CHALLANGE_OLYMPICS_EVENT_H
+
+#include <QObject>
+#include <qqml.h>
+
+class EventInfo : QObject {
+ Q_OBJECT
+ // QML_ELEMENT
+
+ Q_PROPERTY(QString eventName READ eventName WRITE setEventName);
+ Q_PROPERTY(QList<QString> competitors READ competitors WRITE setCompetitors);
+
+ public:
+ explicit EventInfo(QObject *parent = nullptr);
+
+ QString eventName() const;
+ void setEventName(const QString &newEventName);
+
+ QList<QString> competitors() const;
+ void setCompetitors(const QList<QString> &newCompetitors);
+
+ private:
+ QString m_eventName;
+ QList<QString> m_competitors;
+};
+
+#endif
diff --git a/src/model/Sport.cpp b/src/model/Sport.cpp
index 38173ce..8c4902b 100644
--- a/src/model/Sport.cpp
+++ b/src/model/Sport.cpp
@@ -1,4 +1,5 @@
#include "Sport.h"
+#include "Competitor.h"
// categories
#include <QNetworkReply>
@@ -34,12 +35,15 @@ int SportModel::rowCount(const QModelIndex &parent) const {
QVariant SportModel::data(const QModelIndex &index, int role) const {
if (index.isValid() && index.row() >= 0 && index.row() < m_sportList.size()) {
- QString sportName = m_sportList[index.row()];
+ EventInfo *event = m_sportList[index.row()];
- return sportName;
- // switch ((Role) role) {
- // case SportName:
- // }
+ switch ((Role) role) {
+ case EventName:
+ return event->eventName();
+
+ case Competitors:
+ return event->competitors();
+ }
}
return {};
@@ -48,7 +52,8 @@ QVariant SportModel::data(const QModelIndex &index, int role) const {
QHash<int, QByteArray> SportModel::roleNames() const {
QHash<int, QByteArray> names;
- names[SportName] = "sportName";
+ names[EventName] = "eventName";
+ names[Competitors] = "competitors";
return names;
}
@@ -77,8 +82,18 @@ void SportModel::parseData() {
QJsonArray sports = jsonDocument["units"].toArray();
for (const auto &sport : sports) {
QJsonObject entry = sport.toObject();
+
+ EventInfo *event = new EventInfo(this);
+ event->setEventName(entry["eventUnitName"].toString());
+
+ QList<QString> competitors;
+ for (const auto &competitor : entry["competitors"].toArray()) {
+ competitors << competitor.toObject()["name"].toString();
+ }
+ event->setCompetitors(competitors);
+
qDebug() << entry["eventUnitName"].toString();
- m_sportList << entry["eventUnitName"].toString();
+ m_sportList << event;
}
endResetModel();
}
diff --git a/src/model/Sport.h b/src/model/Sport.h
index 0f183b7..be74a51 100644
--- a/src/model/Sport.h
+++ b/src/model/Sport.h
@@ -8,6 +8,7 @@
#include <QJsonObject>
#include <QJsonDocument>
#include <QString>
+#include "EventInfo.h"
using namespace std;
@@ -16,7 +17,8 @@ class SportModel : public QAbstractListModel {
public:
enum Role {
- SportName = Qt::UserRole + 1
+ EventName = Qt::UserRole + 1,
+ Competitors
};
explicit SportModel(QObject *parent = nullptr);
@@ -29,7 +31,7 @@ class SportModel : public QAbstractListModel {
void parseData();
private:
- QList<QString> m_sportList;
+ QList<EventInfo*> m_sportList;
QNetworkAccessManager m_networkManager;
QNetworkReply *m_reply = nullptr;
};
@@ -111,4 +113,4 @@ private:
};
-#endif //ITAT_CHALLANGE_OLYMPICS_SPORT_H
+#endif