/* * This software copyright by various authors including the RPTools.net * development team, and licensed under the LGPL Version 3 or, at your option, * any later version. * * Portions of this software were originally covered under the Apache Software * License, Version 1.1 or Version 2.0. * * See the file LICENSE elsewhere in this distribution for license details. */ package net.rptools.maptool.client.ui.assetpanel; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import net.rptools.maptool.client.MapTool; /** */ public class ImageFileTreeModel implements TreeModel { private final List<Directory> rootDirectories = new ArrayList<Directory>(); private final Object root = new String(""); private final List<TreeModelListener> listenerList = new ArrayList<TreeModelListener>(); public ImageFileTreeModel() { } public boolean isRootGroup(Directory dir) { return rootDirectories.contains(dir); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#getRoot() */ public Object getRoot() { return root; } public boolean containsRootGroup(Directory dir) { for (Directory directory : rootDirectories) { if (directory.getPath().equals(dir.getPath())) { return true; } } return false; } public void addRootGroup(Directory directory) { rootDirectories.add(directory); Collections.sort(rootDirectories, Directory.COMPARATOR); fireStructureChangedEvent(new TreeModelEvent(this, new Object[] { getRoot() }, new int[] { rootDirectories.size() - 1 }, new Object[] { directory })); } public void removeRootGroup(Directory directory) { rootDirectories.remove(directory); fireStructureChangedEvent(new TreeModelEvent(this, new Object[] { getRoot() })); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int) */ public Object getChild(Object parent, int index) { if (parent == root) { return rootDirectories.get(index); } Directory dir = (Directory) parent; try { return dir.getSubDirs().get(index); } catch (FileNotFoundException fnf) { MapTool.showError(fnf.getLocalizedMessage(), fnf); // Returning 'null' should be okay, since getChildCount will always return 0 for this exception return null; } } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) */ public int getChildCount(Object parent) { if (parent == root) { return rootDirectories.size(); } Directory dir = (Directory) parent; try { return dir.getSubDirs().size(); } catch (FileNotFoundException fnf) { MapTool.showError(fnf.getLocalizedMessage(), fnf); return 0; } } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) */ public boolean isLeaf(Object node) { // No leaves here return false; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, java.lang.Object) */ public void valueForPathChanged(TreePath path, Object newValue) { // Nothing to do right now } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object, java.lang.Object) */ public int getIndexOfChild(Object parent, Object child) { if (parent == root) { return rootDirectories.indexOf(child); } Directory dir = (Directory) parent; try { return dir.getSubDirs().indexOf(child); } catch (FileNotFoundException fnf) { MapTool.showError(fnf.getLocalizedMessage(), fnf); // Returning '0' should be okay, since getChildCount will always return 0 for this exception return 0; } } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) */ public void addTreeModelListener(TreeModelListener l) { listenerList.add(l); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) */ public void removeTreeModelListener(TreeModelListener l) { listenerList.remove(l); } public void refresh() { } private void fireStructureChangedEvent(TreeModelEvent e) { TreeModelListener[] listeners = listenerList.toArray(new TreeModelListener[listenerList.size()]); for (TreeModelListener listener : listeners) { listener.treeStructureChanged(e); } } private void fireNodesInsertedEvent(TreeModelEvent e) { TreeModelListener[] listeners = listenerList.toArray(new TreeModelListener[listenerList.size()]); for (TreeModelListener listener : listeners) { listener.treeNodesInserted(e); } } }