package uk.ac.rhul.cs.cl1.ui;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
/**
* Mouse adapter subclass that pops up a given popup menu
* @author tamas
*/
public class PopupMenuTrigger extends MouseAdapter {
/** The menu associated to this trigger */
private JPopupMenu menu;
/**
* Constructor.
*
* @param popupMenu sets the menu to be popped up when the appropriate events are trieggered
*/
public PopupMenuTrigger(JPopupMenu menu) {
this.menu = menu;
}
@Override
public void mousePressed(MouseEvent event) {
maybePopup(event);
}
@Override
public void mouseReleased(MouseEvent event) {
maybePopup(event);
}
protected boolean maybePopup(MouseEvent event) {
if (!event.isPopupTrigger())
return false;
/* If we are right-clicking over a JTable, make sure that the row is selected */
Component c = event.getComponent();
if (c instanceof JTable) {
Point p = event.getPoint();
JTable table = (JTable)c;
int row = table.rowAtPoint(p);
ListSelectionModel model = table.getSelectionModel();
if (!model.isSelectedIndex(row))
model.setSelectionInterval(row, row);
}
/* Show the popup menu */
menu.show(c, event.getX(), event.getY());
return true;
}
}