001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.history; 003 004import java.awt.event.FocusEvent; 005import java.awt.event.FocusListener; 006 007import javax.swing.JTable; 008import javax.swing.ListSelectionModel; 009 010/** 011 * TagInfoViewer is a UI component which displays the list of tags of two 012 * version of a {@link org.openstreetmap.josm.data.osm.OsmPrimitive} in a {@link org.openstreetmap.josm.data.osm.history.History}. 013 * 014 * <ul> 015 * <li>on the left, it displays the list of tags for the version at {@link PointInTimeType#REFERENCE_POINT_IN_TIME}</li> 016 * <li>on the right, it displays the list of tags for the version at {@link PointInTimeType#CURRENT_POINT_IN_TIME}</li> 017 * </ul> 018 * 019 */ 020public class TagInfoViewer extends HistoryViewerPanel { 021 private static final class RepaintOnFocusChange implements FocusListener { 022 @Override 023 public void focusLost(FocusEvent e) { 024 repaintSelected(e); 025 } 026 027 @Override 028 public void focusGained(FocusEvent e) { 029 repaintSelected(e); 030 } 031 032 private static void repaintSelected(FocusEvent e) { 033 // we would only need the selected rows, but this is easier: 034 e.getComponent().repaint(); 035 } 036 } 037 038 /** 039 * Constructs a new {@code TagInfoViewer}. 040 * @param model The history browsing model 041 */ 042 public TagInfoViewer(HistoryBrowserModel model) { 043 super(model); 044 } 045 046 @Override 047 protected JTable buildReferenceTable() { 048 JTable table = new JTable( 049 model.getTagTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME), 050 new TagTableColumnModel() 051 ); 052 table.setName("table.referencetagtable"); 053 setUpDataTransfer(table); 054 return table; 055 } 056 057 @Override 058 protected JTable buildCurrentTable() { 059 JTable table = new JTable( 060 model.getTagTableModel(PointInTimeType.CURRENT_POINT_IN_TIME), 061 new TagTableColumnModel() 062 ); 063 table.setName("table.currenttagtable"); 064 setUpDataTransfer(table); 065 return table; 066 } 067 068 private void setUpDataTransfer(JTable table) { 069 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 070 selectionSynchronizer.participateInSynchronizedSelection(table.getSelectionModel()); 071 table.setTransferHandler(new TagInfoTransferHandler()); 072 table.addFocusListener(new RepaintOnFocusChange()); 073 } 074}