package org.jmeld.ui.tree;
import org.jmeld.diff.JMChunk;
import org.jmeld.diff.JMDelta;
import org.jmeld.diff.JMRevision;
import org.jmeld.diff.TypeDiff;
import org.jmeld.ui.util.RevisionUtil;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.*;
/**
* Created by alberto on 16/11/14.
*/
class DiffTreeCellRenderer extends DefaultTreeCellRenderer {
private static final Color COLOR_CHUNK = new Color(217, 154, 13);
private static final Color COLOR_CHANGE = new Color(237, 38, 139);
private static final Color COLOR_DELTA = new Color(209, 70, 237);
private static final Color COLOR_REVISION = new Color(39, 86, 189);
@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);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Object userObject = node.getUserObject();
if (userObject instanceof JMRevision) {
setIcon(new TreeColorIcon(COLOR_REVISION));
JMRevision revision = (JMRevision) userObject;
int numChanges = revision.getDeltas().size();
setText(String.format("%d changes, %s", numChanges, revision.getIgnore()));
} else if (userObject instanceof JMChange) {
JMChange JMChange = (JMChange) userObject;
setIcon(new TreeColorIcon(COLOR_CHANGE));
setText(JMChange.toString());
} else if (userObject instanceof JMDelta) {
JMDelta delta = (JMDelta) userObject;
setIcon(new TreeColorIcon(RevisionUtil.getColor(delta)));
TypeDiff type = delta.getType();
setText(type.toString());
} else if (value instanceof JMChunkNode) {
setIcon(new TreeColorIcon(COLOR_CHUNK));
JMChunkNode chunkNode = (JMChunkNode) value;
JMChunk chunk = chunkNode.getChunk();
setText(String.format("%d, %d: \"%s\"", chunk.getAnchor(), chunk.getSize(), chunkNode.getString()));
}
return this;
}
}