From 966884310b54adfe05f6d3b9807346f48bfb6f23 Mon Sep 17 00:00:00 2001 From: Simon Gregor Ebner Date: Wed, 1 Oct 2014 14:19:10 +0200 Subject: [PATCH] Improved dataset selection --- .../java/ch/psi/imagej/hdf5/HDF5Reader.java | 38 +++++++++---------- .../ch/psi/imagej/hdf5/SelectedDatasets.java | 26 +++++++++++++ 2 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java diff --git a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java index b18dcf4..71e603c 100644 --- a/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java +++ b/src/main/java/ch/psi/imagej/hdf5/HDF5Reader.java @@ -18,6 +18,7 @@ import java.awt.*; import javax.swing.BoxLayout; import javax.swing.DefaultListCellRenderer; +import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; @@ -66,9 +67,9 @@ public class HDF5Reader implements PlugIn { file.open(); List datasets = HDF5Utilities.getDatasets(file); - List selectedDatasets = selectDatasets(datasets); + SelectedDatasets selectedDatasets = selectDatasets(datasets); - for (Dataset var : selectedDatasets) { + for (Dataset var : selectedDatasets.getDatasets()) { // Read dataset attributes and properties String datasetName = var.getName(); @@ -254,18 +255,20 @@ public class HDF5Reader implements PlugIn { * @return List of datasets to visualize. If nothing selected the list will be empty * @throws HDF5Exception */ - private List selectDatasets(List datasets) throws HDF5Exception { + private SelectedDatasets selectDatasets(List datasets) throws HDF5Exception { - List selectedDatasets = new ArrayList<>(); GenericDialog gd = new GenericDialog("Variable Name Selection"); gd.addMessage("Please select variables to be loaded.\n"); - if (datasets.size() < 1) { - IJ.error("The file does not contain datasets"); - } else { - - // TODO only display datasets >= 2D - JList list = new JList<>(datasets.toArray(new Dataset[datasets.size()])); + // Filter datasets that are not potential images / that cannot be displayed + List fdatasets = new ArrayList(); + for(Dataset d: datasets){ + if(d.getRank()>=2 && d.getRank()<=5){ + fdatasets.add(d); + } + } + + JList list = new JList<>(fdatasets.toArray(new Dataset[fdatasets.size()])); list.setCellRenderer(new DefaultListCellRenderer() { private static final long serialVersionUID = 1L; public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -283,14 +286,8 @@ public class HDF5Reader implements PlugIn { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS)); panel.add(scroll); -// JPanel lpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// lpanel.add(new JLabel("Too much entries - Please enter the full path of the dataset to be displayed")); -// panel.add(lpanel); -// JPanel tpanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); -// tpanel.add(new JLabel("Dataset: ")); -// JTextField tfield = new JTextField("",60); -// tpanel.add(tfield); -// panel.add(tpanel); + JCheckBox checkbox = new JCheckBox("Group Datasets"); + panel.add(checkbox); gd = new GenericDialog("Variable Name Selection"); gd.add(panel); @@ -298,10 +295,11 @@ public class HDF5Reader implements PlugIn { gd.pack(); gd.showDialog(); + SelectedDatasets selectedDatasets = new SelectedDatasets(); if (!gd.wasCanceled()) { - selectedDatasets = list.getSelectedValuesList(); + selectedDatasets.setDatasets(list.getSelectedValuesList()); + selectedDatasets.setGroup(checkbox.isSelected()); } - } return selectedDatasets; } diff --git a/src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java b/src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java new file mode 100644 index 0000000..f0e6695 --- /dev/null +++ b/src/main/java/ch/psi/imagej/hdf5/SelectedDatasets.java @@ -0,0 +1,26 @@ +package ch.psi.imagej.hdf5; + +import java.util.ArrayList; +import java.util.List; + +import ncsa.hdf.object.Dataset; + +public class SelectedDatasets { + + private List datasets = new ArrayList(); + private boolean group = false; + + public List getDatasets() { + return datasets; + } + public void setDatasets(List datasets) { + this.datasets = datasets; + } + public boolean isGroup() { + return group; + } + public void setGroup(boolean group) { + this.group = group; + } + +}