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 java.util.SortedSet; 025import java.util.TreeSet; 026 027import javax.swing.tree.DefaultTreeModel; 028 029import csheets.core.Cell; 030import csheets.core.formula.Reference; 031import csheets.core.formula.lang.CellReference; 032import csheets.ui.ctrl.UIController; 033 034/** 035 * A tree node for a cell, to which the cell's precedents are added dynamically 036 * when the node is expanded. 037 * @author Einar Pehrson 038 */ 039@SuppressWarnings("serial") 040public class PrecedentsNode extends CellNode { 041 042 /** The references of the node's cell. */ 043 private SortedSet<Reference> references = new TreeSet<Reference>(); 044 045 /** The user interface controller */ 046 private UIController uiController; 047 048 /** 049 * Creates a new precedents node. 050 * @param cell the cell of the node 051 * @param treeModel the data model to which the node belongs 052 * @param uiController the user interface controller 053 */ 054 public PrecedentsNode(Cell cell, DefaultTreeModel treeModel, 055 UIController uiController) { 056 super(cell, treeModel); 057 this.uiController = uiController; 058 if (cell.getFormula() != null) 059 references = cell.getFormula().getReferences(); 060 } 061 062 protected void addChildren() { 063 for (Reference reference : references) { 064 if (reference instanceof CellReference) { 065 Cell cell = ((CellReference)reference).getCell(); 066 add(new PrecedentsNode(cell, treeModel, uiController)); 067 } else 068 add(new ReferenceNode(reference, getCell().getSpreadsheet(), 069 treeModel, uiController)); 070 } 071 } 072 073 /** 074 * Returns whether the cell has references. 075 * @return true if the cell has references 076 */ 077 public boolean isLeaf() { 078 return references.isEmpty(); 079 } 080}