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;
}
}