This folder contains Jynstruments sorted by the place they extend.


***********************
* What's a Jynstrument?
***********************
A Jynstrument is a bundle of Jython code and other resources packaged in a a .jyn folder.

They're intended to extend the UI of JMRI and to be easily customizable by advanced end users without modifying the Java JMRI code.

For example a XYZ Jynstrument would look like this:
XYZ.jyn folder containing a XYZ.py file in which is defined a XYZ class derived from the jmri.jmrit.jython.Jynstrument class.
	
The Light.jyn Jynstrument is a good starting point, it simply adds a control to Function 0 for a Throttle.

To use it simply drag'n drop the Light.jyn folder into a JMRI Throttle control window.



****************************
* How to write a Jynstrument?
*****************************
Once again the Light.jyn sample is a good starting point.

Your Jynstrument must inherit from the Jynstrument class like that:

import jmri.jmrit.jython.Jynstrument as Jynstrument
class Test(Jynstrument):

The Jynstrument class itself inherits from javax.swing.JPanel .

Your Jynstrument *must* define the following methods:

    def getExpectedContextClassName(self):   
		Must returns a string indicating the class that shall be expected as context. (java.lang.Object will open all doors)
			
    def init(self):
		This method will be called by instrumented class once all Jynstrument has been instantiated and internally initiated.
	
    def quit(self):
		This method will be called when the Jynstrument is quitting (particularly to unregister from used listeners)
		
		
Your Jynstrument will have the following methods available:
	self.getContext() : Access a JMRI object instance, it is set by the Jynstrumented code, and usually is of the class defined by getExpectedContextClassName(self).

	self.getFolder() : Returns a string containing the folder from where the Jython was loaded (useful to load resources files)
	
		
		
********************************************
* How to get some Java code Jynstrumentable?
********************************************
Please see class jmri.jmrit.throttle.ThrottleFrame code and search for #JYNSTRUMENT#, that's where the Light.jyn sample is loaded and executed.
