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 }