100 lines
3.5 KiB
Python
100 lines
3.5 KiB
Python
#
|
|
# Find and enable/disable CMRI card polling, interactive
|
|
#
|
|
# only handles 1st CMRI connection: get(0) should be iterated over the full list
|
|
#
|
|
# Author: Ken Cameron, copyright 2009
|
|
# Part of the JMRI distribution
|
|
|
|
import java
|
|
import java.awt
|
|
import jmri
|
|
import javax.swing
|
|
|
|
# setup interface to manage CMRI nodes
|
|
class CmriNodeTool(jmri.jmrit.automat.AbstractAutomaton) :
|
|
nodeList = []
|
|
nodeAddrList = []
|
|
checkYList = []
|
|
scriptFrame = None
|
|
maxNodeAddr = 128
|
|
|
|
def init(self) :
|
|
#print "init()"
|
|
i = 0
|
|
while i < self.maxNodeAddr :
|
|
x = (i * 1000) + 1
|
|
txt = "CT" + str(x)
|
|
#print "looking for node " + i.toString() + " using name " + txt
|
|
memo = jmri.InstanceManager.getList(jmri.jmrix.cmri.CMRISystemConnectionMemo).get(0)
|
|
node = memo.getNodeFromSystemName(txt, memo.getTrafficController())
|
|
if (node != None) :
|
|
print "found node for " + txt
|
|
self.nodeList.append(node)
|
|
self.nodeAddrList.append(i)
|
|
i = i + 1
|
|
return
|
|
|
|
# handle the checkbox
|
|
# the label gives the index for each board in the array
|
|
def whenCheckbox(self, event) :
|
|
ptr = event.getSource()
|
|
if (ptr.isSelected() == 1) :
|
|
self.nodeList[int(ptr.getLabel())].setSensorsActive(True)
|
|
else :
|
|
self.nodeList[int(ptr.getLabel())].setSensorsActive(False)
|
|
return
|
|
|
|
def setup(self) :
|
|
self.scriptFrame = javax.swing.JFrame("CMRI Node Controls")
|
|
self.scriptFrame.contentPane.setLayout(javax.swing.BoxLayout(self.scriptFrame.contentPane, javax.swing.BoxLayout.Y_AXIS))
|
|
gLayout = java.awt.GridBagLayout()
|
|
gConstraints = java.awt.GridBagConstraints()
|
|
pane2 = javax.swing.JPanel()
|
|
pane2Border = javax.swing.BorderFactory.createEtchedBorder()
|
|
pane2Titled = javax.swing.BorderFactory.createTitledBorder(pane2Border, "CMRI Node Polling")
|
|
pane2.setBorder(pane2Titled)
|
|
pane2.setLayout(gLayout)
|
|
gConstraints.gridx = 0
|
|
gConstraints.gridy = 0
|
|
gConstraints.gridwidth = 1
|
|
gConstraints.gridheight = 1
|
|
gConstraints.ipadx = 12
|
|
gConstraints.ipady = 3
|
|
gConstraints.insets = java.awt.Insets(3, 3, 3, 3)
|
|
|
|
pane2.add(javax.swing.JLabel("Node\nAddr"), gConstraints)
|
|
gConstraints.gridx = gConstraints.gridx + 1
|
|
pane2.add(javax.swing.JLabel("Polling\nEnabled"), gConstraints)
|
|
gConstraints.gridx = 0
|
|
gConstraints.gridy = gConstraints.gridy + 1
|
|
|
|
i = 0
|
|
while i < len(self.nodeAddrList) :
|
|
pane2.add(javax.swing.JLabel(str(self.nodeAddrList[i])), gConstraints)
|
|
gConstraints.gridx = gConstraints.gridx + 1
|
|
box = javax.swing.JCheckBox()
|
|
box.setToolTipText("Enable/Disable Polling on node " + str(self.nodeAddrList[i]))
|
|
box.setSelected(self.nodeList[i].getSensorsActive())
|
|
box.actionPerformed = self.whenCheckbox
|
|
box.setLabel(str(i))
|
|
pane2.add(box, gConstraints)
|
|
gConstraints.gridx = 0
|
|
gConstraints.gridy = gConstraints.gridy + 1
|
|
i = i + 1
|
|
|
|
# Put contents in frame and display
|
|
#print "setup: packing frame"
|
|
self.scriptFrame.contentPane.add(pane2)
|
|
self.scriptFrame.pack()
|
|
self.scriptFrame.show()
|
|
return
|
|
|
|
# create one of these
|
|
#print "Creating CMRI Node Tool"
|
|
a = CmriNodeTool()
|
|
#print "Calling init() for CMRI Node Tool"
|
|
a.init()
|
|
#print "Calling setup() for CMRI Node Tool"
|
|
a.setup()
|