]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/load/MediaLoadProgressDialog.java
Version 13, August 2011
[GpsPrune.git] / tim / prune / load / MediaLoadProgressDialog.java
diff --git a/tim/prune/load/MediaLoadProgressDialog.java b/tim/prune/load/MediaLoadProgressDialog.java
new file mode 100644 (file)
index 0000000..4ed2ab0
--- /dev/null
@@ -0,0 +1,108 @@
+package tim.prune.load;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+
+import tim.prune.I18nManager;
+import tim.prune.function.Cancellable;
+
+/**
+ * Class to show a progress dialog for loading media.
+ * Used for regular photo / audio loads plus the async
+ * loading function.
+ */
+public class MediaLoadProgressDialog
+{
+       private JDialog _progressDialog   = null;
+       private JProgressBar _progressBar = null;
+       private JFrame _parentFrame = null;
+       private Cancellable _function = null;
+
+       /**
+        * Constructor
+        * @param inParentFrame parent frame for creating dialog
+        * @param inFunction function which can be cancelled
+        */
+       public MediaLoadProgressDialog(JFrame inParentFrame, Cancellable inFunction)
+       {
+               _parentFrame = inParentFrame;
+               _function = inFunction;
+       }
+
+       /**
+        * Create the dialog to show the progress
+        */
+       private void createProgressDialog()
+       {
+               _progressDialog = new JDialog(_parentFrame, I18nManager.getText("dialog.jpegload.progress.title"));
+               _progressDialog.setLocationRelativeTo(_parentFrame);
+               _progressBar = new JProgressBar(0, 100);
+               _progressBar.setValue(0);
+               _progressBar.setStringPainted(true);
+               _progressBar.setString("");
+               JPanel panel = new JPanel();
+               panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+               panel.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
+               panel.add(new JLabel(I18nManager.getText("dialog.jpegload.progress")));
+               panel.add(_progressBar);
+               JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
+               cancelButton.addActionListener(new ActionListener() {
+                       public void actionPerformed(ActionEvent e)
+                       {
+                               _function.cancel();
+                       }
+               });
+               panel.add(cancelButton);
+               _progressDialog.getContentPane().add(panel);
+               _progressDialog.pack();
+               _progressDialog.setVisible(true);
+       }
+
+       /**
+        * Show the dialog in indeterminate mode, before limits are calculated
+        */
+       public void show()
+       {
+               if (_progressDialog == null)
+               {
+                       createProgressDialog();
+                       _progressBar.setIndeterminate(true);
+               }
+       }
+
+       /**
+        * Update the progress bar
+        * @param inCurrent current value
+        * @param inMax maximum value
+        */
+       public void showProgress(int inCurrent, int inMax)
+       {
+               if (_progressDialog == null)
+                       createProgressDialog();
+               if (_progressBar.isIndeterminate())
+                       _progressBar.setIndeterminate(false);
+               if (inMax > 0)
+                       _progressBar.setMaximum(inMax);
+               _progressBar.setValue(inCurrent);
+               _progressBar.setString("" + inCurrent + " / " + _progressBar.getMaximum());
+               // TODO: Need to repaint?
+       }
+
+       /**
+        * Close the dialog
+        */
+       public void close()
+       {
+               if (_progressDialog != null)
+                       _progressDialog.dispose();
+       }
+}