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