Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions include/MainWindow.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include <QStandardItemModel>
#include <QModelIndex>
#include <QTranslator>
#include <QHash>
#include <QStringList>

void applyTranslator(const QString &locale);

Expand All @@ -33,6 +35,9 @@ class MainWindow : public QMainWindow
private:
Ui::MainWindow *ui;

void load_universities(const QString &path);
QHash<QString, QStringList> departments_by_university;

QStandardItemModel *university_model;
QStandardItemModel *department_model;

Expand Down
3 changes: 3 additions & 0 deletions resources/resources.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
<file>icons/uom_logo.png</file>
<file>icons/unibackpack.png</file>

<!-- Data -->
<file>universities.json</file>

<!-- Lists -->
<file>lists/University of Western Macedonia/Informatics/pacman_list.txt</file>
<file>lists/University of Western Macedonia/Informatics/apt_list.txt</file>
Expand Down
17 changes: 17 additions & 0 deletions resources/universities.json
Original file line number Diff line number Diff line change
@@ -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"]
}
]
57 changes: 37 additions & 20 deletions src/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
#include <QStandardItemModel>
#include <QIcon>
#include <QTextEdit>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>

void applyTranslator(const QString &locale) {
static QTranslator elTranslator;
Expand Down Expand Up @@ -39,17 +43,7 @@ MainWindow::MainWindow(QWidget *parent)
university_model = new QStandardItemModel(this);
department_model = new QStandardItemModel(this);

QList<QPair<QString, QString>> 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;
Expand Down Expand Up @@ -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);
Expand All @@ -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();

Expand Down