package com.ibm.nmon.gui.chart.summary;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
final class ChartSummaryMenu extends MouseAdapter {
private final ChartSummaryPanel summaryPanel;
private final JPopupMenu menuForRows;
private final JPopupMenu menuForNoRows;
private final JPopupMenu menuForNoVisibilty;
public ChartSummaryMenu(ChartSummaryPanel summaryTable) {
this.summaryPanel = summaryTable;
ActionListener selectColumns = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChartSummaryMenu.this.summaryPanel.displayTableColumnChooser();
}
};
ActionListener showNone = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChartSummaryTableModel tableModel = ChartSummaryMenu.this.summaryPanel.getTableModel();
for (int i = 0; i < tableModel.getRowCount(); i++) {
tableModel.setValueAt(false, i, 0);
}
ChartSummaryMenu.this.summaryPanel.repaint();
}
};
ActionListener showAll = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChartSummaryTableModel tableModel = ChartSummaryMenu.this.summaryPanel.getTableModel();
for (int i = 0; i < tableModel.getRowCount(); i++) {
tableModel.setValueAt(true, i, 0);
}
ChartSummaryMenu.this.summaryPanel.repaint();
}
};
// menu displayed when rows are selected
menuForRows = new JPopupMenu();
// menu displayed when no rows are selected
menuForNoRows = new JPopupMenu();
// menu displayed on charts where visibility changes are not enabled
menuForNoVisibilty = new JPopupMenu();
JMenuItem item = new JMenuItem("Show Selected Only");
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChartSummaryTableModel tableModel = ChartSummaryMenu.this.summaryPanel.getTableModel();
int[] selectedRows = ChartSummaryMenu.this.summaryPanel.getSummaryTable().getSelectedRows();
for (int i = 0; i < selectedRows.length; i++) {
selectedRows[i] = ChartSummaryMenu.this.summaryPanel.getSummaryTable().convertRowIndexToModel(
selectedRows[i]);
}
for (int i = 0; i < tableModel.getRowCount(); i++) {
boolean selected = false;
for (int j = 0; j < selectedRows.length; j++) {
if (i == selectedRows[j]) {
tableModel.setValueAt(true, i, 0);
selected = true;
break;
}
}
if (!selected) {
tableModel.setValueAt(false, i, 0);
}
}
ChartSummaryMenu.this.summaryPanel.repaint();
}
});
menuForRows.add(item);
// show select none and select all in all cases
// items can only be added to a single menu; create copies for each
item = new JMenuItem("Show None");
item.addActionListener(showNone);
menuForRows.add(item);
item = new JMenuItem("Show None");
item.addActionListener(showNone);
menuForNoRows.add(item);
item = new JMenuItem("Show All");
item.addActionListener(showAll);
menuForRows.add(item);
item = new JMenuItem("Show All");
item.addActionListener(showAll);
menuForNoRows.add(item);
menuForRows.addSeparator();
menuForNoRows.addSeparator();
item = new JMenuItem("Select Columns...");
item.addActionListener(selectColumns);
menuForRows.add(item);
item = new JMenuItem("Select Columns...");
item.addActionListener(selectColumns);
menuForNoRows.add(item);
item = new JMenuItem("Select Columns...");
item.addActionListener(selectColumns);
menuForNoVisibilty.add(item);
}
@Override
public void mousePressed(MouseEvent e) {
mouseReleased(e);
}
@Override
public void mouseReleased(final MouseEvent e) {
// popup menu on right click
if (e.isPopupTrigger()) {
if (summaryPanel.getTableModel().getEnabled(ChartSummaryTableModel.VISIBLE)) {
int row = summaryPanel.getSummaryTable().rowAtPoint(e.getPoint());
int[] selectedRows = summaryPanel.getSummaryTable().getSelectedRows();
// if rows are selected, always show the Selectxx items
// if no rows are selected and the click is on a row,
// select it then show the Selectxx items
if (row < 0) {
if (selectedRows.length == 0) {
menuForNoRows.show(e.getComponent(), e.getX(), e.getY());
}
else {
menuForRows.show(e.getComponent(), e.getX(), e.getY());
}
}
else {
if (selectedRows.length == 0) {
summaryPanel.getSummaryTable().changeSelection(row, 0, false, false);
menuForRows.show(e.getComponent(), e.getX(), e.getY());
}
else {
menuForRows.show(e.getComponent(), e.getX(), e.getY());
}
}
}
else {
menuForNoVisibilty.show(e.getComponent(), e.getX(), e.getY());
}
}
}
}