package com.example.schedulerapp; import javafx.geometry.HPos; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.GridPane; import java.util.ArrayList; public class DailyView extends GridPane implements ModelSubscriber{ Model model; iModel iModel; ArrayList<Label> times; public DailyView() { //list of time labels times = new ArrayList<Label>(); for (int i = 8; i < 24; i++){ String j = i + "00"; String k = i + "30"; if (i < 10) { j = "0" + j; k = "0" + k; } Label jLabel = new Label(j); jLabel.setPrefHeight(20); //jLabel.setStyle(" -fx-border-color: black"); Label kLabel = new Label(k); kLabel.setPrefHeight(20); //kLabel.setStyle(" -fx-border-color: black"); times.add(jLabel); times.add(kLabel); } // add to gridpane - time axis never changes int i = 1; for (Label time : times){ this.add(time, 0, i); i++; } } public void setiModel(iModel imodel) { this.iModel = imodel; } public void setModel(Model newModel) { this.model = newModel; //now can draw for first time draw(); } public void draw(){ //clear this.getChildren().clear(); //add to gridpane - time axis never changes int i = 1; for (Label time : times){ this.add(time, 0, i); i++; } int col = 1; //start on the second column int row; //depends on start time int length; //depends on end time - start time // update employee axis and schedule display ArrayList<Shift> schedule = model.getDailySchedule(); for (Shift shift : schedule){ Label name = new Label(Integer.toString(shift.getEmployeeID())); GridPane.setHalignment(name, HPos.CENTER); this.add(name, col, 0); //todo: display name instead //convert from start time to offset, granularity in 30 min increments row = (shift.getStart().getHour() - 8 ) * 2 + 1; if (shift.getStart().getMinute() == 30) row++; //calculate length length = (shift.getEnd().getHour() - shift.getStart().getHour()) * 2; if (shift.getStart().getMinute() == 30) length--; if (shift.getEnd().getMinute() == 30) length++; //text formatting String text; if (shift.getStart().getHour() < 10) text = "0" + shift.getStart().getHour(); else text = String.valueOf(shift.getStart().getHour()); if (shift.getStart().getMinute() == 0) text += "00"; else text += "30"; //only two options for minutes text += "\n - \n"; if (shift.getEnd().getHour() < 10) text += "0" + shift.getEnd().getHour(); else text += String.valueOf(shift.getEnd().getHour()); if (shift.getEnd().getMinute() == 0) text += "00"; else text += "30"; //only two options for minutes Button shiftRep = new Button(text); shiftRep.setMaxHeight(700); //so it always fills its region shiftRep.setPrefWidth(60); GridPane.setFillHeight(shiftRep, true); GridPane.setFillWidth(shiftRep, true); //css styling //todo: different colour for current user shiftRep.setStyle("-fx-background-color: skyblue"); this.add(shiftRep, col, row, 1, length); col++; } } @Override public void modelChanged() { draw(); } }