blob: 28b58ac3b2a5fa234587b26f74b894b7185c6afb [file] [log] [blame]
package com.intellij.vcs.log.ui;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.JBColor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* @author Kirill Likhodedov
*/
public class VcsLogColorManagerImpl implements VcsLogColorManager {
private static final Color REF_BORDER = JBColor.GRAY;
private static final Color ROOT_INDICATOR_BORDER = JBColor.LIGHT_GRAY;
private static final Logger LOG = Logger.getInstance(VcsLogColorManagerImpl.class);
private static Color[] ROOT_COLORS = {
JBColor.RED, JBColor.YELLOW, JBColor.LIGHT_GRAY, JBColor.BLUE, JBColor.MAGENTA,
JBColor.CYAN, JBColor.GREEN, JBColor.ORANGE, JBColor.PINK};
@NotNull private final List<VirtualFile> myRoots;
@NotNull private final Map<VirtualFile, Color> myRoots2Colors;
public VcsLogColorManagerImpl(@NotNull Collection<VirtualFile> roots) {
myRoots = new ArrayList<VirtualFile>(roots);
Collections.sort(myRoots, new Comparator<VirtualFile>() { // TODO add a common util method to sort roots
@Override
public int compare(VirtualFile o1, VirtualFile o2) {
return o1.getName().compareTo(o2.getName());
}
});
myRoots2Colors = ContainerUtil.newHashMap();
int i = 0;
for (VirtualFile root : myRoots) {
Color color;
if (i >= ROOT_COLORS.length) {
color = getDefaultRootColor();
}
else {
color = ROOT_COLORS[i];
i++;
}
myRoots2Colors.put(root, color);
}
}
@Override
public boolean isMultipleRoots() {
return myRoots.size() > 1;
}
@NotNull
@Override
public Color getRootColor(@NotNull VirtualFile root) {
Color color = myRoots2Colors.get(root);
if (color == null) {
LOG.error("No color record for root " + root + ". All roots: " + myRoots2Colors);
color = getDefaultRootColor();
}
return color;
}
private static Color getDefaultRootColor() {
return UIUtil.getTableBackground();
}
@NotNull
@Override
public Color getReferenceBorderColor() {
return REF_BORDER;
}
@NotNull
@Override
public Color getRootIndicatorBorder() {
return ROOT_INDICATOR_BORDER;
}
}