]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/gui/GenericProgressDialog.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / gui / GenericProgressDialog.java
diff --git a/src/tim/prune/gui/GenericProgressDialog.java b/src/tim/prune/gui/GenericProgressDialog.java
new file mode 100644 (file)
index 0000000..acef147
--- /dev/null
@@ -0,0 +1,117 @@
+package tim.prune.gui;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+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 various time-consuming functions
+ */
+public class GenericProgressDialog
+{
+       private JDialog _progressDialog   = null;
+       private String _dialogTitleKey    = null;
+       private String _labelKey          = null;
+       private JProgressBar _progressBar = null;
+       private JFrame _parentFrame       = null;
+       private Cancellable _function     = null;
+
+       /**
+        * Constructor
+        * @param inTitleKey key for dialog title text
+        * @param inLabelKey key for label text
+        * @param inParentFrame parent frame for creating dialog
+        * @param inFunction function which can be cancelled
+        */
+       public GenericProgressDialog(String inTitleKey, String inLabelKey,
+               JFrame inParentFrame, Cancellable inFunction)
+       {
+               _dialogTitleKey = inTitleKey;
+               _labelKey = inLabelKey;
+               if (_labelKey == null) {
+                       _labelKey = "confirm.running";
+               }
+               _parentFrame = inParentFrame;
+               _function = inFunction;
+       }
+
+       /**
+        * Create the dialog to show the progress
+        */
+       private void createProgressDialog()
+       {
+               _progressDialog = new JDialog(_parentFrame, I18nManager.getText(_dialogTitleKey));
+               _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(6, 6, 6, 6));
+               panel.add(new JLabel(I18nManager.getText(_labelKey)));
+               panel.add(_progressBar);
+               panel.add(Box.createVerticalStrut(6)); // spacer
+               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());
+       }
+
+       /**
+        * Close the dialog
+        */
+       public void close()
+       {
+               if (_progressDialog != null)
+                       _progressDialog.dispose();
+       }
+}