Skip to content

Commit e64d908

Browse files
DavidDamkeddamke
andauthored
Feature/project has to have valid name (#132)
* disable ok button if no name entered * delete comment * Edit project button disabled if projectname empty Co-authored-by: ddamke <[email protected]>
1 parent fef7035 commit e64d908

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

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

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
package de.doubleslash.keeptime.view;
1818

19+
import javafx.beans.binding.Bindings;
20+
import javafx.beans.property.BooleanProperty;
21+
import javafx.beans.property.SimpleBooleanProperty;
22+
import javafx.scene.control.*;
1923
import org.slf4j.Logger;
2024
import org.slf4j.LoggerFactory;
2125
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,12 +28,7 @@
2428
import de.doubleslash.keeptime.model.Model;
2529
import de.doubleslash.keeptime.model.Project;
2630
import javafx.fxml.FXML;
27-
import javafx.scene.control.CheckBox;
28-
import javafx.scene.control.ColorPicker;
29-
import javafx.scene.control.Spinner;
3031
import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
31-
import javafx.scene.control.TextArea;
32-
import javafx.scene.control.TextField;
3332
import javafx.scene.layout.GridPane;
3433

3534
@Component
@@ -57,17 +56,23 @@ public class ManageProjectController {
5756
@FXML
5857
private Spinner<Integer> sortIndexSpinner;
5958

59+
@FXML
60+
private Label validateTextAlert;
61+
62+
private BooleanProperty formValidProperty = new SimpleBooleanProperty(false);
63+
6064
@Autowired
6165
public ManageProjectController(final Model model) {
6266
this.model = model;
6367
}
64-
6568
@FXML
6669
private void initialize() {
6770
final int availableProjectAmount = model.getAllProjects().size();
6871
sortIndexSpinner
69-
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
72+
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
7073
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
74+
formValidProperty.bind(Bindings.createBooleanBinding(() -> !nameTextField.getText().isBlank(),nameTextField.textProperty()));
75+
validateTextAlert.visibleProperty().bind(formValidProperty.not());
7176
}
7277

7378
public void initializeWith(final Project project) {
@@ -84,4 +89,8 @@ public Project getProjectFromUserInput() {
8489
isWorkCheckBox.isSelected(), sortIndexSpinner.getValue());
8590
}
8691

92+
public BooleanProperty formValidProperty() {
93+
return formValidProperty;
94+
}
95+
8796
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ private GridPane setUpEditProjectGridPane(final Project p, final Dialog<Project>
365365
}
366366
final ManageProjectController manageProjectController = loader.getController();
367367
manageProjectController.initializeWith(p);
368-
368+
dialog.getDialogPane().lookupButton(ButtonType.OK).disableProperty().bind(manageProjectController.formValidProperty().not());
369369
dialog.setResultConverter(dialogButton -> {
370370
if (dialogButton == ButtonType.OK) {
371371
return manageProjectController.getProjectFromUserInput();

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,6 @@ private Dialog<Project> setUpDialogProject(final String title, final String head
487487
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
488488
setUpAddNewProjectGridPane(dialog);
489489

490-
// TODO disable OK button if no name is set
491490
return dialog;
492491
}
493492

@@ -505,6 +504,8 @@ private GridPane setUpAddNewProjectGridPane(final Dialog<Project> dialog) {
505504

506505
final ManageProjectController manageProjectController = loader.getController();
507506

507+
dialog.getDialogPane().lookupButton(ButtonType.OK).disableProperty().bind(manageProjectController.formValidProperty().not());
508+
508509
dialogResultConverter(dialog, manageProjectController);
509510

510511
return grid;

src/main/resources/layouts/manage-project.fxml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,25 @@
2525
<RowConstraints vgrow="SOMETIMES" />
2626
<RowConstraints vgrow="SOMETIMES" />
2727
<RowConstraints vgrow="SOMETIMES" />
28+
<RowConstraints vgrow="SOMETIMES" />
2829
</rowConstraints>
2930
<children>
3031
<Label text="Name:" />
31-
<Label text="Color:" GridPane.rowIndex="3" />
32-
<Label text="IsWork:" GridPane.rowIndex="4" />
33-
<Label text="SortIndex:" GridPane.rowIndex="5" />
32+
<Label text="Color:" GridPane.rowIndex="4" />
33+
<Label text="IsWork:" GridPane.rowIndex="5" />
34+
<Label text="SortIndex:" GridPane.rowIndex="6" />
3435
<TextField fx:id="nameTextField" GridPane.columnIndex="1" />
35-
<ColorPicker fx:id="textFillColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="3" />
36-
<CheckBox fx:id="isWorkCheckBox" mnemonicParsing="false" selected="true" GridPane.columnIndex="1" GridPane.rowIndex="4" />
37-
<Spinner fx:id="sortIndexSpinner" GridPane.columnIndex="1" GridPane.rowIndex="5" />
38-
<TextArea fx:id="descriptionTextArea" prefHeight="120.0" prefWidth="300.0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
39-
<VBox alignment="CENTER_LEFT" GridPane.rowIndex="1">
36+
<ColorPicker fx:id="textFillColorPicker" GridPane.columnIndex="1" GridPane.rowIndex="4" />
37+
<CheckBox fx:id="isWorkCheckBox" mnemonicParsing="false" selected="true" GridPane.columnIndex="1" GridPane.rowIndex="5" />
38+
<Spinner fx:id="sortIndexSpinner" GridPane.columnIndex="1" GridPane.rowIndex="6" />
39+
<TextArea fx:id="descriptionTextArea" prefHeight="120.0" prefWidth="300.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
40+
<VBox alignment="CENTER_LEFT" GridPane.rowIndex="2">
4041
<children>
4142
<Label text="Description:" />
4243
<Label disable="true" prefWidth="100.0" text="(will be matched at search)" wrapText="true" />
4344
</children>
4445
</VBox>
46+
<Label fx:id="validateTextAlert" prefHeight="17.0" prefWidth="201.0" text="Please enter a project name" GridPane.columnIndex="1" GridPane.rowIndex="1" />
4547
</children>
4648
<padding>
4749
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />

0 commit comments

Comments
 (0)