/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.gui.swing.component;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.EmptyBorder;
import org.wikipediacleaner.api.check.CheckErrorPage;
import org.wikipediacleaner.gui.swing.basic.Utilities;
import org.wikipediacleaner.images.EnumImageSize;
/**
* A renderer for CheckErrorAlgorithm items in a list.
*/
public class CheckErrorPageListCellRenderer extends JLabel implements ListCellRenderer<CheckErrorPage> {
private static final long serialVersionUID = 1L;
private final boolean forPage;
private boolean showCountOccurence;
private ImageIcon globalFixIcon;
/**
* Construct a renderer.
*
* @param forPage Renderer for page or for algorithm ?
*/
public CheckErrorPageListCellRenderer(boolean forPage) {
this.forPage = forPage;
setOpaque(true);
setHorizontalAlignment(LEFT);
setVerticalAlignment(CENTER);
setBorder(new EmptyBorder(0, 3, 0, 3));
setFont(getFont().deriveFont(Font.PLAIN));
globalFixIcon = Utilities.getImageIcon("gnome-system-run.png", EnumImageSize.SMALL);
}
/**
* @param show Flag indicating the occurence count is shown.
*/
public void showCountOccurence(boolean show) {
showCountOccurence = show;
}
/* (non-Javadoc)
* @see javax.swing.ListCellRenderer#getListCellRendererComponent(
* javax.swing.JList, java.lang.Object, int, boolean, boolean)
*/
@Override
public Component getListCellRendererComponent(
JList<? extends CheckErrorPage> list,
CheckErrorPage value,
@SuppressWarnings("unused") int index,
boolean isSelected,
@SuppressWarnings("unused") boolean cellHasFocus) {
// Retrieve data
String text = (value != null) ? value.toString() : "";
Boolean errorsPresent = null;
Boolean globalFix = null;
boolean whiteList = false;
if (value != null) {
CheckErrorPage errorPage = value;
whiteList = errorPage.isInWhiteList();
if (forPage && (errorPage.getPage() != null)) {
text = errorPage.getPage().getTitle();
} else {
text = errorPage.getAlgorithm().toString();
int errorCount = errorPage.getActiveResultsCount();
if (errorCount > 0) {
errorsPresent = Boolean.TRUE;
if ((showCountOccurence) &&
(errorCount > 1)) {
text += " (" + errorCount + ")";
}
} else if (errorPage.getErrorFound()) {
errorsPresent = Boolean.TRUE;
} else {
errorsPresent = Boolean.FALSE;
}
String[] globalFixes = errorPage.getAlgorithm().getGlobalFixes();
if ((globalFixes != null) && (globalFixes.length > 0)) {
globalFix = Boolean.TRUE;
}
}
}
// Text
setText(text);
if (Boolean.TRUE.equals(globalFix)) {
setIcon(globalFixIcon);
} else {
setIcon(null);
}
// Color
Color background = isSelected ? new Color(230, 230, 230) : Color.WHITE;
Color foreground = list.getForeground();
if (forPage) {
if (whiteList) {
foreground = Color.GREEN;
}
} else if (errorsPresent == null) {
if (!isSelected) {
foreground = Color.DARK_GRAY;
}
} else if (whiteList) {
foreground = Color.GREEN;
} else if (errorsPresent.booleanValue()) {
foreground = Color.RED;
}
setBackground(background);
setForeground(foreground);
return this;
}
}