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    }