Mercurial > hg > jslab
diff src/samer/core_/util/swing/DynamicPopupHandler.java @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/samer/core_/util/swing/DynamicPopupHandler.java Tue Jan 17 17:50:20 2012 +0000 @@ -0,0 +1,54 @@ +/* + * DynamicPopupHandler.java + * + * Copyright (c) 2003, Samer Abdallah, King's College London. + * All rights reserved. + * + * This software is provided AS iS and WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + */ + +package samer.core.util.swing; +import samer.core.*; +import samer.core.util.*; +import java.awt.event.*; +import javax.swing.*; + +/** This is a mouse click handler that builds a popup menu on + the fly from a list of Agents (actually, just one, possibly + compound agent.) The Agent can be changed so that + new menu items can be added. +*/ + +public class DynamicPopupHandler extends MouseAdapter +{ + private String name; + private boolean backstop; + private AgentAdapter adapter=null; + + public DynamicPopupHandler(String nm) { name=nm; } + + public void addAgent(Agent agent) { + adapter=new AgentAdapter( adapter==null ? agent + : new CompoundAgent(adapter.getAgent(),agent)); + } + + public void setBackstop(boolean f) { backstop=f; } + public void mousePressed( MouseEvent e) { maybeShowMenu(e); } + public void mouseReleased( MouseEvent e) { maybeShowMenu(e); } + + void maybeShowMenu(MouseEvent e) + { + if (!e.isPopupTrigger()) return; + if (!backstop) { + // if not backstop, must NOT have Alt or Ctl down + // modified for Macs: need modifiers to get right mouse click! + if (e.isShiftDown()) return; + } + JPopupMenu popup=new JPopupMenu(name); + adapter.getAgent().getCommands(new MenuBuilder(popup,adapter)); + popup.show( e.getComponent(), e.getX(), e.getY()); + e.consume(); + } +}