X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fsave%2FImagePreviewPanel.java;fp=src%2Ftim%2Fprune%2Fsave%2FImagePreviewPanel.java;h=6f4ac889ad144731bb82d6485e8e5dc7721766d5;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/save/ImagePreviewPanel.java b/src/tim/prune/save/ImagePreviewPanel.java new file mode 100644 index 0000000..6f4ac88 --- /dev/null +++ b/src/tim/prune/save/ImagePreviewPanel.java @@ -0,0 +1,98 @@ +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; + } +}