package tim.prune.save;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JPanel;
import tim.prune.I18nManager;
/**
* GUI component to display an image preview for the POV export
* and for the image export
*/
public class ImagePreviewPanel extends JPanel
{
/** Base image */
private GroutedImage _baseImage = null;
/** Loading flag */
private boolean _loading = false;
/** String to show before image is loaded */
private static final String LOADING_STRING = I18nManager.getText("details.photo.loading") + " ...";
/** Colour to use if there aren't any tiles at all (same as colour of POV export without image) */
private static final Color EMPTY_IMAGE_COLOUR = new Color(0.5f, 0.75f, 0.8f);
/** Set the base image */
public void setImage(GroutedImage inImage)
{
_baseImage = inImage;
_loading = false;
repaint();
}
/** Inform that a load is starting */
public void startLoading()
{
_baseImage = null;
_loading = true;
repaint();
}
/** Get minimum size */
public Dimension getMinimumSize() {
return new Dimension(200, 200);
}
/** Preferred size */
public Dimension getPreferredSize() {
return getMinimumSize();
}
/**
* Override paint method
* @see javax.swing.JComponent#paint(java.awt.Graphics)
*/
public void paint(Graphics inG)
{
super.paint(inG);
if (_loading)
{
inG.setColor(Color.BLACK);
inG.drawString(LOADING_STRING, 10, 30);
}
else if (_baseImage != null)
{
final int width = getWidth();
final int height = getHeight();
final int previewSize = Math.min(width, height);
if (previewSize > 1)
{
if (_baseImage.isValid())
{
inG.drawImage(_baseImage.getImage(),
(width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize, this);
}
else
{
// No content found at all
inG.setColor(EMPTY_IMAGE_COLOUR);
inG.fillRect((width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize);
}
// draw frame around it to make it more obvious
inG.setColor(Color.BLACK);
inG.drawRect((width-previewSize)/2, (height-previewSize)/2, previewSize-1, previewSize-1);
}
}
}
/**
* @return true if there is an image to use and it contains map tiles
*/
public boolean getTilesFound()
{
return _baseImage != null && _baseImage.isValid() && _baseImage.getImageSize() > 1
&& _baseImage.getNumTilesUsed() > 0;
}
}