62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
# Sample script showing how to listen for a select set of trains,
|
|
# and if they reset change the row color for the train in the
|
|
# Trains window. Use as a startup script. Adjust the train names
|
|
# and the desired color row color when train is reset.
|
|
#
|
|
# Author: Bob Jacobsen, copyright 2004, 2024
|
|
# Author: Daniel Boudreau, copyright 2016
|
|
# Part of the JMRI distribution
|
|
#
|
|
|
|
import java
|
|
import java.beans
|
|
import java.beans.PropertyChangeListener as PropertyChangeListener
|
|
import jmri
|
|
|
|
class ColorResetTrains(jmri.jmrit.automat.AbstractAutomaton) :
|
|
def init(self):
|
|
|
|
# enter the names of the trains to be monitored
|
|
self.trainNames = ["trainName1", "trainName2", "trainName3"]
|
|
|
|
# the reset row color desired, valid colors:
|
|
# Black, Red, Pink, Orange, Yellow, Green, Magnenta, Cyan, Blue, Gray
|
|
ColorResetTrains.resetColor = "Orange"
|
|
|
|
# get the train manager
|
|
self.trainManager = jmri.InstanceManager.getDefault(jmri.jmrit.operations.trains.TrainManager)
|
|
count = 0
|
|
|
|
for name in self.trainNames:
|
|
train = self.trainManager.getTrainByName(name)
|
|
if (train == None):
|
|
print ('Could not find train name: {}'.format(name))
|
|
else:
|
|
print ('Listen for train: {}, {}'.format(train.getName(), train.getDescription()))
|
|
if (train.getStatusCode() == jmri.jmrit.operations.trains.Train.CODE_TRAIN_RESET):
|
|
train.setTableRowColorName(ColorResetTrains.resetColor)
|
|
train.removePropertyChangeListener(MyListener())
|
|
train.addPropertyChangeListener(MyListener())
|
|
count = count + 1
|
|
|
|
print ('Monitoring {} trains'.format(count))
|
|
return
|
|
|
|
def handle(self):
|
|
return False # all done, don't repeat again
|
|
|
|
class MyListener(PropertyChangeListener):
|
|
def propertyChange(self, event):
|
|
train = event.source
|
|
print (' ') # add a line between updates to make it easier to read
|
|
print ('Train name: {}'.format(train.getName()))
|
|
print ('Train id: {}'.format(train.getId()))
|
|
print ('Train status: {}'.format(train.getStatus()))
|
|
print ('Change: {} from: {} to: {}'.format(event.propertyName, event.oldValue, event.newValue))
|
|
|
|
if (train.getStatusCode() == jmri.jmrit.operations.trains.Train.CODE_TRAIN_RESET):
|
|
print ('Train ({}) was reset!'.format(train.getName()))
|
|
train.setTableRowColorName(ColorResetTrains.resetColor)
|
|
|
|
ColorResetTrains().start() # create one of these, and start it running
|