001package jmri.jmrit.beantable.routetable;
002
003import javax.swing.table.AbstractTableModel;
004import java.beans.PropertyChangeListener;
005
006/**
007 * Base table model for selecting outputs.
008 *
009 * Split from {@link jmri.jmrit.beantable.RouteTableAction}
010 *
011 * @author Dave Duchamp Copyright (C) 2004
012 * @author Bob Jacobsen Copyright (C) 2007
013 * @author Simon Reader Copyright (C) 2008
014 * @author Pete Cressman Copyright (C) 2009
015 * @author Egbert Broerse Copyright (C) 2016
016 * @author Paul Bender Copyright (C) 2020
017 */
018abstract class RouteOutputModel extends AbstractTableModel implements PropertyChangeListener {
019
020    @Override
021    public Class<?> getColumnClass(int c) {
022        if (c == INCLUDE_COLUMN) {
023            return Boolean.class;
024        } else {
025            return String.class;
026        }
027    }
028
029    @Override
030    public void propertyChange(java.beans.PropertyChangeEvent e) {
031        if (jmri.Manager.PROPERTY_LENGTH.equals(e.getPropertyName())) {
032            // a new NamedBean is available in the manager
033            fireTableDataChanged();
034        }
035    }
036
037    protected abstract void dispose();
038
039    @Override
040    public String getColumnName(int c) {
041        return RouteAddFrame.COLUMN_NAMES[c];
042    }
043
044    @Override
045    public int getColumnCount() {
046        return 4;
047    }
048
049    @Override
050    public boolean isCellEditable(int r, int c) {
051        return ((c == INCLUDE_COLUMN) || (c == STATE_COLUMN));
052    }
053
054    static final int SNAME_COLUMN = 0;
055    static final int UNAME_COLUMN = 1;
056    static final int INCLUDE_COLUMN = 2;
057    static final int STATE_COLUMN = 3;
058
059}