]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/save/ImagePreviewPanel.java
6f4ac889ad144731bb82d6485e8e5dc7721766d5
[GpsPrune.git] / tim / prune / save / ImagePreviewPanel.java
1 package tim.prune.save;
2
3 import java.awt.Color;
4 import java.awt.Dimension;
5 import java.awt.Graphics;
6
7 import javax.swing.JPanel;
8
9 import tim.prune.I18nManager;
10
11 /**
12  * GUI component to display an image preview for the POV export
13  * and for the image export
14  */
15 public class ImagePreviewPanel extends JPanel
16 {
17         /** Base image */
18         private GroutedImage _baseImage = null;
19         /** Loading flag */
20         private boolean _loading = false;
21
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);
26
27
28         /** Set the base image */
29         public void setImage(GroutedImage inImage)
30         {
31                 _baseImage = inImage;
32                 _loading = false;
33                 repaint();
34         }
35
36         /** Inform that a load is starting */
37         public void startLoading()
38         {
39                 _baseImage = null;
40                 _loading = true;
41                 repaint();
42         }
43
44         /** Get minimum size */
45         public Dimension getMinimumSize() {
46                 return new Dimension(200, 200);
47         }
48         /** Preferred size */
49         public Dimension getPreferredSize() {
50                 return getMinimumSize();
51         }
52
53         /**
54          * Override paint method
55          * @see javax.swing.JComponent#paint(java.awt.Graphics)
56          */
57         public void paint(Graphics inG)
58         {
59                 super.paint(inG);
60                 if (_loading)
61                 {
62                         inG.setColor(Color.BLACK);
63                         inG.drawString(LOADING_STRING, 10, 30);
64                 }
65                 else if (_baseImage != null)
66                 {
67                         final int width = getWidth();
68                         final int height = getHeight();
69                         final int previewSize = Math.min(width, height);
70                         if (previewSize > 1)
71                         {
72                                 if (_baseImage.isValid())
73                                 {
74                                         inG.drawImage(_baseImage.getImage(),
75                                                 (width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize, this);
76                                 }
77                                 else
78                                 {
79                                         // No content found at all
80                                         inG.setColor(EMPTY_IMAGE_COLOUR);
81                                         inG.fillRect((width-previewSize)/2, (height-previewSize)/2, previewSize, previewSize);
82                                 }
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);
86                         }
87                 }
88         }
89
90         /**
91          * @return true if there is an image to use and it contains map tiles
92          */
93         public boolean getTilesFound()
94         {
95                 return _baseImage != null && _baseImage.isValid() && _baseImage.getImageSize() > 1
96                         && _baseImage.getNumTilesUsed() > 0;
97         }
98 }