100 lines
4.0 KiB
Python
100 lines
4.0 KiB
Python
# Sample script showing how to build and terminate a train. Used in operations.
|
|
# Allows user to select in a window which train to build and terminate.
|
|
#
|
|
# Author: Daniel Boudreau, copyright 2019, 2024
|
|
# Part of the JMRI distribution
|
|
|
|
import jmri
|
|
import javax.swing
|
|
|
|
class buildAndTerminate(jmri.jmrit.automat.AbstractAutomaton) :
|
|
def handle(self):
|
|
# Build and terminate selected train
|
|
getTrain().display("Build and Terminate Train?")
|
|
return False # all done, don't repeat again
|
|
|
|
class getTrain(javax.swing.JFrame) :
|
|
def display(self, msg) :
|
|
print ('Create panel')
|
|
# create panel to allow user to select which train to build and termionate
|
|
b = javax.swing.JButton("Build")
|
|
bat = javax.swing.JButton("Build and Terminate")
|
|
bt = javax.swing.JButton("Terminate")
|
|
|
|
b.actionPerformed = self.whenBuildButtonClicked
|
|
bat.actionPerformed = self.whenBuildAndTerminateButtonClicked
|
|
bt.actionPerformed = self.whenTerminateButtonClicked
|
|
|
|
self.tm = jmri.InstanceManager.getDefault(jmri.jmrit.operations.trains.TrainManager)
|
|
self.combobox = self.tm.getTrainComboBox()
|
|
|
|
# create a frame to hold the button, put button in it, and display
|
|
self.contentPane.setLayout(javax.swing.BoxLayout(self.contentPane, javax.swing.BoxLayout.Y_AXIS))
|
|
self.contentPane.add(javax.swing.JLabel("Select Train"))
|
|
self.contentPane.add(self.combobox)
|
|
panel = javax.swing.JPanel()
|
|
panel.setLayout(javax.swing.BoxLayout(panel, javax.swing.BoxLayout.X_AXIS))
|
|
panel.add(b)
|
|
panel.add(bat)
|
|
panel.add(bt)
|
|
|
|
self.contentPane.add(panel)
|
|
self.pack()
|
|
self.setSize(400, self.getHeight())
|
|
self.setLocation(500,500)
|
|
self.setTitle(msg)
|
|
self.show()
|
|
|
|
def whenBuildAndTerminateButtonClicked(self, event) :
|
|
train = self.combobox.getSelectedItem()
|
|
if (train != None):
|
|
trainName = train.getName()
|
|
print ('Build and terminate train ({})'.format(trainName))
|
|
# Build train
|
|
train.build()
|
|
built = train.isBuilt()
|
|
train.setBuildEnabled(False) # deselect build option (Checkbox in Trains window)
|
|
if (built == True):
|
|
print ('Train ({}) has been built'.format(trainName))
|
|
|
|
train.terminate() # now terminate the train
|
|
print ('Train ({}) has been terminated'.format(trainName))
|
|
else:
|
|
print ('Train ({}) build failed'.format(trainName))
|
|
else:
|
|
print ('Need to select a train')
|
|
return False # all done, don't repeat again
|
|
|
|
def whenBuildButtonClicked(self, event) :
|
|
train = self.combobox.getSelectedItem()
|
|
if (train != None):
|
|
trainName = train.getName()
|
|
print ('Build train ({})'.format(trainName))
|
|
# Build train
|
|
train.build()
|
|
built = train.isBuilt()
|
|
if (built == True):
|
|
print ('Train ({}) has been built'.format(trainName))
|
|
else:
|
|
print ('Train ({}) build failed'.format(trainName))
|
|
else:
|
|
print ('Need to select a train to build')
|
|
return False # all done, don't repeat again
|
|
|
|
def whenTerminateButtonClicked(self, event) :
|
|
train = self.combobox.getSelectedItem()
|
|
if (train != None):
|
|
trainName = train.getName()
|
|
print ('Terminate train ({})'.format(trainName))
|
|
built = train.isBuilt()
|
|
if (built == True):
|
|
train.terminate() # now terminate the train
|
|
print ('Train ({}) has been terminated'.format(trainName))
|
|
else:
|
|
print ('Train ({}) not built!'.format(trainName))
|
|
else:
|
|
print ('Need to select a train to terminate')
|
|
return False # all done, don't repeat again
|
|
|
|
buildAndTerminate().start() # create one of these, and start it running
|