/**
 * 
 */
package icy.action;

import icy.gui.main.ActiveSequenceListener;
import icy.main.Icy;
import icy.sequence.Sequence;
import icy.sequence.SequenceEvent;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Stephane
 */
public class ActionManager
{
    /**
     * All registered action
     */
    public static List<IcyAbstractAction> actions = null;

    // internals
    private static ActiveSequenceListener activeSequenceListener;

    public static synchronized void init()
    {
        // init actions
        if (actions == null)
        {
            actions = new ArrayList<IcyAbstractAction>();

            // add all kernels actions
            actions.addAll(FileActions.getAllActions());
            actions.addAll(GeneralActions.getAllActions());
            actions.addAll(PreferencesActions.getAllActions());
            actions.addAll(SequenceOperationActions.getAllActions());
            actions.addAll(RoiActions.getAllActions());
            actions.addAll(CanvasActions.getAllActions());
            actions.addAll(ViewerActions.getAllActions());
            actions.addAll(WindowActions.getAllActions());

            activeSequenceListener = new ActiveSequenceListener()
            {
                @Override
                public void sequenceDeactivated(Sequence sequence)
                {
                    // nothing here
                }

                @Override
                public void sequenceActivated(Sequence sequence)
                {
                    // force action components refresh
                    for (IcyAbstractAction action : actions)
                        action.enabledChanged();
                }

                @Override
                public void activeSequenceChanged(SequenceEvent event)
                {
                    // nothing here
                }
            };

            // listen these event
            Icy.getMainInterface().addActiveSequenceListener(activeSequenceListener);
        }
    }
}