package com.ibm.nmon.gui.util;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JLabel;
import javax.swing.BorderFactory;
import com.ibm.nmon.gui.Styles;
/**
* Modal progress dialog box that includes a name for the item and a progress bar.
*/
public final class ItemProgressDialog extends JDialog {
private static final long serialVersionUID = -7316137795169235117L;
private final JFrame parent;
private final JLabel itemName;
private final JProgressBar progress;
private final int totalItems;
private int itemCount;
// label for initial, empty item name
// allows layout to be calculated so that pack() calls (and resizing) is avoided as items are
// updated
private static final String DUMMY = new String(new byte[40]);
public ItemProgressDialog(JFrame parent, String title, int totalItems) {
super(parent, title, true);
setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setResizable(false);
this.parent = parent;
this.totalItems = totalItems;
itemCount = 0;
progress = new JProgressBar(0, totalItems);
progress.setStringPainted(true);
progress.setFont(Styles.LABEL);
progress.setString(itemCount + " / " + totalItems);
progress.setValue(itemCount);
itemName = new JLabel(DUMMY);
itemName.setFont(Styles.TITLE);
itemName.setBorder(BorderFactory.createEmptyBorder(3, 5, 5, 5));
add(progress, java.awt.BorderLayout.CENTER);
add(itemName, java.awt.BorderLayout.PAGE_START);
}
@Override
public void setVisible(boolean b) {
if (b) {
pack();
// centered in the X, a little bit higher in the Y
java.awt.Point location = parent.getLocation();
setLocation(location.x + parent.getWidth() / 2 - getWidth() / 2, location.y + parent.getHeight() / 2
- (getHeight() * 2));
}
super.setVisible(b);
}
public void setCurrentItem(String name) {
itemName.setText(name);
}
public void updateProgress() {
progress.setValue(++itemCount);
progress.setString(itemCount + " / " + totalItems);
}
}