/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.client.ui.assetpanel; 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; /** */ 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() */ @Override 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) */ @Override public Object getChild(Object parent, int index) { if (parent == root) { return rootDirectories.get(index); } Directory dir = (Directory) parent; return dir.getSubDirs().get(index); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object) */ @Override public int getChildCount(Object parent) { if (parent == root) { return rootDirectories.size(); } Directory dir = (Directory) parent; return dir.getSubDirs().size(); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object) */ @Override public boolean isLeaf(Object node) { // No leaves here return getChildCount(node)==0; } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#valueForPathChanged(javax.swing.tree.TreePath, java.lang.Object) */ @Override 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) */ @Override public int getIndexOfChild(Object parent, Object child) { if (parent == root) { return rootDirectories.indexOf(child); } Directory dir = (Directory) parent; return dir.getSubDirs().indexOf(child); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#addTreeModelListener(javax.swing.event.TreeModelListener) */ @Override public void addTreeModelListener(TreeModelListener l) { listenerList.add(l); } /* * (non-Javadoc) * * @see javax.swing.tree.TreeModel#removeTreeModelListener(javax.swing.event.TreeModelListener) */ @Override 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); } } }