Skip to content

Commit 471bc1e

Browse files
committed
#79: disabling save button now when input is not valid
1 parent 10bb4be commit 471bc1e

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

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

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232
import de.doubleslash.keeptime.model.Project;
3333
import de.doubleslash.keeptime.model.Work;
3434
import javafx.application.Platform;
35+
import javafx.beans.binding.Bindings;
36+
import javafx.beans.binding.BooleanBinding;
37+
import javafx.beans.binding.BooleanExpression;
38+
import javafx.beans.property.BooleanProperty;
39+
import javafx.beans.property.SimpleBooleanProperty;
3540
import javafx.beans.property.StringProperty;
3641
import javafx.beans.value.ChangeListener;
3742
import javafx.beans.value.ObservableValue;
@@ -86,7 +91,7 @@ public class ManageWorkController {
8691

8792
private boolean comboChange;
8893
private Project selectedProject;
89-
private boolean valid;
94+
private BooleanProperty isValidProperty = new SimpleBooleanProperty();
9095

9196
private FilteredList<Project> filteredList;
9297

@@ -111,32 +116,33 @@ private void initialize() {
111116
}
112117

113118
private void setUpTimeRestriction() {
114-
final ChangeListener<Object> timeListener = (final ObservableValue<? extends Object> observable,
115-
final Object oldValue, final Object newValue) -> {
119+
120+
BooleanBinding isValidBinding = Bindings.createBooleanBinding(() -> {
116121
if (startTimeSpinner.getValue() == null || endTimeSpinner.getValue() == null
117122
|| startDatePicker.getValue() == null || endDatePicker.getValue() == null) {
118-
return;
123+
return false;
119124
}
125+
120126
if (startDatePicker.getValue().isAfter(endDatePicker.getValue())
121127
|| (startDatePicker.getValue().isEqual(endDatePicker.getValue())
122128
&& startTimeSpinner.getValue().isAfter(endTimeSpinner.getValue()))) {
123-
errorLabel.setText("startDate has to be before endDate");
124-
valid = false;
129+
return false;
125130
} else {
126-
errorLabel.setText("");
127-
valid = true;
131+
return true;
128132
}
133+
}, startTimeSpinner.valueProperty(), endTimeSpinner.valueProperty(), endDatePicker.valueProperty(),
134+
startDatePicker.valueProperty());
129135

130-
};
131-
startTimeSpinner.valueProperty().addListener(timeListener);
132-
endTimeSpinner.valueProperty().addListener(timeListener);
133-
endDatePicker.valueProperty().addListener(timeListener);
134-
startDatePicker.valueProperty().addListener(timeListener);
136+
this.isValidProperty.bind(isValidBinding);
135137

136-
}
138+
errorLabel.textProperty().bind(Bindings.createStringBinding(() -> {
139+
if (isValidProperty.getValue()) {
140+
return "";
141+
} else {
142+
return "startDate has to be before endDate";
143+
}
137144

138-
public boolean isValid() {
139-
return valid;
145+
}, isValidProperty));
140146
}
141147

142148
private void setUpTimeSpinner(final Spinner<LocalTime> spinner) {
@@ -317,9 +323,6 @@ public void initializeWith(final Work work) {
317323

318324
startTimeSpinner.getValueFactory().setValue(work.getStartTime().toLocalTime());
319325
endTimeSpinner.getValueFactory().setValue(work.getEndTime().toLocalTime());
320-
valid = !startDatePicker.getValue().isAfter(endDatePicker.getValue())
321-
|| (startDatePicker.getValue().isEqual(endDatePicker.getValue())
322-
&& startTimeSpinner.getValue().isAfter(endTimeSpinner.getValue()));
323326

324327
noteTextArea.setText(work.getNotes());
325328

@@ -329,7 +332,6 @@ public void initializeWith(final Work work) {
329332
setColor(projectComboBox.getEditor(), model.hoverBackgroundColor.get());
330333

331334
setTextColor(projectComboBox.getEditor(), model.hoverFontColor.get());
332-
333335
}
334336

335337
private void enableStrgA_combo() {
@@ -366,4 +368,8 @@ private void setTextColor(final Node object, final Color color) {
366368
object.setStyle(style);
367369
}
368370

371+
public BooleanProperty validProperty() {
372+
return this.isValidProperty;
373+
}
374+
369375
}

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -344,11 +344,12 @@ private GridPane setUpEditWorkGridPane(final Work work, final Dialog<Work> dialo
344344
final ManageWorkController manageWorkController = loader.getController();
345345
manageWorkController.setModel(model);
346346
manageWorkController.initializeWith(work);
347-
dialog.getDialogPane().lookupButton(ButtonType.OK).addEventFilter(ActionEvent.ACTION, event -> {
348-
if (!manageWorkController.isValid()) {
349-
event.consume();
350-
}
351-
});
347+
348+
dialog.getDialogPane()
349+
.lookupButton(ButtonType.OK)
350+
.disableProperty()
351+
.bind(manageWorkController.validProperty().not());
352+
352353
dialog.setResultConverter(dialogButton -> {
353354
if (dialogButton == ButtonType.OK) {
354355
return manageWorkController.getWorkFromUserInput();

0 commit comments

Comments
 (0)