samer@0: /* samer@0: * PopupHandler.java samer@0: * samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.core.util.heavy; samer@0: import java.awt.*; samer@0: import java.awt.event.*; samer@0: samer@0: public class PopupHandler extends MouseAdapter samer@0: { samer@0: private PopupMenu popup; samer@0: private boolean backstop; samer@0: samer@0: public PopupHandler(PopupMenu p) { this(p,false); } samer@0: public PopupHandler(PopupMenu p, boolean bs) { popup=p; backstop=bs; } samer@0: samer@0: public void mousePressed( MouseEvent e) samer@0: { samer@0: if (isTrigger(e)) { samer@0: popup.show( e.getComponent(), e.getX(), e.getY()); samer@0: e.consume(); samer@0: } samer@0: // could pass directly on to dispatcher here samer@0: } samer@0: public void mouseReleased( MouseEvent e) samer@0: { samer@0: if (isTrigger(e)) { samer@0: popup.show( e.getComponent(), e.getX(), e.getY()); samer@0: e.consume(); samer@0: } samer@0: // could pass directly on to dispatcher here samer@0: } samer@0: samer@0: boolean isTrigger(MouseEvent e) samer@0: { samer@0: if (!e.isPopupTrigger()) return false; samer@0: samer@0: // firstly, must have button 2 or 3 down samer@0: // if ( (f & (InputEvent.BUTTON3_MASK|InputEvent.BUTTON2_MASK))==0 ) return false; samer@0: samer@0: // next, if Popup is backstop menu, definitely show it samer@0: if (backstop) return true; samer@0: samer@0: // otherwise, must NOT have Alt or Ctl down samer@0: if (e.isShiftDown() || e.isControlDown()) return false; samer@0: return true; samer@0: } samer@0: }