]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/save/ImagePreviewPanel.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / save / ImagePreviewPanel.java
diff --git a/src/tim/prune/save/ImagePreviewPanel.java b/src/tim/prune/save/ImagePreviewPanel.java
new file mode 100644 (file)
index 0000000..6f4ac88
--- /dev/null
@@ -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;
+       }
+}