/* * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.ide.todo; import com.intellij.ide.todo.nodes.SummaryNode; import com.intellij.ide.util.treeView.NodeDescriptor; import com.intellij.ide.util.treeView.NodeRenderer; import com.intellij.ui.HighlightableCellRenderer; import com.intellij.ui.HighlightedRegion; import com.intellij.util.ui.UIUtil; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeCellRenderer; import java.awt.*; /** * todo: replace this highlightable crap with regular NodeRenderer * @author Vladimir Kondratyev */ final class TodoCompositeRenderer implements TreeCellRenderer { private final NodeRenderer myNodeRenderer; private final HighlightableCellRenderer myColorTreeCellRenderer; public TodoCompositeRenderer() { myNodeRenderer = new NodeRenderer(); myColorTreeCellRenderer = new HighlightableCellRenderer(); } @Override public Component getTreeCellRendererComponent(JTree tree, Object obj, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component result; Object userObject = ((DefaultMutableTreeNode)obj).getUserObject(); if (userObject instanceof SummaryNode) { myNodeRenderer.getTreeCellRendererComponent(tree, userObject.toString(), selected, expanded, leaf, row, hasFocus); myNodeRenderer.setFont(UIUtil.getTreeFont().deriveFont(Font.BOLD)); myNodeRenderer.setIcon(null); result = myNodeRenderer; } else if (userObject instanceof NodeDescriptor && userObject instanceof HighlightedRegionProvider) { NodeDescriptor descriptor = (NodeDescriptor)userObject; HighlightedRegionProvider regionProvider = (HighlightedRegionProvider)userObject; myColorTreeCellRenderer.getTreeCellRendererComponent(tree, obj, selected, expanded, leaf, row, hasFocus); for (HighlightedRegion region : regionProvider.getHighlightedRegions()) { myColorTreeCellRenderer.addHighlighter(region.startOffset, region.endOffset, region.textAttributes); } myColorTreeCellRenderer.setIcon(descriptor.getIcon()); result = myColorTreeCellRenderer; } else { result = myNodeRenderer.getTreeCellRendererComponent(tree, null, selected, expanded, leaf, row, hasFocus); } if (result instanceof JComponent) { ((JComponent)result).setOpaque(!selected); } return result; } }