]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/function/PhotoPopupFunction.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / function / PhotoPopupFunction.java
diff --git a/src/tim/prune/function/PhotoPopupFunction.java b/src/tim/prune/function/PhotoPopupFunction.java
new file mode 100644 (file)
index 0000000..077a307
--- /dev/null
@@ -0,0 +1,155 @@
+package tim.prune.function;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import tim.prune.App;
+import tim.prune.DataSubscriber;
+import tim.prune.GenericFunction;
+import tim.prune.I18nManager;
+import tim.prune.UpdateMessageBroker;
+import tim.prune.data.Photo;
+import tim.prune.gui.PhotoThumbnail;
+
+/**
+ * Class to show a popup window for a photo
+ */
+public class PhotoPopupFunction extends GenericFunction implements DataSubscriber
+{
+       /** popup window */
+       private JFrame _frame = null; // would be a JDialog but that doesn't allow max button
+       /** label for filename */
+       private JLabel _label = null;
+       /** Photo thumbnail */
+       private PhotoThumbnail _photoThumb = null;
+
+       /**
+        * Constructor
+        * @param inApp app object
+        */
+       public PhotoPopupFunction(App inApp)
+       {
+               super(inApp);
+       }
+
+       /**
+        * Get the name key
+        */
+       public String getNameKey() {
+               return "function.photopopup";
+       }
+
+       /**
+        * Show the screen
+        */
+       public void begin()
+       {
+               if (_frame == null)
+               {
+                       _frame = new JFrame(I18nManager.getText(getNameKey()));
+                       _frame.setIconImage(_parentFrame.getIconImage());
+                       _frame.getContentPane().add(makeContents());
+                       _frame.pack();
+                       _frame.setLocationRelativeTo(_parentFrame);
+                       _frame.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+                       _frame.addWindowListener(new WindowAdapter() {
+                               public void windowClosed(WindowEvent e) {
+                                       UpdateMessageBroker.removeSubscriber(PhotoPopupFunction.this);
+                                       super.windowClosed(e);
+                               }
+                       });
+               }
+               initFrame();
+               final Photo photo = _app.getTrackInfo().getCurrentPhoto();
+               if (photo.getWidth() <= 0 || photo.getHeight() <= 0)
+               {
+                       _frame.setVisible(false);
+                       _app.showErrorMessageNoLookup(getNameKey(), I18nManager.getText("error.showphoto.failed")
+                        + " : " + photo.getName());
+               }
+               else
+               {
+                       _frame.setVisible(true);
+                       // Add listener to Broker
+                       UpdateMessageBroker.addSubscriber(this);
+               }
+       }
+
+       /**
+        * Initialise the frame to show the current photo
+        */
+       private void initFrame()
+       {
+               Photo photo = _app.getTrackInfo().getCurrentPhoto();
+               if (photo == null)
+               {
+                       _frame.setTitle("GpsPrune - " + I18nManager.getText("details.nophoto"));
+                       _label.setText(I18nManager.getText("details.nophoto"));
+               }
+               else
+               {
+                       _frame.setTitle(photo.getName());
+                       _label.setText("'" + photo.getName() + "' ("
+                               + photo.getWidth() + " x " + photo.getHeight() + ")");
+               }
+               _photoThumb.setPhoto(photo);
+       }
+
+       /**
+        * @return the contents of the window as a Component
+        */
+       private Component makeContents()
+       {
+               JPanel mainPanel = new JPanel();
+               mainPanel.setLayout(new BorderLayout());
+               _label = new JLabel("Photo popup");
+               mainPanel.add(_label, BorderLayout.NORTH);
+               _photoThumb = new PhotoThumbnail(false); // specify not in details panel
+               _photoThumb.setPreferredSize(new Dimension(300, 300));
+               mainPanel.add(_photoThumb, BorderLayout.CENTER);
+               // Close button at bottom
+               JPanel okPanel = new JPanel();
+               okPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
+               JButton okButton = new JButton(I18nManager.getText("button.ok"));
+               okButton.addActionListener(new ActionListener()
+               {
+                       public void actionPerformed(ActionEvent e) {
+                               _frame.dispose();
+                       }
+               });
+               okButton.addKeyListener(new KeyListener() {
+                       public void keyPressed(KeyEvent e) {
+                               if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {_frame.dispose();}
+                       }
+                       public void keyTyped(KeyEvent e) {}
+                       public void keyReleased(KeyEvent e) {}
+               });
+               okPanel.add(okButton);
+               mainPanel.add(okPanel, BorderLayout.SOUTH);
+               return mainPanel;
+       }
+
+       public void dataUpdated(byte inUpdateType)
+       {
+               // Update photo if selection changes
+               if ((inUpdateType & DataSubscriber.SELECTION_CHANGED) > 0)
+               {
+                       initFrame();
+               }
+       }
+
+       public void actionCompleted(String inMessage) {}
+}