/*-
* #%L
* Fiji distribution of ImageJ for the life sciences.
* %%
* Copyright (C) 2007 - 2017 Fiji developers.
* %%
* 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, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/
package spim.fiji.plugin;
import fiji.util.gui.GenericDialogPlus;
import ij.IJ;
import ij.ImageJ;
import ij.gui.DialogListener;
import ij.gui.GenericDialog;
import ij.plugin.PlugIn;
import java.awt.AWTEvent;
import java.awt.Choice;
import java.awt.event.ItemEvent;
import java.util.ArrayList;
import mpicbg.spim.io.IOFunctions;
import spim.fiji.ImgLib2Temp.Pair;
import spim.fiji.ImgLib2Temp.ValuePair;
import spim.fiji.datasetmanager.DHM;
import spim.fiji.datasetmanager.LightSheetZ1;
import spim.fiji.datasetmanager.MicroManager;
import spim.fiji.datasetmanager.MultiViewDatasetDefinition;
import spim.fiji.datasetmanager.SlideBook6;
import spim.fiji.datasetmanager.StackList;
import spim.fiji.datasetmanager.StackListImageJ;
import spim.fiji.datasetmanager.StackListLOCI;
import spim.fiji.plugin.queryXML.GenericLoadParseQueryXML;
import spim.fiji.plugin.util.GUIHelper;
import spim.fiji.plugin.util.MyMultiLineLabel;
import spim.fiji.spimdata.SpimData2;
public class Define_Multi_View_Dataset implements PlugIn
{
final public static ArrayList< MultiViewDatasetDefinition > staticDatasetDefinitions = new ArrayList< MultiViewDatasetDefinition >();
public static int defaultDatasetDef = 3;
public static String defaultXMLName = "dataset.xml";
final int numLinesDocumentation = 15;
final int numCharacters = 80;
static
{
IOFunctions.printIJLog = true;
staticDatasetDefinitions.add( new StackListLOCI() );
staticDatasetDefinitions.add( new StackListImageJ() );
staticDatasetDefinitions.add( new MicroManager() );
staticDatasetDefinitions.add( new LightSheetZ1() );
staticDatasetDefinitions.add( new DHM() );
staticDatasetDefinitions.add( new SlideBook6() );
}
@Override
public void run( String arg0 )
{
defineDataset( true );
}
public Pair< SpimData2, String > defineDataset( final boolean save )
{
final ArrayList< MultiViewDatasetDefinition > datasetDefinitions = new ArrayList< MultiViewDatasetDefinition >();
for ( final MultiViewDatasetDefinition mvd : staticDatasetDefinitions )
datasetDefinitions.add( mvd.newInstance() );
// verify that there are definitions
final int numDatasetDefinitions = datasetDefinitions.size();
if ( numDatasetDefinitions == 0 )
{
IJ.log( "No Multi-View Dataset Definitions available." );
return null;
}
// get their names
final String[] titles = new String[ numDatasetDefinitions ];
for ( int i = 0; i < datasetDefinitions.size(); ++i )
titles[ i ] = datasetDefinitions.get( i ).getTitle();
// query the dataset definition to use
final GenericDialogPlus gd1 = new GenericDialogPlus( "Select type of multi-view dataset" );
if ( defaultDatasetDef >= numDatasetDefinitions )
defaultDatasetDef = 0;
gd1.addChoice( "Type_of_dataset: ", titles, titles[ defaultDatasetDef ] );
//Choice choice = (Choice)gd1.getChoices().lastElement();
gd1.addStringField( "XML_filename", defaultXMLName, 30 );
/*
final MyMultiLineLabel label = MyMultiLineLabel.addMessage( gd1,
formatEntry( datasetDefinitions.get( defaultDatasetDef ).getExtendedDescription(), numCharacters, numLinesDocumentation ),
new Font( Font.MONOSPACED, Font.PLAIN, 11 ),
Color.BLACK );
addListeners( gd1, choice, label, datasetDefinitions );*/
GUIHelper.addWebsite( gd1 );
gd1.showDialog();
if ( gd1.wasCanceled() )
return null;
defaultDatasetDef = gd1.getNextChoiceIndex();
final String xmlFileName = defaultXMLName = gd1.getNextString();
// run the definition
final MultiViewDatasetDefinition def = datasetDefinitions.get( defaultDatasetDef );
IOFunctions.println( defaultDatasetDef );
final SpimData2 spimData = def.createDataset();
if ( spimData == null )
{
IOFunctions.println( "Defining multi-view dataset failed." );
return null;
}
else
{
final String xml = SpimData2.saveXML( spimData, xmlFileName, "" );
if ( xml != null )
{
GenericLoadParseQueryXML.defaultXMLfilename = xml;
return new ValuePair< SpimData2, String >( spimData, xml );
}
else
{
return null;
}
}
}
public static String[] formatEntry( String line, final int numCharacters, final int numLines )
{
if ( line == null )
line = "";
String[] split = line.split( "\n" );
if ( split.length != numLines )
{
String[] split2 = new String[ numLines ];
for ( int j = 0; j < Math.min( split.length, numLines ); ++j )
split2[ j ] = split[ j ];
for ( int j = Math.min( split.length, numLines ); j < numLines; ++j )
split2[ j ] = "";
split = split2;
}
for ( int j = 0; j < split.length; ++j )
{
String s = split[ j ];
if ( s.length() > 80 )
s = s.substring( 0, 80 );
// fill up to numCharacters + 3
for ( int i = s.length(); i < numCharacters + 3; ++i )
s = s + " ";
split[ j ] = s;
}
return split;
}
protected void addListeners( final GenericDialog gd, final Choice choice, final MyMultiLineLabel label, final ArrayList< MultiViewDatasetDefinition > datasetDefinitions )
{
gd.addDialogListener( new DialogListener()
{
@Override
public boolean dialogItemChanged( final GenericDialog dialog, final AWTEvent e )
{
if ( e instanceof ItemEvent && e.getID() == ItemEvent.ITEM_STATE_CHANGED && e.getSource() == choice )
{
label.setText( formatEntry( datasetDefinitions.get( choice.getSelectedIndex() ).getExtendedDescription(), numCharacters, numLinesDocumentation ) );
}
return true;
}
} );
}
public static void main( String args[] )
{
StackList.defaultDirectory = "/Users/preibischs/Documents/Microscopy/SPIM/HisYFP-SPIM";
IOFunctions.printIJLog = true;
new ImageJ();
new Define_Multi_View_Dataset().run( null );
//System.exit( 0 );
}
}