001package jmri.jmrit.operations.locations.gui; 002 003import java.awt.Color; 004import java.beans.PropertyChangeEvent; 005 006import javax.swing.JTable; 007import javax.swing.SwingUtilities; 008 009import jmri.jmrit.operations.locations.Location; 010import jmri.jmrit.operations.locations.Track; 011import jmri.jmrit.operations.locations.schedules.Schedule; 012import jmri.jmrit.operations.setup.Control; 013 014import org.slf4j.Logger; 015import org.slf4j.LoggerFactory; 016 017/** 018 * Table Model for edit of spurs used by operations 019 * 020 * @author Daniel Boudreau Copyright (C) 2008 021 */ 022public class SpurTableModel extends TrackTableModel { 023 024 public SpurTableModel() { 025 super(); 026 } 027 028 public void initTable(JTable table, Location location) { 029 super.initTable(table); 030 super.initTable(table, location, Track.SPUR); 031 } 032 033 @Override 034 protected void editTrack(int row) { 035 log.debug("Edit spur"); 036 if (tef != null) { 037 tef.dispose(); 038 } 039 // use invokeLater so new window appears on top 040 SwingUtilities.invokeLater(() -> { 041 Track spur = _tracksList.get(row); 042 tef = new SpurEditFrame(spur); 043 }); 044 } 045 046 @Override 047 public String getColumnName(int col) { 048 switch (col) { 049 case NAME_COLUMN: 050 return Bundle.getMessage("SpurName"); 051 default: 052 return super.getColumnName(col); 053 } 054 } 055 056 @Override 057 protected Color getForegroundColor(int row) { 058 Track spur = _tracksList.get(row); 059 if (!spur.checkScheduleValid().equals(Schedule.SCHEDULE_OKAY)) { 060 return Color.red; 061 } 062 return super.getForegroundColor(row); 063 } 064 065 // this table listens for changes to a location and it's spurs 066 @Override 067 public void propertyChange(PropertyChangeEvent e) { 068 if (Control.SHOW_PROPERTY) { 069 log.debug("Property change: ({}) old: ({}) new: ({})", e.getPropertyName(), e.getOldValue(), e 070 .getNewValue()); 071 } 072 super.propertyChange(e); 073 if (e.getSource().getClass().equals(Track.class)) { 074 Track track = ((Track) e.getSource()); 075 if (track.isSpur()) { 076 int row = _tracksList.indexOf(track); 077 if (Control.SHOW_PROPERTY) { 078 log.debug("Update spur table row: {} track: {}", row, track.getName()); 079 } 080 if (row >= 0) { 081 fireTableRowsUpdated(row, row); 082 } 083 } 084 } 085 } 086 087 private static final Logger log = LoggerFactory.getLogger(SpurTableModel.class); 088}