// SPDX-FileCopyrightText: 2025 // SPDX-FileCopyrightText: 2025 // SPDX-FileCopyrightText: 2025 Jonas Smedegaard // SPDX-FileCopyrightText: 2025 // SPDX-License-Identifier: GPL-3.0-or-later package dk.biks.bachelorizer; import java.util.List; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.TextArea; /// Bachelorizer - Controller class Controller { /// Storage model private Storage store; /// UI model private UI ui; /// Application view private Window view; /// Parameters passed on command-line and in JNLP file private List parameters; /// clear the participation choices at program launch void initialize() { store.initialize(); } /// default constructor /// /// @param store Storage model /// @param ui UI model /// @param view Application view Controller( final Storage store, final UI ui, final Window view ) { this.store = store; this.ui = ui; this.view = view; } /// parse application parameters /// /// Parse parameters as GNU-style options and arguments, /// i.e. treat dash-prefixed words as options /// until an optional first bare "--", /// taking first non-option argument as name of student /// and remaining ones as activity selections. /// /// @param parameters Application parameters public final void setParameters(final List parameters) { boolean optionsDone = false; boolean studentAssigned = false; /* TODO for (String item: parameters) { if (!optionsDone && item.matches("--")) { optionsDone = true; } else if (!item.startsWith("-")) { if (!studentAssigned) { store.addStudent(item); studentAssigned = true; // TODO ui.showStudent( // model.getStudentName()); } else { store.addParticipation( store.getActivityIndeks(item)); // TODO ui.showActivities(); } } } */ } /// 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 item selected activity /// @param area whole text area void onActivitySelected( final ComboBox combo, final String item, final TextArea area ) { // pass the value chosen in the box store.addParticipation(store.getActivityIndeks(item)); // 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); } } } /// 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()); } }