Mercurial > hg > jslab
view src/samer/core_/util/swing/DynamicPopupHandler.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * 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(); } }