package zielu.gittoolbox.ui.projectView; import com.intellij.ide.projectView.PresentationData; import com.intellij.ide.projectView.ProjectViewNode; import com.intellij.ide.util.treeView.PresentableNodeDescriptor.ColoredFragment; import com.intellij.ui.Gray; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.FontUtil; import git4idea.repo.GitRepository; import java.awt.Color; import jodd.util.StringBand; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import zielu.gittoolbox.GitToolBoxConfig; import zielu.gittoolbox.status.GitAheadBehindCount; public class ColoredNodeDecoration extends NodeDecorationBase { public ColoredNodeDecoration(@NotNull GitToolBoxConfig config, @NotNull GitRepository repo, @Nullable GitAheadBehindCount aheadBehind) { super(config, repo, aheadBehind); } private ColoredFragment makeStatusFragment(boolean prefix) { int style = SimpleTextAttributes.STYLE_PLAIN; if (config.projectViewStatusBold) { style |= SimpleTextAttributes.STYLE_BOLD; } if (config.projectViewStatusItalic) { style |= SimpleTextAttributes.STYLE_ITALIC; } Color color = config.projectViewStatusCustomColor ? config.getProjectViewStatusColor() : Gray._128; SimpleTextAttributes attributes = new SimpleTextAttributes(style, color); StringBand status = getStatusText(); if (prefix) { String statusTemp = status.toString(); status.setIndex(0); status.append(FontUtil.spaceAndThinSpace()).append(statusTemp); } return new ColoredFragment(status.toString(), attributes); } private SimpleTextAttributes getLocationAttributes() { return SimpleTextAttributes.GRAY_ATTRIBUTES; } @Override public boolean apply(ProjectViewNode node, PresentationData data) { if (config.showProjectViewLocationPath) { if (config.showProjectViewStatusBeforeLocation) { data.addText(makeStatusFragment(true)); data.setLocationString("- " + data.getLocationString()); } else { StringBand location = new StringBand(FontUtil.spaceAndThinSpace()); location.append(data.getLocationString()); location.append(" - "); data.addText(location.toString(), getLocationAttributes()); data.addText(makeStatusFragment(false)); } } else { data.setTooltip(data.getLocationString()); data.setLocationString(""); data.addText(makeStatusFragment(true)); } return true; } }