/******************************************************************************* * Copyright (c) 2016 Weasis Team and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.dicom.qr; import java.awt.Component; import java.awt.FlowLayout; import java.awt.event.MouseEvent; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import javax.swing.JPanel; import javax.swing.tree.TreePath; import org.weasis.dicom.explorer.DicomModel; import org.weasis.dicom.explorer.ExportTree; import org.weasis.dicom.qr.RetrieveTreeModel.ToolTipSeriesNode; import org.weasis.dicom.qr.RetrieveTreeModel.ToolTipStudyNode; import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree; import it.cnr.imaa.essi.lablib.gui.checkboxtree.TreeCheckingModel; @SuppressWarnings("serial") public class RetrieveTree extends JPanel { public RetrieveTree(DicomModel dicomModel) { this(new RetrieveTreeModel(dicomModel)); } public RetrieveTree(RetrieveTreeModel retrieveTreeModel) { this.setLayout(new FlowLayout(FlowLayout.LEFT)); setCheckTreeModel(retrieveTreeModel); } public void setCheckTreeModel(final RetrieveTreeModel retrieveTreeModel) { CheckboxTree checkboxTree = new CheckboxTree(Objects.requireNonNull(retrieveTreeModel).getModel()) { @Override public String getToolTipText(MouseEvent evt) { if (getRowForLocation(evt.getX(), evt.getY()) == -1) { return null; } TreePath curPath = getPathForLocation(evt.getX(), evt.getY()); if (curPath != null) { Object object = curPath.getLastPathComponent(); if (object instanceof ToolTipStudyNode) { return ((ToolTipStudyNode) object).getToolTipText(); } else if (object instanceof ToolTipSeriesNode) { return ((ToolTipSeriesNode) object).getToolTipText(); } } return null; } }; // Register tooltips checkboxTree.setToolTipText(""); //$NON-NLS-1$ /** * At this point checking Paths are supposed to be binded at Series Level but depending on the CheckingMode it * may also contains parents treeNode paths.<br> * For medical use recommendation is to default select the whole series related to studies to be analyzed */ TreeCheckingModel checkingModel = retrieveTreeModel.getCheckingModel(); TreePath[] checkingPaths = retrieveTreeModel.getCheckingPaths(); checkboxTree.setCheckingModel(checkingModel); // be aware that checkingPaths is cleared at this point if (checkingPaths != null && checkingPaths.length > 0) { Set<TreePath> studyPathsSet = new HashSet<>(); for (TreePath checkingPath : checkingPaths) { if (checkingPath.getPathCount() == 4) { // 4 stands for Series Level studyPathsSet.add(checkingPath.getParentPath()); } } if (!studyPathsSet.isEmpty()) { TreePath[] studyCheckingPaths = studyPathsSet.toArray(new TreePath[studyPathsSet.size()]); checkboxTree.setCheckingPaths(studyCheckingPaths); } List<TreePath> selectedPaths = retrieveTreeModel.getDefaultSelectedPaths(); if (!selectedPaths.isEmpty()) { checkboxTree.setSelectionPaths(selectedPaths.toArray(new TreePath[selectedPaths.size()])); } } ExportTree.expandTree(checkboxTree, retrieveTreeModel.getRootNode(), 2); // 2 stands for Study Level removeAll(); add(checkboxTree); } public CheckboxTree getCheckboxTree() { for (int i = 0; i < getComponentCount(); i++) { Component c = getComponent(i); if (c instanceof CheckboxTree) { return (CheckboxTree) c; } } throw new IllegalStateException("CheckboxTree cannot be null"); //$NON-NLS-1$ } }