001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.corrector;
003
004 import java.awt.Component;
005 import java.awt.Dimension;
006 import java.awt.Font;
007
008 import javax.swing.JLabel;
009 import javax.swing.JTable;
010 import javax.swing.table.TableCellRenderer;
011
012 public abstract class CorrectionTable<TM extends CorrectionTableModel<?>>
013 extends JTable {
014
015 private static final int MAX_VISIBLE_LINES = 10;
016
017 public static class BoldRenderer extends JLabel implements
018 TableCellRenderer {
019
020 public Component getTableCellRendererComponent(JTable table,
021 Object value, boolean isSelected, boolean hasFocus, int row,
022 int column) {
023
024 Font f = getFont();
025 setFont(new Font(f.getName(), f.getStyle() | Font.BOLD, f.getSize()));
026
027 setText((String)value);
028
029 return this;
030 }
031 }
032
033 private static BoldRenderer boldRenderer = null;
034
035 protected CorrectionTable(TM correctionTableModel) {
036 super(correctionTableModel);
037
038 final int correctionsSize = correctionTableModel.getCorrections().size();
039 final int lines = correctionsSize > MAX_VISIBLE_LINES ? MAX_VISIBLE_LINES
040 : correctionsSize;
041 setPreferredScrollableViewportSize(new Dimension(400, lines
042 * getRowHeight()));
043 getColumnModel().getColumn(correctionTableModel.getApplyColumn())
044 .setPreferredWidth(40);
045 setRowSelectionAllowed(false);
046 }
047
048 public TableCellRenderer getCellRenderer(int row, int column) {
049 if (getCorrectionTableModel().isBoldCell(row, column)) {
050 if (boldRenderer == null)
051 boldRenderer = new BoldRenderer();
052 return boldRenderer;
053 }
054 return super.getCellRenderer(row, column);
055 }
056
057 @SuppressWarnings("unchecked")
058 public TM getCorrectionTableModel() {
059 return (TM)getModel();
060 }
061
062 }