|
18 | 18 | import de.doubleslash.keeptime.exceptions.FXMLLoaderException; |
19 | 19 | import de.doubleslash.keeptime.model.Model; |
20 | 20 | import de.doubleslash.keeptime.model.Project; |
21 | | -import javafx.collections.ObservableList; |
22 | 21 | import javafx.collections.transformation.FilteredList; |
23 | 22 | import javafx.fxml.FXMLLoader; |
24 | 23 | import javafx.scene.Node; |
@@ -54,7 +53,6 @@ public class ProjectsListViewController { |
54 | 53 | private final FilteredList<Project> filteredData; |
55 | 54 |
|
56 | 55 | private final boolean hideable; |
57 | | - private ManageProjectController manageProjectController; |
58 | 56 |
|
59 | 57 | public ProjectsListViewController(final Model model, final Controller controller, final Stage mainStage, |
60 | 58 | final ListView<Project> availableProjectsListView, final TextField searchTextField, final boolean hideable) { |
@@ -255,24 +253,14 @@ private Node createListEntryForProject(final Project p) { |
255 | 253 | editMenuItem.setOnAction(e -> { |
256 | 254 | // TODO refactor to use "add project" controls |
257 | 255 | LOG.info("Edit project"); |
258 | | - final Dialog<ButtonType> dialog = setUpDialogButtonType("Edit project", "Edit project '" + p.getName() + "'"); |
259 | | - final GridPane grid = setUpEditProjectGridPane(p); |
260 | | - |
261 | | - // TODO disable OK button if no name is set |
262 | | - dialog.getDialogPane().setContent(grid); |
263 | | - |
264 | | - dialog.setResultConverter(dialogButton -> dialogButton); |
| 256 | + final Dialog<Project> dialog = setupEditProjectDialog("Edit project", "Edit project '" + p.getName() + "'", p); |
265 | 257 |
|
266 | 258 | mainStage.setAlwaysOnTop(false); |
267 | | - final Optional<ButtonType> result = dialog.showAndWait(); |
| 259 | + final Optional<Project> result = dialog.showAndWait(); |
268 | 260 | mainStage.setAlwaysOnTop(true); |
269 | 261 |
|
270 | | - result.ifPresent(buttonType -> { |
271 | | - if (buttonType != ButtonType.OK) { |
272 | | - return; |
273 | | - } |
274 | | - final ObservableList<Node> nodes = grid.getChildren(); |
275 | | - editProject(p, manageProjectController); |
| 262 | + result.ifPresent(editedProject -> { |
| 263 | + controller.editProject(p, editedProject); |
276 | 264 |
|
277 | 265 | projectNameLabel.setText(p.getName()); |
278 | 266 | projectNameLabel.setTextFill(new Color(p.getColor().getRed() * dimFactor, |
@@ -303,39 +291,47 @@ private void updateTooltip(final Project p) { |
303 | 291 | projectNameLabel.getTooltip().setText(tooltipText); |
304 | 292 | } |
305 | 293 |
|
306 | | - private Dialog<ButtonType> setUpDialogButtonType(final String title, final String headerText) { |
307 | | - final Dialog<ButtonType> dialog = new Dialog<>(); |
| 294 | + private Dialog<Project> setupEditProjectDialog(final String title, final String headerText, final Project project) { |
| 295 | + final Dialog<Project> dialog = new Dialog<>(); |
308 | 296 | dialog.setTitle(title); |
309 | 297 | dialog.setHeaderText(headerText); |
310 | 298 | dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); |
| 299 | + |
| 300 | + final GridPane grid = setUpEditProjectGridPane(project, dialog); |
| 301 | + |
| 302 | + // TODO disable OK button if no name is set |
| 303 | + dialog.getDialogPane().setContent(grid); |
| 304 | + |
311 | 305 | return dialog; |
312 | 306 | } |
313 | 307 |
|
314 | | - private GridPane setUpEditProjectGridPane(final Project p) { |
| 308 | + private GridPane setUpEditProjectGridPane(final Project p, final Dialog<Project> dialog) { |
315 | 309 | GridPane grid; |
316 | 310 | final FXMLLoader loader = new FXMLLoader(Resources.getResource(RESOURCE.FXML_MANAGE_PROJECT)); |
317 | 311 | try { |
318 | 312 | grid = loader.load(); |
319 | 313 | } catch (final IOException e) { |
320 | 314 | throw new FXMLLoaderException("Error while loading '" + Resources.RESOURCE.FXML_MANAGE_PROJECT + "'.", e); |
321 | 315 | } |
322 | | - manageProjectController = loader.getController(); |
| 316 | + final ManageProjectController manageProjectController = loader.getController(); |
323 | 317 | manageProjectController.setModel(model); |
324 | 318 | manageProjectController.secondInitialize(); |
325 | 319 | manageProjectController.setValues(p); |
326 | 320 |
|
327 | | - return grid; |
328 | | - } |
329 | | - |
330 | | - private void editProject(final Project p, final ManageProjectController manageProjectController) { |
331 | | - final String projectName = manageProjectController.getProjectName(); |
332 | | - final String projectDescription = manageProjectController.getProjectDescription(); |
333 | | - final Color projectColor = manageProjectController.getProjectColor(); |
334 | | - final boolean isWork = manageProjectController.isWork(); |
335 | | - final int index = manageProjectController.getIndex(); |
| 321 | + dialog.setResultConverter(dialogButton -> { |
| 322 | + if (dialogButton == ButtonType.OK) { |
| 323 | + final String projectName = manageProjectController.getProjectName(); |
| 324 | + final String projectDescription = manageProjectController.getProjectDescription(); |
| 325 | + final Color projectColor = manageProjectController.getProjectColor(); |
| 326 | + final boolean isWork = manageProjectController.isWork(); |
| 327 | + final int index = manageProjectController.getIndex(); |
| 328 | + return new Project(projectName, projectDescription, projectColor, isWork, index); |
| 329 | + } |
| 330 | + // TODO: Do you really want to return null? |
| 331 | + return null; |
| 332 | + }); |
336 | 333 |
|
337 | | - final Project newValues = new Project(projectName, projectDescription, projectColor, isWork, index); |
338 | | - controller.editProject(p, newValues); |
| 334 | + return grid; |
339 | 335 | } |
340 | 336 |
|
341 | 337 | private ListCell<Project> returnListCellOfProject() { |
|
0 commit comments