X-Git-Url: http://gitweb.fperrin.net/?p=GpsPrune.git;a=blobdiff_plain;f=src%2Ftim%2Fprune%2Fgui%2FProgressDialog.java;fp=src%2Ftim%2Fprune%2Fgui%2FProgressDialog.java;h=363989ba7384a57fcfe1f53cd260a888dff992db;hp=0000000000000000000000000000000000000000;hb=ce6f2161b8596f7018d6a76bff79bc9e571f35fd;hpb=2d8cb72e84d5cc1089ce77baf1e34ea3ea2f8465 diff --git a/src/tim/prune/gui/ProgressDialog.java b/src/tim/prune/gui/ProgressDialog.java new file mode 100644 index 0000000..363989b --- /dev/null +++ b/src/tim/prune/gui/ProgressDialog.java @@ -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; + } +}