/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package de.cismet.cismap.commons.gui.layerwidget; import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import javax.swing.JTree; import javax.swing.event.TreeModelEvent; import javax.swing.event.TreeModelListener; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; /** * If this wrapper is used, when the model is set, the progress changed events from the ActiveLayerModel are not fired * to this model. * * @author therter * @version $Revision$, $Date$ */ public class ActiveLayerModelWrapperWithoutProgress implements TreeModel, TreeModelListener { //~ Instance fields -------------------------------------------------------- private ActiveLayerModel model; private final List<JTree> treesToUpdate = new ArrayList<JTree>(); //~ Constructors ----------------------------------------------------------- /** * Creates a new ActiveLayerModelWrapperWithoutProgress object. * * @param model DOCUMENT ME! */ public ActiveLayerModelWrapperWithoutProgress(final ActiveLayerModel model) { this.model = model; model.addTreeModelWithoutProgressListener(this); } //~ Methods ---------------------------------------------------------------- @Override public Object getRoot() { return getModel().getRoot(); } @Override public Object getChild(final Object parent, final int index) { return getModel().getChild(parent, index); } @Override public int getChildCount(final Object parent) { return getModel().getChildCount(parent); } @Override public boolean isLeaf(final Object node) { return getModel().isLeaf(node); } @Override public void valueForPathChanged(final TreePath path, final Object newValue) { getModel().valueForPathChanged(path, newValue); } @Override public int getIndexOfChild(final Object parent, final Object child) { return getModel().getIndexOfChild(parent, child); } @Override public void addTreeModelListener(final TreeModelListener l) { getModel().addTreeModelWithoutProgressListener(l); } @Override public void removeTreeModelListener(final TreeModelListener l) { getModel().removeTreeModelWithoutProgressListener(l); } /** * Adds a tree to update. * * <p>Invokes the updateUI() method of the given tree after every fireTreeStructureChanged() invocation. This is * required to refresh the path bounds of the tree. Without this refresh, the change of the name of a tree path will * cause a display error.</p> * * @param tree the tree to invoke updateUI() */ public void addTreeToUpdate(final JTree tree) { treesToUpdate.add(tree); } /** * Removes the given tree. * * @param tree tree to remove * * @see addTreeToUpdate(Jtree) */ public void removeTreeToUpdate(final JTree tree) { treesToUpdate.remove(tree); } /** * DOCUMENT ME! * * @return the model */ public ActiveLayerModel getModel() { return model; } /** * DOCUMENT ME! * * @param model the model to set */ public void setModel(final ActiveLayerModel model) { this.model = model; } @Override public void treeNodesChanged(final TreeModelEvent e) { fireUpdateUI(); } @Override public void treeNodesInserted(final TreeModelEvent e) { fireUpdateUI(); } @Override public void treeNodesRemoved(final TreeModelEvent e) { fireUpdateUI(); } @Override public void treeStructureChanged(final TreeModelEvent e) { fireUpdateUI(); } /** * DOCUMENT ME! */ private void fireUpdateUI() { EventQueue.invokeLater(new Runnable() { @Override public void run() { for (final JTree tree : treesToUpdate) { tree.updateUI(); } } }); } }