VPR-Frontend/hellofx/app/src/main/java/client/MainController.java

185 lines
5.8 KiB
Java
Raw Normal View History

package client;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
2021-11-25 11:34:33 +01:00
import javafx.fxml.FXMLLoader;
import javafx.geometry.Pos;
2021-11-25 11:34:33 +01:00
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
2021-11-25 11:34:33 +01:00
import javafx.stage.Modality;
import javafx.stage.Stage;
2021-11-15 13:17:43 +01:00
import res.DataController;
import res.Event;
2021-11-25 11:34:33 +01:00
import java.io.IOException;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
2021-11-25 11:34:33 +01:00
import java.util.Objects;
public class MainController {
@FXML
private GridPane calendarGrid;
@FXML
private Label LabelMonth;
private final String[] dayNames = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"};
private final Label[] dayLabel = new Label[7];
private final VBox[] dayVBoxes = new VBox[7];
private int weekOffset;
private LocalDateTime weekStartDateTime;
public MainController() {
weekOffset = 0;
}
@FXML
public void initialize(){
createWeek();
setDates();
updateEvents();
}
private void updateEvents() {
for(VBox vBox : dayVBoxes){
vBox.getChildren().clear();
}
DataController dataController = new DataController();
ArrayList<Event> eventList = dataController.getAllVisibleEvents();
for(Event event : eventList){
addEvent(event);
}
}
@FXML
protected void onAddBtnClick(){
2021-11-25 11:34:33 +01:00
try{
FXMLLoader fxmlLoader = new FXMLLoader(MainApplication.class.getResource("create-event.fxml"));
2021-11-26 08:02:47 +01:00
Scene scene = new Scene(fxmlLoader.load(), 650, 500);
2021-11-25 11:34:33 +01:00
scene.getStylesheets().add(Objects.requireNonNull(MainApplication.class.getResource("create-event.css")).toExternalForm());
Stage stage = new Stage();
stage.setTitle("Termin erstellen");
stage.setScene(scene);
stage.initModality(Modality.APPLICATION_MODAL);
2021-11-25 15:04:40 +01:00
stage.setResizable(false);
//stage.initStyle(StageStyle.UNDECORATED);
2021-11-25 11:34:33 +01:00
stage.showAndWait();
}
catch (IOException e){
e.printStackTrace();
}
updateEvents();
}
2021-11-25 11:34:33 +01:00
private void createWeek(){
for (int i = 0; i < 7; i++) {
Label label = new Label();
label.setText(dayNames[i]);
label.setMaxHeight(Double.MAX_VALUE);
label.setMaxWidth(Double.MAX_VALUE);
label.getStyleClass().add("labelDays");
dayLabel[i] = label;
calendarGrid.add(label, i, 0);
2021-11-25 11:34:33 +01:00
ScrollPane scrollPane = new ScrollPane();
VBox vBox = new VBox();
vBox.getStyleClass().add("vBoxDays");
vBox.setSpacing(10);
dayVBoxes[i] = vBox;
scrollPane.setContent(vBox);
scrollPane.setFitToWidth(true);
scrollPane.setFitToHeight(true);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);
scrollPane.getStyleClass().add("scrollDays");
calendarGrid.add(scrollPane, i, 1);
}
}
2021-11-25 15:04:40 +01:00
private void addEvent(Event event){
VBox vBox = new VBox();
vBox.getStyleClass().add("event");
vBox.setSpacing(5);
HBox btnHBox = new HBox();
btnHBox.setAlignment(Pos.BOTTOM_RIGHT);
Button deleteBtn = new Button();
deleteBtn.setText(" X ");
deleteBtn.setOnAction(e -> {
LocalDateTime eventDate = event.getDate();
int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
dayVBoxes[day].getChildren().remove(vBox);
});
Button editBtn = new Button();
editBtn.setText("edit");
btnHBox.getChildren().add(editBtn);
btnHBox.getChildren().add(deleteBtn);
vBox.getChildren().add(btnHBox);
Label nameLabel = new Label(event.getName());
vBox.getChildren().add(nameLabel);
Label timeLabel = new Label(event.getStart() + "-" + event.getEnd());
vBox.getChildren().add(timeLabel);
Label typeLabel = new Label("Wer: " + event.getOwnerName());
vBox.getChildren().add(typeLabel);
/*
Ä, ä \u00c4, \u00e4
Ö, ö \u00d6, \u00f6
Ü, ü \u00dc, \u00fc
ß \u00df
*/
Label prioLabel = new Label("Priorit\u00e4t: " + event.getPriority());
vBox.getChildren().add(prioLabel);
if(event.isFullDay()){
Label fullDayLabel = new Label("Dieser Termin bockiert den ganzen Tag!");
vBox.getChildren().add(fullDayLabel);
}
LocalDateTime eventDate = event.getDate();
int day = (int)Duration.between(weekStartDateTime.toLocalDate().atStartOfDay(), eventDate.toLocalDate().atStartOfDay()).toDays();
if(day >= 0 && day < 7){
dayVBoxes[day].getChildren().add(vBox);
}
2021-11-25 15:04:40 +01:00
}
2021-11-25 21:12:45 +01:00
private void setDates(){
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("LLLL yyyy");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("E dd.MM");
DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("e");
LocalDateTime now = LocalDateTime.now();
int dayOfWeek = Integer.parseInt(dayOfWeekFormatter.format(now));
weekStartDateTime = now.minusDays(weekOffset * 7L + dayOfWeek - 1);
for (int i = 0; i < 7; i++) {
dayLabel[i].setText(dayFormatter.format(weekStartDateTime.plusDays(i)));
}
LabelMonth.setText(dateFormatter.format(weekStartDateTime));
2021-11-25 21:12:45 +01:00
}
}