/* * Scute * * Homepage: http://hyperdata.org/scute * * License : http://www.apache.org/licenses/LICENSE-2.0 * See also license.txt or http://hyperdata.org/wiki/Scute:License * * Danny Ayers 2011 */ package org.hyperdata.scute.tree; import java.awt.BorderLayout; import java.awt.Cursor; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.JPopupMenu; import javax.swing.JTree; import javax.swing.ToolTipManager; import javax.swing.border.BevelBorder; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.TreeCellRenderer; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import com.hp.hpl.jena.rdf.model.Model; import org.hyperdata.scute.autosave.UserActivityListener; import org.hyperdata.scute.cards.Card; /** * The Class RdfTreePanel. * * @author danny * * created : 05-Nov-2002 * * D.Ayers 2002 */ public class RdfTreeCard extends Card implements TreeSelectionListener { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 4397360330476275899L; /** The action. */ protected Action action; /** The clicked path. */ protected TreePath clickedPath; /** The edit menu. */ private EditMenu editMenu; /** The popup menu. */ protected JPopupMenu popupMenu; // private String selectedUrl; /** The tree. */ private JTree tree; /** The tree model. */ private RdfTreeModel treeModel; /** * Instantiates a new rdf tree panel. * * @param model * the model */ public RdfTreeCard(Model model) { super(new BorderLayout()); // addFocusListener(focusListener); loadModel(model); setCursor(new Cursor(Cursor.HAND_CURSOR)); init(); } /** * Gets the action. * * @return the action */ public Action getAction() { return getEditMenu().getTreeAction(); } /** * Gets the cell renderer. * * @return the cell renderer */ protected TreeCellRenderer getCellRenderer() { return new RdfTreeCellRenderer(); } /** * Gets the clicked path. * * @return the clicked path */ public TreePath getClickedPath() { return clickedPath; } /** * Gets the edits the menu. * * @return the edits the menu */ public EditMenu getEditMenu() { return editMenu; } /** * Gets the popup menu. * * @return the popup menu */ public JPopupMenu getPopupMenu() { return popupMenu; } /** * Gets the tree. * * @return the tree */ public JTree getTree() { return tree; } // /** * Gets the tree model. * * @return the tree model */ public RdfTreeModel getTreeModel() { return treeModel; } /** * Inits the. */ public void init() { // System.out.println("init called"); treeModel = (RdfTreeModel) tree.getModel(); add(tree, BorderLayout.CENTER); final TreeMouseListener mouseListener = new TreeMouseListener(this); tree.addMouseListener(mouseListener); tree.addTreeSelectionListener(this); initMenu(); initTreeComponent(); tree.invalidate(); } /** * Inits the menu. */ public void initMenu() { editMenu = new EditMenu(this); popupMenu = editMenu.getPopupMenu(); tree.add(popupMenu); } /** * Inits the tree component. */ protected void initTreeComponent() { ToolTipManager.sharedInstance().registerComponent(tree); tree.setCellRenderer(getCellRenderer()); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION); // tree.addTreeSelectionListener(this); // tree.getPreferredScrollableViewportSize(); tree.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED)); final int count = tree.getRowCount(); for (int x = 0; x < count; x++) { // was 0 tree.expandRow(x); } tree.revalidate(); } /* (non-Javadoc) * @see java.awt.Component#setSize(java.awt.Dimension) */ // @Override // public void setSize(Dimension size) { // setPreferredSize(size); // tree.setSize(size); // } /** * Sets the clicked path. * * @param path * the new clicked path */ public void setClickedPath(TreePath path) { clickedPath = path; } // Listen for when the selection changes. /* (non-Javadoc) * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent) */ @Override public void valueChanged(TreeSelectionEvent e) { final Object object = tree.getLastSelectedPathComponent(); if ((object == null) || !(object instanceof ResourceNode)) return; // final ResourceNode node = (ResourceNode) object; // selectedUrl = node.getResource().getURI(); // tree.scrollPathToVisible(path); tree.revalidate(); } /** * Load model. * * @param model * the model */ public void loadModel(Model model) { RdfNodeMap nodeMap = new RdfNodeMap(model); RootNode root = new RootNode(nodeMap); root.setModel(model); nodeMap.interpret(); treeModel = new RdfTreeModel(root, model, nodeMap); tree = new JTree(treeModel); tree.putClientProperty("JTree.lineStyle", "Angled"); tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION); ToolTipManager.sharedInstance().registerComponent(tree); tree.setCellRenderer(new RdfTreeCellRenderer()); } }