/* JAI-Ext - OpenSource Java Advanced Image Extensions Library * http://www.geo-solutions.it/ * Copyright 2014 GeoSolutions * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package it.geosolutions.rendered.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); } } }