001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.history;
003
004import javax.swing.JTable;
005import javax.swing.event.TableModelEvent;
006import javax.swing.event.TableModelListener;
007import javax.swing.table.TableColumnModel;
008
009/**
010 * Updates the column header text and indicates a normal/reversed diff sorting
011 */
012final class ReversedChangeListener implements TableModelListener {
013    private final TableColumnModel columnModel;
014    private final JTable table;
015    private Boolean reversed;
016    private final String nonReversedText;
017    private final String reversedText;
018    private final String reversedTooltip;
019
020    ReversedChangeListener(JTable table, TableColumnModel columnModel, String reversedTooltip) {
021        this.columnModel = columnModel;
022        this.table = table;
023        Object columnName = columnModel.getColumn(0).getHeaderValue();
024        this.nonReversedText = columnName + (table.getFont().canDisplay('\u25bc') ? " \u25bc" : " (1-n)");
025        this.reversedText = columnName + (table.getFont().canDisplay('\u25b2') ? " \u25b2" : " (n-1)");
026        this.reversedTooltip = reversedTooltip;
027    }
028
029    @Override
030    public void tableChanged(TableModelEvent e) {
031        if (e.getSource() instanceof DiffTableModel) {
032            final DiffTableModel mod = (DiffTableModel) e.getSource();
033            if (reversed == null || reversed != mod.isReversed()) {
034                reversed = mod.isReversed();
035                columnModel.getColumn(0).setHeaderValue(reversed ? reversedText : nonReversedText);
036                table.getTableHeader().setToolTipText(reversed ? reversedTooltip : null);
037                table.getTableHeader().repaint();
038            }
039        }
040    }
041}