|
72 | 72 | import javafx.scene.control.Dialog; |
73 | 73 | import javafx.scene.control.Label; |
74 | 74 | import javafx.scene.control.MenuItem; |
75 | | -import javafx.scene.control.Slider; |
76 | 75 | import javafx.scene.control.Spinner; |
77 | 76 | import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory; |
78 | 77 | import javafx.scene.control.TextArea; |
@@ -189,7 +188,7 @@ public void changeProject(final Project newProject, final long minusSeconds) { |
189 | 188 |
|
190 | 189 | private Map<Project, Node> projectSelectionNodeMap; |
191 | 190 |
|
192 | | - private boolean ctrlIsPressed = false; |
| 191 | + private final boolean ctrlIsPressed = false; |
193 | 192 |
|
194 | 193 | @FXML |
195 | 194 | private void initialize() { |
@@ -555,109 +554,11 @@ private Node addProjectToProjectList(final Project p) { |
555 | 554 |
|
556 | 555 | final MenuItem changeWithTimeMenuItem = new MenuItem("Change with time"); |
557 | 556 | changeWithTimeMenuItem.setOnAction(e -> { |
558 | | - LOG.info("Change with time"); |
559 | | - final Dialog<Integer> dialog = new Dialog<>(); |
560 | | - dialog.setTitle("Change project with time transfer"); |
561 | | - dialog.setHeaderText("Choose the time to transfer"); |
562 | | - dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); |
563 | | - final Button okButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.OK); |
564 | | - okButton.setDefaultButton(true); |
565 | | - final Button cancelButton = (Button) dialog.getDialogPane().lookupButton(ButtonType.CANCEL); |
566 | | - cancelButton.setDefaultButton(false); |
567 | | - |
568 | | - final VBox vBox = new VBox(); |
569 | | - final Label description = new Label( |
570 | | - "Choose the amount of minutes to transfer from the active project to the new project"); |
571 | | - description.setWrapText(true); |
572 | | - vBox.getChildren().add(description); |
573 | | - |
574 | | - final GridPane grid = new GridPane(); |
575 | | - grid.setHgap(10); |
576 | | - grid.setVgap(10); |
577 | | - grid.setPadding(new Insets(20, 150, 10, 10)); |
578 | | - int gridRow = 0; |
579 | | - grid.add(new Label("Minutes to transfer"), 0, gridRow); |
580 | | - final Slider slider = setUpSliderChangeWithTimeMenuItem(activeWorkSecondsProperty); |
581 | | - slider.setFocusTraversable(true); |
582 | | - |
583 | | - okButton.setOnKeyPressed(ke -> slider.requestFocus()); |
584 | | - |
585 | | - grid.add(slider, 1, gridRow); |
586 | | - final Label minutesToTransferLabel = new Label("999 minute(s)"); |
587 | | - grid.add(minutesToTransferLabel, 2, gridRow); |
588 | | - gridRow++; |
589 | | - |
590 | | - grid.add(new Label("New time distribution"), 0, gridRow); |
591 | | - gridRow++; |
592 | | - grid.add(new Label("Active project duration: " + model.activeWorkItem.get().getProject().getName()), 0, |
593 | | - gridRow); |
594 | | - final Label currentProjectTimeLabel = new Label(TIME_ZERO); |
595 | | - grid.add(currentProjectTimeLabel, 1, gridRow); |
596 | | - gridRow++; |
597 | | - |
598 | | - grid.add(new Label("New end and start time:"), 0, gridRow); |
599 | | - final Label newEndTimeLabel = new Label(TIME_ZERO); |
600 | | - grid.add(newEndTimeLabel, 1, gridRow); |
601 | | - gridRow++; |
602 | | - |
603 | | - grid.add(new Label("New project duration: " + p.getName()), 0, gridRow); |
604 | | - final Label newProjectTimeLabel = new Label(TIME_ZERO); |
605 | | - grid.add(newProjectTimeLabel, 1, gridRow); |
606 | | - gridRow++; |
607 | | - |
608 | | - final Runnable updateLabelsRunnable = () -> { |
609 | | - final long minutesOffset = slider.valueProperty().longValue(); |
610 | | - final long secondsOffset = minutesOffset * 60; |
611 | | - |
612 | | - final long secondsActiveWork = activeWorkSecondsProperty.get() - secondsOffset; |
613 | | - final long secondsNewWork = 0 + secondsOffset; |
614 | | - minutesToTransferLabel.setText(minutesOffset + " minute(s)"); |
615 | | - currentProjectTimeLabel.setText(DateFormatter.secondsToHHMMSS(secondsActiveWork)); |
616 | | - newProjectTimeLabel.setText(DateFormatter.secondsToHHMMSS(secondsNewWork)); |
617 | | - newEndTimeLabel.setText( |
618 | | - DateFormatter.toTimeString(model.activeWorkItem.get().getEndTime().minusSeconds(secondsOffset))); |
619 | | - }; |
620 | | - activeWorkSecondsProperty.addListener((obs, oldValue, newValue) -> updateLabelsRunnable.run()); |
621 | | - slider.valueProperty().addListener((obs, oldValue, newValue) -> updateLabelsRunnable.run()); |
622 | | - vBox.getChildren().add(grid); |
623 | | - |
624 | | - dialog.getDialogPane().setContent(vBox); |
625 | | - |
626 | | - slider.setOnKeyPressed(ke -> { |
627 | | - if (!slider.isFocused()) { |
628 | | - slider.requestFocus(); |
629 | | - } |
630 | | - |
631 | | - if (ke.getCode() == KeyCode.CONTROL) { |
632 | | - ctrlIsPressed = true; |
633 | | - } |
634 | | - |
635 | | - if (ke.getCode() == KeyCode.LEFT && ctrlIsPressed) { |
636 | | - slider.adjustValue(slider.getValue() - 5); |
637 | | - } |
638 | | - |
639 | | - if (ke.getCode() == KeyCode.RIGHT && ctrlIsPressed) { |
640 | | - slider.adjustValue(slider.getValue() + 5); |
641 | | - } |
642 | | - |
643 | | - }); |
644 | | - |
645 | | - slider.setOnKeyReleased(ke -> { |
646 | | - if (ke.getCode() == KeyCode.CONTROL) { |
647 | | - ctrlIsPressed = false; |
648 | | - } |
649 | | - }); |
650 | | - |
651 | | - dialog.setResultConverter(dialogButton -> { |
652 | | - if (dialogButton == ButtonType.OK) { |
653 | | - return slider.valueProperty().intValue() * 60; |
654 | | - } |
655 | | - return null; |
656 | | - }); |
657 | | - mainStage.setAlwaysOnTop(false); |
658 | | - final Optional<Integer> result = dialog.showAndWait(); |
659 | | - mainStage.setAlwaysOnTop(true); |
660 | | - |
| 557 | + final ChangeWithTimeDialog changeWithTimeDialog = new ChangeWithTimeDialog(); |
| 558 | + changeWithTimeDialog.setModel(model); |
| 559 | + changeWithTimeDialog.setActiveWorkSecondsProperty(activeWorkSecondsProperty); |
| 560 | + changeWithTimeDialog.setUpDialog(p); |
| 561 | + final Optional<Integer> result = changeWithTimeDialog.show(); |
661 | 562 | result.ifPresent(minusSeconds -> changeProject(p, minusSeconds)); |
662 | 563 | }); |
663 | 564 | final MenuItem deleteMenuItem = new MenuItem("Delete"); |
@@ -722,30 +623,6 @@ private Node addProjectToProjectList(final Project p) { |
722 | 623 | return projectElement; |
723 | 624 | } |
724 | 625 |
|
725 | | - private Slider setUpSliderChangeWithTimeMenuItem(final LongProperty activeWorkSecondsProperty) { |
726 | | - final Slider slider = new Slider(); |
727 | | - |
728 | | - slider.setMin(0); |
729 | | - slider.maxProperty().bind(Bindings.createLongBinding(() -> { |
730 | | - final long maxValue = activeWorkSecondsProperty.longValue() / 60; |
731 | | - if (maxValue > 0) { |
732 | | - slider.setDisable(false); |
733 | | - return maxValue; |
734 | | - } |
735 | | - slider.setDisable(true); |
736 | | - return 1l; |
737 | | - }, activeWorkSecondsProperty)); |
738 | | - slider.setValue(0); |
739 | | - slider.setShowTickLabels(true); |
740 | | - slider.setShowTickMarks(true); |
741 | | - slider.setMajorTickUnit(60); |
742 | | - slider.setMinorTickCount(58); |
743 | | - slider.setBlockIncrement(1); |
744 | | - slider.setSnapToTicks(true); |
745 | | - |
746 | | - return slider; |
747 | | - } |
748 | | - |
749 | 626 | private void editProject(final ObservableList<Node> nodes, final Project p) { |
750 | 627 | final TextField projectNameTextField = (TextField) nodes.get(1); |
751 | 628 | final ColorPicker colorPicker = (ColorPicker) nodes.get(3); |
|
0 commit comments