// // RangeDialog.java // /* LOCI Plugins for ImageJ: a collection of ImageJ plugins including the Bio-Formats Importer, Bio-Formats Exporter, Bio-Formats Macro Extensions, Data Browser and Stack Slicer. Copyright (C) 2005-@year@ Melissa Linkert, Curtis Rueden and Christopher Peterson. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package loci.plugins.in; import ij.gui.GenericDialog; import loci.plugins.util.ImageProcessorReader; import loci.plugins.util.WindowTools; /** * Bio-Formats Importer range chooser dialog box. * * <dl><dt><b>Source code:</b></dt> * <dd><a href="http://trac.openmicroscopy.org.uk/ome/browser/bioformats.git/components/loci-plugins/src/loci/plugins/in/RangeDialog.java">Trac</a>, * <a href="http://git.openmicroscopy.org/?p=bioformats.git;a=blob;f=components/loci-plugins/src/loci/plugins/in/RangeDialog.java;hb=HEAD">Gitweb</a></dd></dl> */ public class RangeDialog extends ImporterDialog { // -- Constructor -- /** * Creates a range chooser dialog for the Bio-Formats Importer. * * @param process the {@link ImportProcess} to use for extracting * details of each series. */ public RangeDialog(ImportProcess process) { super(process); } // -- ImporterDialog methods -- protected boolean needPrompt() { if (process.isWindowless() || !options.isSpecifyRanges()) return false; ImageProcessorReader r = process.getReader(); int seriesCount = process.getSeriesCount(); int currentSeries = r.getSeries(); for (int s=0; s<seriesCount; s++) { r.setSeries(s); if (options.isSeriesOn(s) && r.getImageCount() > 1) { r.setSeries(currentSeries); return true; } } r.setSeries(currentSeries); return false; } protected GenericDialog constructDialog() { ImageProcessorReader r = process.getReader(); int seriesCount = process.getSeriesCount(); // construct dialog GenericDialog gd = new GenericDialog("Bio-Formats Range Options"); for (int s=0; s<seriesCount; s++) { if (!options.isSeriesOn(s)) continue; r.setSeries(s); gd.addMessage(process.getSeriesLabel(s).replaceAll("_", " ")); String suffix = seriesCount > 1 ? "_" + (s + 1) : ""; //if (r.isOrderCertain()) { if (r.getEffectiveSizeC() > 1) { gd.addNumericField("C_Begin" + suffix, process.getCBegin(s) + 1, 0); gd.addNumericField("C_End" + suffix, process.getCEnd(s) + 1, 0); gd.addNumericField("C_Step" + suffix, process.getCStep(s), 0); } if (r.getSizeZ() > 1) { gd.addNumericField("Z_Begin" + suffix, process.getZBegin(s) + 1, 0); gd.addNumericField("Z_End" + suffix, process.getZEnd(s) + 1, 0); gd.addNumericField("Z_Step" + suffix, process.getZStep(s), 0); } if (r.getSizeT() > 1) { gd.addNumericField("T_Begin" + suffix, process.getTBegin(s) + 1, 0); gd.addNumericField("T_End" + suffix, process.getTEnd(s) + 1, 0); gd.addNumericField("T_Step" + suffix, process.getTStep(s), 0); } //} //else { // gd.addNumericField("Begin" + suffix, process.getCBegin(s) + 1, 0); // gd.addNumericField("End" + suffix, process.getCEnd(s) + 1, 0); // gd.addNumericField("Step" + suffix, process.getCStep(s), 0); //} } WindowTools.addScrollBars(gd); return gd; } protected boolean harvestResults(GenericDialog gd) { ImageProcessorReader r = process.getReader(); int seriesCount = process.getSeriesCount(); for (int s=0; s<seriesCount; s++) { if (!options.isSeriesOn(s)) continue; r.setSeries(s); int sizeC = r.getEffectiveSizeC(); int sizeZ = r.getSizeZ(); int sizeT = r.getSizeT(); boolean certain = r.isOrderCertain(); int cBegin = process.getCBegin(s); int cEnd = process.getCEnd(s); int cStep = process.getCStep(s); int zBegin = process.getZBegin(s); int zEnd = process.getZEnd(s); int zStep = process.getZStep(s); int tBegin = process.getTBegin(s); int tEnd = process.getTEnd(s); int tStep = process.getTStep(s); //if (certain) { if (r.getEffectiveSizeC() > 1) { cBegin = (int) gd.getNextNumber() - 1; cEnd = (int) gd.getNextNumber() - 1; cStep = (int) gd.getNextNumber(); } if (r.getSizeZ() > 1) { zBegin = (int) gd.getNextNumber() - 1; zEnd = (int) gd.getNextNumber() - 1; zStep = (int) gd.getNextNumber(); } if (r.getSizeT() > 1) { tBegin = (int) gd.getNextNumber() - 1; tEnd = (int) gd.getNextNumber() - 1; tStep = (int) gd.getNextNumber(); } //} //else { // cBegin = (int) gd.getNextNumber() - 1; // cEnd = (int) gd.getNextNumber() - 1; // cStep = (int) gd.getNextNumber(); //} int maxC = certain ? sizeC : r.getImageCount(); if (cBegin < 0) cBegin = 0; if (cBegin >= maxC) cBegin = maxC - 1; if (cEnd < cBegin) cEnd = cBegin; if (cEnd >= maxC) cEnd = maxC - 1; if (cStep < 1) cStep = 1; if (zBegin < 0) zBegin = 0; if (zBegin >= sizeZ) zBegin = sizeZ - 1; if (zEnd < zBegin) zEnd = zBegin; if (zEnd >= sizeZ) zEnd = sizeZ - 1; if (zStep < 1) zStep = 1; if (tBegin < 0) tBegin = 0; if (tBegin >= sizeT) tBegin = sizeT - 1; if (tEnd < tBegin) tEnd = tBegin; if (tEnd >= sizeT) tEnd = sizeT - 1; if (tStep < 1) tStep = 1; options.setCBegin(s, cBegin); options.setCEnd(s, cEnd); options.setCStep(s, cStep); options.setZBegin(s, zBegin); options.setZEnd(s, zEnd); options.setZStep(s, zStep); options.setTBegin(s, tBegin); options.setTEnd(s, tEnd); options.setTStep(s, tStep); } return true; } }