package agg.gui.cpa; import java.awt.Dimension; import java.util.Vector; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeSelectionModel; import agg.gui.parser.event.ParserGUIEvent; import agg.gui.parser.event.ParserGUIListener; import agg.xt_basis.GraGra; /** * This class provides a tree that displays all rules from a selected graph * grammar. * * @version $Id: RuleTree.java,v 1.2 2010/09/23 08:18:50 olga Exp $ * @author $Author: olga $ */ public class RuleTree implements TreeSelectionListener { JTree treeView; Vector<ParserGUIListener> listeners; boolean showAtomics, withNACs; /** * Creates a new tree with the selected graph grammar. The graph grammar * provides the set of rules which are displayed. * * @param grammar * The selected grammar. */ public RuleTree(GraGra grammar) { this(grammar, false, true); } /** * Creates a new tree with the selected graph grammar. The graph grammar * provides the set of rules which are displayed. * * @param grammar * The selected grammar. */ public RuleTree(GraGra grammar, boolean atomics, boolean nacs) { this.treeView = new JTree(new RuleModel(grammar, atomics, nacs)); this.treeView.addTreeSelectionListener(this); this.treeView.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION); this.treeView.setEditable(false); this.treeView.setShowsRootHandles(false); this.treeView.setMinimumSize(new Dimension(100, 100)); this.treeView.setCellRenderer(new RuleTreeCellRenderer()); this.listeners = new Vector<ParserGUIListener>(); this.showAtomics = atomics; this.withNACs = nacs; } /** * Sets a grammar for the tree. * * @param gragra * The new grammar. */ public void setGrammar(GraGra gragra) { this.treeView.setModel(new RuleModel(gragra, this.showAtomics, this.withNACs)); } /** * Returns the tree for the display in a frame or panel. * * @return The returned graph is a JTree. */ public JTree getTree() { return this.treeView; } /** * Register here a new listener to receive events. * * @param listener * The listener. */ public void addParserGUIListener(ParserGUIListener listener) { this.listeners.addElement(listener); } /** * Remove a listener here and stop getting messages. * * @param listener * The listener. */ public void removeParserGUIListener(ParserGUIListener listener) { this.listeners.removeElement(listener); } private void fireParserGUIEvent(Object data) { ParserGUIEvent event = new ParserGUIEvent(this, data); for (int i = 0; i < this.listeners.size(); i++) { ParserGUIListener l = this.listeners.elementAt(i); l.occured(event); } } // Implementierung des TreeSelectionListener /** * If a value of a tree changes this method has to handle this change. * * @param e * The event from the changing object. */ public void valueChanged(TreeSelectionEvent e) { RuleModel.TreeData node = (RuleModel.TreeData) getTree() .getLastSelectedPathComponent(); if (node == null) return; fireParserGUIEvent(node); } } /* * $Log: RuleTree.java,v $ * Revision 1.2 2010/09/23 08:18:50 olga * tuning * * Revision 1.1 2008/10/29 09:04:12 olga * new sub packages of the package agg.gui: typeeditor, editor, trafo, cpa, options, treeview, popupmenu, saveload * * Revision 1.2 2007/09/10 13:05:45 olga * In this update: * - package xerces2.5.0 is not used anymore; * - class com.objectspace.jgl.Pair is replaced by the agg own generic class agg.util.Pair; * - bugs fixed in: usage of PACs in rules; match completion; * usage of static method calls in attr. conditions * - graph editing: added some new features * Revision 1.1 2005/08/25 11:56:55 enrico *** empty log * message *** * * Revision 1.1 2005/05/30 12:58:03 olga Version with Eclipse * * Revision 1.4 2004/04/15 10:49:48 olga Kommentare * * Revision 1.3 2003/03/05 18:24:09 komm sorted/optimized import statements * * Revision 1.2 2003/03/03 17:46:59 olga GUI * * Revision 1.1.1.1 2002/07/11 12:17:19 olga Imported sources * * Revision 1.2 2001/03/08 11:02:49 olga Parser Anbindung gemacht. Stand nach * AGG GUI Reimplementierung. Stand nach der AGG GUI Reimplementierung.Das ist * Stand nach der AGG GUI Reimplementierung und Parser Anbindung. * * Revision 1.1.2.4 2001/01/28 13:14:48 shultzke API fertig * * Revision 1.1.2.3 2000/08/10 12:22:12 shultzke Ausserdem wird nicht mehr eine * neues GUIObject erzeugt, wenn zur ParserGUI umgeschaltet wird. Einige Klassen * wurden umbenannt. Alle Events sind in ein eigenes Eventpackage geflogen. * * Revision 1.1.2.2 2000/07/09 17:12:40 shultzke grob die GUI eingebunden * */