Files
2026-06-17 14:00:51 +02:00

72 lines
2.1 KiB
Python

# Map Turnout commands from one interface to another
#
# Author: Luca Dentella
# From: https://github.com/lucadentella/jmri-cmdmapper
import java
import java.beans
import java.awt
import javax.swing
import jmri
# CmdMapper class, listens for changes with Loconet turnouts
class CmdMapper(java.beans.PropertyChangeListener):
def propertyChange(self, event):
if(event.propertyName == "CommandedState"):
targetTurnoutName = 'D' + event.source.systemName[1:]
print "Received commanded state " + str(event.newValue) + " for turnout " + event.source.systemName
print "Mapping the command to target turnout: " + targetTurnoutName
targetTurnout = turnouts.getBySystemName(targetTurnoutName)
if(targetTurnout is not None):
targetTurnout.commandedState = event.newValue
print "Target turnout status updated :)"
else:
print "Unable to find target turnout :("
print
# create cmdMapper instance
cmdMapper = CmdMapper()
# button events (onclick)
def startMapping(event):
for turnout in turnouts.getNamedBeanSet():
turnoutSystemName = turnout.getSystemName()
turnoutPrefix = turnoutSystemName[0]
if(turnoutPrefix == 'L'):
turnout.addPropertyChangeListener(cmdMapper)
print turnoutSystemName + " linked to CmdMapper"
def stopMapping(event):
for turnout in turnouts.getNamedBeanSet():
turnoutSystemName = turnout.getSystemName()
turnoutPrefix = turnoutSystemName[0]
if(turnoutPrefix == 'L'):
turnout.removePropertyChangeListener(cmdMapper)
print turnoutSystemName + " unlinked from CmdMapper"
# Create GUI with two buttons to start/stop command mapping
startButton = javax.swing.JButton("Start command mapping")
startButton.actionPerformed = startMapping
stopButton = javax.swing.JButton("Stop command mapping")
stopButton.actionPerformed = stopMapping
f = javax.swing.JFrame("CmdMapper")
f.contentPane.setLayout(java.awt.FlowLayout())
f.contentPane.add(startButton)
f.contentPane.add(stopButton)
f.pack()
f.show()