Skip to content

Commit c094255

Browse files
author
Martin Plieske
committed
added list change listener against npe, added method isProjectActive, setting tooltip where selectionNodeMap ist created, added method to add a project to projectSelectionNodeMap
1 parent 6de40c8 commit c094255

File tree

2 files changed

+30
-11
lines changed

2 files changed

+30
-11
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void deleteProject(final Project p) {
143143
return;
144144
}
145145

146-
if (p == model.activeWorkItem.get().getProject()) {
146+
if (isProjectActive(p)) {
147147
changeProject(model.getIdleProject());
148148
}
149149

@@ -163,6 +163,10 @@ public void deleteProject(final Project p) {
163163
model.getProjectRepository().saveAll(changedProjects);
164164
}
165165

166+
private boolean isProjectActive(final Project p) {
167+
return p == model.activeWorkItem.get().getProject();
168+
}
169+
166170
public void editProject(final Project p, final String newName, final Color newColor, final boolean isWork,
167171
final int newIndex) {
168172
LOG.info("Changing project '{}' to '{}' '{}' '{}'", p, newName, newColor, isWork);

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

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import de.doubleslash.keeptime.exceptions.FXMLLoaderException;
2121
import de.doubleslash.keeptime.model.Model;
2222
import de.doubleslash.keeptime.model.Project;
23+
import javafx.collections.ListChangeListener;
2324
import javafx.collections.ObservableList;
2425
import javafx.collections.transformation.FilteredList;
2526
import javafx.fxml.FXMLLoader;
@@ -69,18 +70,23 @@ public ProjectsListViewController(final Model model, final Controller controller
6970
this.hideable = hideable;
7071
this.mainStage = mainStage;
7172
this.availableProjectsListView = availableProjectsListView;
72-
availableProjectsListView.setCellFactory(callback -> returnListCellOfProject());
73+
availableProjectsListView.setCellFactory(listView -> returnListCellOfProject());
7374

7475
filteredData = new FilteredList<>(model.getSortedAvailableProjects(), p -> true);
7576
availableProjectsListView.setItems(filteredData);
7677

7778
projectSelectionNodeMap = new HashMap<>(model.getAvailableProjects().size());
7879

79-
for (final Project project : model.getSortedAvailableProjects()) {
80-
if (project.isEnabled()) {
81-
final Node node = addProjectToProjectList(project);
82-
projectSelectionNodeMap.put(project, node);
80+
model.getSortedAvailableProjects().addListener((ListChangeListener<? super Project>) listener -> {
81+
listener.next();
82+
if (listener.wasAdded()) {
83+
final Project addedProject = listener.getAddedSubList().get(0);
84+
addProjectToProjectSelectionNodeMap(addedProject);
8385
}
86+
});
87+
88+
for (final Project project : model.getSortedAvailableProjects()) {
89+
addProjectToProjectSelectionNodeMap(project);
8490
}
8591

8692
// TODO why is there no nice way for listview height?
@@ -151,13 +157,26 @@ public ProjectsListViewController(final Model model, final Controller controller
151157
searchTextField.setPromptText("Search");
152158
}
153159

160+
private void addProjectToProjectSelectionNodeMap(final Project project) {
161+
if (project.isEnabled()) {
162+
final Pane projectElement = addProjectToProjectList(project);
163+
final Label projectNameLabel = (Label) projectElement.getChildren().get(0);
164+
projectNameLabel.setTooltip(new Tooltip(projectNameLabel.getText()));
165+
projectSelectionNodeMap.put(project, projectElement);
166+
}
167+
}
168+
154169
public void changeProject(final Project newProject, final long minusSeconds) {
155170
if (hideable) {
156171
mainStage.hide();
157172
}
158173
controller.changeProject(newProject, minusSeconds);
159174
}
160175

176+
public Map<Project, Node> getProjectSelectionNodeMap() {
177+
return projectSelectionNodeMap;
178+
}
179+
161180
private GridPane setUpGridPane(final String projectName, final Color projectColor, final boolean isWork) {
162181
final GridPane grid = new GridPane();
163182
grid.setHgap(10);
@@ -203,7 +222,7 @@ private void realignProjectList() {
203222
model.getSortedAvailableProjects().setComparator(comparator);
204223
}
205224

206-
private Node addProjectToProjectList(final Project p) {
225+
private Pane addProjectToProjectList(final Project p) {
207226
final ContextMenu contextMenu = new ContextMenu();
208227

209228
final FXMLLoader loader = new FXMLLoader();
@@ -375,10 +394,6 @@ protected void updateItem(final Project item, final boolean empty) {
375394
if (item == null || empty) {
376395
setGraphic(null);
377396
} else {
378-
LOG.debug("Adding tooltip to Project Label.");
379-
final Pane pane = (Pane) projectSelectionNodeMap.get(item);
380-
final Label projectNameLabel = (Label) pane.getChildren().get(0);
381-
projectNameLabel.setTooltip(new Tooltip(item.getName()));
382397
LOG.trace("Item: '{}' -> '{}'", item.getName(), projectSelectionNodeMap.get(item));
383398
setGraphic(projectSelectionNodeMap.get(item));
384399
}

0 commit comments

Comments
 (0)