/**
*
*/
package de.danielsenff.badds.actions;
import gr.zdimensions.jsquish.Squish;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.nio.ByteBuffer;
import javax.activation.UnsupportedDataTypeException;
import javax.swing.JOptionPane;
import model.DDSFile;
import de.danielsenff.badds.controller.Application;
import de.danielsenff.badds.model.FilesListModel;
import de.danielsenff.badds.model.SwingWorker;
import de.danielsenff.badds.view.GUI.PreviewFrame;
/**
* @author danielsenff
*
*/
public class ActionPreview extends BasicAction {
/**
* @param controller
*/
public ActionPreview(final Application controller) {
super(controller);
}
/* (non-Javadoc)
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(final ActionEvent arg0) {
controller.getView().getWorkingView().startWorkingState(1);
// controller.getView().getProgressbar().setIndeterminate(true);
controller.setSwingWorker(new SwingWorker() {
@Override
public Object construct() {
createPreviewFrame();
return "All done";
}
@Override
public void finished() {
// controller.getView().getProgressbar().setIndeterminate(false);
controller.getView().getWorkingView().endWorkingState("Preview loaded");
}
});
controller.getSwingWorker().start();
}
public void createPreviewFrame() {
final int selectedRow = controller.getView().getOpenFilesTable().getSelectedRow();
final FilesListModel model = controller.getFilesListModel();
final DDSFile ddsfile = (DDSFile) model.getRowItem(selectedRow);
final DDSFile ddsimagefile ;
try {
ddsimagefile = new DDSFile(ddsfile.getFile());
ddsimagefile.loadImageData();
BufferedImage bi = ddsimagefile.getData();
System.out.println("create frame");
new PreviewFrame(controller, ddsfile.getFile().getName(), bi).setVisible(true);
} catch (final OutOfMemoryError e) {
JOptionPane.showMessageDialog(controller.getView(),
"<html>Java is out of memory. Please close other previews before opening yet another.</html>", "Out of memory",
JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} catch (UnsupportedDataTypeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// controller.getView().getProgressbar().setIndeterminate(false);
controller.getView().getWorkingView().endWorkingState("Preview loaded");
}
/**
* Decompresses a DXT-compressed {@link ByteBuffer}
* @param byteBuffer
* @param width
* @param height
* @param type
* @return
* @throws OutOfMemoryError
*/
private static ByteBuffer squishDecompressBuffer(final ByteBuffer byteBuffer,
final int width, final int height,
final Squish.CompressionType type) throws OutOfMemoryError {
byte[] data = new byte[byteBuffer.capacity()];
byteBuffer.get(data);
// why rgba null?
return ByteBuffer.wrap(Squish.decompressImage(null, width, height, data, type));
}
}