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();
	}
}