// SPDX-FileCopyrightText: 2025 Jonas Smedegaard // SPDX-FileCopyrightText: 2025 // SPDX-FileCopyrightText: 2025 // SPDX-FileCopyrightText: 2025 // SPDX-License-Identifier: GPL-3.0-or-later package com.example.portfolio2; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TextArea; /// Bachelorizer - Controller class Controller { /// Storage model private Database store; /// UI model private UI ui; /// Application view private Window view; /// clear the participation database at program launch void initialize() { store.initialize(); } /// default constructor /// /// @param store Storage model /// @param ui UI model /// @param view Application view Controller( final Database store, final UI ui, final Window view ) { this.store = store; this.ui = ui; this.view = view; } /// callback when category has been selected /// /// @param section section the category is tied to /// @param category selected category // TODO: require a UI instead void onCategorySelected( final GUI.Section section, final String category ) { view.clearSelections(section); view.setOptions(section, store.selectProgram(category)); } /// callback when activity has been selected /// /// @param combo involved activity box /// @param select selected item /// @param area whole text area void onActivitySelected( final ComboBox combo, final ComboBox select, final TextArea area ) { // pass the value chosen in the box addActivity(select.getValue(), area); // update text area based on category choice // // Users can choose from the ComboBox, // and string (activity) and the area will then update. updateArea(combo, area); } /// callback when subject module has been selected /// /// @param subject1 involved 1st column subject module box /// @param subject2 involved 2nd column subject module box void onSubjectModuleSelected( final ComboBox subject1, final ComboBox subject2 ) { // remove chosen option from opposite subject module box for (String sub: store.getAllSubjects()) { if (sub.equals(subject1.getValue())) { subject2.getItems().remove( subject1.getValue()); } else if ( !sub.equals(subject1.getValue()) && !subject2.getItems().contains(sub) ) { subject2.getItems().add(sub); } } } /// add participation to database /// @param s activity identifier /// @param textArea whole text area void addActivity(final String s, final TextArea textArea) { store.addParticipation(store.getActivityIndeks(s)); } /// update text area for an activity box /// /// Clears the text area /// and adds all activity names from activities in participation. /// /// @param combo involved activity box /// @param textArea whole text area void updateArea( final ComboBox combo, final TextArea textArea ) { textArea.clear(); for (String s: store.getParticipation(combo.getValue()) ) { textArea.appendText(s + "\n"); } } /// update label with current ECTS of program type /// @param ectslabel text display area for ECTS points /// @param comboBox involved activity box void updateEcts( final Label ectslabel, final ComboBox comboBox ) { ectslabel.setText("ECTS: " + store.getSumEcts(comboBox.getValue())); } void fillElective(final ComboBox electiveBox) { electiveBox.getItems().addAll(store.getAllActivities()); } }