Files
JIMRI/jython/operations/OperationsResetTrainColor.py
T
2026-06-17 14:00:51 +02:00

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