Compare commits
No commits in common. "2312149256926a757a9909f41a63839bf1a30b63" and "ee67c83b2246419c148a97e0cd12339b055ca8aa" have entirely different histories.
2312149256
...
ee67c83b22
|
@ -1,6 +1,5 @@
|
||||||
package ch.zhaw.gartenverwaltung;
|
package ch.zhaw.gartenverwaltung;
|
||||||
|
|
||||||
import ch.zhaw.gartenverwaltung.bootstrap.AppLoader;
|
|
||||||
import ch.zhaw.gartenverwaltung.bootstrap.Inject;
|
import ch.zhaw.gartenverwaltung.bootstrap.Inject;
|
||||||
import ch.zhaw.gartenverwaltung.io.PlantList;
|
import ch.zhaw.gartenverwaltung.io.PlantList;
|
||||||
import ch.zhaw.gartenverwaltung.models.Garden;
|
import ch.zhaw.gartenverwaltung.models.Garden;
|
||||||
|
@ -11,18 +10,14 @@ import ch.zhaw.gartenverwaltung.types.Crop;
|
||||||
import ch.zhaw.gartenverwaltung.types.Pest;
|
import ch.zhaw.gartenverwaltung.types.Pest;
|
||||||
import ch.zhaw.gartenverwaltung.types.Plant;
|
import ch.zhaw.gartenverwaltung.types.Plant;
|
||||||
import ch.zhaw.gartenverwaltung.types.Task;
|
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.fxml.FXML;
|
||||||
import javafx.geometry.Pos;
|
import javafx.geometry.Pos;
|
||||||
import javafx.scene.control.*;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.HBox;
|
import javafx.scene.layout.HBox;
|
||||||
import javafx.scene.layout.Priority;
|
import javafx.scene.layout.VBox;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -40,12 +35,7 @@ public class CropDetailController {
|
||||||
@Inject
|
@Inject
|
||||||
private Garden garden;
|
private Garden garden;
|
||||||
|
|
||||||
@Inject
|
|
||||||
AppLoader appLoader;
|
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(CropDetailController.class.getName());
|
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
|
@FXML
|
||||||
private ImageView imageView;
|
private ImageView imageView;
|
||||||
|
@ -62,6 +52,9 @@ public class CropDetailController {
|
||||||
@FXML
|
@FXML
|
||||||
private Label description_label;
|
private Label description_label;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private VBox growthPhases_vbox;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Label location_label;
|
private Label location_label;
|
||||||
|
|
||||||
|
@ -71,6 +64,9 @@ public class CropDetailController {
|
||||||
@FXML
|
@FXML
|
||||||
private Button location_button;
|
private Button location_button;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private VBox pests_vbox;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Label soil_label;
|
private Label soil_label;
|
||||||
|
|
||||||
|
@ -78,17 +74,11 @@ public class CropDetailController {
|
||||||
private Label spacing_label;
|
private Label spacing_label;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Button addTask_button;
|
private Button editTaskList_button;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ListView<Task> taskList_listView;
|
void editTaskList() {
|
||||||
|
|
||||||
@FXML
|
|
||||||
private ListView<Pest> pests_listView;
|
|
||||||
|
|
||||||
@FXML
|
|
||||||
void addTask() throws IOException {
|
|
||||||
createTaskDialog(true, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -138,65 +128,25 @@ public class CropDetailController {
|
||||||
}
|
}
|
||||||
area_label.setText("");
|
area_label.setText("");
|
||||||
location_label.setText("");
|
location_label.setText("");
|
||||||
|
createTaskLists(crop);
|
||||||
setTaskListProperty(crop);
|
createPestList(plant);
|
||||||
taskList_listView.itemsProperty().bind(taskListProperty);
|
|
||||||
|
|
||||||
pestListProperty.addAll(plant.pests());
|
|
||||||
pests_listView.itemsProperty().bind(pestListProperty);
|
|
||||||
|
|
||||||
|
|
||||||
} catch (HardinessZoneNotSetException | IOException e) {
|
} catch (HardinessZoneNotSetException | IOException e) {
|
||||||
throw new PlantNotFoundException();
|
throw new PlantNotFoundException();
|
||||||
}
|
}
|
||||||
setIconToButton(addTask_button, "addIcon.png");
|
setIconToButton(editTaskList_button, "editIcon.png");
|
||||||
setIconToButton(area_button, "areaIcon.png");
|
setIconToButton(area_button, "areaIcon.png");
|
||||||
setIconToButton(location_button, "locationIcon.png");
|
setIconToButton(location_button, "locationIcon.png");
|
||||||
setCellFactoryPests();
|
|
||||||
setCellFactoryTasks();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setCellFactoryTasks() {
|
private void createTaskLists(Crop crop) {
|
||||||
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 -> {
|
crop.getCropId().ifPresent(id -> {
|
||||||
List<Task> taskList;
|
List<Task> taskList;
|
||||||
try {
|
try {
|
||||||
taskList = gardenSchedule.getTaskListForCrop(id);
|
taskList = gardenSchedule.getTaskListForCrop(id);
|
||||||
taskListProperty.clear();
|
for (Task task : taskList) {
|
||||||
taskListProperty.addAll(taskList);
|
Label label = new Label(task.getDescription());
|
||||||
|
growthPhases_vbox.getChildren().add(label);
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
// TODO: Alert
|
// TODO: Alert
|
||||||
LOG.log(Level.SEVERE, "Could not get task list for crop", e.getCause());
|
LOG.log(Level.SEVERE, "Could not get task list for crop", e.getCause());
|
||||||
|
@ -204,26 +154,9 @@ public class CropDetailController {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private HBox createTaskHBox(Task task) {
|
private void createPestList(Plant plant) {
|
||||||
HBox hBox = new HBox();
|
List<Pest> pests = plant.pests();
|
||||||
Label taskName = new Label(task.getName()+": ");
|
for (Pest pest : pests) {
|
||||||
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 label = new Label(pest.name() + ":");
|
||||||
label.setStyle("-fx-font-weight: bold");
|
label.setStyle("-fx-font-weight: bold");
|
||||||
HBox hBox = new HBox();
|
HBox hBox = new HBox();
|
||||||
|
@ -232,9 +165,11 @@ public class CropDetailController {
|
||||||
label1.setAlignment(Pos.TOP_LEFT);
|
label1.setAlignment(Pos.TOP_LEFT);
|
||||||
label1.setWrapText(true);
|
label1.setWrapText(true);
|
||||||
label1.setMaxWidth(600);
|
label1.setMaxWidth(600);
|
||||||
|
label1.setMaxHeight(100);
|
||||||
Button button = new Button("Get Counter Measures");
|
Button button = new Button("Get Counter Measures");
|
||||||
hBox.getChildren().addAll(label, label1, button);
|
hBox.getChildren().addAll(label1, button);
|
||||||
return hBox;
|
pests_vbox.getChildren().addAll(label, hBox);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -249,55 +184,4 @@ public class CropDetailController {
|
||||||
imageView.setPreserveRatio(true);
|
imageView.setPreserveRatio(true);
|
||||||
button.setGraphic(imageView);
|
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);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
package ch.zhaw.gartenverwaltung;
|
|
||||||
|
|
||||||
import ch.zhaw.gartenverwaltung.types.Crop;
|
|
||||||
import ch.zhaw.gartenverwaltung.types.GrowthPhaseType;
|
|
||||||
import ch.zhaw.gartenverwaltung.types.Task;
|
|
||||||
import javafx.fxml.FXML;
|
|
||||||
import javafx.fxml.Initializable;
|
|
||||||
import javafx.scene.control.DateCell;
|
|
||||||
import javafx.scene.control.DatePicker;
|
|
||||||
import javafx.scene.control.TextArea;
|
|
||||||
import javafx.scene.control.TextField;
|
|
||||||
import javafx.util.Callback;
|
|
||||||
|
|
||||||
import java.net.URL;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.util.ResourceBundle;
|
|
||||||
|
|
||||||
public class TaskFormularController implements Initializable {
|
|
||||||
private 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());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Callback<DatePicker, DateCell> getDayCellFactory() {
|
|
||||||
|
|
||||||
return (datePicker) -> new DateCell() {
|
|
||||||
private final LocalDate today = LocalDate.now();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateItem(LocalDate item, boolean empty) {
|
|
||||||
super.updateItem(item, empty);
|
|
||||||
setDisable(true);
|
|
||||||
setStyle("-fx-background-color: #ffc0cb;");
|
|
||||||
|
|
||||||
if (item.compareTo(today) > 0 && item.compareTo(crop.getStartDate()) > 0) {
|
|
||||||
setDisable(false);
|
|
||||||
setStyle("-fx-background-color: #32CD32;");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void initialize(URL location, ResourceBundle resources) {
|
|
||||||
start_datePicker.setDayCellFactory(getDayCellFactory());
|
|
||||||
start_datePicker.setEditable(false);
|
|
||||||
|
|
||||||
end_datePicker.setDayCellFactory(getDayCellFactory());
|
|
||||||
end_datePicker.setEditable(false);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -106,7 +106,6 @@ public class JsonTaskList implements TaskList {
|
||||||
if(task.getId() == 0) {
|
if(task.getId() == 0) {
|
||||||
task.withId(idProvider.incrementAndGet());
|
task.withId(idProvider.incrementAndGet());
|
||||||
}
|
}
|
||||||
taskMap.put(task.getId(), task);
|
|
||||||
writeTaskListToFile();
|
writeTaskListToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
<?import javafx.geometry.Insets?>
|
<?import javafx.geometry.Insets?>
|
||||||
<?import javafx.scene.control.Button?>
|
<?import javafx.scene.control.Button?>
|
||||||
<?import javafx.scene.control.Label?>
|
<?import javafx.scene.control.Label?>
|
||||||
<?import javafx.scene.control.ListView?>
|
|
||||||
<?import javafx.scene.control.ScrollPane?>
|
<?import javafx.scene.control.ScrollPane?>
|
||||||
<?import javafx.scene.image.ImageView?>
|
<?import javafx.scene.image.ImageView?>
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
<?import javafx.scene.layout.AnchorPane?>
|
||||||
|
@ -13,11 +12,13 @@
|
||||||
<?import javafx.scene.layout.RowConstraints?>
|
<?import javafx.scene.layout.RowConstraints?>
|
||||||
<?import javafx.scene.layout.VBox?>
|
<?import javafx.scene.layout.VBox?>
|
||||||
|
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="785.0" prefWidth="899.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.CropDetailController">
|
|
||||||
|
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="785.0" prefWidth="899.0"
|
||||||
|
xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.CropDetailController">
|
||||||
<children>
|
<children>
|
||||||
<ScrollPane fitToWidth="true" prefHeight="759.0" prefWidth="664.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
<ScrollPane fitToWidth="true" prefHeight="759.0" prefWidth="664.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
||||||
<content>
|
<content>
|
||||||
<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="781.0" prefWidth="897.0">
|
<VBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="503.0" prefWidth="897.0">
|
||||||
<padding>
|
<padding>
|
||||||
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
|
||||||
</padding>
|
</padding>
|
||||||
|
@ -84,22 +85,22 @@
|
||||||
<Insets bottom="10.0" />
|
<Insets bottom="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Label>
|
</Label>
|
||||||
<ListView fx:id="taskList_listView" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="200.0" prefWidth="877.0" VBox.vgrow="ALWAYS">
|
<VBox fx:id="growthPhases_vbox" prefHeight="135.0" prefWidth="879.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="10.0" />
|
<Insets bottom="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</ListView>
|
</VBox>
|
||||||
<Button fx:id="addTask_button" mnemonicParsing="false" onAction="#addTask" prefHeight="25.0" prefWidth="45.0">
|
<Button fx:id="editTaskList_button" mnemonicParsing="false" onAction="#editTaskList" prefHeight="25.0" prefWidth="45.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="10.0" />
|
<Insets bottom="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</Button>
|
</Button>
|
||||||
<Label text="Pests:" />
|
<Label text="Pests:" />
|
||||||
<ListView fx:id="pests_listView" maxHeight="1.7976931348623157E308" prefHeight="200.0" prefWidth="200.0" VBox.vgrow="ALWAYS">
|
<VBox fx:id="pests_vbox" prefHeight="200.0" prefWidth="100.0">
|
||||||
<VBox.margin>
|
<VBox.margin>
|
||||||
<Insets bottom="10.0" />
|
<Insets bottom="10.0" />
|
||||||
</VBox.margin>
|
</VBox.margin>
|
||||||
</ListView>
|
</VBox>
|
||||||
<HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0" VBox.vgrow="NEVER">
|
<HBox alignment="CENTER_LEFT" prefHeight="100.0" prefWidth="200.0" VBox.vgrow="NEVER">
|
||||||
<children>
|
<children>
|
||||||
<Label text="Area:">
|
<Label text="Area:">
|
||||||
|
|
|
@ -1,54 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
|
|
||||||
<?import javafx.geometry.Insets?>
|
|
||||||
<?import javafx.scene.control.DatePicker?>
|
|
||||||
<?import javafx.scene.control.Label?>
|
|
||||||
<?import javafx.scene.control.TextArea?>
|
|
||||||
<?import javafx.scene.control.TextField?>
|
|
||||||
<?import javafx.scene.layout.AnchorPane?>
|
|
||||||
<?import javafx.scene.layout.HBox?>
|
|
||||||
<?import javafx.scene.layout.VBox?>
|
|
||||||
|
|
||||||
|
|
||||||
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="259.0" prefWidth="390.0" xmlns="http://javafx.com/javafx/17"
|
|
||||||
xmlns:fx="http://javafx.com/fxml/1" fx:controller="ch.zhaw.gartenverwaltung.TaskFormularController">
|
|
||||||
<children>
|
|
||||||
<VBox layoutX="14.0" layoutY="14.0" prefHeight="272.0" prefWidth="390.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
|
|
||||||
<padding>
|
|
||||||
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
|
|
||||||
</padding>
|
|
||||||
<children>
|
|
||||||
<HBox alignment="CENTER_LEFT" prefHeight="35.0" prefWidth="560.0">
|
|
||||||
<children>
|
|
||||||
<Label maxWidth="1.7976931348623157E308" text="Task name:" HBox.hgrow="ALWAYS" />
|
|
||||||
<TextField fx:id="taskName_field" promptText="Task Name" />
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<HBox prefHeight="77.0" prefWidth="350.0">
|
|
||||||
<children>
|
|
||||||
<Label maxWidth="1.7976931348623157E308" text="Description:" HBox.hgrow="ALWAYS" />
|
|
||||||
<TextArea fx:id="description_area" prefHeight="73.0" prefWidth="206.0" promptText="Description" />
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<HBox alignment="CENTER_LEFT" layoutX="30.0" layoutY="30.0" prefHeight="35.0" prefWidth="560.0">
|
|
||||||
<children>
|
|
||||||
<Label maxWidth="1.7976931348623157E308" text="Start Date:" HBox.hgrow="ALWAYS" />
|
|
||||||
<DatePicker fx:id="start_datePicker" />
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<HBox alignment="CENTER_LEFT" layoutX="30.0" layoutY="143.0" prefHeight="35.0" prefWidth="560.0">
|
|
||||||
<children>
|
|
||||||
<Label maxWidth="1.7976931348623157E308" text="End Date:" HBox.hgrow="ALWAYS" />
|
|
||||||
<DatePicker fx:id="end_datePicker" />
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
<HBox alignment="CENTER_LEFT" layoutX="30.0" layoutY="30.0" prefHeight="35.0" prefWidth="560.0">
|
|
||||||
<children>
|
|
||||||
<Label maxWidth="1.7976931348623157E308" text="Interval:" HBox.hgrow="ALWAYS" />
|
|
||||||
<TextField fx:id="interval_field" promptText="Interval (e.g. 0, 1, 3 ...)" />
|
|
||||||
</children>
|
|
||||||
</HBox>
|
|
||||||
</children>
|
|
||||||
</VBox>
|
|
||||||
</children>
|
|
||||||
</AnchorPane>
|
|
|
@ -184,14 +184,15 @@
|
||||||
"litersPerSqM": 15,
|
"litersPerSqM": 15,
|
||||||
"interval": 4,
|
"interval": 4,
|
||||||
"notes": [
|
"notes": [
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"taskTemplates": [
|
"taskTemplates": [
|
||||||
{
|
{
|
||||||
"name": "Plant Sets",
|
"name": "hilling",
|
||||||
"relativeStartDate": 0,
|
"relativeStartDate": 0,
|
||||||
"relativeEndDate": 0,
|
"relativeEndDate": 0,
|
||||||
"description": "Plant the sets about 5cm deep into the soil.",
|
"description": "Mound up the soil around the plant until just the top few leaves show above the soil. ",
|
||||||
"interval": null,
|
"interval": null,
|
||||||
"isOptional": false
|
"isOptional": false
|
||||||
}
|
}
|
||||||
|
@ -231,6 +232,7 @@
|
||||||
"litersPerSqM": 0,
|
"litersPerSqM": 0,
|
||||||
"interval": null,
|
"interval": null,
|
||||||
"notes": [
|
"notes": [
|
||||||
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"taskTemplates": [
|
"taskTemplates": [
|
||||||
|
|
Loading…
Reference in New Issue