/*
 * Copyright 2010-2015 Institut Pasteur.
 * 
 * This file is part of Icy.
 * 
 * Icy 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 3 of the License, or
 * (at your option) any later version.
 * 
 * Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
 */
package icy.gui.sequence;

import icy.gui.dialog.ActionDialog;
import icy.gui.dialog.MessageDialog;
import icy.main.Icy;
import icy.math.UnitUtil;
import icy.math.UnitUtil.UnitPrefix;
import icy.sequence.Sequence;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
 * @author Stephane
 */
public class SequencePropertiesDialog extends ActionDialog
{
    /**
     * 
     */
    private static final long serialVersionUID = 5696186054980120411L;

    SequencePropertiesPanel panel;

    public SequencePropertiesDialog(final Sequence sequence)
    {
        super("Sequence Properties");

        initialize();

        panel.setSequence(sequence);
        // don't close automatically
        setCloseAfterAction(false);

        setOkAction(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                final double sx, sy, sz, st;

                sx = panel.getPixelSizeXFieldValue();
                sy = panel.getPixelSizeYFieldValue();
                sz = panel.getPixelSizeZFieldValue();
                st = panel.getTimeIntervalFieldValue();

                if ((sx <= 0d) || (sy <= 0d) || (sz <= 0d))
                {
                    MessageDialog.showDialog("Pixel size values should be > 0 !", MessageDialog.WARNING_MESSAGE);
                    return;
                }

                sequence.setName(panel.getNameFieldValue());
                sequence.setPixelSizeX(UnitUtil.getValueInUnit(sx, panel.getPixelSizeXUnit(), UnitPrefix.MICRO));
                sequence.setPixelSizeY(UnitUtil.getValueInUnit(sy, panel.getPixelSizeYUnit(), UnitPrefix.MICRO));
                sequence.setPixelSizeZ(UnitUtil.getValueInUnit(sz, panel.getPixelSizeZUnit(), UnitPrefix.MICRO));

                double valueInSec = st;

                switch (panel.getTimeIntervalUnit())
                {
                    case 0:
                        valueInSec *= 60d;
                    case 1:
                        valueInSec *= 60d;
                        break;
                    case 3:
                        valueInSec /= 1000d;
                        break;
                }

                // time interval
                sequence.setTimeInterval(valueInSec);

                // position
                sequence.setPositionX(UnitUtil.getValueInUnit(panel.getPositionXValue(), panel.getPositionXUnit(),
                        UnitPrefix.MICRO));
                sequence.setPositionY(UnitUtil.getValueInUnit(panel.getPositionYValue(), panel.getPositionYUnit(),
                        UnitPrefix.MICRO));
                sequence.setPositionZ(UnitUtil.getValueInUnit(panel.getPositionZValue(), panel.getPositionZUnit(),
                        UnitPrefix.MICRO));

                // channel name
                for (int c = 0; c < sequence.getSizeC(); c++)
                    sequence.setChannelName(c, panel.getChannelNameFieldValue(c));

                dispose();
            }
        });

        pack();
        setLocationRelativeTo(Icy.getMainInterface().getMainFrame());
        setVisible(true);
    }

    private void initialize()
    {
        panel = new SequencePropertiesPanel();

        mainPanel.setLayout(new BorderLayout());
        mainPanel.add(panel, BorderLayout.CENTER);
        mainPanel.validate();
    }
}