001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.history; 003 004import java.awt.Rectangle; 005 006import javax.swing.JTable; 007import javax.swing.ListSelectionModel; 008import javax.swing.event.TableModelEvent; 009import javax.swing.event.TableModelListener; 010 011/** 012 * RelationMemberListViewer is a UI component which displays the list of relation members of two 013 * version of a {@link org.openstreetmap.josm.data.osm.Relation} in a {@link org.openstreetmap.josm.data.osm.history.History}. 014 * 015 * <ul> 016 * <li>on the left, it displays the list of relation members for the version at {@link PointInTimeType#REFERENCE_POINT_IN_TIME}</li> 017 * <li>on the right, it displays the list of relation members for the version at {@link PointInTimeType#CURRENT_POINT_IN_TIME}</li> 018 * </ul> 019 * 020 */ 021public class RelationMemberListViewer extends HistoryViewerPanel { 022 023 protected class MemberModelChanged implements TableModelListener { 024 private final JTable table; 025 026 protected MemberModelChanged(JTable table) { 027 this.table = table; 028 } 029 030 @Override 031 public void tableChanged(TableModelEvent e) { 032 Rectangle rect = table.getCellRect(((DiffTableModel)e.getSource()).getFirstChange(), 0, true); 033 table.scrollRectToVisible(rect); 034 } 035 } 036 037 protected JTable buildReferenceTable() { 038 JTable table = new JTable( 039 model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME), 040 new RelationMemberTableColumnModel() 041 ); 042 table.setName("table.referencememberlisttable"); 043 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 044 selectionSynchronizer.participateInSynchronizedSelection(table.getSelectionModel()); 045 table.getModel().addTableModelListener(new MemberModelChanged(table)); 046 return table; 047 } 048 049 protected JTable buildCurrentTable() { 050 JTable table = new JTable( 051 model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME), 052 new RelationMemberTableColumnModel() 053 ); 054 table.setName("table.currentmemberlisttable"); 055 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 056 selectionSynchronizer.participateInSynchronizedSelection(table.getSelectionModel()); 057 table.getModel().addTableModelListener(new MemberModelChanged(table)); 058 return table; 059 } 060 061 /** 062 * Constructs a new {@code RelationMemberListViewer}. 063 * @param model The history browsing model 064 */ 065 public RelationMemberListViewer(HistoryBrowserModel model) { 066 super(model); 067 } 068}