43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# To make one selection of a SensorGroup a "none of the above" choice
|
|
#
|
|
# SensorGroups make sure that only one item is ACTIVE, but it's possible
|
|
# for none to be. If you have panel levers with physical sensors for LEFT
|
|
# and RIGHT, use one of these to get a NONE sensor.
|
|
#
|
|
# Ideally, this would get the list of sensors from the sensor group itself,
|
|
# but that's surprisingly hard.
|
|
#
|
|
# Author: Bob Jacobsen, copyright 2017
|
|
# Part of the JMRI distribution
|
|
|
|
import jmri
|
|
import java
|
|
import java.beans
|
|
|
|
# Define the listener.
|
|
class SensorGroupAutoItem(java.beans.PropertyChangeListener):
|
|
def set(self, defaultName, groupList) :
|
|
self.default = sensors.getSensor(defaultName)
|
|
self.groupNames = groupList
|
|
# process fake event to set the initial state
|
|
self.propertyChange(java.beans.PropertyChangeEvent(sensors.getSensor(self.groupNames[0]), "KnownState", 0, 0))
|
|
# set up listeners
|
|
self.default.addPropertyChangeListener(self)
|
|
for name in self.groupNames :
|
|
sensors.getSensor(name).addPropertyChangeListener(self)
|
|
return
|
|
def propertyChange(self, event):
|
|
# check for any active
|
|
for name in self.groupNames :
|
|
if (sensors.getSensor(name).knownState == ACTIVE) :
|
|
self.default.state = INACTIVE
|
|
return
|
|
self.default.state = ACTIVE
|
|
return
|
|
|
|
# Example of use - add lines like the following
|
|
# that includes system or user names for the default sensor and
|
|
# the rest of the SensorGroup. These must already exist.
|
|
# SensorGroupAutoItem().set("IS100",["IS101", "IS102"])
|
|
|