001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.history; 003 004 import java.util.ArrayList; 005 006 import javax.swing.DefaultListSelectionModel; 007 import javax.swing.ListSelectionModel; 008 import javax.swing.event.ListSelectionEvent; 009 import javax.swing.event.ListSelectionListener; 010 011 public class SelectionSynchronizer implements ListSelectionListener { 012 013 private ArrayList<ListSelectionModel> participants; 014 015 public SelectionSynchronizer() { 016 participants = new ArrayList<ListSelectionModel>(); 017 } 018 019 public void participateInSynchronizedSelection(ListSelectionModel model) { 020 if (model == null) 021 return; 022 if (participants.contains(model)) 023 return; 024 participants.add(model); 025 model.addListSelectionListener(this); 026 } 027 028 public void valueChanged(ListSelectionEvent e) { 029 DefaultListSelectionModel referenceModel = (DefaultListSelectionModel)e.getSource(); 030 int i = referenceModel.getMinSelectionIndex(); 031 for (ListSelectionModel model : participants) { 032 if (model == e.getSource()) { 033 continue; 034 } 035 model.setSelectionInterval(i,i); 036 } 037 } 038 }