/*
* 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 org.pepsoft.worldpainter.HeightMap;
import org.pepsoft.worldpainter.heightMaps.AbstractHeightMap;
import org.pepsoft.worldpainter.heightMaps.DelegatingHeightMap;
import org.pepsoft.worldpainter.heightMaps.DisplacementHeightMap;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
/**
*
* @author pepijn
*/
public class HeightMapTreeCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof HeightMap) {
HeightMap heightMap = (HeightMap) value;
String role = null;
StringBuilder name = new StringBuilder();
if (value instanceof AbstractHeightMap) {
DelegatingHeightMap parent = ((AbstractHeightMap) value).getParent();
if (parent instanceof DisplacementHeightMap) {
role = parent.getRole(parent.getIndex(heightMap));
if (role.endsWith("HeightMap")) {
name.append(role.substring(0, role.length() - 9));
} else if (role.endsWith("Map")) {
name.append(role.substring(0, role.length() - 3));
} else {
name.append(role);
}
}
}
if (heightMap.getName() != null) {
if (name.length() > 0) {
name.append(": ");
}
name.append(heightMap.getName());
}
if (name.length() == 0) {
name.append(heightMap.getClass().getSimpleName());
}
if (value == focusHeightMap) {
setBorder(focusBorder);
} else if (getBorder() != null) {
setBorder(null);
}
setText(name.toString());
setIcon(heightMap.getIcon());
setToolTipText(getTooltipText(heightMap, role));
}
return this;
}
public HeightMap getFocusHeightMap() {
return focusHeightMap;
}
public void setFocusHeightMap(HeightMap focusHeightMap) {
this.focusHeightMap = focusHeightMap;
}
private String getTooltipText(HeightMap heightMap, String role) {
StringBuilder sb = new StringBuilder("<html>");
String name = heightMap.getName();
if (name != null) {
sb.append("Name: <strong>").append(name).append("</strong><br>");
}
String type = heightMap.getClass().getSimpleName();
type = type.substring(0, type.length() - 9);
sb.append("Type: <strong>").append(type).append("</strong><br>");
if (role != null) {
sb.append("Role: <strong>").append(role).append("</strong><br>");
}
sb.append("</html>");
return sb.toString();
}
private final Border focusBorder = BorderFactory.createLineBorder(Color.RED);
private HeightMap focusHeightMap;
}