// $Id: PACPopupMenu.java,v 1.5 2010/09/23 08:21:33 olga Exp $ package agg.gui.popupmenu; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JCheckBoxMenuItem; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import agg.editor.impl.EdNestedApplCond; import agg.editor.impl.EdPAC; import agg.gui.treeview.GraGraTreeView; import agg.gui.treeview.nodedata.GraGraTreeNodeData; import agg.xt_basis.GraphKind; import agg.xt_basis.NestedApplCond; import agg.xt_basis.OrdinaryMorphism; @SuppressWarnings("serial") public class PACPopupMenu extends JPopupMenu { public PACPopupMenu(GraGraTreeView tree) { super("PAC"); this.treeView = tree; /* * JMenuItem mi = (JMenuItem) add(new JMenuItem("Show")); * mi.setActionCommand("showPAC"); mi.addActionListener(treeView); * * mi = (JMenuItem) add(new JMenuItem("Hide")); * mi.setActionCommand("hidePAC"); mi.addActionListener(treeView); */ JMenuItem mi = add(new JMenuItem("Copy ")); mi.setActionCommand("copyPAC"); // mi.addActionListener(this.treeView.getActionAdapter()); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } }); mi = add(new JMenuItem("Convert to GAC")); mi.setActionCommand("copyToGAC"); // mi.addActionListener(this.treeView.getActionAdapter()); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { convertToGAC(); } }); addSeparator(); mi = add(new JMenuItem("Delete Delete")); mi.setActionCommand("deletePAC"); mi.addActionListener(this.treeView.getActionAdapter()); // mi.setMnemonic('D'); this.disable = new JCheckBoxMenuItem("disabled"); this.disable.setActionCommand("disablePAC"); this.disable.addActionListener(this.treeView.getActionAdapter()); add(this.disable); addSeparator(); mi = add(new JMenuItem("Textual Comments")); // mi = new JMenuItem("Textual Comments"); mi.setActionCommand("commentPAC"); mi.addActionListener(this.treeView.getActionAdapter()); // mi.setMnemonic('T'); pack(); setBorderPainted(true); } public boolean invoked(int x, int y) { if (this.treeView == null) { return false; } if (this.treeView.getTree().getRowForLocation(x, y) != -1) { int pl = this.treeView.getTree().getPathForLocation(x, y).getPath().length; if (pl == 4 || pl == 5) { path = this.treeView.getTree().getPathForLocation(x, y); GraGraTreeNodeData data = (GraGraTreeNodeData) ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); if (data != null && data.isPAC()) { pac = data.getPAC(); if (!pac.getMorphism().isEnabled()) this.disable.setSelected(true); else this.disable.setSelected(false); return true; } } } return false; } void copy() { if (pac != null) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) this.path.getLastPathComponent(); // GraGraTreeNodeData data = (GraGraTreeNodeData) node.getUserObject(); // TreePath rulePath = this.path.getParentPath(); OrdinaryMorphism iso = pac.getMorphism().getTarget().isoCopy(); OrdinaryMorphism ac = new OrdinaryMorphism( pac.getMorphism().getSource(), iso.getTarget(), pac.getRule().getBasisRule().getRight().getAttrContext()); if (ac.completeDiagram3(pac.getMorphism(), iso)) { ac.setName(pac.getName()+"_clone"); ac.getImage().setAttrContext(ac.getAttrContext()); ac.getImage().setKind(GraphKind.PAC); EdPAC cp = pac.getRule().createPAC(ac); pac.getRule().getPACs().remove(cp); cp.setLayoutByIndex(pac, true); int indx = pac.getRule().getPACs().indexOf(pac) +1; if (indx >= 0) { pac.getRule().getBasisRule().addPAC(indx, ac); pac.getRule().getPACs().add(indx, cp); treeView.putPACIntoTree(cp, (DefaultMutableTreeNode) node.getParent(), ((DefaultMutableTreeNode) node.getParent()).getIndex(node) + 1); } } } } void convertToGAC() { if (pac != null) { final DefaultMutableTreeNode node = (DefaultMutableTreeNode) this.path.getLastPathComponent(); // GraGraTreeNodeData data = (GraGraTreeNodeData) node.getUserObject(); // TreePath rulePath = this.path.getParentPath(); OrdinaryMorphism iso = pac.getMorphism().getTarget().isoCopy(); NestedApplCond ac = new NestedApplCond( pac.getMorphism().getSource(), iso.getTarget(), pac.getRule().getBasisRule().getRight().getAttrContext()); if (ac.completeDiagram3(pac.getMorphism(), iso)) { ac.setName(pac.getName()); ac.getImage().setAttrContext(ac.getAttrContext()); ac.getImage().setKind(GraphKind.AC); pac.getRule().getBasisRule().addNestedAC(ac); EdNestedApplCond cn = (EdNestedApplCond) pac.getRule().createNestedAC(ac); cn.setLayoutByIndex(pac, true); if (pac.getRule().getBasisRule().getNestedACsList().size() == 1) { treeView.putNestedACIntoTree(cn, (DefaultMutableTreeNode) node.getParent(), 0); } else { DefaultMutableTreeNode prev = this.treeView.getTreeNodeOfGrammarElement( pac.getRule().getNestedAC(pac.getRule().getNestedACs().size()-2)); int indx = this.treeView.getTreeModel().getIndexOfChild(node.getParent(), prev); treeView.putNestedACIntoTree(cn, (DefaultMutableTreeNode) node.getParent(),indx + 1); } } } } GraGraTreeView treeView; TreePath path; EdPAC pac; JMenuItem disable; }