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 static 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 @Override 038 protected JTable buildReferenceTable() { 039 JTable table = new JTable( 040 model.getRelationMemberTableModel(PointInTimeType.REFERENCE_POINT_IN_TIME), 041 new RelationMemberTableColumnModel() 042 ); 043 table.setName("table.referencememberlisttable"); 044 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 045 selectionSynchronizer.participateInSynchronizedSelection(table.getSelectionModel()); 046 table.getModel().addTableModelListener(new MemberModelChanged(table)); 047 return table; 048 } 049 050 @Override 051 protected JTable buildCurrentTable() { 052 JTable table = new JTable( 053 model.getRelationMemberTableModel(PointInTimeType.CURRENT_POINT_IN_TIME), 054 new RelationMemberTableColumnModel() 055 ); 056 table.setName("table.currentmemberlisttable"); 057 table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 058 selectionSynchronizer.participateInSynchronizedSelection(table.getSelectionModel()); 059 table.getModel().addTableModelListener(new MemberModelChanged(table)); 060 return table; 061 } 062 063 /** 064 * Constructs a new {@code RelationMemberListViewer}. 065 * @param model The history browsing model 066 */ 067 public RelationMemberListViewer(HistoryBrowserModel model) { 068 super(model); 069 } 070}