/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.pepsoft.worldpainter.heightMaps.gui;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import org.pepsoft.worldpainter.HeightMap;
import org.pepsoft.worldpainter.heightMaps.DelegatingHeightMap;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author pepijn
*/
public class HeightMapTreeModel implements TreeModel {
public HeightMapTreeModel(HeightMap rootHeightMap) {
this.rootHeightMap = rootHeightMap;
}
public void notifyListeners() {
TreeModelEvent event = new TreeModelEvent(this, new Object[] {rootHeightMap});
for (TreeModelListener listener: listeners) {
listener.treeStructureChanged(event);
}
}
// TreeModel
@Override
public Object getRoot() {
return rootHeightMap;
}
@Override
public Object getChild(Object parent, int index) {
if (parent instanceof DelegatingHeightMap) {
return ((DelegatingHeightMap) parent).getHeightMap(index);
}
throw new IndexOutOfBoundsException(Integer.toString(index));
}
@Override
public int getChildCount(Object parent) {
if (parent instanceof DelegatingHeightMap) {
return ((DelegatingHeightMap) parent).getHeightMapCount();
} else {
return 0;
}
}
@Override
public boolean isLeaf(Object node) {
return ! (node instanceof DelegatingHeightMap);
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
throw new UnsupportedOperationException("Not supported");
}
@Override
public int getIndexOfChild(Object parent, Object child) {
if (parent instanceof DelegatingHeightMap) {
return ((DelegatingHeightMap) parent).getIndex((HeightMap) child);
}
throw new IllegalArgumentException("Not a child of specified parent");
}
@Override
public void addTreeModelListener(TreeModelListener l) {
listeners.add(l);
}
@Override
public void removeTreeModelListener(TreeModelListener l) {
listeners.remove(l);
}
private final HeightMap rootHeightMap;
private final List<TreeModelListener> listeners = new ArrayList<>();
}