add and edit task list
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package ch.zhaw.gartenverwaltung;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
||||
import ch.zhaw.gartenverwaltung.bootstrap.Inject;
|
||||
import ch.zhaw.gartenverwaltung.io.PlantList;
|
||||
import ch.zhaw.gartenverwaltung.models.Garden;
|
||||
@@ -10,14 +11,18 @@ import ch.zhaw.gartenverwaltung.types.Crop;
|
||||
import ch.zhaw.gartenverwaltung.types.Pest;
|
||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||
import ch.zhaw.gartenverwaltung.types.Task;
|
||||
import javafx.beans.property.ListProperty;
|
||||
import javafx.beans.property.SimpleListProperty;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.*;
|
||||
import javafx.scene.image.Image;
|
||||
import javafx.scene.image.ImageView;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.layout.Priority;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -35,7 +40,12 @@ public class CropDetailController {
|
||||
@Inject
|
||||
private Garden garden;
|
||||
|
||||
@Inject
|
||||
AppLoader appLoader;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(CropDetailController.class.getName());
|
||||
private final ListProperty<Task> taskListProperty = new SimpleListProperty<>(FXCollections.observableArrayList());
|
||||
private final ListProperty<Pest> pestListProperty = new SimpleListProperty<>(FXCollections.observableArrayList());
|
||||
|
||||
@FXML
|
||||
private ImageView imageView;
|
||||
@@ -52,9 +62,6 @@ public class CropDetailController {
|
||||
@FXML
|
||||
private Label description_label;
|
||||
|
||||
@FXML
|
||||
private VBox growthPhases_vbox;
|
||||
|
||||
@FXML
|
||||
private Label location_label;
|
||||
|
||||
@@ -64,9 +71,6 @@ public class CropDetailController {
|
||||
@FXML
|
||||
private Button location_button;
|
||||
|
||||
@FXML
|
||||
private VBox pests_vbox;
|
||||
|
||||
@FXML
|
||||
private Label soil_label;
|
||||
|
||||
@@ -74,11 +78,17 @@ public class CropDetailController {
|
||||
private Label spacing_label;
|
||||
|
||||
@FXML
|
||||
private Button editTaskList_button;
|
||||
private Button addTask_button;
|
||||
|
||||
@FXML
|
||||
void editTaskList() {
|
||||
private ListView<Task> taskList_listView;
|
||||
|
||||
@FXML
|
||||
private ListView<Pest> pests_listView;
|
||||
|
||||
@FXML
|
||||
void addTask() throws IOException {
|
||||
createTaskDialog(true, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,25 +138,65 @@ public class CropDetailController {
|
||||
}
|
||||
area_label.setText("");
|
||||
location_label.setText("");
|
||||
createTaskLists(crop);
|
||||
createPestList(plant);
|
||||
|
||||
setTaskListProperty(crop);
|
||||
taskList_listView.itemsProperty().bind(taskListProperty);
|
||||
|
||||
pestListProperty.addAll(plant.pests());
|
||||
pests_listView.itemsProperty().bind(pestListProperty);
|
||||
|
||||
|
||||
} catch (HardinessZoneNotSetException | IOException e) {
|
||||
throw new PlantNotFoundException();
|
||||
}
|
||||
setIconToButton(editTaskList_button, "editIcon.png");
|
||||
setIconToButton(addTask_button, "addIcon.png");
|
||||
setIconToButton(area_button, "areaIcon.png");
|
||||
setIconToButton(location_button, "locationIcon.png");
|
||||
setCellFactoryPests();
|
||||
setCellFactoryTasks();
|
||||
}
|
||||
|
||||
private void createTaskLists(Crop crop) {
|
||||
private void setCellFactoryTasks() {
|
||||
taskList_listView.setCellFactory(param -> new ListCell<>() {
|
||||
@Override
|
||||
protected void updateItem(Task task, boolean empty) {
|
||||
super.updateItem(task, empty);
|
||||
|
||||
if (empty || task == null) {
|
||||
setText(null);
|
||||
setGraphic(null);
|
||||
} else {
|
||||
setText("");
|
||||
setGraphic(createTaskHBox(task));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setCellFactoryPests() {
|
||||
pests_listView.setCellFactory(param -> new ListCell<>() {
|
||||
@Override
|
||||
protected void updateItem(Pest pest, boolean empty) {
|
||||
super.updateItem(pest, empty);
|
||||
|
||||
if (empty || pest == null) {
|
||||
setText(null);
|
||||
setGraphic(null);
|
||||
} else {
|
||||
setText("");
|
||||
setGraphic(createPestHBox(pest));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setTaskListProperty(Crop crop) {
|
||||
crop.getCropId().ifPresent(id -> {
|
||||
List<Task> taskList;
|
||||
try {
|
||||
taskList = gardenSchedule.getTaskListForCrop(id);
|
||||
for (Task task : taskList) {
|
||||
Label label = new Label(task.getDescription());
|
||||
growthPhases_vbox.getChildren().add(label);
|
||||
}
|
||||
taskListProperty.clear();
|
||||
taskListProperty.addAll(taskList);
|
||||
} catch (IOException e) {
|
||||
// TODO: Alert
|
||||
LOG.log(Level.SEVERE, "Could not get task list for crop", e.getCause());
|
||||
@@ -154,22 +204,37 @@ public class CropDetailController {
|
||||
});
|
||||
}
|
||||
|
||||
private void createPestList(Plant plant) {
|
||||
List<Pest> pests = plant.pests();
|
||||
for (Pest pest : pests) {
|
||||
Label label = new Label(pest.name() + ":");
|
||||
label.setStyle("-fx-font-weight: bold");
|
||||
HBox hBox = new HBox();
|
||||
hBox.fillHeightProperty();
|
||||
Label label1 = new Label(pest.description());
|
||||
label1.setAlignment(Pos.TOP_LEFT);
|
||||
label1.setWrapText(true);
|
||||
label1.setMaxWidth(600);
|
||||
label1.setMaxHeight(100);
|
||||
Button button = new Button("Get Counter Measures");
|
||||
hBox.getChildren().addAll(label1, button);
|
||||
pests_vbox.getChildren().addAll(label, hBox);
|
||||
}
|
||||
private HBox createTaskHBox(Task task) {
|
||||
HBox hBox = new HBox();
|
||||
Label taskName = new Label(task.getName()+": ");
|
||||
taskName.setStyle("-fx-font-weight: bold");
|
||||
Label taskDescription = new Label(task.getDescription());
|
||||
taskDescription.setWrapText(true);
|
||||
taskDescription.setMaxWidth(2000);
|
||||
HBox.setHgrow(taskDescription, Priority.ALWAYS);
|
||||
|
||||
Button edit = new Button();
|
||||
Button delete = new Button();
|
||||
setIconToButton(edit, "editIcon.png");
|
||||
setIconToButton(delete, "deleteIcon.png");
|
||||
edit.setOnAction(getEditTaskEvent(task));
|
||||
|
||||
hBox.getChildren().addAll(taskName, taskDescription, edit, delete);
|
||||
return hBox;
|
||||
}
|
||||
|
||||
private HBox createPestHBox(Pest pest) {
|
||||
Label label = new Label(pest.name() + ": ");
|
||||
label.setStyle("-fx-font-weight: bold");
|
||||
HBox hBox = new HBox();
|
||||
hBox.fillHeightProperty();
|
||||
Label label1 = new Label(pest.description());
|
||||
label1.setAlignment(Pos.TOP_LEFT);
|
||||
label1.setWrapText(true);
|
||||
label1.setMaxWidth(600);
|
||||
Button button = new Button("Get Counter Measures");
|
||||
hBox.getChildren().addAll(label, label1, button);
|
||||
return hBox;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -184,4 +249,55 @@ public class CropDetailController {
|
||||
imageView.setPreserveRatio(true);
|
||||
button.setGraphic(imageView);
|
||||
}
|
||||
|
||||
private EventHandler<ActionEvent> getEditTaskEvent(Task task) {
|
||||
return (event) -> {
|
||||
try {
|
||||
createTaskDialog(false, task);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private void createTaskDialog(boolean newTask, Task givenTask) throws IOException {
|
||||
Dialog<Task> dialog = new Dialog<>();
|
||||
dialog.setTitle("Set Task");
|
||||
dialog.setHeaderText("Add/Edit Task:");
|
||||
dialog.setResizable(false);
|
||||
|
||||
DialogPane dialogPane = dialog.getDialogPane();
|
||||
|
||||
ButtonType saveTask;
|
||||
if(newTask) {
|
||||
saveTask = new ButtonType("Add", ButtonBar.ButtonData.OK_DONE);
|
||||
} else {
|
||||
saveTask = new ButtonType("Save", ButtonBar.ButtonData.OK_DONE);
|
||||
}
|
||||
dialogPane.getButtonTypes().addAll(saveTask, ButtonType.CANCEL);
|
||||
|
||||
if (appLoader.loadPaneToDialog("TaskFormular.fxml", dialogPane) instanceof TaskFormularController controller) {
|
||||
controller.setCorp(this.crop);
|
||||
if (!newTask) {
|
||||
controller.setTaskValue(givenTask);
|
||||
}
|
||||
dialog.setResultConverter(button -> button.equals(saveTask) ? controller.returnResult() : null);
|
||||
|
||||
dialog.showAndWait()
|
||||
.ifPresent(task -> {
|
||||
if (newTask) {
|
||||
try {
|
||||
gardenSchedule.addTask(task);
|
||||
setTaskListProperty(this.crop);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
//ToDo method to edit task
|
||||
setTaskListProperty(this.crop);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package ch.zhaw.gartenverwaltung;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.types.Crop;
|
||||
import ch.zhaw.gartenverwaltung.types.Task;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.scene.control.DatePicker;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextField;
|
||||
|
||||
public class TaskFormularController {
|
||||
Crop crop;
|
||||
|
||||
@FXML
|
||||
private TextArea description_area;
|
||||
|
||||
@FXML
|
||||
private DatePicker end_datePicker;
|
||||
|
||||
@FXML
|
||||
private TextField interval_field;
|
||||
|
||||
@FXML
|
||||
private DatePicker start_datePicker;
|
||||
|
||||
@FXML
|
||||
private TextField taskName_field;
|
||||
|
||||
|
||||
public Task returnResult() {
|
||||
Task task = new Task(taskName_field.getText(), description_area.getText(),
|
||||
start_datePicker.getValue(), end_datePicker.getValue(),
|
||||
Integer.parseInt(interval_field.getText()), crop.getCropId().get());
|
||||
return task;
|
||||
}
|
||||
|
||||
public void setCorp(Crop crop) {
|
||||
this.crop = crop;
|
||||
}
|
||||
|
||||
public void setTaskValue(Task task) {
|
||||
taskName_field.setText(task.getName());
|
||||
description_area.setText(task.getDescription());
|
||||
start_datePicker.setValue(task.getStartDate());
|
||||
end_datePicker.setValue(task.getEndDate().get());
|
||||
interval_field.setText(task.getInterval().get().toString());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user