From 2ab31f70a368875438a03ff160a6aa6e084437f1 Mon Sep 17 00:00:00 2001 From: Ioannis Michadasis Date: Sat, 26 Sep 2026 14:13:54 +0300 Subject: [PATCH] Move university and department data to universities.json --- include/MainWindow.hpp | 5 ++++ resources/resources.qrc | 3 ++ resources/universities.json | 17 +++++++++++ src/MainWindow.cpp | 57 ++++++++++++++++++++++++------------- 4 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 resources/universities.json diff --git a/include/MainWindow.hpp b/include/MainWindow.hpp index b16c226..6972dad 100644 --- a/include/MainWindow.hpp +++ b/include/MainWindow.hpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include void applyTranslator(const QString &locale); @@ -33,6 +35,9 @@ class MainWindow : public QMainWindow private: Ui::MainWindow *ui; + void load_universities(const QString &path); + QHash departments_by_university; + QStandardItemModel *university_model; QStandardItemModel *department_model; diff --git a/resources/resources.qrc b/resources/resources.qrc index 166a4f4..3a7c5f6 100644 --- a/resources/resources.qrc +++ b/resources/resources.qrc @@ -8,6 +8,9 @@ icons/uom_logo.png icons/unibackpack.png + + universities.json + lists/University of Western Macedonia/Informatics/pacman_list.txt lists/University of Western Macedonia/Informatics/apt_list.txt diff --git a/resources/universities.json b/resources/universities.json new file mode 100644 index 0000000..698b95a --- /dev/null +++ b/resources/universities.json @@ -0,0 +1,17 @@ +[ + { + "name": "Aristotle University of Thessaloniki", + "icon": ":/icons/auth_logo.png", + "departments": ["Informatics", "Physics"] + }, + { + "name": "University of Western Macedonia", + "icon": ":/icons/uowm_logo.png", + "departments": ["Informatics", "Mechanical Engineering"] + }, + { + "name": "University of Macedonia", + "icon": ":/icons/uom_logo.png", + "departments": ["Applied Informatics", "Economics"] + } +] diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index babde77..e693dc5 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -11,6 +11,10 @@ #include #include #include +#include +#include +#include +#include void applyTranslator(const QString &locale) { static QTranslator elTranslator; @@ -39,17 +43,7 @@ MainWindow::MainWindow(QWidget *parent) university_model = new QStandardItemModel(this); department_model = new QStandardItemModel(this); - QList> universities = { - {"Aristotle University of Thessaloniki", ":/icons/auth_logo.png"}, - {"University of Western Macedonia", ":/icons/uowm_logo.png"}, - {"University of Macedonia", ":/icons/uom_logo.png"} - }; - - for (const auto &[key, iconPath] : universities) { - QStandardItem *item = new QStandardItem(QIcon(iconPath), key); - item->setData(key, Qt::UserRole); - university_model->appendRow(item); - } + load_universities(":/universities.json"); ui->listView->setModel(university_model); showing_universities = true; @@ -94,6 +88,37 @@ MainWindow::~MainWindow() { delete ui; } +void MainWindow::load_universities(const QString &path) { + QFile file(path); + if (!file.open(QIODevice::ReadOnly)) { + qWarning() << "Could not open" << path; + return; + } + + QJsonParseError error; + QJsonDocument doc = QJsonDocument::fromJson(file.readAll(), &error); + if (error.error != QJsonParseError::NoError || !doc.isArray()) { + qWarning() << "Invalid universities JSON:" << error.errorString(); + return; + } + + for (const QJsonValue &value : doc.array()) { + QJsonObject uni = value.toObject(); + QString key = uni["name"].toString(); + if (key.isEmpty()) + continue; + + QStringList departments; + for (const QJsonValue &dept : uni["departments"].toArray()) + departments << dept.toString(); + departments_by_university.insert(key, departments); + + QStandardItem *item = new QStandardItem(QIcon(uni["icon"].toString()), key); + item->setData(key, Qt::UserRole); + university_model->appendRow(item); + } +} + void MainWindow::toggle_output() { output_visible = !output_visible; ui->outputView->setVisible(output_visible); @@ -104,15 +129,7 @@ void MainWindow::on_university_selection(const QModelIndex &index) { if (showing_universities) { current_university = university_model->data(index, Qt::UserRole).toString(); - QStringList departments; - - if (current_university == "Aristotle University of Thessaloniki") { - departments << "Informatics" << "Physics"; - } else if (current_university == "University of Western Macedonia") { - departments << "Informatics" << "Mechanical Engineering"; - } else if (current_university == "University of Macedonia") { - departments << "Applied Informatics" << "Economics"; - } + const QStringList departments = departments_by_university.value(current_university); department_model->clear();