package ilarkesto.tools.getphotos;
import ilarkesto.io.IO;
import ilarkesto.swing.ImageCanvas;
import ilarkesto.swing.Swing;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
public class CopyPanel extends JPanel {
private static final float SIZE = 0.4f;
private JProgressBar progress;
private ImageCanvas image;
private byte[] photoData;
public CopyPanel() {
super(new BorderLayout());
image = new ImageCanvas();
image.setAutoScale(true);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
image.setPreferredSize(new Dimension((int) (screen.width * SIZE), (int) (screen.height * SIZE)));
add(image, BorderLayout.CENTER);
progress = new JProgressBar();
progress.setStringPainted(true);
add(progress, BorderLayout.SOUTH);
Thread updateImageThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
updateImage();
}
}
});
updateImageThread.setPriority(4);
updateImageThread.start();
}
public void setPhotoCount(int count) {
progress.setMaximum(count);
}
public void setStatus(final String message, final int index, final byte[] photoData) {
this.photoData = photoData;
if (index == 1) updateImage();
Swing.invokeInEventDispatchThread(new Runnable() {
@Override
public void run() {
progress.setString(message);
progress.setValue(index + 1);
}
});
}
private synchronized void updateImage() {
if (photoData == null) return;
final BufferedImage img = IO.loadImage(photoData);
photoData = null;
Swing.invokeInEventDispatchThread(new Runnable() {
@Override
public void run() {
image.setImage(img);
}
});
}
}