// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.main.rightclick;
import graphtea.graph.event.EdgeEvent;
import graphtea.graph.event.GraphEvent;
import graphtea.graph.event.VertexEvent;
import graphtea.graph.graph.AbstractGraphRenderer;
import graphtea.platform.core.AbstractAction;
import graphtea.platform.core.BlackBoard;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
/**
* @author azin azadi
*/
public class PopupMenuHandler extends AbstractAction {
/**
* constructor
*
* @param bb the blackboard of the action
*/
public PopupMenuHandler(BlackBoard bb) {
super(bb);
listen4Event(VertexEvent.EVENT_KEY);
listen4Event(EdgeEvent.EVENT_KEY);
listen4Event(GraphEvent.EVENT_KEY);
// GraphPropertyEditor gpv=new GraphPropertyEditor(blackboard);
// GraphPropertyEditor gpe=new GraphPropertyEditor(blackboard);
// gpv.getPropertyEditor().getTable().setTableHeader(new JTableHeader());
// gpe.getPropertyEditor().getTable().setTableHeader(new JTableHeader());
// vertexMnu.add(gpv.getPropertyEditor().getTable());
// edgeMnu.add(gpe.getPropertyEditor().getTable());
}
public void track(){}
public void performAction(String eventName, Object value) {
// if (eventName ==VertexEvent.name)) {
// VertexEvent vcd = blackboard.get(VertexEvent.name);
// if (vcd.eventType == VertexEvent.CLICKED) {
// if (vcd.mouseBtn == MouseEvent.BUTTON3) {
// Point vp = GPoint.createViewPoint(g, vcd.mousePos);
// vertexMnu.show((Component) vcd.v.view, vp.x, vp.y);
// }
// }
// }
// if (eventName ==EdgeEvent.name)) {
// EdgeEvent ecd = blackboard.get(EdgeEvent.name);
// if (ecd.eventType == EdgeEvent.CLICKED) {
// if (ecd.mouseBtn == MouseEvent.BUTTON3) {
// Point ep = GPoint.createViewPoint(g, ecd.mousePos);
// edgeMnu.show((Component) ecd.e.view, ep.x, ep.y);
// }
// }
// }
if (eventName.equals(GraphEvent.EVENT_KEY)) {
GraphEvent ge = (GraphEvent) value;
if (ge.eventType == GraphEvent.CLICKED) {
if (ge.mouseBtn == MouseEvent.BUTTON3) {
AbstractGraphRenderer gv = blackboard.getData(AbstractGraphRenderer.EVENT_KEY);
graphMnu.show(gv, (int) ge.mousePos.x, (int) ge.mousePos.y);
super.track();
}
}
}
}
private static JPopupMenu graphMnu = new JPopupMenu();
private static JPopupMenu vertexMnu = new JPopupMenu();
private static JPopupMenu edgeMnu = new JPopupMenu();
/**
* registers a popup menu that will be shown on each graph that assigned to Graph.name in blackboard (after the assignment)
*
* @param id the string shown on mnu
* @param index place of it
* @param n this action will be enabled(in it's group) and then the performJob will be called
*/
public static void registerGraphPopupMenu(String id, int index, graphtea.platform.core.AbstractAction n, boolean forceEnable) {
registerPMenu(graphMnu, id, index, n, forceEnable);
}
public static void registerVertexPopupMenu(String id, int index, graphtea.platform.core.AbstractAction n, boolean forceEnable) {
registerPMenu(vertexMnu, id, index, n, forceEnable);
}
public static void registerEdgePopupMenu(String id, int index, graphtea.platform.core.AbstractAction n, boolean forceEnable) {
registerPMenu(edgeMnu, id, index, n, forceEnable);
}
//todo: i hate the force enable, it destroys all the design...
private static void registerPMenu(JPopupMenu mnu, final String id, final int index, final graphtea.platform.core.AbstractAction n, final boolean forceEnable) {
JMenuItem item = new JMenuItem(id);
mnu.add(item, index);
mnu.validate();
item.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (forceEnable) {
// Configuration conf = n.getBlackBoard().getData(UIEventHandler.CONF);
// conf.enableAction(n);
if (n.isEnable()) {
n.performAction("popup menu: " + id, null);
}
} else {
n.performAction("popup menu: " + id, null);
}
}
});
}
}