blob: 45637c41fb38999806f3d0195275e78fc584890a [file] [log] [blame]
/*
* Copyright 2000-2009 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.errorTreeView;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.CustomizeColoredTreeCellRenderer;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.Consumer;
import com.intellij.util.ui.MutableErrorTreeView;
import javax.swing.*;
public class HotfixGroupElement extends GroupingElement {
private final Consumer<HotfixGate> myHotfix;
private final String myFixDescription;
private final MutableErrorTreeView myView;
private boolean myInProgress;
private final CustomizeColoredTreeCellRenderer myLeftTreeCellRenderer;
private final CustomizeColoredTreeCellRenderer myRightTreeCellRenderer;
public HotfixGroupElement(final String name, final Object data, final VirtualFile file, final Consumer<HotfixGate> hotfix,
final String fixDescription, final MutableErrorTreeView view) {
super(name, data, file);
myHotfix = hotfix;
myFixDescription = fixDescription;
myView = view;
myLeftTreeCellRenderer = new CustomizeColoredTreeCellRenderer() {
public void customizeCellRenderer(SimpleColoredComponent renderer,
JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
renderer.setIcon(AllIcons.General.Error);
final String[] text = getText();
final String errorText = ((text != null) && (text.length > 0)) ? text[0] : "";
renderer.append("Error: " + errorText, SimpleTextAttributes.REGULAR_ATTRIBUTES);
}
};
myRightTreeCellRenderer = new MyRightRenderer();
}
private class MyRightRenderer extends CustomizeColoredTreeCellRenderer {
private final HotfixGroupElement.MyRunner myRunner;
public MyRightRenderer() {
myRunner = new MyRunner();
}
public void customizeCellRenderer(SimpleColoredComponent renderer,
JTree tree,
Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
renderer.append(" ");
if (myInProgress) {
renderer.append("fixing...", SimpleTextAttributes.REGULAR_ITALIC_ATTRIBUTES);
} else {
renderer.append("Fix: " + myFixDescription, SimpleTextAttributes.LINK_BOLD_ATTRIBUTES, myRunner);
}
}
@Override
public Object getTag() {
return myRunner;
}
}
// we can inherit from HaveTooltip here
@Override
public CustomizeColoredTreeCellRenderer getLeftSelfRenderer() {
return myLeftTreeCellRenderer;
}
@Override
public CustomizeColoredTreeCellRenderer getRightSelfRenderer() {
return myRightTreeCellRenderer;
}
private class MyRunner implements Runnable {
private MyRunner() {
}
// todo name can be an ID
public void run() {
myInProgress = true;
myView.reload();
final String name = getName();
myHotfix.consume(new HotfixGate(name, myView));
}
}
}