/*
* Created on 20.06.2005
*
*/
package org.jdesktop.swingx.util;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.treetable.AbstractTreeTableModel;
/**
* A static snapshot of a container hierarchy.
*
* NOTE: does not listen to any property changes of
* contained components - cell updates are arbitrary on
* repaint only!
*
* @author Jeanette Winzenburg
*/
public class ComponentTreeTableModel extends AbstractTreeTableModel {
public ComponentTreeTableModel(Container root) {
super(root);
setRoot(root);
}
public void setRoot(Container root) {
if (root == null) {
root = new JXFrame();
}
this.root = root;
modelSupport.fireNewRoot();
}
// ------------------TreeModel
public Object getChild(Object parent, int index) {
return ((Container) parent).getComponent(index);
}
public int getChildCount(Object parent) {
return parent instanceof Container ? ((Container) parent).getComponentCount() : 0;
}
public int getIndexOfChild(Object parent, Object child) {
Component[] children = ((Container) parent).getComponents();
for (int i = 0; i < children.length; i++) {
if (children[i].equals(child)) {
return i;
}
}
return -1;
}
@Override
public boolean isLeaf(Object node) {
return getChildCount(node) == 0;
}
public String convertValueToText(Object node) {
String className = node.getClass().getName();
int lastDot = className.lastIndexOf(".");
String lastElement = className.substring(lastDot + 1);
return lastElement;
}
//------------------ TreeTableModel
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return Component.class;
case 1:
return Point.class;
case 2:
return Dimension.class;
default:
return Object.class;
}
}
public int getColumnCount() {
return 3;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Type";
case 1:
return "Location";
case 2:
return "Size";
default:
return "Column " + column;
}
}
public Object getValueAt(Object node, int column) {
Component comp = (Component) node;
switch (column) {
case 0:
return comp;
case 1:
return comp.getLocation();
case 2:
return comp.getSize();
default:
return null;
}
}
@Override
public void setValueAt(Object value, Object node, int column) {
}
}