]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - src/tim/prune/gui/ProgressDialog.java
Moved source into separate src directory due to popular request
[GpsPrune.git] / src / tim / prune / gui / ProgressDialog.java
diff --git a/src/tim/prune/gui/ProgressDialog.java b/src/tim/prune/gui/ProgressDialog.java
new file mode 100644 (file)
index 0000000..363989b
--- /dev/null
@@ -0,0 +1,121 @@
+package tim.prune.gui;
+
+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 javax.swing.BorderFactory;
+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;
+
+/**
+ * Class to show a simple progress dialog
+ * similar to swing's ProgressMonitor but with a few
+ * modifications
+ */
+public class ProgressDialog
+{
+       /** Parent frame */
+       private JFrame _parentFrame = null;
+       /** Key for title text */
+       private String _titleKey = null;
+       /** function dialog */
+       private JDialog _dialog = null;
+       /** Progress bar for function */
+       private JProgressBar _progressBar = null;
+       /** Cancel flag */
+       private boolean _cancelled = false;
+
+
+       /**
+        * Constructor
+        * @param inParentFrame parent frame
+        * @param inNameKey key for title
+        */
+       public ProgressDialog(JFrame inParentFrame, String inNameKey)
+       {
+               _parentFrame = inParentFrame;
+               _titleKey = inNameKey;
+       }
+
+       public void show()
+       {
+               if (_dialog == null)
+               {
+                       _dialog = new JDialog(_parentFrame, I18nManager.getText(_titleKey), false);
+                       _dialog.setLocationRelativeTo(_parentFrame);
+                       _dialog.getContentPane().add(makeDialogComponents());
+                       _dialog.pack();
+               }
+               _progressBar.setMinimum(0);
+               _progressBar.setMaximum(100);
+               _progressBar.setValue(0);
+               _progressBar.setIndeterminate(true);
+               _cancelled = false;
+               _dialog.setVisible(true);
+       }
+
+       /**
+        * Make the dialog components
+        * @return the GUI components for the dialog
+        */
+       private Component makeDialogComponents()
+       {
+               JPanel dialogPanel = new JPanel();
+               dialogPanel.setLayout(new BorderLayout());
+               dialogPanel.add(new JLabel(I18nManager.getText("confirm.running")), BorderLayout.NORTH);
+               // Centre panel with an empty border
+               JPanel centrePanel = new JPanel();
+               centrePanel.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
+               centrePanel.setLayout(new BorderLayout());
+               _progressBar = new JProgressBar();
+               _progressBar.setPreferredSize(new Dimension(250, 30));
+               centrePanel.add(_progressBar, BorderLayout.CENTER);
+               dialogPanel.add(centrePanel, BorderLayout.CENTER);
+               // Cancel button at the bottom
+               JPanel buttonPanel = new JPanel();
+               buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
+               JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
+               cancelButton.addActionListener(new ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               _cancelled = true;
+                               _dialog.dispose();
+                       }
+               });
+               buttonPanel.add(cancelButton);
+               dialogPanel.add(buttonPanel, BorderLayout.SOUTH);
+               return dialogPanel;
+       }
+
+       /** Set the maximum value of the progress bar */
+       public void setMaximum(int inMax) {
+               _progressBar.setMaximum(inMax);
+               _progressBar.setIndeterminate(inMax <= 1);
+       }
+
+       /** Set the current value of the progress bar */
+       public void setValue(int inValue) {
+               _progressBar.setValue(inValue);
+       }
+
+       /** Close the dialog */
+       public void dispose() {
+               _dialog.dispose();
+       }
+
+       /**
+        * @return true if cancel button was pressed
+        */
+       public boolean isCancelled() {
+               return _cancelled;
+       }
+}