diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/XCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/XCell.java index b5809f7e7a93a906ce193506bf88d93663b39aa7..1b3b09b3953ef965abb0a369ccf1fee5ac34f61d 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/XCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/XCell.java @@ -19,6 +19,8 @@ package fr.inra.po2vocabmanager.utils; import fr.inra.po2vocabmanager.MainApp; +import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.scene.control.*; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; @@ -29,9 +31,9 @@ import javafx.scene.layout.Priority; public class XCell extends ListCell<String> { HBox hbox = new HBox(); - Label label = new Label(""); Pane pane = new Pane(); Button button = new Button(""); + Hyperlink hl = new Hyperlink(""); TextField tf = new TextField(); public XCell() { @@ -46,10 +48,16 @@ public class XCell extends ListCell<String> { } }); button.setGraphic(new ImageView(UITools.getImage("resources/images/del_16.png"))); - hbox.getChildren().addAll(label, pane, button); + hbox.getChildren().addAll(hl, pane, button); HBox.setHgrow(pane, Priority.ALWAYS); button.setOnAction(event -> getListView().getItems().remove(getItem())); button.disableProperty().bind(MainApp.getDataControler().getCanEditProperty().not()); + hl.setOnAction(new EventHandler<ActionEvent>() { + @Override + public void handle(ActionEvent event) { + MainApp.openBrowser(hl.getText()); + } + }); } @Override @@ -62,7 +70,7 @@ public class XCell extends ListCell<String> { tf.setText(item); setGraphic(tf); } else { - label.setText(item); + hl.setText(item); setGraphic(hbox); } } @@ -80,14 +88,14 @@ public class XCell extends ListCell<String> { @Override public void cancelEdit() { super.cancelEdit(); - label.setText(getItem()); + hl.setText(getItem()); setGraphic(hbox); } @Override public void commitEdit(String item) { super.commitEdit(tf.getText()); - label.setText(tf.getText()); + hl.setText(tf.getText()); setText(null); setGraphic(hbox); } diff --git a/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProcessOverviewController.java b/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProcessOverviewController.java index 374a6eb8a0c98c766afc1eab86515be6dc2b5358..fb9108daa337a9e7ef519bb4d648a76adb3a096c 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProcessOverviewController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProcessOverviewController.java @@ -21,12 +21,16 @@ package fr.inra.po2vocabmanager.view.dataView; import fr.inra.po2vocabmanager.MainApp; import fr.inra.po2vocabmanager.model.DataNode; import fr.inra.po2vocabmanager.utils.UITools; +import fr.inra.po2vocabmanager.utils.XCell; import fr.inrae.po2engine.model.dataModel.GeneralFile; import fr.inrae.po2engine.model.dataModel.StepFile; import javafx.animation.TranslateTransition; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; @@ -38,7 +42,9 @@ import javafx.util.Duration; import org.controlsfx.control.textfield.AutoCompletionBinding; import java.util.ArrayList; +import java.util.Arrays; import java.util.Optional; +import java.util.stream.Collectors; public class ProcessOverviewController { @@ -54,7 +60,11 @@ public class ProcessOverviewController { TitledPane stepAvailable; @FXML TextArea description; - + @FXML + Label linksLabel; + @FXML + ListView<String> listExternalLinks; + private ObservableList<String> listLink; TreeTableView<StepFile> treeTableView; TreeTableColumn<StepFile, String> colStep; TreeTableColumn<StepFile, String> colIti; @@ -135,6 +145,26 @@ public class ProcessOverviewController { UITools.simpleBindValue(generalFile.getCDescription(), description); listAutoCompletion.add(UITools.addAutoComplete(processType, generalFile.getCType().getListConstraint())); + + + ArrayList<String> ls = generalFile.getExternalLinks(); + String[] arrayLink = new String [ls.size()]; + ls.toArray(arrayLink); + this.listLink = FXCollections.observableArrayList(Arrays.asList(arrayLink)); + this.listLink.addListener((ListChangeListener<? super String>) change -> { + updateListLink(); + }); + Button addLink = new Button(); + addLink.disableProperty().bind(this.mainApp.getEditProperty().not()); + addLink.setGraphic(new ImageView(UITools.getImage("resources/images/add_16.png"))); + linksLabel.setGraphic(addLink); + listExternalLinks.editableProperty().bind(this.mainApp.getEditProperty()); + listExternalLinks.setItems(listLink); + listExternalLinks.setCellFactory(param -> new XCell()); + + addLink.setOnAction(actionEvent -> { + listLink.add("new link"); + }); // UITools.addPopOver(processType, Ontology.Process); // generalFile.setTitle(processTitle); @@ -220,6 +250,11 @@ public class ProcessOverviewController { } + private void updateListLink() { + String val = listLink.stream().collect(Collectors.joining("::")); + generalFile.setExternalLink(val); + } + public void unloadControler() { treeTableView.getColumns().clear(); colDel = null; diff --git a/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProjectOverviewController.java b/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProjectOverviewController.java index 763d4b3f898bdd88c7d9b7178c74966248474c5b..e633e4cd553c68d9f5039cec6d9f0ef874254deb 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProjectOverviewController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/dataView/ProjectOverviewController.java @@ -33,6 +33,7 @@ import javafx.scene.control.*; import javafx.scene.image.ImageView; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; @@ -77,7 +78,9 @@ public class ProjectOverviewController { this.mainApp = mainApp; ProjectFile projectFile = mainApp.getDataControler().getCurrentData().getProjectFile(); - String[] arrayLink = Arrays.stream(projectFile.getCExternalLinks().getValue().get().split("\\r?\\n?\\::")).map(String::trim).filter(s -> !s.isEmpty()).toArray(String[]::new); + ArrayList<String> ls = projectFile.getExternalLinks(); + String[] arrayLink = new String [ls.size()]; + ls.toArray(arrayLink); this.listLink = FXCollections.observableArrayList(Arrays.asList(arrayLink)); this.listLink.addListener((ListChangeListener<? super String>) change -> { updateListLink(); diff --git a/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProcessOverview.fxml b/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProcessOverview.fxml index 8809e7e200545fa89c810c5c87b80030ef274b04..3871d3b54891f62a7780ad540a5e482d5ff8d857 100644 --- a/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProcessOverview.fxml +++ b/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProcessOverview.fxml @@ -21,13 +21,13 @@ <?import javafx.geometry.Insets?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> -<AnchorPane xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="544.0" prefWidth="718.0" xmlns="http://javafx.com/javafx/21.0.1" fx:controller="fr.inra.po2vocabmanager.view.dataView.ProcessOverviewController"> +<AnchorPane xmlns:fx="http://javafx.com/fxml/1" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="544.0" prefWidth="718.0" xmlns="http://javafx.com/javafx/21" fx:controller="fr.inra.po2vocabmanager.view.dataView.ProcessOverviewController"> <children> <VBox spacing="10.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> - <TitledPane text="Process"> + <TitledPane prefHeight="210.0" text="Process"> <content> - <GridPane hgap="5.0" prefHeight="150.0" vgap="5.0"> + <GridPane hgap="5.0" vgap="5.0"> <columnConstraints> <ColumnConstraints hgrow="SOMETIMES" percentWidth="33.0" /> <ColumnConstraints hgrow="SOMETIMES" percentWidth="33.0" /> @@ -36,6 +36,7 @@ <rowConstraints> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> + <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> </rowConstraints> <children> <VBox GridPane.columnIndex="1"> @@ -57,7 +58,7 @@ <TextField fx:id="processType" /> </children> </VBox> - <VBox GridPane.columnIndex="2" GridPane.rowSpan="2"> + <VBox GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.rowSpan="2"> <children> <Label text="Description : " /> <TextArea fx:id="description" /> @@ -73,11 +74,17 @@ </TextField> </children> </VBox> - <VBox GridPane.columnIndex="1" GridPane.rowIndex="1"> + <VBox GridPane.rowIndex="2"> <children> <Label text="End date : (YYYY-MM-DD)" /> <TextField fx:id="endDate" /> </children></VBox> + <VBox prefHeight="200.0" prefWidth="100.0" GridPane.columnIndex="2" GridPane.rowSpan="3"> + <children> + <Label fx:id="linksLabel" text="External Links :" /> + <ListView fx:id="listExternalLinks" prefHeight="200.0" prefWidth="200.0" /> + </children> + </VBox> </children> </GridPane> </content> diff --git a/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProjectOverview.fxml b/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProjectOverview.fxml index 7dad00a5d0f3f9e8a171c197388ecc6d124bbeb7..13d080d1d0f4f9b43acea6538949cc93f24506e9 100644 --- a/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProjectOverview.fxml +++ b/src/main/resources/fr/inra/po2vocabmanager/view/dataView/ProjectOverview.fxml @@ -20,11 +20,11 @@ <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> -<AnchorPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="564.0" prefWidth="755.0" xmlns="http://javafx.com/javafx/17" fx:controller="fr.inra.po2vocabmanager.view.dataView.ProjectOverviewController"> +<AnchorPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="564.0" prefWidth="755.0" xmlns="http://javafx.com/javafx/21" fx:controller="fr.inra.po2vocabmanager.view.dataView.ProjectOverviewController"> <children> <BorderPane prefHeight="200.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <top> - <TitledPane collapsible="false" maxHeight="208.0" prefHeight="208.0" prefWidth="755.0" text="Project" BorderPane.alignment="CENTER"> + <TitledPane collapsible="false" maxHeight="208.0" prefHeight="210.0" prefWidth="755.0" text="Project" BorderPane.alignment="CENTER"> <content> <GridPane hgap="5.0" vgap="5.0"> <columnConstraints>