Compare commits
6 commits
main
...
orangerot/
Author | SHA1 | Date | |
---|---|---|---|
Orangerot | 173ce00cf2 | ||
Orangerot | a2202f311e | ||
Orangerot | 184d0e538b | ||
Orangerot | 82cbc4cf2c | ||
Orangerot | 4956818d53 | ||
Orangerot | 8cf2692f65 |
|
@ -1,5 +1,5 @@
|
||||||
cmake_minimum_required(VERSION 3.28)
|
cmake_minimum_required(VERSION 3.28)
|
||||||
project(itat_challange_olympics)
|
project(itat_challenge_olympics)
|
||||||
|
|
||||||
find_package(Qt6 6.2 COMPONENTS Core Quick Quick REQUIRED)
|
find_package(Qt6 6.2 COMPONENTS Core Quick Quick REQUIRED)
|
||||||
|
|
||||||
|
@ -8,12 +8,12 @@ set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_AUTORCC ON)
|
set(CMAKE_AUTORCC ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
qt_add_executable(itat_challange_olympics src/main/main.cpp
|
qt_add_executable(itat_challenge_olympics src/main/main.cpp
|
||||||
application.qrc
|
application.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
qt_add_qml_module(itat_challange_olympics
|
qt_add_qml_module(itat_challenge_olympics
|
||||||
URI itat
|
URI itat
|
||||||
QML_FILES
|
QML_FILES
|
||||||
res/gui/application.qml
|
res/gui/application.qml
|
||||||
|
@ -83,6 +83,6 @@ qt_add_qml_module(itat_challange_olympics
|
||||||
res/pictograms/WRE_small.svg
|
res/pictograms/WRE_small.svg
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(itat_challange_olympics PRIVATE Qt6::Core Qt6::Quick Qt6::Network)
|
target_link_libraries(itat_challenge_olympics PRIVATE Qt6::Core Qt6::Quick Qt6::Network)
|
||||||
|
|
||||||
# target_link_libraries(itat_challange_olympics PRIVATE d3d12.lib dxgi.lib d3dcompiler.lib dxguid.lib)
|
# target_link_libraries(itat_challenge_olympics PRIVATE d3d12.lib dxgi.lib d3dcompiler.lib dxguid.lib)
|
||||||
|
|
170
README.md
Normal file
170
README.md
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
# 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*
|
||||||
|
|
BIN
doc/event_info.png
Normal file
BIN
doc/event_info.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
BIN
doc/events_page_combobox.png
Normal file
BIN
doc/events_page_combobox.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
BIN
doc/events_page_textfield.png
Normal file
BIN
doc/events_page_textfield.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 40 KiB |
Loading…
Reference in a new issue