* highlight embedded checksum in bold red on warning and error

This commit is contained in:
Reinhard Pointner 2009-02-16 17:03:38 +00:00
parent 051cf3362b
commit c5f499b47f
2 changed files with 18 additions and 5 deletions

View File

@ -4,6 +4,8 @@ package net.sourceforge.filebot.ui.panel.sfv;
import static net.sourceforge.filebot.FileBotUtilities.EMBEDDED_CHECKSUM_PATTERN;
import java.awt.Color;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.TableColumn;
@ -27,6 +29,9 @@ class ChecksumTable extends JTable {
setDragEnabled(true);
setUI(new DragDropRowTableUI());
// force white background (e.g. gtk-laf default table background is gray)
setBackground(Color.WHITE);
// highlight CRC32 patterns in filenames in green and with smaller font-size
setDefaultRenderer(String.class, new HighlightPatternCellRenderer(EMBEDDED_CHECKSUM_PATTERN));
setDefaultRenderer(ChecksumRow.State.class, new StateIconCellRenderer());

View File

@ -3,12 +3,15 @@ package net.sourceforge.filebot.ui.panel.sfv;
import java.awt.Component;
import java.util.EnumSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import net.sourceforge.filebot.ui.panel.sfv.ChecksumRow.State;
/**
* DefaultTableCellRenderer with highlighting of text patterns.
@ -26,10 +29,11 @@ class HighlightPatternCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
// check for error or warning
boolean isError = (EnumSet.of(State.ERROR, State.WARNING).contains(table.getValueAt(row, 0)));
boolean isWarning = (table.getValueAt(row, 0) == ChecksumRow.State.WARNING);
// highlight CRC32 checksum patterns by using a smaller font-size and changing the font-color to a dark green
// highlight patterns by using a smaller font-size and changing the font-color to a dark green
// do not change the font-color if cell is selected, because that would look ugly (imagine green text on blue background ...)
Matcher matcher = pattern.matcher(value.toString());
@ -37,7 +41,7 @@ class HighlightPatternCellRenderer extends DefaultTableCellRenderer {
StringBuffer htmlText = new StringBuffer("<html><nobr>");
while (matcher.find()) {
matcher.appendReplacement(htmlText, createReplacement(isSelected ? null : isWarning ? "#FF8C00" : "#009900", "smaller"));
matcher.appendReplacement(htmlText, createReplacement(isSelected ? null : (isError ? "red" : "#009900"), "smaller", isError ? "bold" : null));
}
matcher.appendTail(htmlText);
@ -50,7 +54,7 @@ class HighlightPatternCellRenderer extends DefaultTableCellRenderer {
}
protected String createReplacement(String cssColor, String cssFontSize) {
protected String createReplacement(String cssColor, String cssFontSize, String cssFontWeight) {
// build replacement string like
// e.g. <span style='font-size: smaller; color: #009900;'>$0</span>
StringBuilder replacement = new StringBuilder(60);
@ -65,6 +69,10 @@ class HighlightPatternCellRenderer extends DefaultTableCellRenderer {
replacement.append("font-size:").append(cssFontSize).append(';');
}
if (cssFontWeight != null) {
replacement.append("font-weight:").append(cssFontWeight).append(';');
}
return replacement.append("'>$0</span>").toString();
}