/** * Copyright 2015 Santhosh Kumar Tekuri * * The JLibs authors license this file to you 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 jlibs.swing.tree; import javax.swing.event.EventListenerList; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * @author Santhosh Kumar T */ public abstract class AbstractTreeModel implements TreeModel{ protected Object root; protected AbstractTreeModel(){ } protected AbstractTreeModel(Object root){ this.root = root; } public void setRoot(Object root){ this.root = root; fireTreeStructureChanged(root, new Object[]{ root }, null, null); } /*-------------------------------------------------[ Listeners ]---------------------------------------------------*/ protected EventListenerList listenerList = new EventListenerList(); @Override public void addTreeModelListener(TreeModelListener listener){ listenerList.add(TreeModelListener.class, listener); } @Override public void removeTreeModelListener(TreeModelListener listener){ listenerList.remove(TreeModelListener.class, listener); } /*-------------------------------------------------[ Firing Changes ]---------------------------------------------------*/ @Override public void valueForPathChanged(TreePath path, Object newValue){ Object[] listeners = listenerList.getListenerList(); TreeModelEvent e = null; for(int i = listeners.length-2; i>=0; i-=2){ if(e==null) e = new TreeModelEvent(this, path.getPath(), null, null); ((TreeModelListener)listeners[i+1]).treeNodesChanged(e); } } public void fireTreeStructureChanged(Object source, Object[] path, int[] childIndices, Object[] children){ Object[] listeners = listenerList.getListenerList(); TreeModelEvent e = null; for(int i = listeners.length-2; i>=0; i-=2){ if(e==null) e = new TreeModelEvent(source, path, childIndices, children); ((TreeModelListener)listeners[i+1]).treeStructureChanged(e); } } public void fireTreeNodesInserted(Object source, Object[] path, int[] childIndices, Object[] children){ Object[] listeners = listenerList.getListenerList(); TreeModelEvent e = null; for(int i = listeners.length-2; i>=0; i-=2){ if(e==null) e = new TreeModelEvent(source, path, childIndices, children); ((TreeModelListener)listeners[i+1]).treeNodesInserted(e); } } public void fireTreeNodesRemoved(Object source, Object[] path, int[] childIndices, Object[] children){ Object[] listeners = listenerList.getListenerList(); TreeModelEvent e = null; for(int i = listeners.length-2; i>=0; i-=2){ if(e==null) e = new TreeModelEvent(source, path, childIndices, children); ((TreeModelListener)listeners[i+1]).treeNodesRemoved(e); } } }