diff options
author | Jonas Smedegaard <dr@jones.dk> | 2025-04-30 12:27:00 +0200 |
---|---|---|
committer | Jonas Smedegaard <dr@jones.dk> | 2025-04-30 12:43:05 +0200 |
commit | 0480c720e7e94ac0fb6111aaeea580bb9ea1b6de (patch) | |
tree | 8695bce24038a19f06ca943318dc2a759b81f62e | |
parent | 048646123f79b2bfa2eaf0fdef5ffa4822d37838 (diff) |
tie structural section to visual column in model class GUI
-rw-r--r-- | src/com.example.portfolio2/com/example/portfolio2/GUI.java | 37 | ||||
-rw-r--r-- | src/com.example.portfolio2/com/example/portfolio2/Window.java | 50 |
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), |