1 package tim.prune.save;
4 import java.awt.Dimension;
5 import java.awt.Graphics;
7 import javax.swing.JPanel;
9 import tim.prune.I18nManager;
12 * GUI component to display an image preview for the POV export
13 * and for the image export
15 public class ImagePreviewPanel extends JPanel
18 private GroutedImage _baseImage = null;
20 private boolean _loading = false;
22 /** String to show before image is loaded */
23 private static final String LOADING_STRING = I18nManager.getText("details.photo.loading") + " ...";
24 /** Colour to use if there aren't any tiles at all (same as colour of POV export without image) */
25 private static final Color EMPTY_IMAGE_COLOUR = new Color(0.5f, 0.75f, 0.8f);
28 /** Set the base image */
29 public void setImage(GroutedImage inImage)
36 /** Inform that a load is starting */
37 public void startLoading()
44 /** Get minimum size */
45 public Dimension getMinimumSize() {
46 return new Dimension(200, 200);
49 public Dimension getPreferredSize() {
50 return getMinimumSize();
54 * Override paint method
55 * @see javax.swing.JComponent#paint(java.awt.Graphics)
57 public void paint(Graphics inG)
62 inG.setColor(Color.BLACK);
63 inG.drawString(LOADING_STRING, 10, 30);
65 else if (_baseImage != null)
67 final int width = getWidth();
68 final int height = getHeight();
69 final int previewSize = Math.min(width, height);
72 if (_baseImage.isValid())
74 inG.drawImage(_baseImage.getImage(),
75 (width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize, this);
79 // No content found at all
80 inG.setColor(EMPTY_IMAGE_COLOUR);
81 inG.fillRect((width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize);
83 // draw frame around it to make it more obvious
84 inG.setColor(Color.BLACK);
85 inG.drawRect((width-previewSize)/2, (height-previewSize)/2, previewSize-1, previewSize-1);
91 * @return true if there is an image to use and it contains map tiles
93 public boolean getTilesFound()
95 return _baseImage != null && _baseImage.isValid() && _baseImage.getImageSize() > 1
96 && _baseImage.getNumTilesUsed() > 0;