Skip to content

Commit efeea47

Browse files
committed
changed premade 'DateTimePicker' to custom DatePicker and TimeSpinner because of NullPointerExeptins after repeated edit of Premade one
1 parent b9ccaf9 commit efeea47

File tree

2 files changed

+100
-16
lines changed

2 files changed

+100
-16
lines changed

pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,6 @@
6464
<artifactId>spring-boot-starter-test</artifactId>
6565
<scope>test</scope>
6666
</dependency>
67-
68-
<dependency>
69-
<groupId>no.tornado</groupId>
70-
<artifactId>tornadofx-controls</artifactId>
71-
<version>1.0.3</version>
72-
</dependency>
7367

7468
<dependency>
7569
<groupId>org.flywaydb</groupId>

src/main/java/de/doubleslash/keeptime/view/ManageWorkController.java

Lines changed: 100 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,30 @@
1616

1717
package de.doubleslash.keeptime.view;
1818

19+
import java.time.LocalDateTime;
20+
import java.time.LocalTime;
21+
import java.time.format.DateTimeParseException;
22+
import java.time.format.FormatStyle;
23+
1924
import org.slf4j.Logger;
2025
import org.slf4j.LoggerFactory;
2126

2227
import de.doubleslash.keeptime.model.Model;
2328
import de.doubleslash.keeptime.model.Project;
2429
import de.doubleslash.keeptime.model.Work;
30+
import javafx.beans.property.StringProperty;
2531
import javafx.fxml.FXML;
2632
import javafx.scene.control.ComboBox;
2733
import javafx.scene.control.DatePicker;
2834
import javafx.scene.control.ListCell;
2935
import javafx.scene.control.ListView;
36+
import javafx.scene.control.Spinner;
37+
import javafx.scene.control.SpinnerValueFactory;
3038
import javafx.scene.control.TextField;
3139
import javafx.scene.layout.GridPane;
3240
import javafx.util.Callback;
3341
import javafx.util.StringConverter;
34-
import tornadofx.control.DateTimePicker;
42+
import javafx.util.converter.LocalTimeStringConverter;
3543

3644
public class ManageWorkController {
3745

@@ -43,10 +51,16 @@ public class ManageWorkController {
4351
private GridPane grid;
4452

4553
@FXML
46-
private DateTimePicker startTimePicker;
54+
private DatePicker startDatePicker;
55+
56+
@FXML
57+
private Spinner<LocalTime> startTimeSpinner;
4758

4859
@FXML
49-
private DateTimePicker endTimePicker;
60+
private Spinner<LocalTime> endTimeSpinner;
61+
62+
@FXML
63+
private DatePicker endDatePicker;
5064

5165
@FXML
5266
private DatePicker creationDatePicker;
@@ -63,10 +77,85 @@ public void setModel(final Model model) {
6377

6478
public void initializeWith(final Work work) {
6579
LOG.info("Setting values.");
66-
startTimePicker.setDateTimeValue(work.getStartTime());
67-
startTimePicker.setFormat("yyyy-MM-dd HH:mm:ss");
68-
endTimePicker.setDateTimeValue(work.getEndTime());
69-
endTimePicker.setFormat("yyyy-MM-dd HH:mm:ss");
80+
startDatePicker.setValue(work.getStartTime().toLocalDate());
81+
endDatePicker.setValue(work.getEndTime().toLocalDate());
82+
83+
84+
startTimeSpinner.getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
85+
LOG.debug("textChanged");
86+
final LocalTimeStringConverter stringConverter = new LocalTimeStringConverter(FormatStyle.MEDIUM);
87+
final StringProperty text = (StringProperty) observable;
88+
try {
89+
stringConverter.fromString(newValue);
90+
text.setValue(newValue);
91+
startTimeSpinner.increment(0); // TODO find better Solution
92+
} catch (final DateTimeParseException e) {
93+
text.setValue(oldValue);
94+
}
95+
});
96+
97+
startTimeSpinner.setValueFactory(new SpinnerValueFactory<LocalTime>() {
98+
99+
{
100+
setConverter(new LocalTimeStringConverter(FormatStyle.MEDIUM));
101+
}
102+
103+
@Override
104+
public void decrement(final int steps) {
105+
if (getValue() == null) {
106+
setValue(LocalTime.now());
107+
} else {
108+
final LocalTime time = getValue();
109+
setValue(time.minusMinutes(steps));
110+
}
111+
112+
}
113+
114+
@Override
115+
public void increment(final int steps) {
116+
if (getValue() == null) {
117+
setValue(LocalTime.now());
118+
} else {
119+
final LocalTime time = getValue();
120+
setValue(time.plusMinutes(steps));
121+
}
122+
123+
}
124+
125+
});
126+
endTimeSpinner.setValueFactory(new SpinnerValueFactory<LocalTime>() {
127+
128+
{
129+
setConverter(new LocalTimeStringConverter(FormatStyle.MEDIUM));
130+
}
131+
132+
@Override
133+
public void decrement(final int steps) {
134+
if (getValue() == null) {
135+
setValue(LocalTime.now());
136+
} else {
137+
final LocalTime time = getValue();
138+
setValue(time.minusMinutes(steps));
139+
}
140+
141+
}
142+
143+
@Override
144+
public void increment(final int steps) {
145+
if (getValue() == null) {
146+
setValue(LocalTime.now());
147+
} else {
148+
final LocalTime time = getValue();
149+
setValue(time.plusMinutes(steps));
150+
}
151+
152+
}
153+
154+
});
155+
156+
startTimeSpinner.getValueFactory().setValue(work.getStartTime().toLocalTime());
157+
endTimeSpinner.getValueFactory().setValue(work.getEndTime().toLocalTime());
158+
70159
creationDatePicker.setValue(work.getCreationDate());
71160
noteTextBox.setText(work.getNotes());
72161
projectComboBox.getItems().addAll(model.getAvailableProjects());
@@ -113,9 +202,10 @@ public Project fromString(final String string) {
113202

114203
public Work getWorkFromUserInput() {
115204

116-
return new Work(creationDatePicker.getValue(), startTimePicker.getDateTimeValue(),
117-
endTimePicker.getDateTimeValue(), projectComboBox.getSelectionModel().getSelectedItem(),
118-
noteTextBox.getText());
205+
return new Work(creationDatePicker.getValue(),
206+
LocalDateTime.of(startDatePicker.getValue(), startTimeSpinner.getValue()),
207+
LocalDateTime.of(endDatePicker.getValue(), endTimeSpinner.getValue()),
208+
projectComboBox.getSelectionModel().getSelectedItem(), noteTextBox.getText());
119209
}
120210

121211
}

0 commit comments

Comments
 (0)