aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2025-04-30 12:27:00 +0200
committerJonas Smedegaard <dr@jones.dk>2025-04-30 12:43:05 +0200
commit0480c720e7e94ac0fb6111aaeea580bb9ea1b6de (patch)
tree8695bce24038a19f06ca943318dc2a759b81f62e /src
parent048646123f79b2bfa2eaf0fdef5ffa4822d37838 (diff)
tie structural section to visual column in model class GUI
Diffstat (limited to 'src')
-rw-r--r--src/com.example.portfolio2/com/example/portfolio2/GUI.java37
-rw-r--r--src/com.example.portfolio2/com/example/portfolio2/Window.java50
2 files changed, 64 insertions, 23 deletions
diff --git a/src/com.example.portfolio2/com/example/portfolio2/GUI.java b/src/com.example.portfolio2/com/example/portfolio2/GUI.java
index e1f8fb3..8135ecb 100644
--- a/src/com.example.portfolio2/com/example/portfolio2/GUI.java
+++ b/src/com.example.portfolio2/com/example/portfolio2/GUI.java
@@ -12,6 +12,39 @@ public class GUI extends UI {
// (declared explicitly only to silence javadoc)
public GUI() { }
- // TODO: extend with sections specific to graphical interface,
- // e.g. widgets like statusbar or menu.
+ /// structural sections of user interface
+ public enum Section {
+
+ /// main programme
+ PROGRAM("Program", 0),
+
+ /// first subject module
+ SUBJECT1("Subject 1", 1),
+
+ /// second subject module
+ SUBJECT2("Subject 2", 2),
+
+ /// elective courses
+ ELECTIVE("Elective", 3);
+
+ /// text label
+ public final String label;
+
+ /// column position
+ public final int column;
+
+ /// instantiation
+ ///
+ /// @param label text label
+ /// @param column column position
+ private Section(String label, int column) {
+ this.label = label;
+ this.column = column;
+ }
+ }
+
+/* public static UI.Section asUISection () {
+ return UI.Section.valueOf(this);
+ }
+*/
}
diff --git a/src/com.example.portfolio2/com/example/portfolio2/Window.java b/src/com.example.portfolio2/com/example/portfolio2/Window.java
index 36be369..93d522b 100644
--- a/src/com.example.portfolio2/com/example/portfolio2/Window.java
+++ b/src/com.example.portfolio2/com/example/portfolio2/Window.java
@@ -49,7 +49,9 @@ public final class Window extends Application {
private Database store = new Database();
/// UI model
- private UI ui = new GUI();
+ ///
+ /// Must be subclass GUI to cover columns.
+ private GUI ui = new GUI();
/// Application controller
private Controller con = new Controller(store, ui, this);
@@ -61,10 +63,10 @@ public final class Window extends Application {
// define list of columns based on their names
List<ActivityColumn> columns = List.of(
- new ActivityColumn(UI.Section.PROGRAM),
- new ActivityColumn(UI.Section.SUBJECT1),
- new ActivityColumn(UI.Section.SUBJECT2),
- new ActivityColumn(UI.Section.ELECTIVE)
+ new ActivityColumn(GUI.Section.PROGRAM),
+ new ActivityColumn(GUI.Section.SUBJECT1),
+ new ActivityColumn(GUI.Section.SUBJECT2),
+ new ActivityColumn(GUI.Section.ELECTIVE)
);
// define button functionality for each activity column
@@ -90,7 +92,7 @@ public final class Window extends Application {
// handle each category box
switch (col.section) {
- case UI.Section.PROGRAM -> {
+ case GUI.Section.PROGRAM -> {
col.categoryCombo.getItems().addAll(
"HumTek", "NatBach");
col.categoryCombo.setOnAction(event -> {
@@ -101,23 +103,24 @@ public final class Window extends Application {
});
}
// TODO: use the list for filling the box
- case UI.Section.SUBJECT1 -> {
+ case GUI.Section.SUBJECT1 -> {
col.categoryCombo.getItems().addAll(
"Computer Science",
"Informatik",
"Astrology");
col.categoryCombo.setOnAction(event -> {
con.onSubjectModuleSelected(
- col.categoryCombo,
- columns.get(2)
- .categoryCombo);
+ col.categoryCombo,
+ columns.get(
+ GUI.Section.SUBJECT2.column)
+ .categoryCombo);
con.onCategorySelected(
col.categoryCombo.getValue(),
col.activitySelect,
col.area);
});
}
- case UI.Section.SUBJECT2 -> {
+ case GUI.Section.SUBJECT2 -> {
col.categoryCombo.getItems().addAll(
"Computer Science",
"Informatik",
@@ -125,16 +128,17 @@ public final class Window extends Application {
// TODO: figure out a better way...
col.categoryCombo.setOnAction(event -> {
con.onSubjectModuleSelected(
- col.categoryCombo,
- columns.get(1)
- .categoryCombo);
+ col.categoryCombo,
+ columns.get(
+ GUI.Section.SUBJECT1.column)
+ .categoryCombo);
con.onCategorySelected(
col.categoryCombo.getValue(),
col.activitySelect,
col.area);
});
}
- case UI.Section.ELECTIVE -> {
+ case GUI.Section.ELECTIVE -> {
// hide useless box
col.categoryCombo.setVisible(false);
@@ -146,10 +150,14 @@ public final class Window extends Application {
// define HBox and scene for columns
HBox root = new HBox(
- columns.get(0).asVBox(),
- columns.get(1).asVBox(),
- columns.get(2).asVBox(),
- columns.get(3).asVBox());
+ columns.get(GUI.Section.PROGRAM.column)
+ .asVBox(),
+ columns.get(GUI.Section.SUBJECT1.column)
+ .asVBox(),
+ columns.get(GUI.Section.SUBJECT2.column)
+ .asVBox(),
+ columns.get(GUI.Section.ELECTIVE.column)
+ .asVBox());
Scene scene = new Scene(
root, WINDOW_WIDTH, WINDOW_HEIGHT);
stage.setTitle(
@@ -174,7 +182,7 @@ public final class Window extends Application {
/// @param area description of chosen activities
/// @param ectsLabel text to display ECTS points
private record ActivityColumn(
- UI.Section section,
+ GUI.Section section,
Label nameLabel,
ComboBox<String> categoryCombo,
ComboBox<String> activitySelect,
@@ -185,7 +193,7 @@ public final class Window extends Application {
/// column of activities
///
/// @param section structural section for column
- public ActivityColumn(UI.Section section) {
+ public ActivityColumn(GUI.Section section) {
this(
section,
new Label(section.label),