diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 7f93baf9d9ad94cb154a1f2a8e08d56d3d02e0c4..548cfec99db30c4ce5f6e025a0cf61f99f23b201 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -298,7 +298,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { parentStep.addSubStep(s); } - itiFile.addLinkItinerary(s, null); + itiFile.addStep(s); DataNode stepNode = new DataNode(DataNodeType.STEP); stepNode.setItineraryFile(itiFile); if(parentStep != null) { @@ -1153,6 +1153,83 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); if (s.getSubStep().isEmpty()) menu.getItems().add(newMix); + MenuItem moveStep = new MenuItem("Move Step"); + moveStep.setDisable(false); + moveStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); + moveStep.setGraphic(new ImageView(UITools.getImage("resources/images/move_16.png"))); + moveStep.setOnAction(event -> { + StepFile stepFile = (StepFile) item.getFile(); + GeneralFile processFile = stepFile.getGeneralFile(); + + Dialog<ButtonType> moveStepDiag = new Dialog<>(); + moveStepDiag.getDialogPane().setPrefSize(500, 400); + moveStepDiag.initModality(Modality.WINDOW_MODAL); + moveStepDiag.initOwner(MainApp.primaryStage); + + AnchorPane pane = new AnchorPane(); + VBox vb = new VBox(1.0); + vb.getChildren().add(new Label("Select the step / itinerary where you want to move this step")); + TreeItem<GenericFile> fakeRoot = new TreeItem<>(null); + TreeView<GenericFile> treeStep = new TreeView<>(fakeRoot); + treeStep.setCellFactory(factory -> new TextFieldTreeCell<>(){}); + + treeStep.setShowRoot(false); + processFile.getItinerary().forEach(itiFile -> { + TreeItem<GenericFile> ckIti = new TreeItem<>(itiFile); + fakeRoot.getChildren().add(ckIti); + itiFile.getListStep().forEach(step -> { + TreeItem<GenericFile> ckStep = new TreeItem<>(step); + ckIti.getChildren().add(ckStep); + }); + }); + + vb.getChildren().add(treeStep); + pane.getChildren().add(vb); + + AnchorPane.setTopAnchor(vb, 2.0); + AnchorPane.setLeftAnchor(vb, 2.0); + AnchorPane.setRightAnchor(vb, 2.0); + AnchorPane.setBottomAnchor(vb, 2.0); + + moveStepDiag.getDialogPane().setContent(pane); + moveStepDiag.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + + Button bok = (Button) moveStepDiag.getDialogPane().lookupButton(ButtonType.OK); + bok.disableProperty().bind(treeStep.getSelectionModel().selectedItemProperty().isNull()); + + Optional<ButtonType> result = moveStepDiag.showAndWait(); + + if (result.isPresent()) { + if (result.get().equals(ButtonType.OK)) { + GenericFile moveTo = treeStep.getSelectionModel().getSelectedItem().getValue(); + if(moveTo != null) { + stepFile.removeFather(); + // remove step from old itinerary + item.getItineraryFile().removeStepFromItinerary(stepFile); + + if(moveTo instanceof ItineraryFile) { + ItineraryFile itiFile = (ItineraryFile) moveTo; + itiFile.addStep(stepFile); + MainApp.getDataControler().buildProcessTree(itiFile.getProcessFile()); + } + if(moveTo instanceof StepFile) { + StepFile stepFileFather = (StepFile) moveTo; + stepFileFather.addSubStep(stepFile); + for(ItineraryFile iti : processFile.getItinerary()) { + if(iti.contains(stepFileFather)) { + iti.addStep(stepFile); + } + } + MainApp.getDataControler().buildProcessTree(processFile); + } + MainApp.getDataControler().selectNode(stepFile); + } + } + } + + }); + menu.getItems().add(moveStep); + MenuItem exportStep = new MenuItem("Export Step"); exportStep.setDisable(false);