// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.correction;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
/**
* Abstract correction table.
* @param <T> type of table model
*/
public abstract class CorrectionTable<T extends CorrectionTableModel<?>> extends JTable {
private static final int MAX_VISIBLE_LINES = 10;
/**
* Renders text in bold.
*/
public static class BoldRenderer extends JLabel implements TableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Font f = getFont();
setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize()));
setText((String) value);
return this;
}
}
private static volatile BoldRenderer boldRenderer;
protected CorrectionTable(T correctionTableModel) {
super(correctionTableModel);
final int correctionsSize = correctionTableModel.getCorrections().size();
final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES : correctionsSize;
setPreferredScrollableViewportSize(new Dimension(400, lines * getRowHeight()));
getColumnModel().getColumn(correctionTableModel.getApplyColumn()).setPreferredWidth(40);
setRowSelectionAllowed(false);
}
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if (getCorrectionTableModel().isBoldCell(row, column)) {
if (boldRenderer == null)
boldRenderer = new BoldRenderer();
return boldRenderer;
}
return super.getCellRenderer(row, column);
}
/**
* Returns correction table model.
* @return correction table model
*/
@SuppressWarnings("unchecked")
public T getCorrectionTableModel() {
return (T) getModel();
}
}