171 lines
3.9 KiB
Markdown
171 lines
3.9 KiB
Markdown
# Olympia 2024 Events
|
|
> View updated Events with its Competitors and Rankings of all Disciplines
|
|
|
|
*Olympia 2024 Events* always displays up to date information of the 2024
|
|
Olympics in Paris. It achieves this by fetching the `olympics.com` API.
|
|
|
|
We use the Model-View-Delegate pattern to synchronize the API data in C++ with
|
|
the UI-Widgets defined in QML. For this we implement the API data as a Model
|
|
which can be seen and interacted with by QML Components.
|
|
|
|
All code, qml definitions and images, etc are compiled into a single binary that
|
|
is not dependent on any resources on relative paths anymore.
|
|
|
|
On startup the default discipline *Archery* will be fetched and shown on the
|
|
EventsPage. From here the user has three options. You can change the discipline
|
|
from the Dropdown-Menu (Combobox) in the top left (also note the changing
|
|
pictograms of the discipline); Filter the EventNames with the Search field in
|
|
the top right; or click on an Event.
|
|
|
|
When clicking on an Event, the user is redirected to the EventInfoPage. Here you
|
|
can see Information about all Competitors that took part in the Event. When you
|
|
are done, you can go back to the EventsPage with the button in the top left.
|
|
|
|
## Galery
|
|
|
|
<table>
|
|
<tr>
|
|
<td><img src="doc/events_page_combobox.png"/></td>
|
|
<td><img src="doc/events_page_textfield.png"/></td>
|
|
<td><img src="doc/event_info.png"/></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Select discipline</td>
|
|
<td>Filter by Event</td>
|
|
<td>View Competitor</td>
|
|
</tr>
|
|
</table>
|
|
|
|
## Getting Started
|
|
|
|
### Dependencies
|
|
|
|
- Qt6
|
|
|
|
### Installation
|
|
|
|
```sh
|
|
git clone git@gitlab.kit.edu:ugmgt/itat_challenge_2024.git
|
|
# or download release
|
|
cd itat_challenge_2024
|
|
cmake -B build
|
|
cmake --build build
|
|
./build/itat_challenge_olympics
|
|
```
|
|
|
|
## Code Structure
|
|
|
|
### UML Diagram
|
|
|
|
```plantuml
|
|
@startuml
|
|
allowmixing
|
|
set namespaceSeparator none
|
|
skinparam ranksep 10
|
|
|
|
package C++ <<Frame>> {
|
|
class Application {
|
|
QGuiApplication app
|
|
QmlComponent component
|
|
SportModel model
|
|
FilterModel<SportModel> filter
|
|
}
|
|
|
|
class SportModel {
|
|
String discipline
|
|
<EventInfo> model
|
|
request(String discipline)
|
|
parseData()
|
|
}
|
|
|
|
class FilterModel {
|
|
void setFilterFixedString(String)
|
|
}
|
|
|
|
class EventInfo {
|
|
String eventName
|
|
List<Competitor> competitors
|
|
}
|
|
|
|
class Competitor {
|
|
String name
|
|
String code
|
|
String noc
|
|
}
|
|
}
|
|
|
|
package QML <<Frame>> {
|
|
|
|
component EventInfoPage {
|
|
component [Page] as EIPage {
|
|
component [ToolBar] as EIToolBar
|
|
component [ListView] as EILisView
|
|
}
|
|
}
|
|
|
|
EIToolBar -[hidden]- EILisView
|
|
|
|
component EventsPage {
|
|
component [Page] as EPage {
|
|
component [ToolBar] as EToolBar
|
|
component [Column] as EColumn {
|
|
component [Row] as ERow {
|
|
component [ComboBox] as EComboBox
|
|
component [TextField] as ETextField
|
|
}
|
|
component [ListView] as EListView
|
|
}
|
|
}
|
|
}
|
|
|
|
EToolBar -[hidden]- EColumn
|
|
ERow -[hidden]- EListView
|
|
|
|
component application.qml {
|
|
component ApplicationWindow {
|
|
component StackView
|
|
}
|
|
}
|
|
}
|
|
|
|
'application.qml -u- a
|
|
'Application -r- a
|
|
|
|
Application *-- "1" SportModel
|
|
Application *-- "1" FilterModel
|
|
|
|
FilterModel "1" o-- "1" SportModel
|
|
|
|
SportModel *-- "0..*" EventInfo
|
|
EventInfo *-- "0..*" Competitor
|
|
|
|
Application <.l. application.qml
|
|
StackView <.. EventInfoPage
|
|
StackView <.. EventsPage
|
|
|
|
EComboBox "request()" .> SportModel
|
|
|
|
EComboBox -[hidden]u- ETextField
|
|
|
|
SportModel "View" .> EListView
|
|
FilterModel "View" .> EListView
|
|
ETextField "Control" .r.> FilterModel
|
|
|
|
EILisView <. "View" Competitor
|
|
|
|
cloud api.olympics.com
|
|
() REST
|
|
REST - api.olympics.com
|
|
|
|
SportModel -( REST
|
|
|
|
application.qml -[hidden]u- Application
|
|
@enduml
|
|
```
|
|
|
|
## Authors
|
|
|
|
- **Silas Stulz** (ugmgt, 2468197) - *Initial Work*
|
|
- **Gero Beckmann** (ukpfm, 2409754) - *Initial Work*
|
|
|