/**
*
*/
package icy.action;
import icy.canvas.IcyCanvas;
import icy.gui.viewer.Viewer;
import icy.image.lut.LUT;
import icy.main.Icy;
import icy.resource.ResourceUtil;
import icy.resource.icon.IcyIcon;
import icy.sequence.Sequence;
import icy.system.thread.ThreadUtil;
import icy.util.ClassUtil;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import plugins.kernel.canvas.VtkCanvas;
/**
* Viewer associated actions (Duplicate, externalize...)
*
* @author Stephane
*/
public class ViewerActions
{
public static IcyAbstractAction duplicateAction = new IcyAbstractAction("Duplicate view", new IcyIcon(
ResourceUtil.ICON_PICTURE_COPY), "Duplicate view (no data duplication)", KeyEvent.VK_F2)
{
/**
*
*/
private static final long serialVersionUID = -8660425976560135450L;
@Override
public boolean doAction(ActionEvent e)
{
ThreadUtil.invokeLater(new Runnable()
{
@Override
public void run()
{
// so it won't change during process
final Viewer viewer = Icy.getMainInterface().getActiveViewer();
final IcyCanvas canvas = (viewer != null) ? viewer.getCanvas() : null;
final Sequence sequence = (viewer != null) ? viewer.getSequence() : null;
if ((sequence != null) && (canvas != null))
{
final Viewer v = new Viewer(sequence);
final LUT oldLut = viewer.getLut();
final LUT newLut = v.getLut();
// copy LUT
if (canvas instanceof VtkCanvas)
{
// don't copy alpha colormap
newLut.setColorMaps(oldLut, false);
newLut.setScalers(oldLut);
}
else
newLut.copyFrom(oldLut);
}
}
});
return true;
}
@Override
public boolean isEnabled()
{
return super.isEnabled() && (Icy.getMainInterface().getActiveViewer() != null);
}
};
/**
* Return all actions of this class
*/
public static List<IcyAbstractAction> getAllActions()
{
final List<IcyAbstractAction> result = new ArrayList<IcyAbstractAction>();
for (Field field : ViewerActions.class.getFields())
{
final Class<?> type = field.getType();
try
{
if (ClassUtil.isSubClass(type, IcyAbstractAction[].class))
result.addAll(Arrays.asList(((IcyAbstractAction[]) field.get(null))));
else if (ClassUtil.isSubClass(type, IcyAbstractAction.class))
result.add((IcyAbstractAction) field.get(null));
}
catch (Exception e)
{
// ignore
}
}
return result;
}
}