72 lines
2.1 KiB
Python
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()
|