Newer
Older
import javafx.geometry.HPos;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import java.util.ArrayList;
import java.util.Arrays;
public class WeeklyView extends GridPane implements ModelSubscriber{
Model model;
ArrayList<Label> times;
ArrayList<Label> days;
public WeeklyView(){
//list of time labels
times = new ArrayList<>();
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);
Label kLabel = new Label(k);
times.add(jLabel);
times.add(kLabel);
}
for (Label label : times){
label.setPrefHeight(20);
//label.setStyle(" -fx-border-color: black");
}
//list of day labels
days = new ArrayList<>();
days.addAll(Arrays.asList(new Label("Sunday"), new Label("Monday"), new Label("Tuesday"),
new Label("Wednesday"), new Label("Thursday"), new Label("Friday"), new Label("Saturday")));
for (Label label : days){
GridPane.setHalignment(label, HPos.CENTER);
label.setAlignment(Pos.CENTER);
label.setPrefWidth(80);
//label.setStyle(" -fx-border-color: black");
}
}
public void setModel(Model newModel) {
this.model = newModel;
//now can draw for first time
draw();
}
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
@Override
public void modelChanged() {
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++;
}
//add to gridpane - day axis never changes
i = 1;
for (Label time : days){
this.add(time, i, 0);
i++;
}
int col; //depends on day of week
int row; //depends on start time
int length; //depends on end time - start time
//get updated schedule
ArrayList<Shift> schedule = model.getWeeklySchedule();
for (Shift shift : schedule){
col = (shift.getStart().getDayOfWeek().getValue() % 7) + 1; //need Sunday=7 to be 1
//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.setMaxWidth(100);
GridPane.setFillHeight(shiftRep, true);
GridPane.setFillWidth(shiftRep, true);
//css styling
//todo: different colour for current day
shiftRep.setStyle("-fx-background-color: skyblue");
this.add(shiftRep, col, row, 1, length);
}
}