001/* 002 * Copyright (c) 2005 Einar Pehrson, Malin Johansson and Sofia Nilsson 003 * 004 * This file is part of 005 * CleanSheets Extension for Dependency Trees 006 * 007 * CleanSheets Extension for Dependency Trees is free software; you can 008 * redistribute it and/or modify it under the terms of the GNU General Public 009 * License as published by the Free Software Foundation; either version 2 of 010 * the License, or (at your option) any later version. 011 * 012 * CleanSheets Extension for Dependency Trees is distributed in the hope that 013 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 014 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 015 * See the GNU General Public License for more details. 016 * 017 * You should have received a copy of the GNU General Public License 018 * along with CleanSheets Extension for Dependency Trees; if not, write to the 019 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 020 * Boston, MA 02111-1307 USA 021 */ 022package csheets.ext.deptree; 023 024import javax.swing.JTree; 025import javax.swing.ToolTipManager; 026import javax.swing.tree.DefaultTreeModel; 027import javax.swing.tree.TreeSelectionModel; 028 029import csheets.ui.ctrl.SelectionEvent; 030import csheets.ui.ctrl.SelectionListener; 031import csheets.ui.ctrl.UIController; 032 033/** 034 * An abstract base-class for trees displaying cell dependencies. 035 * @author Einar Pehrson 036 */ 037public abstract class DependencyTree extends JTree implements SelectionListener { 038 039 /** The user interface controller */ 040 protected UIController uiController; 041 042 /** The data model that defines the tree */ 043 protected DefaultTreeModel treeModel; 044 045 /** 046 * Creates a mew dependency tree. 047 * @param uiController the user interface controller 048 */ 049 public DependencyTree(UIController uiController) { 050 super(new DefaultTreeModel(null)); 051 052 // Stores members 053 this.treeModel = (DefaultTreeModel)super.treeModel; 054 this.uiController = uiController; 055 uiController.addSelectionListener(this); 056 057 // Creates and configures tree 058 getSelectionModel().setSelectionMode( 059 TreeSelectionModel.SINGLE_TREE_SELECTION); 060 setToggleClickCount(Integer.MAX_VALUE); 061 addTreeExpansionListener(new ExpansionPopulator()); 062 addMouseListener(new DoubleClickNavigator(this, uiController)); 063 setCellRenderer(new DependencyTreeCellRenderer()); 064 ToolTipManager.sharedInstance().registerComponent(this); 065 } 066 067 /** 068 * Rebuilds the tree by updating its root node when the active cell is changed. 069 * @param event the selection event that was fired 070 */ 071 public abstract void selectionChanged(SelectionEvent event); 072}