--- /dev/null
+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();
+ }
+}