filebot/source/net/filebot/ui/sfv/ChecksumCellRenderer.java

74 lines
2.3 KiB
Java

package net.filebot.ui.sfv;
import static java.awt.Font.*;
import static net.filebot.util.ui.SwingUI.*;
import java.awt.Color;
import java.awt.Component;
import java.io.FileNotFoundException;
import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.SwingWorker.StateValue;
import javax.swing.table.DefaultTableCellRenderer;
import net.filebot.util.ExceptionUtilities;
public class ChecksumCellRenderer extends DefaultTableCellRenderer {
private final SwingWorkerCellRenderer progressRenderer = new SwingWorkerCellRenderer();
private final Color verificationForeground = new Color(0x009900);
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
boolean pendingWorker = false;
if (value instanceof SwingWorker) {
if (((SwingWorker<?, ?>) value).getState() != StateValue.PENDING)
return progressRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
pendingWorker = true;
}
// ignore focus
super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
// check row state for ERROR
boolean isError = (table.getValueAt(row, 0) == ChecksumRow.State.ERROR);
// if row state is ERROR and if we are not selected use text color RED,
// else use default table colors
setForeground(isSelected ? table.getSelectionForeground() : isError ? Color.RED : isVerificationColumn(table, column) ? verificationForeground : table.getForeground());
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
// use BOLD font on ERROR
setFont(getFont().deriveFont(isError ? BOLD : PLAIN));
if (pendingWorker) {
setText("Pending...");
} else if (value == null && !isSelected) {
setBackground(derive(table.getGridColor(), 0.1f));
} else if (value instanceof FileNotFoundException) {
setText("File not found");
} else if (value instanceof Throwable) {
setText(ExceptionUtilities.getRootCauseMessage((Throwable) value));
}
return this;
}
private boolean isVerificationColumn(JTable table, int column) {
ChecksumTableModel model = (ChecksumTableModel) table.getModel();
int modelColumn = table.getColumnModel().getColumn(column).getModelIndex();
return model.isVerificationColumn(modelColumn);
}
}