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}