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; } }