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    }