001package jmri.jmrit.throttle;
002
003import java.util.*;
004
005import javax.swing.table.AbstractTableModel;
006
007import jmri.*;
008
009
010/**
011 * A TableModel to display active Throttles in a summary table
012 * (see ThrottlesListPanel)
013 *
014 * @author Lionel Jeanson - 2011
015 *
016 */
017
018public class ThrottlesTableModel extends AbstractTableModel implements java.beans.PropertyChangeListener, ConsistListListener{
019    
020    // The JMRI Swing throttles manager
021    private final ThrottleControllersUIContainersManager throttleFrameManager = InstanceManager.getDefault(ThrottleFrameManager.class);
022
023    @Override
024    public int getRowCount() {
025        int max = 0;
026        Iterator<ThrottleControllersUIContainer> twi = throttleFrameManager.iterator();
027        while (twi.hasNext()) {
028            max = Math.max(max, twi.next().getNbThrottlesControllers());
029        }
030        return max;
031    }
032
033    @Override
034    public int getColumnCount() {
035        return throttleFrameManager.getNbThrottleControllersContainers();        
036    }
037
038    @Override
039    public ThrottleControllerUI getValueAt(int row_tf, int col_tw) {
040        ThrottleControllersUIContainer tw = throttleFrameManager.getThrottleControllersContainerAt(col_tw);
041        if (tw == null) {
042            return null;
043        }
044        //log.debug("{} selected", tw.getThrottleFrameAt(row_tf).getTitle());
045        return tw.getThrottleControllerAt(row_tf);
046    }
047    
048    public void moveThrottleController(ThrottleControllerUI tf, int row_tf, int col_tw ) {
049        tf.getThrottleControllersContainer().removeThrottleController(tf);
050        tf.setThrottleControllersContainer(throttleFrameManager.getThrottleControllersContainerAt(col_tw));
051        throttleFrameManager.getThrottleControllersContainerAt(col_tw).addThrottleControllerAt(tf, row_tf);        
052        fireTableStructureChanged();
053    }
054    
055    public ThrottleControllersUIContainer getThrottleControllersContainerAt( int col_tw) {
056        return throttleFrameManager.getThrottleControllersContainerAt(col_tw);
057    }
058
059    @Override
060    public void propertyChange(java.beans.PropertyChangeEvent e) {
061        if ((e.getPropertyName().equals(Throttle.SPEEDSETTING)) ||
062                (e.getPropertyName().equals(Throttle.SPEEDSTEPS)) ||
063                (e.getPropertyName().equals(Throttle.ISFORWARD))) {
064            fireTableDataChanged();
065        }
066        if (e.getPropertyName().equals("ThrottleFrameChanged")) {
067            fireTableDataChanged();
068        } else if (e.getPropertyName().startsWith("ThrottleFrame")) {
069            fireTableStructureChanged();
070        }
071    }
072
073    @Override
074    public void notifyConsistListChanged() {
075        fireTableDataChanged();
076    }
077
078}