Skip to content

Commit 2107d0a

Browse files
author
Martin Plieske
committed
Fixed all
1 parent 8fadeb1 commit 2107d0a

File tree

11 files changed

+258
-166
lines changed

11 files changed

+258
-166
lines changed

src/main/java/de/doubleslash/keeptime/common/ConfigParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public void parseConfig(final File inputFile) {
7979
if (!exists) {
8080
LOG.info("Adding project '{}'.", name);
8181
final Color colorTemp = Color.valueOf(color);
82-
controller.addNewProject(name, Boolean.parseBoolean(isWork), colorTemp, index);
82+
controller.addNewProject(name, "", Boolean.parseBoolean(isWork), colorTemp, index);
8383
index++;
8484
} else {
8585
LOG.debug("Project '{}' already exists", name);

src/main/java/de/doubleslash/keeptime/common/Resources.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public enum RESOURCE {
3838
FXML_VIEW_POPUP_LAYOUT("/layouts/ViewLayoutPopup.fxml"),
3939
FXML_REPORT("/layouts/report.fxml"),
4040
FXML_ABOUT("/layouts/about.fxml"),
41+
FXML_MANAGE_PROJECT("/layouts/manage-project.fxml"),
4142

4243
// icon
4344
ICON_MAIN("/icons/icon.png"),

src/main/java/de/doubleslash/keeptime/controller/Controller.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ public void changeProject(final Project newProject, final long minusSeconds) {
9191
model.activeWorkItem.set(work);
9292
}
9393

94-
public void addNewProject(final String projectName, final boolean isWork, final Color projectColor,
95-
final int index) {
96-
final Project project = new Project(projectName, projectColor, isWork, index, false);
94+
public void addNewProject(final String projectName, final String description, final boolean isWork,
95+
final Color projectColor, final int index) {
96+
final Project project = new Project(projectName, description, projectColor, isWork, index, false);
9797
model.getAllProjects().add(project);
9898
model.getAvailableProjects().add(project);
9999

@@ -167,11 +167,12 @@ private boolean isProjectActive(final Project p) {
167167
return p == model.activeWorkItem.get().getProject();
168168
}
169169

170-
public void editProject(final Project p, final String newName, final Color newColor, final boolean isWork,
171-
final int newIndex) {
170+
public void editProject(final Project p, final String newName, final String description, final Color newColor,
171+
final boolean isWork, final int newIndex) {
172172
LOG.info("Changing project '{}' to '{}' '{}' '{}'", p, newName, newColor, isWork);
173173

174174
p.setName(newName);
175+
p.setDescription(description);
175176
p.setColor(newColor);
176177
p.setWork(isWork);
177178
final int oldIndex = p.getIndex();

src/main/java/de/doubleslash/keeptime/model/Model.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public Model(final ProjectRepository projectRepository, final WorkRepository wor
5454

5555
public static final Color ORIGINAL_TASK_BAR_FONT_COLOR = Color.BLACK;
5656

57-
public static final Project DEFAULT_PROJECT = new Project("Idle", Color.ORANGE, false, 0, true);
57+
public static final Project DEFAULT_PROJECT = new Project("Idle", "", Color.ORANGE, false, 0, true);
5858
private Project idleProject = DEFAULT_PROJECT;
5959

6060
private final ObservableList<Project> availableProjects = FXCollections.observableArrayList();

src/main/java/de/doubleslash/keeptime/model/Project.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import javax.persistence.GeneratedValue;
2323
import javax.persistence.GenerationType;
2424
import javax.persistence.Id;
25+
import javax.persistence.Lob;
2526
import javax.persistence.Table;
2627

2728
import de.doubleslash.keeptime.model.persistenceconverter.ColorConverter;
@@ -38,6 +39,9 @@ public class Project {
3839

3940
private String name;
4041

42+
@Lob
43+
private String description;
44+
4145
@Convert(converter = ColorConverter.class, disableConversion = false)
4246
private Color color;
4347

@@ -53,19 +57,21 @@ public Project() {
5357
// Needed for jpa
5458
}
5559

56-
public Project(final String name, final Color color, final boolean isWork, final int index,
60+
public Project(final String name, final String description, final Color color, final boolean isWork, final int index,
5761
final boolean isDefault) {
5862
super();
5963
this.name = name;
64+
this.description = description;
6065
this.color = color;
6166
this.isWork = isWork;
6267
this.isDefault = isDefault;
6368
this.isEnabled = true;
6469
this.index = index;
6570
}
6671

67-
public Project(final String name, final Color color, final boolean isWork, final int index) {
68-
this(name, color, isWork, index, false);
72+
public Project(final String name, final String description, final Color color, final boolean isWork,
73+
final int index) {
74+
this(name, description, color, isWork, index, false);
6975
}
7076

7177
public String getName() {
@@ -120,6 +126,14 @@ public void setIndex(final int index) {
120126
this.index = index;
121127
}
122128

129+
public String getDescription() {
130+
return description;
131+
}
132+
133+
public void setDescription(final String description) {
134+
this.description = description;
135+
}
136+
123137
@Override
124138
public String toString() {
125139
return "Project [id=" + id + ", name=" + name + ", color=" + color + ", isWork=" + isWork + ", isDefault="
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package de.doubleslash.keeptime.view;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
import de.doubleslash.keeptime.model.Model;
7+
import javafx.fxml.FXML;
8+
import javafx.scene.control.CheckBox;
9+
import javafx.scene.control.ColorPicker;
10+
import javafx.scene.control.Spinner;
11+
import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
12+
import javafx.scene.control.TextArea;
13+
import javafx.scene.control.TextField;
14+
import javafx.scene.layout.GridPane;
15+
import javafx.scene.paint.Color;
16+
17+
public class ManageProjectController {
18+
19+
private static final Logger LOG = LoggerFactory.getLogger(ManageProjectController.class);
20+
21+
private Model model;
22+
23+
@FXML
24+
private GridPane grid;
25+
26+
@FXML
27+
private TextField nameTextField;
28+
29+
@FXML
30+
private TextArea descriptionTextArea;
31+
32+
@FXML
33+
private ColorPicker textFillColorPicker;
34+
35+
@FXML
36+
private CheckBox isWorkCheckBox;
37+
38+
@FXML
39+
private Spinner<Integer> sortIndexSpinner;
40+
41+
public GridPane getGrid() {
42+
return grid;
43+
}
44+
45+
public TextField getNameTextField() {
46+
return nameTextField;
47+
}
48+
49+
public TextArea getDescriptionTextArea() {
50+
return descriptionTextArea;
51+
}
52+
53+
public ColorPicker getTextFillColorPicker() {
54+
return textFillColorPicker;
55+
}
56+
57+
public CheckBox getIsWorkCheckBox() {
58+
return isWorkCheckBox;
59+
}
60+
61+
public Spinner<Integer> getSortIndexSpinner() {
62+
return sortIndexSpinner;
63+
}
64+
65+
public void setModel(final Model model) {
66+
this.model = model;
67+
}
68+
69+
public void setValues(final String name, final String description, final Color textFill, final boolean work,
70+
final int sortIndex) {
71+
LOG.info("Setting values.");
72+
nameTextField.setText(name);
73+
descriptionTextArea.setText(description);
74+
textFillColorPicker.setValue(textFill);
75+
isWorkCheckBox.setSelected(work);
76+
sortIndexSpinner.getValueFactory().setValue(sortIndex);
77+
}
78+
79+
public void secondInitialize() {
80+
if (model != null) {
81+
final int availableProjectAmount = model.getAllProjects().size();
82+
sortIndexSpinner
83+
.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount, availableProjectAmount));
84+
sortIndexSpinner.getValueFactory().setValue(model.getAvailableProjects().size());
85+
}
86+
}
87+
88+
}

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

Lines changed: 37 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.slf4j.LoggerFactory;
1313

1414
import de.doubleslash.keeptime.common.DateFormatter;
15-
import de.doubleslash.keeptime.common.FontProvider;
1615
import de.doubleslash.keeptime.common.Resources;
1716
import de.doubleslash.keeptime.common.Resources.RESOURCE;
1817
import de.doubleslash.keeptime.controller.Controller;
@@ -22,7 +21,6 @@
2221
import javafx.collections.ObservableList;
2322
import javafx.collections.transformation.FilteredList;
2423
import javafx.fxml.FXMLLoader;
25-
import javafx.geometry.Insets;
2624
import javafx.scene.Node;
2725
import javafx.scene.control.Alert;
2826
import javafx.scene.control.Alert.AlertType;
@@ -38,7 +36,7 @@
3836
import javafx.scene.control.MultipleSelectionModel;
3937
import javafx.scene.control.SelectionMode;
4038
import javafx.scene.control.Spinner;
41-
import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory;
39+
import javafx.scene.control.TextArea;
4240
import javafx.scene.control.TextField;
4341
import javafx.scene.control.Tooltip;
4442
import javafx.scene.effect.Bloom;
@@ -56,19 +54,18 @@ public class ProjectsListViewController {
5654
private final Controller controller;
5755
private final Stage mainStage;
5856
private final Map<Project, Label> elapsedProjectTimeLabelMap = new HashMap<>();
59-
private final ListView<Project> availableProjectsListView;
6057
private final Map<Project, Node> projectSelectionNodeMap;
6158
private final FilteredList<Project> filteredData;
6259

6360
private boolean hideable;
61+
private ManageProjectController manageProjectController;
6462

6563
public ProjectsListViewController(final Model model, final Controller controller, final Stage mainStage,
6664
final ListView<Project> availableProjectsListView, final TextField searchTextField, final boolean hideable) {
6765
this.model = model;
6866
this.controller = controller;
6967
this.hideable = hideable;
7068
this.mainStage = mainStage;
71-
this.availableProjectsListView = availableProjectsListView;
7269
availableProjectsListView.setCellFactory(listView -> returnListCellOfProject());
7370

7471
filteredData = new FilteredList<>(model.getSortedAvailableProjects(), p -> true);
@@ -87,7 +84,8 @@ public ProjectsListViewController(final Model model, final Controller controller
8784

8885
final String lowerCaseFilter = newValue.toLowerCase();
8986

90-
if (project.getName().toLowerCase().contains(lowerCaseFilter)) {
87+
if (project.getName().toLowerCase().contains(lowerCaseFilter)
88+
|| project.getDescription().toLowerCase().contains(lowerCaseFilter)) {
9189
return true;
9290
}
9391

@@ -161,6 +159,7 @@ private void changeProject(final Project newProject, final long minusSeconds) {
161159
private void addProjectToProjectSelectionNodeMap(final Project project) {
162160
final Node projectElement = createListEntryForProject(project);
163161
projectSelectionNodeMap.put(project, projectElement);
162+
updateTooltip(project);
164163
}
165164

166165
private void realignProjectList() {
@@ -222,8 +221,6 @@ private Node createListEntryForProject(final Project p) {
222221
projectNameLabel.setEffect(null);
223222
});
224223

225-
projectNameLabel.setTooltip(new Tooltip(projectNameLabel.getText()));
226-
227224
final MenuItem changeWithTimeMenuItem = new MenuItem("Change with time");
228225
changeWithTimeMenuItem.setOnAction(e -> {
229226
final ChangeWithTimeDialog changeWithTimeDialog = new ChangeWithTimeDialog(model,
@@ -277,7 +274,7 @@ private Node createListEntryForProject(final Project p) {
277274
return;
278275
}
279276
final ObservableList<Node> nodes = grid.getChildren();
280-
editProject(nodes, p);
277+
editProject(p, manageProjectController);
281278

282279
projectNameLabel.setText(p.getName());
283280
projectNameLabel.setTextFill(new Color(p.getColor().getRed() * dimFactor,
@@ -287,6 +284,7 @@ private Node createListEntryForProject(final Project p) {
287284

288285
// TODO how to update currentProjectLabel when active project was edited?
289286
realignProjectList();
287+
updateTooltip(p);
290288
});
291289
});
292290

@@ -296,6 +294,17 @@ private Node createListEntryForProject(final Project p) {
296294
return projectElement;
297295
}
298296

297+
private void updateTooltip(final Project p) {
298+
final Pane pane = (Pane) projectSelectionNodeMap.get(p);
299+
final Label projectNameLabel = (Label) pane.getChildren().get(0);
300+
final String tooltipText = String.format("%s%n%s", p.getName(), p.getDescription());
301+
final Tooltip projectTooltip = projectNameLabel.getTooltip();
302+
if (projectTooltip == null) {
303+
projectNameLabel.setTooltip(new Tooltip());
304+
}
305+
projectNameLabel.getTooltip().setText(tooltipText);
306+
}
307+
299308
private Dialog<ButtonType> setUpDialogButtonType(final String title, final String headerText) {
300309
final Dialog<ButtonType> dialog = new Dialog<>();
301310
dialog.setTitle(title);
@@ -305,60 +314,29 @@ private Dialog<ButtonType> setUpDialogButtonType(final String title, final Strin
305314
}
306315

307316
private GridPane setUpEditProjectGridPane(final Project p) {
308-
final GridPane grid = setUpGridPane(p.getName(), p.getColor(), p.isWork());
309-
310-
final Spinner<Integer> indexSpinner = new Spinner<>();
311-
final int availableProjectAmount = model.getAvailableProjects().size();
312-
indexSpinner.setValueFactory(new IntegerSpinnerValueFactory(0, availableProjectAmount - 1, p.getIndex()));
313-
grid.add(indexSpinner, 1, 3);
314-
315-
return grid;
316-
}
317-
318-
private GridPane setUpGridPane(final String projectName, final Color projectColor, final boolean isWork) {
319-
final GridPane grid = new GridPane();
320-
grid.setHgap(10);
321-
grid.setVgap(10);
322-
grid.setPadding(new Insets(20, 150, 10, 10));
323-
324-
final Label nameLabel = new Label("Name:");
325-
nameLabel.setFont(FontProvider.getDefaultFont());
326-
grid.add(nameLabel, 0, 0);
327-
328-
final TextField projectNameTextField = new TextField(projectName);
329-
projectNameTextField.setFont(FontProvider.getDefaultFont());
330-
grid.add(projectNameTextField, 1, 0);
331-
332-
final Label colorLabel = new Label("Color:");
333-
colorLabel.setFont(FontProvider.getDefaultFont());
334-
grid.add(colorLabel, 0, 1);
335-
336-
final ColorPicker colorPicker = new ColorPicker(projectColor);
337-
grid.add(colorPicker, 1, 1);
338-
339-
final Label isWorkLabel = new Label("IsWork:");
340-
isWorkLabel.setFont(FontProvider.getDefaultFont());
341-
grid.add(isWorkLabel, 0, 2);
342-
343-
final CheckBox isWorkCheckBox = new CheckBox();
344-
isWorkCheckBox.setSelected(isWork);
345-
isWorkCheckBox.setFont(FontProvider.getDefaultFont());
346-
grid.add(isWorkCheckBox, 1, 2);
347-
348-
final Label sortIndex = new Label("SortIndex:");
349-
sortIndex.setFont(FontProvider.getDefaultFont());
350-
grid.add(new Label("SortIndex:"), 0, 3);
317+
GridPane grid;
318+
final FXMLLoader loader = new FXMLLoader(Resources.getResource(RESOURCE.FXML_MANAGE_PROJECT));
319+
try {
320+
grid = loader.load();
321+
} catch (final IOException e) {
322+
throw new FXMLLoaderException("Error while loading '" + Resources.RESOURCE.FXML_MANAGE_PROJECT + "'.", e);
323+
}
324+
manageProjectController = loader.getController();
325+
manageProjectController.setModel(model);
326+
manageProjectController.secondInitialize();
327+
manageProjectController.setValues(p.getName(), p.getDescription(), p.getColor(), p.isWork(), p.getIndex());
351328

352329
return grid;
353330
}
354331

355-
private void editProject(final ObservableList<Node> nodes, final Project p) {
356-
final TextField projectNameTextField = (TextField) nodes.get(1);
357-
final ColorPicker colorPicker = (ColorPicker) nodes.get(3);
358-
final CheckBox isWorkCheckBox = (CheckBox) nodes.get(5);
359-
final Spinner<Integer> indexSpinner = (Spinner<Integer>) nodes.get(7);
360-
controller.editProject(p, projectNameTextField.getText(), colorPicker.getValue(), isWorkCheckBox.isSelected(),
361-
indexSpinner.getValue());
332+
private void editProject(final Project p, final ManageProjectController manageProjectController) {
333+
final TextField nameTextField = manageProjectController.getNameTextField();
334+
final TextArea descriptionTextArea = manageProjectController.getDescriptionTextArea();
335+
final ColorPicker textFillColorPicker = manageProjectController.getTextFillColorPicker();
336+
final CheckBox isWorkCheckBox = manageProjectController.getIsWorkCheckBox();
337+
final Spinner<Integer> sortIndexSpinner = manageProjectController.getSortIndexSpinner();
338+
controller.editProject(p, nameTextField.getText(), descriptionTextArea.getText(), textFillColorPicker.getValue(),
339+
isWorkCheckBox.isSelected(), sortIndexSpinner.getValue());
362340
}
363341

364342
private ListCell<Project> returnListCellOfProject() {

0 commit comments

Comments
 (0)