blob: 9b1c323633b3f1d659bc015788bc1ed60a24537d [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* 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.android.tools.idea.gradle.invoker.messages;
import com.intellij.icons.AllIcons;
import com.intellij.ide.errorTreeView.*;
import com.intellij.ui.MultilineTreeCellRenderer;
import com.intellij.util.ui.EmptyIcon;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import static com.intellij.util.ArrayUtil.EMPTY_STRING_ARRAY;
/**
* Renders elements in the "Messages" window. This renderer does not add the message type as a prefix (e.g. "Information:");
*/
class MessageTreeRenderer extends MultilineTreeCellRenderer {
@Override
protected void initComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
ErrorTreeElement element = getElement(value);
if (element != null) {
String[] text = element.getText();
if (text == null) {
text = EMPTY_STRING_ARRAY;
}
if (text.length > 0 && text[0] == null) {
text[0] = "";
}
setText(text, "");
}
Icon icon = null;
if (element instanceof GroupingElement) {
GroupingElement groupingElement = (GroupingElement)element;
icon = groupingElement.getFile() != null ? groupingElement.getFile().getFileType().getIcon() : AllIcons.FileTypes.Java;
}
else if (element instanceof SimpleMessageElement || element instanceof NavigatableMessageElement) {
ErrorTreeElementKind kind = element.getKind();
icon = getIconFor(kind);
}
if (icon == null) {
icon = EmptyIcon.ICON_16;
}
setIcon(icon);
}
@NotNull
private static Icon getIconFor(@NotNull ErrorTreeElementKind kind) {
switch (kind) {
case ERROR:
return AllIcons.General.BalloonError;
case WARNING:
return AllIcons.General.BalloonWarning;
case INFO:
return AllIcons.General.BalloonInformation;
default:
return EmptyIcon.ICON_16;
}
}
@Nullable
private static ErrorTreeElement getElement(@Nullable Object value) {
if (value instanceof DefaultMutableTreeNode) {
Object userObject = ((DefaultMutableTreeNode)value).getUserObject();
if (userObject instanceof ErrorTreeNodeDescriptor) {
return ((ErrorTreeNodeDescriptor)userObject).getElement();
}
}
return null;
}
}