package com.ibm.nmon.gui.interval;
import java.awt.Component;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.DataSetListener;
import com.ibm.nmon.gui.Styles;
import com.ibm.nmon.gui.main.NMONVisualizerGui;
import com.ibm.nmon.interval.Interval;
import com.ibm.nmon.util.TimeFormatCache;
/**
* JPanel holder for a combo box of all the Intervals and a button to bring up an interval
* management dialog. Selecting an interval sets the current value for the application.
*/
public final class IntervalPicker extends JPanel implements DataSetListener {
private static final long serialVersionUID = 5742043118375163400L;
private final NMONVisualizerGui gui;
private final JComboBox<Interval> intervals;
public IntervalPicker(NMONVisualizerGui gui) {
assert gui != null;
this.gui = gui;
JLabel label = new JLabel("Interval:");
label.setHorizontalAlignment(SwingConstants.TRAILING);
label.setFont(Styles.LABEL);
add(label);
intervals = new JComboBox<Interval>(new IntervalComboBoxModel(gui.getIntervalManager()));
intervals.setRenderer(new DefaultListCellRenderer() {
private static final long serialVersionUID = 1999400159683985218L;
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Interval i = (Interval) value;
setText(TimeFormatCache.formatInterval(i));
return c;
}
});
add(intervals);
JButton manageIntervals = new JButton("Manage");
manageIntervals.setIcon(Styles.INTERVAL_ICON);
manageIntervals.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new IntervalManagerDialog(IntervalPicker.this.gui).setVisible(true);
}
});
add(manageIntervals);
gui.addPropertyChangeListener("timeZone", (IntervalComboBoxModel) intervals.getModel());
gui.addDataSetListener(this);
}
public void dataAdded(DataSet data) {
updateOnDataChange();
}
public void dataRemoved(DataSet data) {
updateOnDataChange();
}
public void dataChanged(DataSet data) {
updateOnDataChange();
}
public void dataCleared() {
updateOnDataChange();
}
private void updateOnDataChange() {
((IntervalComboBoxModel) intervals.getModel()).propertyChange(null);
}
}