/* * GeoTools - OpenSource mapping toolkit * http://geotools.org * (C) 2007, GeoTools Project Managment Committee (PMC) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.renderedimage.viewer; import java.awt.image.RenderedImage; import java.util.ArrayList; import java.util.List; import java.util.Vector; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * Turns a RenderedImage into a tree model * * @author Andrea Aime * */ class ImageTreeModel implements TreeModel { private List<TreeModelListener> vector = new ArrayList<TreeModelListener>(); RenderedImage root; public void setRoot(RenderedImage root) { this.root = root; fireTreeStructureChanged(new TreeModelEvent(this, new TreePath(root))); } public Object getChild(Object parent, int index) { RenderedImage ro = (RenderedImage) parent; return ro.getSources().get(index); } public int getChildCount(Object parent) { RenderedImage ro = (RenderedImage) parent; if(ro.getSources()!=null) return ro.getSources().size(); return 0; } public int getIndexOfChild(Object parent, Object child) { RenderedImage ro = (RenderedImage) parent; Vector sources = ro.getSources(); for (int i = 0; i < sources.size(); i++) { if (sources.get(i).equals(child)) return i; } return -1; } public Object getRoot() { return root; } public boolean isLeaf(Object node) { return getChildCount(node) == 0; } public void valueForPathChanged(TreePath path, Object newValue) { throw new UnsupportedOperationException("This tree is read only"); } public void addTreeModelListener(TreeModelListener listener) { if (listener != null && !vector.contains(listener)) { vector.add(listener); } } public void removeTreeModelListener(TreeModelListener listener) { if (listener != null) { vector.remove(listener); } } public void fireTreeStructureChanged(TreeModelEvent e) { for (TreeModelListener listener : vector) listener.treeStructureChanged(e); } }