From 2894b77f86ac83f2a61f14e70808473c2d6ab469 Mon Sep 17 00:00:00 2001 From: stephane <stephane.dervaux@inrae.fr> Date: Wed, 13 Nov 2024 15:38:32 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20fonction=20permettant=20la=20sauve?= =?UTF-8?q?garde=20&=20restauration=20de=20l'=C3=A9tat=20de=20l'arbre=20?= =?UTF-8?q?=3D>=20passage=20de=20refresh=20de=20l'arbre=20=C3=A0=20reconst?= =?UTF-8?q?ruction=20compl=C3=A9te=20pour=20=C3=A9vit=C3=A9=20le=20soucis?= =?UTF-8?q?=20de=20graph=20pas=20=C3=A0=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/RecursiveTreeItem.java | 30 +++++++++++++++++++ .../ontoView/OntologyOverviewController.java | 15 ++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/RecursiveTreeItem.java b/src/main/java/fr/inra/po2vocabmanager/utils/RecursiveTreeItem.java index 32a2e7fe..a9e88ca0 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/RecursiveTreeItem.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/RecursiveTreeItem.java @@ -28,6 +28,7 @@ import javafx.util.Callback; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; public class RecursiveTreeItem<T> extends TreeItem<T> { @@ -38,6 +39,35 @@ public class RecursiveTreeItem<T> extends TreeItem<T> { private OntologyOverviewController controller; + // Méthode récursive pour obtenir le chemin d'un TreeItem + public static String getPath(TreeItem<?> item) { + if (item.getParent() == null) { + return "/"; // Retourne la racine + } + int index = item.getParent().getChildren().indexOf(item); + return getPath(item.getParent()) + index + "/"; + } + + // Méthode pour sauvegarder l'état d'ouverture des nœuds en fonction de leur chemin + public static void saveExpandedState(TreeItem<?> item, Map<String, Boolean> expandedStates) { + if(item == null) return; + expandedStates.put(RecursiveTreeItem.getPath(item), item.isExpanded()); + for (TreeItem<?> child : item.getChildren()) { + saveExpandedState(child, expandedStates); + } + } + + // Méthode pour restaurer l'état d'ouverture des nœuds en fonction de leur chemin + public static void restoreExpandedState(TreeItem<?> item, Map<String, Boolean> expandedStates) { + Boolean isExpanded = expandedStates.get(RecursiveTreeItem.getPath(item)); + if (isExpanded != null) { + item.setExpanded(isExpanded); + } + for (TreeItem<?> child : item.getChildren()) { + restoreExpandedState(child, expandedStates); + } + } + private Comparator<TreeItem<? extends T>> comparator = (o1, o2) -> { if(o1.getValue() instanceof DataNode && o2.getValue() instanceof DataNode) { DataNode do1 = ((DataNode) o1.getValue()); diff --git a/src/main/java/fr/inra/po2vocabmanager/view/ontoView/OntologyOverviewController.java b/src/main/java/fr/inra/po2vocabmanager/view/ontoView/OntologyOverviewController.java index 827d62cf..9d1f2776 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/ontoView/OntologyOverviewController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/ontoView/OntologyOverviewController.java @@ -581,12 +581,22 @@ TableView<SimpleStringProperty> tableClose; } public void refreshTree(){ - vocabTree.refresh(); + rebuildTree(false, false); } public void rebuildTree(boolean rebuildConstraint) { + rebuildTree(rebuildConstraint, false); + } + public void rebuildTree(boolean rebuildConstraint, boolean resetState) { + // Sauvegarde de l'état des nœuds ouverts + Map<String, Boolean> expandedStates = new HashMap<>(); + if(!resetState) { + RecursiveTreeItem.saveExpandedState(rootItem, expandedStates); + } rootItem = new RecursiveTreeItem<>(currentOntology.getRootNode(), VocabConcept::getGraphic, VocabConcept::getSubNodeInScheme, this); + // Restauration de l'état des nœuds ouverts + RecursiveTreeItem.restoreExpandedState(rootItem, expandedStates); setTree(rootItem); if(rebuildConstraint) { currentOntology.rebuildConstraints(); @@ -680,7 +690,7 @@ TableView<SimpleStringProperty> tableClose; MainApp.getOntologyControler().setIsOnMainScheme(true); MainApp.updateConceptScheme(); - rebuildTree(false); + rebuildTree(false, true); try { MutablePair<String, Date> versionDate = CloudConnector.getDavVersion(currentOntology); @@ -1016,7 +1026,6 @@ TableView<SimpleStringProperty> tableClose; labelChemin.setText(sb.toString()); - MainApp.logger.debug("node :" + currentNode + " selected"); ObservableList<VocabNodeWLang> print = FXCollections.observableArrayList(); for(String l : VocabConcept.listLang) { -- GitLab