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

74 lines
2.3 KiB
Java
Raw Normal View History

2014-04-19 02:30:29 -04:00
package net.filebot.ui.sfv;
2009-05-17 13:22:44 -04:00
import static java.awt.Font.*;
2014-07-29 02:45:15 -04:00
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;
2014-04-19 02:30:29 -04:00
import net.filebot.util.ExceptionUtilities;
public class ChecksumCellRenderer extends DefaultTableCellRenderer {
2015-07-25 18:47:19 -04:00
private final SwingWorkerCellRenderer progressRenderer = new SwingWorkerCellRenderer();
2015-07-25 18:47:19 -04:00
private final Color verificationForeground = new Color(0x009900);
2015-07-25 18:47:19 -04:00
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
boolean pendingWorker = false;
2015-07-25 18:47:19 -04:00
if (value instanceof SwingWorker) {
if (((SwingWorker<?, ?>) value).getState() != StateValue.PENDING)
return progressRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
2015-07-25 18:47:19 -04:00
pendingWorker = true;
}
2015-07-25 18:47:19 -04:00
// ignore focus
super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
2015-07-25 18:47:19 -04:00
// check row state for ERROR
boolean isError = (table.getValueAt(row, 0) == ChecksumRow.State.ERROR);
2015-07-25 18:47:19 -04:00
// 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());
2015-07-25 18:47:19 -04:00
// use BOLD font on ERROR
setFont(getFont().deriveFont(isError ? BOLD : PLAIN));
2015-07-25 18:47:19 -04:00
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));
}
2015-07-25 18:47:19 -04:00
return this;
}
2015-07-25 18:47:19 -04:00
private boolean isVerificationColumn(JTable table, int column) {
ChecksumTableModel model = (ChecksumTableModel) table.getModel();
int modelColumn = table.getColumnModel().getColumn(column).getModelIndex();
2015-07-25 18:47:19 -04:00
return model.isVerificationColumn(modelColumn);
}
2015-07-25 18:47:19 -04:00
}