Initialisation depot

This commit is contained in:
Serge NOEL
2026-06-17 14:00:51 +02:00
commit efdf1683af
33190 changed files with 5907629 additions and 0 deletions
+372
View File
@@ -0,0 +1,372 @@
JMRI is free software; you can redistribute it and/or modify it
under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
JMRI is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of version 2 of the GNU General Public License is
appended below. For more information, see
<http://www.gnu.org/licenses/>.
Linking JMRI or its parts statically or dynamically with other
modules is making a combined work based on this library. Thus, the
terms and conditions of the GNU General Public License 2.0 cover
the whole combination.
As a special exception, the copyright holders of JMRI give you
permission to link JMRI with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on JMRI. If you modify JMRI, you may extend this exception
to your version of JMRI, but you are not obligated to do so. If you do
not wish to do so, delete this exception statement from your version.
-------------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
+30
View File
@@ -0,0 +1,30 @@
# JMRI
Model railroad software
For more information, see [JMRI.org](https://www.jmri.org)
For development information, see [Technical Info](https://www.jmri.org/help/en/html/doc/Technical)
User discussions are on the [JMRI users Groups.io group](https://groups.io/g/jmriusers)
Test:
[![Test release](https://img.shields.io/github/release/JMRI/JMRI.svg)](https://www.jmri.org/download/index.shtml#test-rel)
[![Test release](https://img.shields.io/github/downloads/JMRI/JMRI/latest/total.svg)](https://www.jmri.org/download/index.shtml#test-rel)
Production:
[![Production release](https://img.shields.io/github/downloads/JMRI/JMRI/v5.14/total.svg)](https://www.jmri.org/download/index.shtml#prod-rel)
Total (since 9/2017):
[![Totals since 9/2017](https://img.shields.io/github/downloads/JMRI/JMRI/total.svg)](https://www.jmri.org/download/index.shtml)
Jenkins: [![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=development/builds&subject=Development/Builds)](https://builds.jmri.org/jenkins/job/development/job/builds/)
[![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=development/packages&subject=Development/Packages)](https://builds.jmri.org/jenkins/job/development/job/packages/)
[![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=development/separate-tests&subject=Development/Separate%20Tests)](https://builds.jmri.org/jenkins/job/development/job/separate-tests/)
[![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=website/generate-website&subject=Web%20Site/Generate%20Website)](https://builds.jmri.org/jenkins/job/website/job/generate-website/)
[![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=website/jmri-repository&subject=Web%20Site/JMRI%20repository)](https://builds.jmri.org/jenkins/job/website/job/jmri-repository/)
[![Build Status](https://builds.jmri.org/jenkins/buildStatus/icon?job=website/website-repository&subject=Web%20Site/website%20repository)](https://builds.jmri.org/jenkins/job/website/job/website-repository/)
CI:
![Windows CI Tests](https://github.com/jmri/jmri/workflows/Windows%20CI%20Tests/badge.svg)
![Static Analysis](https://github.com/jmri/jmri/workflows/Static%20Analysis/badge.svg)
![Static Analysis](https://github.com/jmri/jmri/workflows/Run%20Separate%20Tests/badge.svg)
Coveralls: [![Coverage Status](https://coveralls.io/repos/github/JMRI/JMRI/badge.svg?branch=master)](https://coveralls.io/github/JMRI/JMRI?branch=master)
+2
View File
@@ -0,0 +1,2 @@
freeze.store.default.allowStoreUpdate=false
freeze.store.default.allowStoreCreation=false
+49
View File
@@ -0,0 +1,49 @@
# This suppresses known issues (that should still be resolved\)
# from the ArchUnit tests run via jmri.ArchitectureCheck
# Be sure to regex escape all . () [ $ characters, accept differing lines for lambdas, and end with .*
# For checkStandardStreams - exceptions are also in ArchitectureTest#checkStandardStreams
Method <apps\.SystemConsole\.performStackTrace\(\)> gets field <java\.lang\.System\.out>.*
Constructor <apps\.SystemConsole\.<init>\(\)> gets field <java\.lang\.System.out>.*
Constructor <apps\.SystemConsole\.<init>\(\)> gets field <java\.lang\.System.err>.*
Method <apps\.CheckerFrameworkCheck\.test\(\)> gets field <java\.lang\.System\.out>.*
Method <apps\.FindBugsCheck\.test\(\)\> gets field <java\.lang\.System\.out>.*
Method <jmri\.util\.FileUtilSupport\.getPreferencesPath\(\)> gets field <java\.lang\.System\.err>.*
Method <jmri\.util\.com\.rbnb\.UDPOutputStream\.write\(\[B, int, int\)> gets field <java\.lang\.System\.err>.*
# For checkBundleNamesOnlyOnBundleClass
Class <jmri\.jmrit\.symbolicprog\.SymbolicProgBundle> is not assignable to jmri\.Bundle.*
# For checkBundleNames
Class <apps\.ConfigBundle> does not have simple name \'Bundle\'.*
Class <jmri\.web\.servlet\.json\.JsonBundle> does not have simple name \'Bundle\'.*
# For checkJmriPackageAwt
Method <jmri\.ConditionalAction\.getListener\(\)> has return type <java\.awt\.event\.ActionListener>.*
Method <jmri\.ConditionalAction\.setListener\(java\.awt\.event\.ActionListener\)> has parameter of type <java\.awt\.event\.ActionListener>.*
Method <jmri\.Path\.computeDirection\(java\.awt\.geom\.Point2D, java\.awt\.geom\.Point2D\)> has parameter of type <java\.awt\.geom\.Point2D>.*
Method <jmri\.UserPreferencesManager\.getScreen\(\)> has return type <java\.awt\.Dimension>.*
Method <jmri\.UserPreferencesManager\.getWindowLocation\(java\.lang\.String\)> has return type <java\.awt\.Point>.*
Method <jmri\.UserPreferencesManager\.getWindowSize\(java\.lang\.String\)> has return type <java\.awt\.Dimension>.*
Method <jmri\.UserPreferencesManager\.setWindowLocation\(java\.lang\.String, java\.awt\.Point\)> has parameter of type <java\.awt\.Point>.*
Method <jmri\.UserPreferencesManager\.setWindowSize\(java\.lang\.String, java\.awt\.Dimension\)> has parameter of type <java\.awt\.Dimension>.*
Method <jmri\.UserPreferencesManager\.showErrorMessage\(java\.awt\.Component, java\.lang\.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, boolean, boolean\)> has parameter of type <java\.awt\.Component>.*
Method <jmri\.UserPreferencesManager\.showInfoMessage\(java\.awt\.Component, java\.lang.String, java\.lang\.String, java\.lang\.String, java\.lang\.String\)> has parameter of type <java.awt.Component>.*
Method <jmri\.UserPreferencesManager\.showInfoMessage\(java\.awt\.Component, java\.lang.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, boolean, boolean\)> has parameter of type <java.awt.Component>.*
Method <jmri\.UserPreferencesManager\.showWarningMessage\(java\.awt\.Component, java\.lang.String, java\.lang\.String, java\.lang\.String, java\.lang\.String, boolean, boolean\)> has parameter of type <java.awt.Component>.*
# For checkJmriPackageJmrix
# For checkJmriPackageSwing
Interface <jmri\.CatalogTree> extends interface <javax\.swing\.tree\.TreeModel>.*
Method <jmri\.CatalogTreeNode\.children\(\)> has generic return type <java\.util\.Enumeration<javax\.swing\.tree\.TreeNode>\>.*
Method <jmri\.ConditionalAction\.getTimer\(\)> has return type <javax\.swing\.Timer>.*
Method <jmri\.ConditionalAction\.setTimer\(javax\.swing\.Timer\)> has parameter of type <javax\.swing\.Timer>.*
Method <jmri\.JmriPlugin\.start\(javax\.swing\.JFrame, javax\.swing\.JMenuBar\)> has parameter of type <javax\.swing\.JFrame>.*
Method <jmri\.JmriPlugin\.start\(javax\.swing\.JFrame, javax\.swing\.JMenuBar\)> has parameter of type <javax\.swing\.JMenuBar>.*
# For checkJmriPackageJdom
Method <jmri\.BasicRosterEntry\.store\(\)> has return type <org\.jdom2\.Element>.*
Method <jmri\.IdTag\.load\(org\.jdom2\.Element\)> has parameter of type <org\.jdom2\.Element>.*
Method <jmri\.IdTag\.store\(boolean\)> has return type <org\.jdom2\.Element>.*
@@ -0,0 +1,45 @@
Class <jmri.jmris.AbstractServerPreferences$AbstractServerPreferencesXml> extends class <jmri.jmrit.XmlFile> in (AbstractServerPreferences.java:0)
Constructor <jmri.jmris.AbstractOperationsServer$TrainListener.<init>(jmri.jmris.AbstractOperationsServer, java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainById(java.lang.String)> in (AbstractOperationsServer.java:321)
Constructor <jmri.jmris.AbstractOperationsServer.<init>()> calls method <jmri.jmrit.operations.locations.LocationManager.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:40)
Constructor <jmri.jmris.AbstractOperationsServer.<init>()> calls method <jmri.jmrit.operations.trains.TrainManager.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:38)
Constructor <jmri.jmris.AbstractServerPreferences$AbstractServerPreferencesXml.<init>()> calls constructor <jmri.jmrit.XmlFile.<init>()> in (AbstractServerPreferences.java:140)
Field <jmri.jmris.AbstractOperationsServer$TrainListener.train> has type <jmri.jmrit.operations.trains.Train> in (AbstractOperationsServer.java:0)
Field <jmri.jmris.AbstractOperationsServer.lm> has type <jmri.jmrit.operations.locations.LocationManager> in (AbstractOperationsServer.java:0)
Field <jmri.jmris.AbstractOperationsServer.tm> has type <jmri.jmrit.operations.trains.TrainManager> in (AbstractOperationsServer.java:0)
Method <jmri.jmris.AbstractOperationsServer$TrainListener.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.operations.trains.Train.getId()> in (AbstractOperationsServer.java:332)
Method <jmri.jmris.AbstractOperationsServer$TrainListener.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.operations.trains.Train.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:331)
Method <jmri.jmris.AbstractOperationsServer.addPropertyChangeListeners()> calls method <jmri.jmrit.operations.trains.Train.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:256)
Method <jmri.jmris.AbstractOperationsServer.addPropertyChangeListeners()> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainsByNameList()> in (AbstractOperationsServer.java:254)
Method <jmri.jmris.AbstractOperationsServer.addTrainToList(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:273)
Method <jmri.jmris.AbstractOperationsServer.addTrainToList(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainById(java.lang.String)> in (AbstractOperationsServer.java:273)
Method <jmri.jmris.AbstractOperationsServer.constructTrainCaboose(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getCabooseRoadAndNumber()> in (AbstractOperationsServer.java:205)
Method <jmri.jmris.AbstractOperationsServer.constructTrainCaboose(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:203)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLeadLoco(java.lang.String)> calls method <jmri.jmrit.operations.rollingstock.engines.Engine.toString()> in (AbstractOperationsServer.java:186)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLeadLoco(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getLeadEngine()> in (AbstractOperationsServer.java:184)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLeadLoco(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:182)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLength(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getTrainLength()> in (AbstractOperationsServer.java:132)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLength(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:130)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLocation(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getCurrentLocationName()> in (AbstractOperationsServer.java:77)
Method <jmri.jmris.AbstractOperationsServer.constructTrainLocation(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:75)
Method <jmri.jmris.AbstractOperationsServer.constructTrainNumberOfCars(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getNumberCarsInTrain()> in (AbstractOperationsServer.java:166)
Method <jmri.jmris.AbstractOperationsServer.constructTrainNumberOfCars(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:164)
Method <jmri.jmris.AbstractOperationsServer.constructTrainStatus(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getStatus()> in (AbstractOperationsServer.java:60)
Method <jmri.jmris.AbstractOperationsServer.constructTrainStatus(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:58)
Method <jmri.jmris.AbstractOperationsServer.constructTrainWeight(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getTrainWeight()> in (AbstractOperationsServer.java:149)
Method <jmri.jmris.AbstractOperationsServer.constructTrainWeight(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:147)
Method <jmri.jmris.AbstractOperationsServer.dispose()> calls method <jmri.jmrit.operations.locations.LocationManager.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:294)
Method <jmri.jmris.AbstractOperationsServer.dispose()> calls method <jmri.jmrit.operations.trains.Train.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:297)
Method <jmri.jmris.AbstractOperationsServer.dispose()> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainById(java.lang.String)> in (AbstractOperationsServer.java:297)
Method <jmri.jmris.AbstractOperationsServer.dispose()> calls method <jmri.jmrit.operations.trains.TrainManager.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:290)
Method <jmri.jmris.AbstractOperationsServer.removePropertyChangeListeners()> calls method <jmri.jmrit.operations.trains.Train.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:263)
Method <jmri.jmris.AbstractOperationsServer.removePropertyChangeListeners()> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainsByNameList()> in (AbstractOperationsServer.java:261)
Method <jmri.jmris.AbstractOperationsServer.removeTrainFromList(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (AbstractOperationsServer.java:279)
Method <jmri.jmris.AbstractOperationsServer.removeTrainFromList(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainById(java.lang.String)> in (AbstractOperationsServer.java:279)
Method <jmri.jmris.AbstractOperationsServer.sendFullStatus(jmri.jmrit.operations.trains.Train)> has parameter of type <jmri.jmrit.operations.trains.Train> in (AbstractOperationsServer.java:0)
Method <jmri.jmris.AbstractOperationsServer.setTrainLocation(java.lang.String, java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getCurrentLocationName()> in (AbstractOperationsServer.java:102)
Method <jmri.jmris.AbstractOperationsServer.setTrainLocation(java.lang.String, java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.getNextLocationName()> in (AbstractOperationsServer.java:103)
Method <jmri.jmris.AbstractOperationsServer.setTrainLocation(java.lang.String, java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.move(java.lang.String)> in (AbstractOperationsServer.java:97)
Method <jmri.jmris.AbstractOperationsServer.setTrainLocation(java.lang.String, java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.moveToNextLocation(java.lang.String)> in (AbstractOperationsServer.java:98)
Method <jmri.jmris.AbstractOperationsServer.setTrainLocation(java.lang.String, java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:95)
Method <jmri.jmris.AbstractOperationsServer.terminateTrain(java.lang.String)> calls method <jmri.jmrit.operations.trains.Train.terminate()> in (AbstractOperationsServer.java:222)
Method <jmri.jmris.AbstractOperationsServer.terminateTrain(java.lang.String)> calls method <jmri.jmrit.operations.trains.TrainManager.getTrainByName(java.lang.String)> in (AbstractOperationsServer.java:220)
@@ -0,0 +1,76 @@
Class <jmri.util.JTextPaneAppender> extends class <org.apache.log4j.AppenderSkeleton> in (JTextPaneAppender.java:0)
Constructor <jmri.util.JLogoutputFrame.<init>()> calls method <org.apache.log4j.Logger.debug(java.lang.Object)> in (JLogoutputFrame.java:76)
Constructor <jmri.util.JLogoutputFrame.<init>()> calls method <org.apache.log4j.Logger.debug(java.lang.Object)> in (JLogoutputFrame.java:80)
Constructor <jmri.util.JTextPaneAppender.<init>()> calls constructor <org.apache.log4j.AppenderSkeleton.<init>()> in (JTextPaneAppender.java:64)
Constructor <jmri.util.JTextPaneAppender.<init>(org.apache.log4j.Layout, java.lang.String, [Lorg.apache.log4j.spi.Filter;, javax.swing.JTextPane)> has parameter of type <org.apache.log4j.Layout> in (JTextPaneAppender.java:0)
Field <jmri.util.JLogoutputFrame.myLayout> has type <org.apache.log4j.Layout> in (JLogoutputFrame.java:0)
Field <jmri.util.JLogoutputFrame.myLog> has type <org.apache.log4j.Logger> in (JLogoutputFrame.java:0)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Level.toString()> in (Log4JTreePane.java:49)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Level.toString()> in (Log4JTreePane.java:50)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getLevel()> in (Log4JTreePane.java:48)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getLevel()> in (Log4JTreePane.java:49)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getLevel()> in (Log4JTreePane.java:50)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getLoggerRepository()> in (Log4JTreePane.java:42)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getName()> in (Log4JTreePane.java:47)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getRootLogger()> in (Log4JTreePane.java:42)
Method <jmri.jmrit.log.Log4JTreePane.initComponents()> calls method <org.apache.log4j.Logger.getRootLogger()> in (Log4JTreePane.java:50)
Method <jmri.util.JLogoutputFrame.createAppender(javax.swing.JTextPane)> calls method <org.apache.log4j.LogManager.getCurrentLoggers()> in (JLogoutputFrame.java:153)
Method <jmri.util.JLogoutputFrame.createAppender(javax.swing.JTextPane)> calls method <org.apache.log4j.LogManager.getRootLogger()> in (JLogoutputFrame.java:167)
Method <jmri.util.JLogoutputFrame.createAppender(javax.swing.JTextPane)> calls method <org.apache.log4j.Logger.addAppender(org.apache.log4j.Appender)> in (JLogoutputFrame.java:161)
Method <jmri.util.JLogoutputFrame.createAppender(javax.swing.JTextPane)> calls method <org.apache.log4j.Logger.addAppender(org.apache.log4j.Appender)> in (JLogoutputFrame.java:167)
Method <jmri.util.JLogoutputFrame.createAppender(javax.swing.JTextPane)> calls method <org.apache.log4j.Logger.getAdditivity()> in (JLogoutputFrame.java:160)
Method <jmri.util.JLogoutputFrame.getLayout()> has return type <org.apache.log4j.Layout> in (JLogoutputFrame.java:0)
Method <jmri.util.JLogoutputFrame.log(org.apache.log4j.Level, java.lang.String)> has parameter of type <org.apache.log4j.Level> in (JLogoutputFrame.java:0)
Method <jmri.util.JLogoutputFrame.setMyPatternLayout(org.apache.log4j.Layout)> has parameter of type <org.apache.log4j.Layout> in (JLogoutputFrame.java:0)
Method <jmri.util.JTextPaneAppender.append(org.apache.log4j.spi.LoggingEvent)> calls method <org.apache.log4j.Layout.format(org.apache.log4j.spi.LoggingEvent)> in (JTextPaneAppender.java:113)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:78)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:79)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:80)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:81)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:82)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:83)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:93)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:94)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:95)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:96)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:97)
Method <jmri.util.JTextPaneAppender.createAttributes()> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:98)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.DEBUG> in (JTextPaneAppender.java:82)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.DEBUG> in (JTextPaneAppender.java:97)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.ERROR> in (JTextPaneAppender.java:79)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.ERROR> in (JTextPaneAppender.java:94)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.FATAL> in (JTextPaneAppender.java:78)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.FATAL> in (JTextPaneAppender.java:93)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.INFO> in (JTextPaneAppender.java:81)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.INFO> in (JTextPaneAppender.java:96)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.TRACE> in (JTextPaneAppender.java:83)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.TRACE> in (JTextPaneAppender.java:98)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.WARN> in (JTextPaneAppender.java:80)
Method <jmri.util.JTextPaneAppender.createAttributes()> gets field <org.apache.log4j.Level.WARN> in (JTextPaneAppender.java:95)
Method <jmri.util.JTextPaneAppender.getColor(org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:177)
Method <jmri.util.JTextPaneAppender.getColor(org.apache.log4j.Level)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Method <jmri.util.JTextPaneAppender.getColorDebug()> gets field <org.apache.log4j.Level.DEBUG> in (JTextPaneAppender.java:270)
Method <jmri.util.JTextPaneAppender.getColorEmerg()> gets field <org.apache.log4j.Level.FATAL> in (JTextPaneAppender.java:198)
Method <jmri.util.JTextPaneAppender.getColorError()> gets field <org.apache.log4j.Level.ERROR> in (JTextPaneAppender.java:216)
Method <jmri.util.JTextPaneAppender.getColorInfo()> gets field <org.apache.log4j.Level.INFO> in (JTextPaneAppender.java:252)
Method <jmri.util.JTextPaneAppender.getColorWarn()> gets field <org.apache.log4j.Level.WARN> in (JTextPaneAppender.java:234)
Method <jmri.util.JTextPaneAppender.getFontName(org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:345)
Method <jmri.util.JTextPaneAppender.getFontName(org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:348)
Method <jmri.util.JTextPaneAppender.getFontName(org.apache.log4j.Level)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Method <jmri.util.JTextPaneAppender.getFontSize(org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:305)
Method <jmri.util.JTextPaneAppender.getFontSize(org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:307)
Method <jmri.util.JTextPaneAppender.getFontSize(org.apache.log4j.Level)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Method <jmri.util.JTextPaneAppender.logIt(java.lang.String, org.apache.log4j.spi.LoggingEvent)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:147)
Method <jmri.util.JTextPaneAppender.setColor(org.apache.log4j.Level, java.awt.Color)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:173)
Method <jmri.util.JTextPaneAppender.setColor(org.apache.log4j.Level, java.awt.Color)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Method <jmri.util.JTextPaneAppender.setColorDebug(java.awt.Color)> gets field <org.apache.log4j.Level.DEBUG> in (JTextPaneAppender.java:261)
Method <jmri.util.JTextPaneAppender.setColorEmerg(java.awt.Color)> gets field <org.apache.log4j.Level.FATAL> in (JTextPaneAppender.java:189)
Method <jmri.util.JTextPaneAppender.setColorError(java.awt.Color)> gets field <org.apache.log4j.Level.ERROR> in (JTextPaneAppender.java:207)
Method <jmri.util.JTextPaneAppender.setColorInfo(java.awt.Color)> gets field <org.apache.log4j.Level.INFO> in (JTextPaneAppender.java:243)
Method <jmri.util.JTextPaneAppender.setColorWarn(java.awt.Color)> gets field <org.apache.log4j.Level.WARN> in (JTextPaneAppender.java:225)
Method <jmri.util.JTextPaneAppender.setFontName(java.lang.String, org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:332)
Method <jmri.util.JTextPaneAppender.setFontName(java.lang.String, org.apache.log4j.Level)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Method <jmri.util.JTextPaneAppender.setFontSize(int, org.apache.log4j.Level)> calls method <org.apache.log4j.Level.toString()> in (JTextPaneAppender.java:292)
Method <jmri.util.JTextPaneAppender.setFontSize(int, org.apache.log4j.Level)> has parameter of type <org.apache.log4j.Level> in (JTextPaneAppender.java:0)
Static Initializer <jmri.util.JLogoutputFrame.<clinit>()> calls constructor <org.apache.log4j.PatternLayout.<init>(java.lang.String)> in (JLogoutputFrame.java:39)
Static Initializer <jmri.util.JLogoutputFrame.<clinit>()> calls method <org.apache.log4j.Logger.getLogger(java.lang.Class)> in (JLogoutputFrame.java:36)
@@ -0,0 +1,344 @@
Class <jmri.util.FileUtilSupport> extends class <jmri.beans.Bean> in (FileUtilSupport.java:0)
Class <jmri.util.JmriJFrame$3> extends class <jmri.implementation.AbstractShutDownTask> in (JmriJFrame.java:0)
Class <jmri.util.JmriJFrame> implements interface <jmri.beans.BeanInterface> in (JmriJFrame.java:0)
Class <jmri.util.NamedBeanExpectedValue> extends class <jmri.beans.Bean> in (NamedBeanExpectedValue.java:0)
Class <jmri.util.docbook.configurexml.RevHistoryXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (RevHistoryXml.java:0)
Class <jmri.util.gui.GuiLafPreferencesManager> extends class <jmri.beans.Bean> in (GuiLafPreferencesManager.java:0)
Class <jmri.util.gui.GuiLafPreferencesManager> implements interface <jmri.spi.PreferencesManager> in (GuiLafPreferencesManager.java:0)
Class <jmri.util.prefs.AbstractPreferencesManager> extends class <jmri.beans.Bean> in (AbstractPreferencesManager.java:0)
Class <jmri.util.prefs.AbstractPreferencesManager> implements interface <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Class <jmri.util.prefs.JmriConfiguration> implements interface <jmri.profile.AuxiliaryConfiguration> in (JmriConfiguration.java:0)
Class <jmri.util.startup.StartupActionModelUtil> extends class <jmri.beans.Bean> in (StartupActionModelUtil.java:0)
Class <jmri.util.startup.configurexml.PerformActionModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformActionModelXml.java:0)
Class <jmri.util.startup.configurexml.PerformFileModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformFileModelXml.java:0)
Class <jmri.util.startup.configurexml.PerformScriptModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformScriptModelXml.java:0)
Class <jmri.util.startup.configurexml.StartupClassMigration> implements interface <jmri.configurexml.ClassMigration> in (StartupClassMigration.java:0)
Class <jmri.util.swing.GuiUtilBase$3> extends class <jmri.jmrit.XmlFile> in (GuiUtilBase.java:0)
Class <jmri.util.zeroconf.ZeroConfPreferences> extends class <jmri.beans.PreferencesBean> in (ZeroConfPreferences.java:0)
Constructor <jmri.util.DnDTableImportExportHandler.<init>([I)> has parameter of type <[I> in (DnDTableImportExportHandler.java:0)
Constructor <jmri.util.FileUtil$Property.<init>(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Constructor <jmri.util.FileUtilSupport.<init>()> calls constructor <jmri.beans.Bean.<init>(boolean)> in (FileUtilSupport.java:89)
Constructor <jmri.util.JmriJFrame$3.<init>(jmri.util.JmriJFrame, java.lang.String)> calls constructor <jmri.implementation.AbstractShutDownTask.<init>(java.lang.String)> in (JmriJFrame.java:964)
Constructor <jmri.util.MenuScroller$MenuScrollerIcon.<init>(java.lang.String, int, [I)> has parameter of type <[I> in (MenuScroller.java:0)
Constructor <jmri.util.NamedBeanExpectedValue.<init>(jmri.NamedBean, java.lang.String, java.lang.Object)> calls constructor <jmri.beans.Bean.<init>()> in (NamedBeanExpectedValue.java:33)
Constructor <jmri.util.docbook.configurexml.RevHistoryXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (RevHistoryXml.java:18)
Constructor <jmri.util.gui.GuiLafPreferencesManager.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (GuiLafPreferencesManager.java:34)
Constructor <jmri.util.prefs.AbstractConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractConfigurationProvider.java:0)
Constructor <jmri.util.prefs.AbstractPreferencesManager.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (AbstractPreferencesManager.java:22)
Constructor <jmri.util.prefs.JmriConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Constructor <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Constructor <jmri.util.startup.StartupActionModelUtil.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (StartupActionModelUtil.java:50)
Constructor <jmri.util.startup.StartupActionsManager.<init>()> calls method <apps.startup.StartupModelFactory.getModelClass()> in (StartupActionsManager.java:47)
Constructor <jmri.util.startup.StartupActionsManager.<init>()> calls method <apps.startup.StartupModelFactory.initialize()> in (StartupActionsManager.java:46)
Constructor <jmri.util.startup.configurexml.PerformActionModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformActionModelXml.java:23)
Constructor <jmri.util.startup.configurexml.PerformFileModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformFileModelXml.java:22)
Constructor <jmri.util.startup.configurexml.PerformScriptModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformScriptModelXml.java:22)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.ManagerComboBox.<init>()> in (BeanSelectCreatePanel.java:38)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.NamedBeanComboBox.<init>(jmri.Manager, jmri.NamedBean, jmri.NamedBean$DisplayOptions)> in (BeanSelectCreatePanel.java:63)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.SystemNameValidator.<init>(javax.swing.JComponent, jmri.Manager)> in (BeanSelectCreatePanel.java:91)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.addItemListener(java.awt.event.ItemListener)> in (BeanSelectCreatePanel.java:92)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:91)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setManagers(java.util.List, jmri.Manager)> in (BeanSelectCreatePanel.java:79)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setManagers(jmri.Manager)> in (BeanSelectCreatePanel.java:84)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setSelectedItem(java.lang.Object)> in (BeanSelectCreatePanel.java:81)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.getItemCount()> in (BeanSelectCreatePanel.java:65)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.setAllowNull(boolean)> in (BeanSelectCreatePanel.java:68)
Constructor <jmri.util.swing.GuiUtilBase$3.<init>()> calls constructor <jmri.jmrit.XmlFile.<init>()> in (GuiUtilBase.java:247)
Constructor <jmri.util.table.JTableToCsvAction.<init>(java.lang.String, javax.swing.JTable, javax.swing.table.TableModel, java.lang.String, [I)> has parameter of type <[I> in (JTableToCsvAction.java:0)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls constructor <jmri.beans.PreferencesBean.<init>(jmri.profile.Profile)> in (ZeroConfPreferences.java:76)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:77)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:78)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:79)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (ZeroConfPreferences.java:0)
Constructor <jmri.util.zeroconf.ZeroConfServiceManager.<init>()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (ZeroConfServiceManager.java:98)
Constructor <jmri.util.zeroconf.ZeroConfServiceManager.<init>()> calls method <jmri.profile.ProfileManager.getDefault()> in (ZeroConfServiceManager.java:98)
Field <jmri.util.DnDTableImportExportHandler._skipColumns> has type <[I> in (DnDTableImportExportHandler.java:0)
Field <jmri.util.FileUtil$Property.key> has type <jmri.profile.Profile> in (FileUtil.java:0)
Field <jmri.util.JmriJFrame.task> has type <jmri.implementation.AbstractShutDownTask> in (JmriJFrame.java:0)
Field <jmri.util.MenuScroller$MenuScrollerIcon.xPoints> has type <[I> in (MenuScroller.java:0)
Field <jmri.util.MenuScroller$MenuScrollerIcon.yPoints> has type <[I> in (MenuScroller.java:0)
Field <jmri.util.StringUtil.HEX_CHARS> has type <[C> in (StringUtil.java:0)
Field <jmri.util.ThreadingPropertyChangeListener$1.$SwitchMap$jmri$util$ThreadingPropertyChangeListener$Thread> has type <[I> in (ThreadingPropertyChangeListener.java:0)
Field <jmri.util.com.rbnb.UDPInputStream.ddata> has type <[B> in (UDPInputStream.java:0)
Field <jmri.util.com.rbnb.UDPOutputStream.buffer> has type <[B> in (UDPOutputStream.java:0)
Field <jmri.util.com.rbnb.UDPOutputStream.outdata> has type <[B> in (UDPOutputStream.java:0)
Field <jmri.util.prefs.AbstractConfigurationProvider.project> has type <jmri.profile.Profile> in (AbstractConfigurationProvider.java:0)
Field <jmri.util.swing.BeanSelectCreatePanel.existingCombo> has type <jmri.swing.NamedBeanComboBox> in (BeanSelectCreatePanel.java:0)
Field <jmri.util.swing.BeanSelectCreatePanel.prefixBox> has type <jmri.swing.ManagerComboBox> in (BeanSelectCreatePanel.java:0)
Field <jmri.util.swing.JmriBeanComboBox$2.$SwitchMap$jmri$util$swing$JmriBeanComboBox$DisplayOptions> has type <[I> in (JmriBeanComboBox.java:0)
Field <jmri.util.swing.SplitButtonColorChooserPanel.setButton> has type <com.alexandriasoftware.swing.JSplitButton> in (SplitButtonColorChooserPanel.java:0)
Field <jmri.util.swing.ValidatedTextField$5.$SwitchMap$jmri$util$swing$ValidatedTextField$FieldType> has type <[I> in (ValidatedTextField.java:0)
Field <jmri.util.table.JTableToCsvAction._excludedCols> has type <[I> in (JTableToCsvAction.java:0)
Field <jmri.util.usb.RailDriverMenuItem.SevenSegment> has type <[B> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.SevenSegmentAlpha> has type <[B> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.activeThrottleFrame> has type <jmri.jmrit.throttle.ThrottleFrame> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.addressPanel> has type <jmri.jmrit.throttle.AddressPanel> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.controlPanel> has type <jmri.jmrit.throttle.ControlPanel> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.functionPanel> has type <jmri.jmrit.throttle.FunctionPanel> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.throttleWindow> has type <jmri.jmrit.throttle.ThrottleWindow> in (RailDriverMenuItem.java:0)
Field <jmri.util.xml.XMLUtil.DEC2HEX> has type <[C> in (XMLUtil.java:0)
Interface <jmri.util.startup.StartupActionFactory> extends interface <jmri.spi.JmriServiceProviderInterface> in (StartupActionFactory.java:0)
Interface <jmri.util.startup.StartupModelFactory> extends interface <jmri.spi.JmriServiceProviderInterface> in (StartupModelFactory.java:0)
Method <jmri.util.CvUtil.addCvDescription(java.lang.String, java.lang.String, java.lang.String)> calls method <jmri.jmrit.symbolicprog.tabbedframe.PaneProgFrame.getShowCvNumbers()> in (CvUtil.java:152)
Method <jmri.util.FileUtil$Property.getKey()> has return type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getAbsoluteFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getExternalFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getFile(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.io.File)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.io.File, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.lang.String, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getProfilePath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getScriptsPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getUserFilesPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.setScriptsPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.setUserFilesPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:401)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:401)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> calls method <com.sun.jna.platform.win32.Shell32Util.getFolderPath(int)> in (FileUtilSupport.java:929)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> calls method <com.sun.jna.platform.win32.Shell32Util.getKnownFolderPath(com.sun.jna.platform.win32.Guid$GUID)> in (FileUtilSupport.java:926)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> gets field <com.sun.jna.platform.win32.KnownFolders.FOLDERID_LocalAppData> in (FileUtilSupport.java:926)
Method <jmri.util.FileUtilSupport.getExternalFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:348)
Method <jmri.util.FileUtilSupport.getExternalFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:348)
Method <jmri.util.FileUtilSupport.getExternalFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getFile(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:107)
Method <jmri.util.FileUtilSupport.getFile(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:107)
Method <jmri.util.FileUtilSupport.getFile(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:431)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:431)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File, boolean, boolean)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:461)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File, boolean, boolean)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:461)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:477)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:477)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.io.File)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.io.File, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.lang.String, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getProfilePath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:805)
Method <jmri.util.FileUtilSupport.getProfilePath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:805)
Method <jmri.util.FileUtilSupport.getProfilePath(jmri.profile.Profile)> calls method <jmri.profile.Profile.getPath()> in (FileUtilSupport.java:782)
Method <jmri.util.FileUtilSupport.getProfilePath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getScriptsPath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:1028)
Method <jmri.util.FileUtilSupport.getScriptsPath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:1028)
Method <jmri.util.FileUtilSupport.getScriptsPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getUserFilesPath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:732)
Method <jmri.util.FileUtilSupport.getUserFilesPath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:732)
Method <jmri.util.FileUtilSupport.getUserFilesPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.pathFromPortablePath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.setScriptsPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.setUserFilesPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.ImmediatePipedOutputStream.write([B, int, int)> has parameter of type <[B> in (ImmediatePipedOutputStream.java:0)
Method <jmri.util.JmriJFrame.getIndexedProperty(java.lang.String, int)> calls method <jmri.beans.BeanUtil.getIntrospectedIndexedProperty(java.lang.Object, java.lang.String, int)> in (JmriJFrame.java:1073)
Method <jmri.util.JmriJFrame.getProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.getIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1096)
Method <jmri.util.JmriJFrame.getPropertyNames()> calls method <jmri.beans.BeanUtil.getIntrospectedPropertyNames(java.lang.Object)> in (JmriJFrame.java:1152)
Method <jmri.util.JmriJFrame.hasIndexedProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.hasIntrospectedIndexedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1109)
Method <jmri.util.JmriJFrame.hasProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1102)
Method <jmri.util.JmriJFrame.setIndexedProperty(java.lang.String, int, java.lang.Object)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1057)
Method <jmri.util.JmriJFrame.setIndexedProperty(java.lang.String, int, java.lang.Object)> calls method <jmri.beans.BeanUtil.setIntrospectedIndexedProperty(java.lang.Object, java.lang.String, int, java.lang.Object)> in (JmriJFrame.java:1058)
Method <jmri.util.JmriJFrame.setProperty(java.lang.String, java.lang.Object)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1081)
Method <jmri.util.JmriJFrame.setProperty(java.lang.String, java.lang.Object)> calls method <jmri.beans.BeanUtil.setIntrospectedProperty(java.lang.Object, java.lang.String, java.lang.Object)> in (JmriJFrame.java:1082)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetKeys(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:77)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetKeys(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:82)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:100)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:90)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:93)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetValues(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:87)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryKeyExists(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:74)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:100)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:74)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:77)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:82)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:87)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:90)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:93)
Method <jmri.util.SerialUtil.setSerialPortParams(purejavacomm.SerialPort, int, int, int, int)> calls method <purejavacomm.SerialPort.setSerialPortParams(int, int, int, int)> in (SerialUtil.java:28)
Method <jmri.util.SerialUtil.setSerialPortParams(purejavacomm.SerialPort, int, int, int, int)> calls method <purejavacomm.SerialPort.setSerialPortParams(int, int, int, int)> in (SerialUtil.java:32)
Method <jmri.util.SerialUtil.setSerialPortParams(purejavacomm.SerialPort, int, int, int, int)> has parameter of type <purejavacomm.SerialPort> in (SerialUtil.java:0)
Method <jmri.util.SerialUtil.setSerialPortParams(purejavacomm.SerialPort, int, int, int, int)> throws type <purejavacomm.UnsupportedCommOperationException> in (SerialUtil.java:0)
Method <jmri.util.StringUtil.arrayToString([B)> has parameter of type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.arrayToString([I)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.bytesFromHexString(java.lang.String)> has return type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.fullTextToHexArray(java.lang.String, int)> has return type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getNameFromState(int, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getNamesFromStateMasked(int, [I, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getStateFromName(java.lang.String, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.hexStringFromBytes([B)> has parameter of type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.hexStringFromInts([I)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.intBytesWithTotalFromNonSpacedHexString(java.lang.String, boolean)> has return type <[I> in (StringUtil.java:0)
Method <jmri.util.com.rbnb.UDPInputStream.read([B)> has parameter of type <[B> in (UDPInputStream.java:0)
Method <jmri.util.com.rbnb.UDPInputStream.read([B, int, int)> has parameter of type <[B> in (UDPInputStream.java:0)
Method <jmri.util.com.rbnb.UDPOutputStream.write([B)> has parameter of type <[B> in (UDPOutputStream.java:0)
Method <jmri.util.com.rbnb.UDPOutputStream.write([B, int, int)> has parameter of type <[B> in (UDPOutputStream.java:0)
Method <jmri.util.datatransfer.RosterEntrySelection.getRosterEntries(java.awt.datatransfer.Transferable)> calls method <jmri.jmrit.roster.Roster.entryFromTitle(java.lang.String)> in (RosterEntrySelection.java:115)
Method <jmri.util.datatransfer.RosterEntrySelection.getRosterEntries(java.awt.datatransfer.Transferable)> calls method <jmri.jmrit.roster.Roster.getDefault()> in (RosterEntrySelection.java:115)
Method <jmri.util.datatransfer.RosterEntrySelection.lambda$createRosterEntrySelection$0(java.util.ArrayList, jmri.jmrit.roster.RosterEntry)> calls method <jmri.jmrit.roster.RosterEntry.getId()> in (RosterEntrySelection.java:67)
Method <jmri.util.datatransfer.RosterEntrySelection.lambda$createRosterEntrySelection$0(java.util.ArrayList, jmri.jmrit.roster.RosterEntry)> has parameter of type <jmri.jmrit.roster.RosterEntry> in (RosterEntrySelection.java:0)
Method <jmri.util.davidflanagan.HardcopyWriter.write([C, int, int)> has parameter of type <[C> in (HardcopyWriter.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, boolean, boolean)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:585)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, int, int)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, int, int)> in (GuiLafPreferencesManager.java:597)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)> in (GuiLafPreferencesManager.java:609)
Method <jmri.util.gui.GuiLafPreferencesManager.getInitializationExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:93)
Method <jmri.util.gui.GuiLafPreferencesManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:97)
Method <jmri.util.gui.GuiLafPreferencesManager.initialize(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.isInitialized(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:152)
Method <jmri.util.gui.GuiLafPreferencesManager.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.setDirty(boolean)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:554)
Method <jmri.util.gui.GuiLafPreferencesManager.setLocaleMinimally(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:522)
Method <jmri.util.gui.GuiLafPreferencesManager.setLocaleMinimally(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.setRestartRequired()> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:573)
Method <jmri.util.node.NodeIdentity.createNetworkIdentity([B)> has parameter of type <[B> in (NodeIdentity.java:0)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:168)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (NodeIdentity.java:166)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.ProfileManager.getDefault()> in (NodeIdentity.java:166)
Method <jmri.util.node.NodeIdentity.storageIdentity()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (NodeIdentity.java:186)
Method <jmri.util.node.NodeIdentity.storageIdentity()> calls method <jmri.profile.ProfileManager.getDefault()> in (NodeIdentity.java:186)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getPath()> in (NodeIdentity.java:232)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:231)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:237)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (NodeIdentity.java:0)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (AbstractConfigurationProvider.java:0)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfigurationDirectory(boolean)> calls method <jmri.profile.Profile.getPath()> in (AbstractConfigurationProvider.java:39)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfigurationDirectory(boolean)> calls method <jmri.profile.ProfileUtils.copyPrivateContentToCurrentIdentity(jmri.profile.Profile)> in (AbstractConfigurationProvider.java:44)
Method <jmri.util.prefs.AbstractPreferencesManager.addInitializationException(jmri.profile.Profile, java.lang.Exception)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.getInitializationExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitialized(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitializing(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.lambda$requireAllOther$2(jmri.spi.PreferencesManager)> has parameter of type <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.lambda$requireAllOther$3(jmri.spi.PreferencesManager)> has parameter of type <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.util.Set, java.lang.String)> calls method <jmri.spi.PreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> in (AbstractPreferencesManager.java:167)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.util.Set, java.lang.String)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.setInitialized(jmri.profile.Profile, boolean)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.setInitializing(jmri.profile.Profile, boolean)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.findProvider(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration(jmri.profile.Profile)> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Package, boolean)> calls method <jmri.profile.Profile.getPath()> in (JmriPreferencesProvider.java:127)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Package, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.String, boolean)> calls method <jmri.profile.Profile.getPath()> in (JmriPreferencesProvider.java:159)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.String, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls constructor <jmri.profile.Profile.<init>(java.io.File)> in (JmriPreferencesProvider.java:300)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls method <jmri.profile.Profile.isProfile(java.io.File)> in (JmriPreferencesProvider.java:298)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls method <jmri.profile.ProfileUtils.copyPrivateContentToCurrentIdentity(jmri.profile.Profile)> in (JmriPreferencesProvider.java:302)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.findProvider(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration(jmri.profile.Profile)> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getDefault()> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getSystemConnectionMemoForSystemPrefix(java.lang.String)> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.performAction()> calls method <jmri.jmrix.swing.SystemConnectionAction.setSystemConnectionMemo(jmri.SystemConnectionMemo)> in (AbstractActionModel.java:125)
Method <jmri.util.startup.AbstractActionModelFactory.lambda$getDialogMessage$3(javax.swing.JComboBox, javax.swing.JLabel, javax.swing.JList, javax.swing.event.ListSelectionEvent)> calls method <jmri.jmrix.swing.SystemConnectionAction.getSystemConnectionMemoClasses()> in (AbstractActionModelFactory.java:111)
Method <jmri.util.startup.PerformFileModelFactory.setFileChooser()> calls method <jmri.jmrit.XmlFile.userFileChooser(java.lang.String, [Ljava.lang.String;)> in (PerformFileModelFactory.java:29)
Method <jmri.util.startup.PerformScriptModel.performAction()> calls method <jmri.script.JmriScriptEngineManager.getDefault()> in (PerformScriptModel.java:33)
Method <jmri.util.startup.PerformScriptModel.performAction()> calls method <jmri.script.JmriScriptEngineManager.runScript(java.io.File)> in (PerformScriptModel.java:33)
Method <jmri.util.startup.PerformScriptModelFactory.setFileChooser()> calls constructor <jmri.script.ScriptFileChooser.<init>()> in (PerformScriptModelFactory.java:31)
Method <jmri.util.startup.StartupActionModelUtil.lambda$prepareActionsHashMap$2(apps.startup.StartupActionFactory)> has parameter of type <apps.startup.StartupActionFactory> in (StartupActionModelUtil.java:0)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.configurexml.XmlAdapter.load(org.jdom2.Element, org.jdom2.Element)> in (StartupActionsManager.java:96)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.getConfigurationFragment(java.lang.String, java.lang.String, boolean)> in (StartupActionsManager.java:76)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.getConfigurationFragment(java.lang.String, java.lang.String, boolean)> in (StartupActionsManager.java:79)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:76)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:79)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.startup.StartupActionsManager.lambda$initialize$1(jmri.profile.Profile, jmri.util.startup.StartupModel)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.startup.StartupActionsManager.lambda$savePreferences$2(org.jdom2.Element, jmri.util.startup.StartupModel)> calls method <jmri.configurexml.ConfigXmlManager.elementFromObject(java.lang.Object, boolean)> in (StartupActionsManager.java:145)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.putConfigurationFragment(org.w3c.dom.Element, boolean)> in (StartupActionsManager.java:155)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:155)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.swing.BeanSelectCreatePanel.createBean()> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:176)
Method <jmri.util.swing.BeanSelectCreatePanel.dispose()> calls method <jmri.swing.NamedBeanComboBox.dispose()> in (BeanSelectCreatePanel.java:252)
Method <jmri.util.swing.BeanSelectCreatePanel.getDisplayName()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItemDisplayName()> in (BeanSelectCreatePanel.java:146)
Method <jmri.util.swing.BeanSelectCreatePanel.getNamedBean()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:166)
Method <jmri.util.swing.BeanSelectCreatePanel.isEmpty()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:223)
Method <jmri.util.swing.BeanSelectCreatePanel.isEmpty()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:224)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:93)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> calls method <jmri.swing.SystemNameValidator.setManager(jmri.Manager)> in (BeanSelectCreatePanel.java:93)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> has parameter of type <jmri.swing.SystemNameValidator> in (BeanSelectCreatePanel.java:0)
Method <jmri.util.swing.BeanSelectCreatePanel.setDefaultNamedBean(jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.setSelectedItem(java.lang.Object)> in (BeanSelectCreatePanel.java:212)
Method <jmri.util.swing.BeanSelectCreatePanel.setEnabled(boolean)> calls method <jmri.swing.ManagerComboBox.setEnabled(boolean)> in (BeanSelectCreatePanel.java:122)
Method <jmri.util.swing.BeanSelectCreatePanel.setEnabled(boolean)> calls method <jmri.swing.NamedBeanComboBox.setEnabled(boolean)> in (BeanSelectCreatePanel.java:124)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.ManagerComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:107)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.ManagerComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:113)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.NamedBeanComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:109)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.NamedBeanComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:111)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls constructor <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.<init>()> in (ResizableImagePanel.java:146)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls constructor <net.coobird.thumbnailator.tasks.io.FileImageSource.<init>(java.io.File)> in (ResizableImagePanel.java:150)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.ThumbnailParameter.getImageFilters()> in (ResizableImagePanel.java:156)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.build()> in (ResizableImagePanel.java:148)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.scale(double)> in (ResizableImagePanel.java:147)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.filters.ImageFilter.apply(java.awt.image.BufferedImage)> in (ResizableImagePanel.java:157)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.tasks.io.FileImageSource.read()> in (ResizableImagePanel.java:153)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.tasks.io.FileImageSource.setThumbnailParameter(net.coobird.thumbnailator.ThumbnailParameter)> in (ResizableImagePanel.java:151)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls constructor <com.alexandriasoftware.swing.JSplitButton.<init>(java.lang.String, javax.swing.Icon)> in (SplitButtonColorChooserPanel.java:62)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.addButtonClickedActionListener(com.alexandriasoftware.swing.action.ButtonClickedActionListener)> in (SplitButtonColorChooserPanel.java:63)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.addSplitButtonClickedActionListener(com.alexandriasoftware.swing.action.SplitButtonClickedActionListener)> in (SplitButtonColorChooserPanel.java:71)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setPopupMenu(javax.swing.JPopupMenu)> in (SplitButtonColorChooserPanel.java:80)
Method <jmri.util.swing.SplitButtonColorChooserPanel.lambda$buildChooser$0(java.awt.event.ActionEvent)> calls method <com.alexandriasoftware.swing.JSplitButton.getParent()> in (SplitButtonColorChooserPanel.java:64)
Method <jmri.util.swing.SplitButtonColorChooserPanel.updateChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setIcon(javax.swing.Icon)> in (SplitButtonColorChooserPanel.java:44)
Method <jmri.util.swing.SplitButtonColorChooserPanel.updateChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setPopupMenu(javax.swing.JPopupMenu)> in (SplitButtonColorChooserPanel.java:45)
Method <jmri.util.table.JTableToCsvAction.addColtoListIfNotExcluded(java.util.List, int, [I)> has parameter of type <[I> in (JTableToCsvAction.java:0)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:180)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.getAddressPanel()> in (RailDriverMenuItem.java:177)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.getControlPanel()> in (RailDriverMenuItem.java:175)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.getFunctionPanel()> in (RailDriverMenuItem.java:176)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.toFront()> in (RailDriverMenuItem.java:174)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrameManager.getCurrentThrottleFrame()> in (RailDriverMenuItem.java:168)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleWindow.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:179)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleWindow.getCurrentThrottleFrame()> in (RailDriverMenuItem.java:170)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> has parameter of type <jmri.jmrit.throttle.ThrottleFrameManager> in (RailDriverMenuItem.java:0)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.roster.swing.RosterEntryComboBox.getItemCount()> in (RailDriverMenuItem.java:695)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.roster.swing.RosterEntrySelectorPanel.getRosterEntryComboBox()> in (RailDriverMenuItem.java:693)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.dispatchAddress()> in (RailDriverMenuItem.java:664)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getCurrentAddress()> in (RailDriverMenuItem.java:657)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getCurrentAddress()> in (RailDriverMenuItem.java:665)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterEntrySelector()> in (RailDriverMenuItem.java:691)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterSelectedIndex()> in (RailDriverMenuItem.java:672)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterSelectedIndex()> in (RailDriverMenuItem.java:696)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.selectRosterEntry()> in (RailDriverMenuItem.java:656)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.setRosterSelectedIndex(int)> in (RailDriverMenuItem.java:674)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.setRosterSelectedIndex(int)> in (RailDriverMenuItem.java:699)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ControlPanel.getSpeedSlider()> in (RailDriverMenuItem.java:589)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ControlPanel.isEnabled()> in (RailDriverMenuItem.java:573)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ControlPanel.setForwardDirection(boolean)> in (RailDriverMenuItem.java:575)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ControlPanel.setForwardDirection(boolean)> in (RailDriverMenuItem.java:577)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ControlPanel.stop()> in (RailDriverMenuItem.java:736)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.getIsLockable()> in (RailDriverMenuItem.java:777)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.getState()> in (RailDriverMenuItem.java:779)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.setSelected(boolean)> in (RailDriverMenuItem.java:722)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.setSelected(boolean)> in (RailDriverMenuItem.java:729)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.setSelected(boolean)> in (RailDriverMenuItem.java:779)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionButton.setSelected(boolean)> in (RailDriverMenuItem.java:782)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.FunctionPanel.getFunctionButtons()> in (RailDriverMenuItem.java:640)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:549)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getAddressPanel()> in (RailDriverMenuItem.java:551)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getControlPanel()> in (RailDriverMenuItem.java:552)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getFunctionPanel()> in (RailDriverMenuItem.java:553)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getThrottleWindow()> in (RailDriverMenuItem.java:546)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:513)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:528)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:541)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:548)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.nextThrottleFrame()> in (RailDriverMenuItem.java:683)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.previousThrottleFrame()> in (RailDriverMenuItem.java:713)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:509)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:537)
Method <jmri.util.usb.RailDriverMenuItem.sendMessage(org.hid4java.HidDevice, [B, byte)> has parameter of type <[B> in (RailDriverMenuItem.java:0)
Method <jmri.util.usb.RailDriverMenuItem.setupRailDriver(org.hid4java.HidDevice)> calls constructor <jmri.jmrit.throttle.LoadXmlThrottlesLayoutAction.<init>()> in (RailDriverMenuItem.java:147)
Method <jmri.util.usb.RailDriverMenuItem.setupRailDriver(org.hid4java.HidDevice)> calls method <jmri.jmrit.throttle.LoadXmlThrottlesLayoutAction.loadThrottlesLayout(java.io.File)> in (RailDriverMenuItem.java:148)
Method <jmri.util.usb.RailDriverMenuItem.setupRailDriver(org.hid4java.HidDevice)> calls method <jmri.jmrit.throttle.ThrottleFrame.getDefaultThrottleFilename()> in (RailDriverMenuItem.java:148)
Method <jmri.util.usb.RailDriverMenuItem.setupRailDriver(org.hid4java.HidDevice)> calls method <jmri.jmrit.throttle.ThrottleFrameManager.createThrottleWindow()> in (RailDriverMenuItem.java:156)
Method <jmri.util.usb.RailDriverMenuItem.setupRailDriver(org.hid4java.HidDevice)> calls method <jmri.jmrit.throttle.ThrottleWindow.addThrottleFrame()> in (RailDriverMenuItem.java:157)
Method <jmri.util.xml.XMLUtil.fromHex([C, int, int)> has parameter of type <[C> in (XMLUtil.java:0)
Method <jmri.util.xml.XMLUtil.fromHex([C, int, int)> has return type <[B> in (XMLUtil.java:0)
Method <jmri.util.xml.XMLUtil.toHex([B, int, int)> has parameter of type <[B> in (XMLUtil.java:0)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:133)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:147)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:150)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (ZeroConfPreferences.java:0)
Method <jmri.util.zeroconf.ZeroConfServiceManager.create(java.lang.String, int, java.util.HashMap)> calls method <jmri.web.server.WebServerPreferences.getRailroadName()> in (ZeroConfServiceManager.java:130)
@@ -0,0 +1,303 @@
Class <jmri.util.FileUtilSupport> extends class <jmri.beans.Bean> in (FileUtilSupport.java:0)
Class <jmri.util.JmriJFrame$3> extends class <jmri.implementation.AbstractShutDownTask> in (JmriJFrame.java:0)
Class <jmri.util.JmriJFrame> implements interface <jmri.beans.BeanInterface> in (JmriJFrame.java:0)
Class <jmri.util.NamedBeanExpectedValue> extends class <jmri.beans.Bean> in (NamedBeanExpectedValue.java:0)
Class <jmri.util.docbook.configurexml.RevHistoryXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (RevHistoryXml.java:0)
Class <jmri.util.gui.GuiLafPreferencesManager> extends class <jmri.beans.Bean> in (GuiLafPreferencesManager.java:0)
Class <jmri.util.gui.GuiLafPreferencesManager> implements interface <jmri.spi.PreferencesManager> in (GuiLafPreferencesManager.java:0)
Class <jmri.util.prefs.AbstractPreferencesManager> extends class <jmri.beans.Bean> in (AbstractPreferencesManager.java:0)
Class <jmri.util.prefs.AbstractPreferencesManager> implements interface <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Class <jmri.util.prefs.JmriConfiguration> implements interface <jmri.profile.AuxiliaryConfiguration> in (JmriConfiguration.java:0)
Class <jmri.util.startup.StartupActionModelUtil> extends class <jmri.beans.Bean> in (StartupActionModelUtil.java:0)
Class <jmri.util.startup.configurexml.PerformActionModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformActionModelXml.java:0)
Class <jmri.util.startup.configurexml.PerformFileModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformFileModelXml.java:0)
Class <jmri.util.startup.configurexml.PerformScriptModelXml> extends class <jmri.configurexml.AbstractXmlAdapter> in (PerformScriptModelXml.java:0)
Class <jmri.util.startup.configurexml.StartupClassMigration> implements interface <jmri.configurexml.ClassMigration> in (StartupClassMigration.java:0)
Class <jmri.util.swing.GuiUtilBase$3> extends class <jmri.jmrit.XmlFile> in (GuiUtilBase.java:0)
Class <jmri.util.zeroconf.ZeroConfPreferences> extends class <jmri.beans.PreferencesBean> in (ZeroConfPreferences.java:0)
Constructor <jmri.util.DnDTableImportExportHandler.<init>([I)> has parameter of type <[I> in (DnDTableImportExportHandler.java:0)
Constructor <jmri.util.FileUtil$Property.<init>(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Constructor <jmri.util.FileUtilSupport.<init>()> calls constructor <jmri.beans.Bean.<init>(boolean)> in (FileUtilSupport.java:89)
Constructor <jmri.util.JmriJFrame$3.<init>(jmri.util.JmriJFrame, java.lang.String)> calls constructor <jmri.implementation.AbstractShutDownTask.<init>(java.lang.String)> in (JmriJFrame.java:964)
Constructor <jmri.util.MenuScroller$MenuScrollerIcon.<init>(java.lang.String, int, [I)> has parameter of type <[I> in (MenuScroller.java:0)
Constructor <jmri.util.NamedBeanExpectedValue.<init>(jmri.NamedBean, java.lang.String, java.lang.Object)> calls constructor <jmri.beans.Bean.<init>()> in (NamedBeanExpectedValue.java:33)
Constructor <jmri.util.docbook.configurexml.RevHistoryXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (RevHistoryXml.java:18)
Constructor <jmri.util.gui.GuiLafPreferencesManager.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (GuiLafPreferencesManager.java:34)
Constructor <jmri.util.prefs.AbstractConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractConfigurationProvider.java:0)
Constructor <jmri.util.prefs.AbstractPreferencesManager.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (AbstractPreferencesManager.java:22)
Constructor <jmri.util.prefs.JmriConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Constructor <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Constructor <jmri.util.startup.StartupActionModelUtil.<init>()> calls constructor <jmri.beans.Bean.<init>()> in (StartupActionModelUtil.java:50)
Constructor <jmri.util.startup.configurexml.PerformActionModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformActionModelXml.java:23)
Constructor <jmri.util.startup.configurexml.PerformFileModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformFileModelXml.java:22)
Constructor <jmri.util.startup.configurexml.PerformScriptModelXml.<init>()> calls constructor <jmri.configurexml.AbstractXmlAdapter.<init>()> in (PerformScriptModelXml.java:22)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.ManagerComboBox.<init>()> in (BeanSelectCreatePanel.java:38)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.NamedBeanComboBox.<init>(jmri.Manager, jmri.NamedBean, jmri.NamedBean$DisplayOptions)> in (BeanSelectCreatePanel.java:63)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls constructor <jmri.swing.SystemNameValidator.<init>(javax.swing.JComponent, jmri.Manager)> in (BeanSelectCreatePanel.java:91)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.addItemListener(java.awt.event.ItemListener)> in (BeanSelectCreatePanel.java:92)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:91)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setManagers(java.util.List, jmri.Manager)> in (BeanSelectCreatePanel.java:79)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setManagers(jmri.Manager)> in (BeanSelectCreatePanel.java:84)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.ManagerComboBox.setSelectedItem(java.lang.Object)> in (BeanSelectCreatePanel.java:81)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.getItemCount()> in (BeanSelectCreatePanel.java:65)
Constructor <jmri.util.swing.BeanSelectCreatePanel.<init>(jmri.Manager, jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.setAllowNull(boolean)> in (BeanSelectCreatePanel.java:68)
Constructor <jmri.util.swing.GuiUtilBase$3.<init>()> calls constructor <jmri.jmrit.XmlFile.<init>()> in (GuiUtilBase.java:247)
Constructor <jmri.util.table.JTableToCsvAction.<init>(java.lang.String, javax.swing.JTable, javax.swing.table.TableModel, java.lang.String, [I)> has parameter of type <[I> in (JTableToCsvAction.java:0)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls constructor <jmri.beans.PreferencesBean.<init>(jmri.profile.Profile)> in (ZeroConfPreferences.java:76)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:77)
Constructor <jmri.util.zeroconf.ZeroConfPreferences.<init>(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (ZeroConfPreferences.java:0)
Constructor <jmri.util.zeroconf.ZeroConfServiceManager.<init>()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (ZeroConfServiceManager.java:98)
Constructor <jmri.util.zeroconf.ZeroConfServiceManager.<init>()> calls method <jmri.profile.ProfileManager.getDefault()> in (ZeroConfServiceManager.java:98)
Field <jmri.util.DnDTableImportExportHandler._skipColumns> has type <[I> in (DnDTableImportExportHandler.java:0)
Field <jmri.util.FileUtil$Property.key> has type <jmri.profile.Profile> in (FileUtil.java:0)
Field <jmri.util.JmriJFrame.task> has type <jmri.implementation.AbstractShutDownTask> in (JmriJFrame.java:0)
Field <jmri.util.MenuScroller$MenuScrollerIcon.xPoints> has type <[I> in (MenuScroller.java:0)
Field <jmri.util.MenuScroller$MenuScrollerIcon.yPoints> has type <[I> in (MenuScroller.java:0)
Field <jmri.util.StringUtil.HEX_CHARS> has type <[C> in (StringUtil.java:0)
Field <jmri.util.com.rbnb.UDPInputStream.ddata> has type <[B> in (UDPInputStream.java:0)
Field <jmri.util.com.rbnb.UDPOutputStream.buffer> has type <[B> in (UDPOutputStream.java:0)
Field <jmri.util.com.rbnb.UDPOutputStream.outdata> has type <[B> in (UDPOutputStream.java:0)
Field <jmri.util.prefs.AbstractConfigurationProvider.project> has type <jmri.profile.Profile> in (AbstractConfigurationProvider.java:0)
Field <jmri.util.swing.BeanSelectCreatePanel.existingCombo> has type <jmri.swing.NamedBeanComboBox> in (BeanSelectCreatePanel.java:0)
Field <jmri.util.swing.BeanSelectCreatePanel.prefixBox> has type <jmri.swing.ManagerComboBox> in (BeanSelectCreatePanel.java:0)
Field <jmri.util.swing.SplitButtonColorChooserPanel.setButton> has type <com.alexandriasoftware.swing.JSplitButton> in (SplitButtonColorChooserPanel.java:0)
Field <jmri.util.swing.ValidatedTextField$5.$SwitchMap$jmri$util$swing$ValidatedTextField$FieldType> has type <[I> in (ValidatedTextField.java:0)
Field <jmri.util.table.JTableToCsvAction._excludedCols> has type <[I> in (JTableToCsvAction.java:0)
Field <jmri.util.usb.RailDriverMenuItem.SevenSegment> has type <[B> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.SevenSegmentAlpha> has type <[B> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.activeThrottleFrame> has type <jmri.jmrit.throttle.ThrottleFrame> in (RailDriverMenuItem.java:0)
Field <jmri.util.usb.RailDriverMenuItem.throttleWindow> has type <jmri.jmrit.throttle.ThrottleWindow> in (RailDriverMenuItem.java:0)
Field <jmri.util.xml.XMLUtil.DEC2HEX> has type <[C> in (XMLUtil.java:0)
Interface <jmri.util.startup.StartupActionFactory> extends interface <jmri.spi.JmriServiceProviderInterface> in (StartupActionFactory.java:0)
Interface <jmri.util.startup.StartupModelFactory> extends interface <jmri.spi.JmriServiceProviderInterface> in (StartupModelFactory.java:0)
Method <jmri.util.CvUtil.addCvDescription(java.lang.String, java.lang.String, java.lang.String)> calls method <jmri.jmrit.symbolicprog.tabbedframe.PaneProgFrame.getShowCvNumbers()> in (CvUtil.java:153)
Method <jmri.util.FileUtil$Property.getKey()> has return type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getAbsoluteFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getExternalFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getFile(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.io.File)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.io.File, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getPortableFilename(jmri.profile.Profile, java.lang.String, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getProfilePath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getScriptsPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.getUserFilesPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.setScriptsPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtil.setUserFilesPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtil.java:0)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:401)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:401)
Method <jmri.util.FileUtilSupport.getAbsoluteFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> calls method <com.sun.jna.platform.win32.Shell32Util.getFolderPath(int)> in (FileUtilSupport.java:929)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> calls method <com.sun.jna.platform.win32.Shell32Util.getKnownFolderPath(com.sun.jna.platform.win32.Guid$GUID)> in (FileUtilSupport.java:926)
Method <jmri.util.FileUtilSupport.getCacheDirectory()> gets field <com.sun.jna.platform.win32.KnownFolders.FOLDERID_LocalAppData> in (FileUtilSupport.java:926)
Method <jmri.util.FileUtilSupport.getExternalFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:348)
Method <jmri.util.FileUtilSupport.getExternalFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:348)
Method <jmri.util.FileUtilSupport.getExternalFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getFile(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:107)
Method <jmri.util.FileUtilSupport.getFile(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:107)
Method <jmri.util.FileUtilSupport.getFile(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:431)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:431)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File, boolean, boolean)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:461)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.io.File, boolean, boolean)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:461)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:477)
Method <jmri.util.FileUtilSupport.getPortableFilename(java.lang.String)> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:477)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.io.File)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.io.File, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getPortableFilename(jmri.profile.Profile, java.lang.String, boolean, boolean)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getProfilePath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:805)
Method <jmri.util.FileUtilSupport.getProfilePath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:805)
Method <jmri.util.FileUtilSupport.getProfilePath(jmri.profile.Profile)> calls method <jmri.profile.Profile.getPath()> in (FileUtilSupport.java:782)
Method <jmri.util.FileUtilSupport.getProfilePath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getScriptsPath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:1028)
Method <jmri.util.FileUtilSupport.getScriptsPath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:1028)
Method <jmri.util.FileUtilSupport.getScriptsPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.getUserFilesPath()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (FileUtilSupport.java:732)
Method <jmri.util.FileUtilSupport.getUserFilesPath()> calls method <jmri.profile.ProfileManager.getDefault()> in (FileUtilSupport.java:732)
Method <jmri.util.FileUtilSupport.getUserFilesPath(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.pathFromPortablePath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.setScriptsPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.FileUtilSupport.setUserFilesPath(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (FileUtilSupport.java:0)
Method <jmri.util.ImmediatePipedOutputStream.write([B, int, int)> has parameter of type <[B> in (ImmediatePipedOutputStream.java:0)
Method <jmri.util.JmriJFrame.getIndexedProperty(java.lang.String, int)> calls method <jmri.beans.BeanUtil.getIntrospectedIndexedProperty(java.lang.Object, java.lang.String, int)> in (JmriJFrame.java:1073)
Method <jmri.util.JmriJFrame.getProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.getIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1096)
Method <jmri.util.JmriJFrame.getPropertyNames()> calls method <jmri.beans.BeanUtil.getIntrospectedPropertyNames(java.lang.Object)> in (JmriJFrame.java:1152)
Method <jmri.util.JmriJFrame.hasIndexedProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.hasIntrospectedIndexedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1109)
Method <jmri.util.JmriJFrame.hasProperty(java.lang.String)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1102)
Method <jmri.util.JmriJFrame.setIndexedProperty(java.lang.String, int, java.lang.Object)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1057)
Method <jmri.util.JmriJFrame.setIndexedProperty(java.lang.String, int, java.lang.Object)> calls method <jmri.beans.BeanUtil.setIntrospectedIndexedProperty(java.lang.Object, java.lang.String, int, java.lang.Object)> in (JmriJFrame.java:1058)
Method <jmri.util.JmriJFrame.setProperty(java.lang.String, java.lang.Object)> calls method <jmri.beans.BeanUtil.hasIntrospectedProperty(java.lang.Object, java.lang.String)> in (JmriJFrame.java:1081)
Method <jmri.util.JmriJFrame.setProperty(java.lang.String, java.lang.Object)> calls method <jmri.beans.BeanUtil.setIntrospectedProperty(java.lang.Object, java.lang.String, java.lang.Object)> in (JmriJFrame.java:1082)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetKeys(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:77)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetKeys(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:82)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:100)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:90)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetStringValue(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String, java.lang.String)> in (PortNameMapper.java:93)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryGetValues(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:87)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> calls method <com.sun.jna.platform.win32.Advapi32Util.registryKeyExists(com.sun.jna.platform.win32.WinReg$HKEY, java.lang.String)> in (PortNameMapper.java:74)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:100)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:74)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:77)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:82)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:87)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:90)
Method <jmri.util.PortNameMapper.getDetailsFromWinRegistry(java.lang.String)> gets field <com.sun.jna.platform.win32.WinReg.HKEY_LOCAL_MACHINE> in (PortNameMapper.java:93)
Method <jmri.util.StringUtil.arrayToString([B)> has parameter of type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.arrayToString([I)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.bytesFromHexString(java.lang.String)> has return type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.fullTextToHexArray(java.lang.String, int)> has return type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getNameFromState(int, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getNamesFromStateMasked(int, [I, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.getStateFromName(java.lang.String, [I, [Ljava.lang.String;)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.hexStringFromBytes([B)> has parameter of type <[B> in (StringUtil.java:0)
Method <jmri.util.StringUtil.hexStringFromInts([I)> has parameter of type <[I> in (StringUtil.java:0)
Method <jmri.util.StringUtil.intBytesWithTotalFromNonSpacedHexString(java.lang.String, boolean)> has return type <[I> in (StringUtil.java:0)
Method <jmri.util.com.rbnb.UDPInputStream.read([B)> has parameter of type <[B> in (UDPInputStream.java:0)
Method <jmri.util.com.rbnb.UDPInputStream.read([B, int, int)> has parameter of type <[B> in (UDPInputStream.java:0)
Method <jmri.util.com.rbnb.UDPOutputStream.write([B)> has parameter of type <[B> in (UDPOutputStream.java:0)
Method <jmri.util.com.rbnb.UDPOutputStream.write([B, int, int)> has parameter of type <[B> in (UDPOutputStream.java:0)
Method <jmri.util.datatransfer.RosterEntrySelection.getRosterEntries(java.awt.datatransfer.Transferable)> calls method <jmri.jmrit.roster.Roster.entryFromTitle(java.lang.String)> in (RosterEntrySelection.java:115)
Method <jmri.util.datatransfer.RosterEntrySelection.getRosterEntries(java.awt.datatransfer.Transferable)> calls method <jmri.jmrit.roster.Roster.getDefault()> in (RosterEntrySelection.java:115)
Method <jmri.util.datatransfer.RosterEntrySelection.lambda$createRosterEntrySelection$0(java.util.ArrayList, jmri.jmrit.roster.RosterEntry)> calls method <jmri.jmrit.roster.RosterEntry.getId()> in (RosterEntrySelection.java:67)
Method <jmri.util.datatransfer.RosterEntrySelection.lambda$createRosterEntrySelection$0(java.util.ArrayList, jmri.jmrit.roster.RosterEntry)> has parameter of type <jmri.jmrit.roster.RosterEntry> in (RosterEntrySelection.java:0)
Method <jmri.util.davidflanagan.HardcopyWriter.write([C, int, int)> has parameter of type <[C> in (HardcopyWriter.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, boolean, boolean)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:585)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, int, int)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, int, int)> in (GuiLafPreferencesManager.java:597)
Method <jmri.util.gui.GuiLafPreferencesManager.firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object)> in (GuiLafPreferencesManager.java:609)
Method <jmri.util.gui.GuiLafPreferencesManager.getInitializationExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:93)
Method <jmri.util.gui.GuiLafPreferencesManager.initialize(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.isInitialized(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:152)
Method <jmri.util.gui.GuiLafPreferencesManager.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.setDirty(boolean)> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:554)
Method <jmri.util.gui.GuiLafPreferencesManager.setLocaleMinimally(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (GuiLafPreferencesManager.java:522)
Method <jmri.util.gui.GuiLafPreferencesManager.setLocaleMinimally(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (GuiLafPreferencesManager.java:0)
Method <jmri.util.gui.GuiLafPreferencesManager.setRestartRequired()> calls method <jmri.beans.Bean.firePropertyChange(java.lang.String, boolean, boolean)> in (GuiLafPreferencesManager.java:573)
Method <jmri.util.node.NodeIdentity.createNetworkIdentity([B)> has parameter of type <[B> in (NodeIdentity.java:0)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:168)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (NodeIdentity.java:166)
Method <jmri.util.node.NodeIdentity.networkIdentity()> calls method <jmri.profile.ProfileManager.getDefault()> in (NodeIdentity.java:166)
Method <jmri.util.node.NodeIdentity.storageIdentity()> calls method <jmri.profile.ProfileManager.getActiveProfile()> in (NodeIdentity.java:186)
Method <jmri.util.node.NodeIdentity.storageIdentity()> calls method <jmri.profile.ProfileManager.getDefault()> in (NodeIdentity.java:186)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getPath()> in (NodeIdentity.java:232)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:231)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> calls method <jmri.profile.Profile.getUniqueId()> in (NodeIdentity.java:237)
Method <jmri.util.node.NodeIdentity.storageIdentity(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (NodeIdentity.java:0)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (AbstractConfigurationProvider.java:0)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfigurationDirectory(boolean)> calls method <jmri.profile.Profile.getPath()> in (AbstractConfigurationProvider.java:39)
Method <jmri.util.prefs.AbstractConfigurationProvider.getConfigurationDirectory(boolean)> calls method <jmri.profile.ProfileUtils.copyPrivateContentToCurrentIdentity(jmri.profile.Profile)> in (AbstractConfigurationProvider.java:44)
Method <jmri.util.prefs.AbstractPreferencesManager.addInitializationException(jmri.profile.Profile, java.lang.Exception)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.getInitializationExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitialized(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.isInitializing(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.lambda$requireAllOther$2(jmri.spi.PreferencesManager)> has parameter of type <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.lambda$requireAllOther$3(jmri.spi.PreferencesManager)> has parameter of type <jmri.spi.PreferencesManager> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.lang.String)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.util.Set, java.lang.String)> calls method <jmri.spi.PreferencesManager.isInitializedWithExceptions(jmri.profile.Profile)> in (AbstractPreferencesManager.java:167)
Method <jmri.util.prefs.AbstractPreferencesManager.requiresNoInitializedWithExceptions(jmri.profile.Profile, java.util.Set, java.lang.String)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.setInitialized(jmri.profile.Profile, boolean)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.AbstractPreferencesManager.setInitializing(jmri.profile.Profile, boolean)> has parameter of type <jmri.profile.Profile> in (AbstractPreferencesManager.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.findProvider(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriConfigurationProvider.getConfiguration(jmri.profile.Profile)> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Package, boolean)> calls method <jmri.profile.Profile.getPath()> in (JmriPreferencesProvider.java:127)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.Package, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.String, boolean)> calls method <jmri.profile.Profile.getPath()> in (JmriPreferencesProvider.java:159)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferences(jmri.profile.Profile, java.lang.String, boolean)> has parameter of type <jmri.profile.Profile> in (JmriPreferencesProvider.java:0)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls constructor <jmri.profile.Profile.<init>(java.io.File)> in (JmriPreferencesProvider.java:300)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls method <jmri.profile.Profile.isProfile(java.io.File)> in (JmriPreferencesProvider.java:298)
Method <jmri.util.prefs.JmriPreferencesProvider.getPreferencesDirectory()> calls method <jmri.profile.ProfileUtils.copyPrivateContentToCurrentIdentity(jmri.profile.Profile)> in (JmriPreferencesProvider.java:302)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.findProvider(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration()> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.prefs.JmriUserInterfaceConfigurationProvider.getConfiguration(jmri.profile.Profile)> has return type <jmri.profile.AuxiliaryConfiguration> in (JmriUserInterfaceConfigurationProvider.java:0)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getDefault()> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getSystemConnectionMemoForSystemPrefix(java.lang.String)> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.performAction()> calls method <jmri.jmrix.swing.SystemConnectionAction.setSystemConnectionMemo(jmri.SystemConnectionMemo)> in (AbstractActionModel.java:125)
Method <jmri.util.startup.AbstractActionModelFactory.lambda$getDialogMessage$3(javax.swing.JComboBox, javax.swing.JLabel, javax.swing.JList, javax.swing.event.ListSelectionEvent)> calls method <jmri.jmrix.swing.SystemConnectionAction.getSystemConnectionMemoClasses()> in (AbstractActionModelFactory.java:111)
Method <jmri.util.startup.PerformFileModelFactory.setFileChooser()> calls method <jmri.jmrit.XmlFile.userFileChooser(java.lang.String, [Ljava.lang.String;)> in (PerformFileModelFactory.java:29)
Method <jmri.util.startup.PerformScriptModel.performAction()> calls method <jmri.script.JmriScriptEngineManager.getDefault()> in (PerformScriptModel.java:33)
Method <jmri.util.startup.PerformScriptModel.performAction()> calls method <jmri.script.JmriScriptEngineManager.runScript(java.io.File)> in (PerformScriptModel.java:33)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.configurexml.XmlAdapter.load(org.jdom2.Element, org.jdom2.Element)> in (StartupActionsManager.java:100)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.getConfigurationFragment(java.lang.String, java.lang.String, boolean)> in (StartupActionsManager.java:80)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.getConfigurationFragment(java.lang.String, java.lang.String, boolean)> in (StartupActionsManager.java:83)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:80)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:83)
Method <jmri.util.startup.StartupActionsManager.initialize(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.startup.StartupActionsManager.lambda$initialize$1(jmri.profile.Profile, jmri.util.startup.StartupModel)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.startup.StartupActionsManager.lambda$savePreferences$2(org.jdom2.Element, jmri.util.startup.StartupModel)> calls method <jmri.configurexml.ConfigXmlManager.elementFromObject(java.lang.Object, boolean)> in (StartupActionsManager.java:150)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.AuxiliaryConfiguration.putConfigurationFragment(org.w3c.dom.Element, boolean)> in (StartupActionsManager.java:160)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getAuxiliaryConfiguration(jmri.profile.Profile)> in (StartupActionsManager.java:160)
Method <jmri.util.startup.StartupActionsManager.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (StartupActionsManager.java:0)
Method <jmri.util.swing.BeanSelectCreatePanel.createBean()> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:176)
Method <jmri.util.swing.BeanSelectCreatePanel.dispose()> calls method <jmri.swing.NamedBeanComboBox.dispose()> in (BeanSelectCreatePanel.java:252)
Method <jmri.util.swing.BeanSelectCreatePanel.getDisplayName()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItemDisplayName()> in (BeanSelectCreatePanel.java:146)
Method <jmri.util.swing.BeanSelectCreatePanel.getNamedBean()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:166)
Method <jmri.util.swing.BeanSelectCreatePanel.isEmpty()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:223)
Method <jmri.util.swing.BeanSelectCreatePanel.isEmpty()> calls method <jmri.swing.NamedBeanComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:224)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> calls method <jmri.swing.ManagerComboBox.getSelectedItem()> in (BeanSelectCreatePanel.java:93)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> calls method <jmri.swing.SystemNameValidator.setManager(jmri.Manager)> in (BeanSelectCreatePanel.java:93)
Method <jmri.util.swing.BeanSelectCreatePanel.lambda$new$2(jmri.swing.SystemNameValidator, java.awt.event.ItemEvent)> has parameter of type <jmri.swing.SystemNameValidator> in (BeanSelectCreatePanel.java:0)
Method <jmri.util.swing.BeanSelectCreatePanel.setDefaultNamedBean(jmri.NamedBean)> calls method <jmri.swing.NamedBeanComboBox.setSelectedItem(java.lang.Object)> in (BeanSelectCreatePanel.java:212)
Method <jmri.util.swing.BeanSelectCreatePanel.setEnabled(boolean)> calls method <jmri.swing.ManagerComboBox.setEnabled(boolean)> in (BeanSelectCreatePanel.java:122)
Method <jmri.util.swing.BeanSelectCreatePanel.setEnabled(boolean)> calls method <jmri.swing.NamedBeanComboBox.setEnabled(boolean)> in (BeanSelectCreatePanel.java:124)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.ManagerComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:107)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.ManagerComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:113)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.NamedBeanComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:109)
Method <jmri.util.swing.BeanSelectCreatePanel.update()> calls method <jmri.swing.NamedBeanComboBox.setVisible(boolean)> in (BeanSelectCreatePanel.java:111)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls constructor <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.<init>()> in (ResizableImagePanel.java:146)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls constructor <net.coobird.thumbnailator.tasks.io.FileImageSource.<init>(java.io.File)> in (ResizableImagePanel.java:150)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.ThumbnailParameter.getImageFilters()> in (ResizableImagePanel.java:156)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.build()> in (ResizableImagePanel.java:148)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.builders.ThumbnailParameterBuilder.scale(double)> in (ResizableImagePanel.java:147)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.filters.ImageFilter.apply(java.awt.image.BufferedImage)> in (ResizableImagePanel.java:157)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.tasks.io.FileImageSource.read()> in (ResizableImagePanel.java:153)
Method <jmri.util.swing.ResizableImagePanel.readImage(java.io.File)> calls method <net.coobird.thumbnailator.tasks.io.FileImageSource.setThumbnailParameter(net.coobird.thumbnailator.ThumbnailParameter)> in (ResizableImagePanel.java:151)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls constructor <com.alexandriasoftware.swing.JSplitButton.<init>(java.lang.String, javax.swing.Icon)> in (SplitButtonColorChooserPanel.java:62)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.addButtonClickedActionListener(com.alexandriasoftware.swing.action.ButtonClickedActionListener)> in (SplitButtonColorChooserPanel.java:63)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.addSplitButtonClickedActionListener(com.alexandriasoftware.swing.action.SplitButtonClickedActionListener)> in (SplitButtonColorChooserPanel.java:71)
Method <jmri.util.swing.SplitButtonColorChooserPanel.buildChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setPopupMenu(javax.swing.JPopupMenu)> in (SplitButtonColorChooserPanel.java:80)
Method <jmri.util.swing.SplitButtonColorChooserPanel.lambda$buildChooser$0(java.awt.event.ActionEvent)> calls method <com.alexandriasoftware.swing.JSplitButton.getParent()> in (SplitButtonColorChooserPanel.java:64)
Method <jmri.util.swing.SplitButtonColorChooserPanel.updateChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setIcon(javax.swing.Icon)> in (SplitButtonColorChooserPanel.java:44)
Method <jmri.util.swing.SplitButtonColorChooserPanel.updateChooser()> calls method <com.alexandriasoftware.swing.JSplitButton.setPopupMenu(javax.swing.JPopupMenu)> in (SplitButtonColorChooserPanel.java:45)
Method <jmri.util.table.JTableToCsvAction.addColtoListIfNotExcluded(java.util.List, int, [I)> has parameter of type <[I> in (JTableToCsvAction.java:0)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:180)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrame.toFront()> in (RailDriverMenuItem.java:174)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleFrameManager.getCurrentThrottleFrame()> in (RailDriverMenuItem.java:168)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleWindow.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:179)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> calls method <jmri.jmrit.throttle.ThrottleWindow.getCurrentThrottleFrame()> in (RailDriverMenuItem.java:170)
Method <jmri.util.usb.RailDriverMenuItem.lambda$setupRailDriver$1(jmri.jmrit.throttle.ThrottleFrameManager)> has parameter of type <jmri.jmrit.throttle.ThrottleFrameManager> in (RailDriverMenuItem.java:0)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.roster.swing.RosterEntryComboBox.getItemCount()> in (RailDriverMenuItem.java:695)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.roster.swing.RosterEntrySelectorPanel.getRosterEntryComboBox()> in (RailDriverMenuItem.java:693)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.dispatchAddress()> in (RailDriverMenuItem.java:664)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getCurrentAddress()> in (RailDriverMenuItem.java:657)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getCurrentAddress()> in (RailDriverMenuItem.java:665)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterEntrySelector()> in (RailDriverMenuItem.java:691)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterSelectedIndex()> in (RailDriverMenuItem.java:672)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.getRosterSelectedIndex()> in (RailDriverMenuItem.java:696)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.selectRosterEntry()> in (RailDriverMenuItem.java:656)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.setRosterSelectedIndex(int)> in (RailDriverMenuItem.java:674)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.AddressPanel.setRosterSelectedIndex(int)> in (RailDriverMenuItem.java:699)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:549)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getAddressPanel()> in (RailDriverMenuItem.java:551)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.getThrottleWindow()> in (RailDriverMenuItem.java:546)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:513)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:528)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleFrame.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:541)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:548)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.nextThrottleFrame()> in (RailDriverMenuItem.java:683)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.previousThrottleFrame()> in (RailDriverMenuItem.java:713)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:509)
Method <jmri.util.usb.RailDriverMenuItem.propertyChange(java.beans.PropertyChangeEvent)> calls method <jmri.jmrit.throttle.ThrottleWindow.removePropertyChangeListener(java.beans.PropertyChangeListener)> in (RailDriverMenuItem.java:537)
Method <jmri.util.xml.XMLUtil.fromHex([C, int, int)> has parameter of type <[C> in (XMLUtil.java:0)
Method <jmri.util.xml.XMLUtil.fromHex([C, int, int)> has return type <[B> in (XMLUtil.java:0)
Method <jmri.util.xml.XMLUtil.toHex([B, int, int)> has parameter of type <[B> in (XMLUtil.java:0)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> calls method <jmri.profile.ProfileUtils.getPreferences(jmri.profile.Profile, java.lang.Class, boolean)> in (ZeroConfPreferences.java:133)
Method <jmri.util.zeroconf.ZeroConfPreferences.savePreferences(jmri.profile.Profile)> has parameter of type <jmri.profile.Profile> in (ZeroConfPreferences.java:0)
Method <jmri.util.zeroconf.ZeroConfServiceManager.create(java.lang.String, int, java.util.HashMap)> calls method <jmri.web.server.WebServerPreferences.getRailroadName()> in (ZeroConfServiceManager.java:130)
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,501 @@
Constructor <jmri.ConditionalVariable.<init>(boolean, jmri.Conditional$Operator, jmri.Conditional$Type, java.lang.String, boolean)> calls method <jmri.jmrit.entryexit.EntryExitPairs.getBySystemName(java.lang.String)> in (ConditionalVariable.java:142)
Constructor <jmri.ConditionalVariable.<init>(boolean, jmri.Conditional$Operator, jmri.Conditional$Type, java.lang.String, boolean)> calls method <jmri.jmrit.logix.OBlockManager.getOBlock(java.lang.String)> in (ConditionalVariable.java:166)
Constructor <jmri.ConditionalVariable.<init>(boolean, jmri.Conditional$Operator, jmri.Conditional$Type, java.lang.String, boolean)> calls method <jmri.jmrit.logix.WarrantManager.getWarrant(java.lang.String)> in (ConditionalVariable.java:158)
Method <jmri.AudioManager.getActiveAudioFactory()> has return type <jmri.jmrit.audio.AudioFactory> in (AudioManager.java:0)
Method <jmri.BlockManager$1.run()> calls constructor <jmri.jmrit.display.layoutEditor.BlockValueFile.<init>()> in (BlockManager.java:47)
Method <jmri.BlockManager$1.run()> calls method <jmri.jmrit.display.layoutEditor.BlockValueFile.writeBlockValues()> in (BlockManager.java:47)
Method <jmri.ConditionalAction.getSound()> has return type <jmri.jmrit.Sound> in (ConditionalAction.java:0)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.OBlock.statusIs(java.lang.String)> in (ConditionalVariable.java:622)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.OBlockManager.getOBlock(java.lang.String)> in (ConditionalVariable.java:617)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.Warrant.getRunMode()> in (ConditionalVariable.java:595)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.Warrant.hasRouteSet()> in (ConditionalVariable.java:591)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.Warrant.isAllocated()> in (ConditionalVariable.java:588)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.Warrant.routeIsFree()> in (ConditionalVariable.java:582)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.Warrant.routeIsOccupied()> in (ConditionalVariable.java:585)
Method <jmri.ConditionalVariable.evaluate()> calls method <jmri.jmrit.logix.WarrantManager.getWarrant(java.lang.String)> in (ConditionalVariable.java:575)
Method <jmri.ConditionalVariable.setName(java.lang.String)> calls method <jmri.jmrit.entryexit.EntryExitPairs.getNamedBean(java.lang.String)> in (ConditionalVariable.java:260)
Method <jmri.ConditionalVariable.setName(java.lang.String)> calls method <jmri.jmrit.logix.OBlockManager.getOBlock(java.lang.String)> in (ConditionalVariable.java:257)
Method <jmri.ConditionalVariable.setName(java.lang.String)> calls method <jmri.jmrit.logix.WarrantManager.getWarrant(java.lang.String)> in (ConditionalVariable.java:254)
Method <jmri.ConditionalVariable.toString()> calls method <jmri.jmrit.beantable.LogixTableAction.formatTime(int, int)> in (ConditionalVariable.java:915)
Method <jmri.ConditionalVariable.toString()> calls method <jmri.jmrit.beantable.LogixTableAction.formatTime(int, int)> in (ConditionalVariable.java:916)
Method <jmri.ConfigureManager.getValidate()> has return type <jmri.jmrit.XmlFile$Validate> in (ConfigureManager.java:0)
Method <jmri.ConfigureManager.setValidate(jmri.jmrit.XmlFile$Validate)> has parameter of type <jmri.jmrit.XmlFile$Validate> in (ConfigureManager.java:0)
Method <jmri.Section.checkDirectionSensor(jmri.SignalHead, int, int, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.addSensorToSignalHeadLogic(java.lang.String, jmri.SignalHead, int)> in (Section.java:2345)
Method <jmri.Section.checkDirectionSensor(jmri.SignalHead, int, int, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.checkDualDirection(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1528)
Method <jmri.Section.checkDualDirection(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1530)
Method <jmri.Section.checkDualDirection(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1532)
Method <jmri.Section.checkDualDirection(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (Section.java:0)
Method <jmri.Section.checkLists(java.util.List, java.util.List, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1510)
Method <jmri.Section.checkLists(java.util.List, java.util.List, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1515)
Method <jmri.Section.checkLists(java.util.List, java.util.List, jmri.jmrit.display.layoutEditor.LayoutBlock)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (Section.java:0)
Method <jmri.Section.getDirectionForBlocks(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1547)
Method <jmri.Section.getDirectionForBlocks(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1549)
Method <jmri.Section.getDirectionForBlocks(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1557)
Method <jmri.Section.getDirectionForBlocks(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1562)
Method <jmri.Section.getDirectionForBlocks(jmri.jmrit.display.layoutEditor.LayoutBlock, jmri.jmrit.display.layoutEditor.LayoutBlock)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (Section.java:0)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1303)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1318)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1376)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1391)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1307)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1322)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1380)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1395)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1306)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1321)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1379)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1394)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1292)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1307)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1322)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1340)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1341)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1347)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1353)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1365)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1380)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1395)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1413)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1414)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1420)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1426)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1312)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1327)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1385)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1400)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:1278)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:1303)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1279)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1391)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1280)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1318)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectD()> in (Section.java:1281)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectD()> in (Section.java:1376)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1440)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1447)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1454)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1461)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1284)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1289)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1336)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1409)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1295)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1368)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1432)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1305)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1320)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1378)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1393)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1278)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1279)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1280)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1281)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.SLIP_A> in (Section.java:1303)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.SLIP_C> in (Section.java:1318)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.SLIP_D> in (Section.java:1376)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_B> in (Section.java:1391)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_SLIP> in (Section.java:1295)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_SLIP> in (Section.java:1368)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_SLIP> in (Section.java:1432)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.getDirectionSlip(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutTurnout> in (Section.java:0)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:952)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:960)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:979)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:956)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:964)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:983)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:955)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:963)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:982)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1001)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1003)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1008)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1010)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1021)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1027)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1034)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1040)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1047)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1048)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1054)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1061)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:970)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:988)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:939)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:952)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:960)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:940)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:979)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:941)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1016)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1018)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1069)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:944)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:997)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:954)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:962)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:981)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:939)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:940)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:941)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_A> in (Section.java:952)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_A> in (Section.java:960)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_B> in (Section.java:979)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.getDirectionStandardTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutTurnout> in (Section.java:0)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1108)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1123)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1190)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1205)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1112)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1127)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1194)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1209)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1111)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1126)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1193)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1208)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1097)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1112)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1127)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1145)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1146)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1152)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1158)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1164)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1165)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1171)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1172)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1179)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1194)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1209)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1227)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1228)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1234)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1240)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1246)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1247)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1253)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1254)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1117)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1132)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1199)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1214)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:1083)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:1108)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1084)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1123)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1085)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1205)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectD()> in (Section.java:1086)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectD()> in (Section.java:1190)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1089)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1094)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1141)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1223)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1262)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1100)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1164)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1171)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1182)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1246)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1253)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1110)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1125)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1192)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1207)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1083)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1084)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1085)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1086)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_A> in (Section.java:1108)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_B> in (Section.java:1123)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_C> in (Section.java:1205)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.TURNOUT_D> in (Section.java:1190)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:1100)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:1182)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_XOVER> in (Section.java:1164)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_XOVER> in (Section.java:1253)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_XOVER> in (Section.java:1171)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_XOVER> in (Section.java:1246)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.getDirectionXoverTurnout(jmri.jmrit.display.layoutEditor.LayoutTurnout, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutTurnout> in (Section.java:0)
Method <jmri.Section.getLayoutTurnoutFromTurnoutName(java.lang.String, jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutEditor.getLayoutTurnouts()> in (Section.java:2353)
Method <jmri.Section.getLayoutTurnoutFromTurnoutName(java.lang.String, jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:2354)
Method <jmri.Section.getLayoutTurnoutFromTurnoutName(java.lang.String, jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (Section.java:0)
Method <jmri.Section.getLayoutTurnoutFromTurnoutName(java.lang.String, jmri.jmrit.display.layoutEditor.LayoutEditor)> has return type <jmri.jmrit.display.layoutEditor.LayoutTurnout> in (Section.java:0)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1724)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1726)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1736)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1738)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1783)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1785)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1795)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls constructor <jmri.jmrit.display.layoutEditor.TrackNode.<init>(jmri.jmrit.display.layoutEditor.LayoutTrack, jmri.jmrit.display.layoutEditor.HitPointType, jmri.jmrit.display.layoutEditor.TrackSegment, boolean, int)> in (Section.java:1797)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getAnchorBoundariesThisBlock(jmri.Block)> in (Section.java:1675)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getDirectionFromAnchor(java.util.List, java.util.List, jmri.jmrit.display.layoutEditor.PositionablePoint)> in (Section.java:1685)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getLayoutTurnoutsThisBlock(jmri.Block)> in (Section.java:1835)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getLevelCrossingsThisBlock(jmri.Block)> in (Section.java:1709)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getSignalHeadAtAnchor(jmri.jmrit.display.layoutEditor.PositionablePoint, jmri.Block, boolean)> in (Section.java:1680)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getSignalHeadAtAnchor(jmri.jmrit.display.layoutEditor.PositionablePoint, jmri.Block, boolean)> in (Section.java:1689)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.isInternalLevelXingAC(jmri.jmrit.display.layoutEditor.LevelXing, jmri.Block)> in (Section.java:1716)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.isInternalLevelXingBD(jmri.jmrit.display.layoutEditor.LevelXing, jmri.Block)> in (Section.java:1775)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.layoutTurnoutHasRequiredSignals(jmri.jmrit.display.layoutEditor.LayoutTurnout)> in (Section.java:1838)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1690)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1692)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1865)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1887)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1898)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1900)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1921)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1923)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:1972)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2012)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2014)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2039)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2041)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2089)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2112)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2118)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2152)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2164)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2176)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2205)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2219)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2233)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.getBlock()> in (Section.java:2247)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1670)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutEditor.getConnectivityUtil()> in (Section.java:1665)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:1887)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:2112)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectA()> in (Section.java:2205)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1898)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:1923)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:2012)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:2041)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:2176)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectB()> in (Section.java:2219)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1900)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:1921)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:2014)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:2039)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:2118)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:2164)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectC()> in (Section.java:2233)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getConnectD()> in (Section.java:2247)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:1897)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:1899)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:1920)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:1922)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:2011)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:2013)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:2038)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getContinuingSense()> in (Section.java:2040)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1865)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:1972)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:2089)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLayoutBlock()> in (Section.java:2152)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkType()> in (Section.java:1840)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkType()> in (Section.java:1946)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkType()> in (Section.java:1951)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkType()> in (Section.java:2068)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkType()> in (Section.java:2134)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getLinkedTurnoutName()> in (Section.java:1948)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:1855)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2070)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2140)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2222)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2227)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2237)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA1Name()> in (Section.java:2271)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:1857)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:2072)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:2222)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:2227)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:2237)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA2Name()> in (Section.java:2274)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA3Name()> in (Section.java:2077)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalA3Name()> in (Section.java:2142)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:1862)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:1953)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:1998)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2136)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2208)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2213)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2251)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2278)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB1Name()> in (Section.java:2282)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:1955)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:1999)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:2208)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:2213)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:2251)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalB2Name()> in (Section.java:2285)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:1864)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:1960)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2005)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2082)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2138)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2209)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2250)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2255)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2290)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC1Name()> in (Section.java:2294)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:1962)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:2007)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:2209)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:2250)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:2255)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalC2Name()> in (Section.java:2297)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD1Name()> in (Section.java:2223)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD1Name()> in (Section.java:2236)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD1Name()> in (Section.java:2241)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD1Name()> in (Section.java:2301)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD2Name()> in (Section.java:2223)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD2Name()> in (Section.java:2236)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD2Name()> in (Section.java:2241)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getSignalD2Name()> in (Section.java:2304)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:1950)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:2173)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnout()> in (Section.java:2310)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1841)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1842)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:1843)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2192)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2193)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2194)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2206)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2207)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2220)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2221)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2234)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2235)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2248)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2249)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2277)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.getTurnoutType()> in (Section.java:2289)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutTurnout.isTurnoutTypeSlip()> in (Section.java:2262)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectA()> in (Section.java:1712)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectA()> in (Section.java:1724)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectA()> in (Section.java:1738)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectB()> in (Section.java:1713)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectB()> in (Section.java:1783)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectB()> in (Section.java:1797)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectC()> in (Section.java:1714)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectC()> in (Section.java:1726)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectC()> in (Section.java:1736)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectD()> in (Section.java:1715)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectD()> in (Section.java:1785)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getConnectD()> in (Section.java:1795)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalAName()> in (Section.java:1718)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalAName()> in (Section.java:1721)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalAName()> in (Section.java:1728)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalAName()> in (Section.java:1764)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalAName()> in (Section.java:1766)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalBName()> in (Section.java:1777)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalBName()> in (Section.java:1780)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalBName()> in (Section.java:1787)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalBName()> in (Section.java:1823)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalBName()> in (Section.java:1825)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalCName()> in (Section.java:1719)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalCName()> in (Section.java:1733)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalCName()> in (Section.java:1740)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalCName()> in (Section.java:1750)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalCName()> in (Section.java:1752)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalDName()> in (Section.java:1778)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalDName()> in (Section.java:1792)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalDName()> in (Section.java:1799)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalDName()> in (Section.java:1809)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LevelXing.getSignalDName()> in (Section.java:1811)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.PositionablePoint.getConnect1()> in (Section.java:1690)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.PositionablePoint.getConnect2()> in (Section.java:1692)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.PositionablePoint.getEastBoundSignal()> in (Section.java:1678)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.PositionablePoint.getWestBoundSignal()> in (Section.java:1678)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1690)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1692)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1712)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1713)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1714)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1715)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1887)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1898)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1900)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1921)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:1923)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2012)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2014)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2039)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2041)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2112)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2118)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2164)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2176)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2205)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2219)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2233)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.TrackSegment.getLayoutBlock()> in (Section.java:2247)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_A> in (Section.java:1723)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_A> in (Section.java:1737)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_B> in (Section.java:1782)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_B> in (Section.java:1796)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_C> in (Section.java:1725)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_C> in (Section.java:1735)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_D> in (Section.java:1784)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.HitPointType.LEVEL_XING_D> in (Section.java:1794)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$LinkType.FIRST_3_WAY> in (Section.java:2068)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$LinkType.NO_LINK> in (Section.java:1840)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$LinkType.NO_LINK> in (Section.java:1946)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$LinkType.SECOND_3_WAY> in (Section.java:2134)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$LinkType.THROAT_TO_THROAT> in (Section.java:1951)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:2194)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:2206)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:2220)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:2234)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.DOUBLE_XOVER> in (Section.java:2248)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_TURNOUT> in (Section.java:1842)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_XOVER> in (Section.java:2193)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_XOVER> in (Section.java:2221)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.LH_XOVER> in (Section.java:2249)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_TURNOUT> in (Section.java:1841)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_XOVER> in (Section.java:2192)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_XOVER> in (Section.java:2207)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.RH_XOVER> in (Section.java:2235)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.SINGLE_SLIP> in (Section.java:2277)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.SINGLE_SLIP> in (Section.java:2289)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> gets field <jmri.jmrit.display.layoutEditor.LayoutTurnout$TurnoutType.WYE_TURNOUT> in (Section.java:1843)
Method <jmri.Section.placeDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (Section.java:0)
Method <jmri.Section.placeSensorInCrossover(java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.setAlternateColor(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.setUseExtraColor(boolean)> in (Section.java:2536)
Method <jmri.Section.setAlternateColor(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:2534)
Method <jmri.Section.setAlternateColorFromActiveBlock(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.setUseExtraColor(boolean)> in (Section.java:2567)
Method <jmri.Section.setAlternateColorFromActiveBlock(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.setUseExtraColor(boolean)> in (Section.java:2582)
Method <jmri.Section.setAlternateColorFromActiveBlock(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:2565)
Method <jmri.Section.setAlternateColorFromActiveBlock(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:2580)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1587)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getExitBlockForTrackNode(jmri.jmrit.display.layoutEditor.TrackNode, jmri.Block)> in (Section.java:1601)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1586)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.getNextNode(jmri.jmrit.display.layoutEditor.TrackNode, int)> in (Section.java:1600)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1592)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:1606)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1585)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> calls method <jmri.jmrit.display.layoutEditor.TrackNode.reachedEndOfTrack()> in (Section.java:1599)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.ConnectivityUtil> in (Section.java:0)
Method <jmri.Section.setDirectionSensorByConnectivity(jmri.jmrit.display.layoutEditor.TrackNode, jmri.jmrit.display.layoutEditor.TrackNode, jmri.SignalHead, jmri.Block, jmri.jmrit.display.layoutEditor.ConnectivityUtil)> has parameter of type <jmri.jmrit.display.layoutEditor.TrackNode> in (Section.java:0)
Method <jmri.Section.suppressNameUpdate(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.setSuppressNameUpdate(boolean)> in (Section.java:2666)
Method <jmri.Section.suppressNameUpdate(boolean)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:2664)
Method <jmri.Section.validate(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlock.updatePathsUsingPanel(jmri.jmrit.display.layoutEditor.LayoutEditor)> in (Section.java:2427)
Method <jmri.Section.validate(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutBlockManager.getByUserName(java.lang.String)> in (Section.java:2423)
Method <jmri.Section.validate(jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (Section.java:0)
Method <jmri.SectionManager.removeDirectionSensorsFromSSL(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.ConnectivityUtil.removeSensorsFromSignalHeadLogic(java.util.List, jmri.SignalHead)> in (SectionManager.java:217)
Method <jmri.SectionManager.removeDirectionSensorsFromSSL(jmri.jmrit.display.layoutEditor.LayoutEditor)> calls method <jmri.jmrit.display.layoutEditor.LayoutEditor.getConnectivityUtil()> in (SectionManager.java:198)
Method <jmri.SectionManager.removeDirectionSensorsFromSSL(jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (SectionManager.java:0)
Method <jmri.SectionManager.setupDirectionSensors(jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (SectionManager.java:0)
Method <jmri.SectionManager.validateAllSections(jmri.util.JmriJFrame, jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (SectionManager.java:0)
Method <jmri.SignalMastLogic.getFacingBlock()> has return type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (SignalMastLogic.java:0)
Method <jmri.SignalMastLogic.getProtectingBlock(jmri.SignalMast)> has return type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (SignalMastLogic.java:0)
Method <jmri.SignalMastLogic.removeConflictingLogic(jmri.SignalMast, jmri.jmrit.display.layoutEditor.LevelXing)> has parameter of type <jmri.jmrit.display.layoutEditor.LevelXing> in (SignalMastLogic.java:0)
Method <jmri.SignalMastLogic.setConflictingLogic(jmri.SignalMast, jmri.jmrit.display.layoutEditor.LevelXing)> has parameter of type <jmri.jmrit.display.layoutEditor.LevelXing> in (SignalMastLogic.java:0)
Method <jmri.SignalMastLogic.setFacingBlock(jmri.jmrit.display.layoutEditor.LayoutBlock)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutBlock> in (SignalMastLogic.java:0)
Method <jmri.SignalMastLogicManager.discoverSignallingDest(jmri.SignalMast, jmri.jmrit.display.layoutEditor.LayoutEditor)> has parameter of type <jmri.jmrit.display.layoutEditor.LayoutEditor> in (SignalMastLogicManager.java:0)
@@ -0,0 +1,137 @@
Constructor <jmri.implementation.AccessoryOpsModeProgrammerFacade.<init>(jmri.Programmer, java.lang.String, int, jmri.AddressedProgrammer)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (AccessoryOpsModeProgrammerFacade.java:64)
Constructor <jmri.implementation.AddressedHighCvProgrammerFacade.<init>(jmri.Programmer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (AddressedHighCvProgrammerFacade.java:38)
Constructor <jmri.implementation.MultiIndexProgrammerFacade.<init>(jmri.Programmer, java.lang.String, java.lang.String, boolean, boolean)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (MultiIndexProgrammerFacade.java:92)
Constructor <jmri.implementation.OffsetHighCvProgrammerFacade.<init>(jmri.Programmer, java.lang.String, java.lang.String, java.lang.String, java.lang.String)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (OffsetHighCvProgrammerFacade.java:42)
Constructor <jmri.implementation.OpsModeDelayedProgrammerFacade.<init>(jmri.Programmer, int)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (OpsModeDelayedProgrammerFacade.java:43)
Constructor <jmri.implementation.ResettingOffsetHighCvProgrammerFacade.<init>(jmri.Programmer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (ResettingOffsetHighCvProgrammerFacade.java:47)
Constructor <jmri.implementation.TwoIndexTcsProgrammerFacade.<init>(jmri.Programmer)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (TwoIndexTcsProgrammerFacade.java:43)
Constructor <jmri.implementation.VerifyWriteProgrammerFacade.<init>(jmri.Programmer)> calls constructor <jmri.jmrix.AbstractProgrammerFacade.<init>(jmri.Programmer)> in (VerifyWriteProgrammerFacade.java:48)
Constructor <jmri.jmrit.display.RpsPositionIcon.<init>(jmri.jmrit.display.Editor)> calls method <jmri.jmrix.rps.Distributor.addMeasurementListener(jmri.jmrix.rps.MeasurementListener)> in (RpsPositionIcon.java:34)
Constructor <jmri.jmrit.display.RpsPositionIcon.<init>(jmri.jmrit.display.Editor)> calls method <jmri.jmrix.rps.Distributor.instance()> in (RpsPositionIcon.java:34)
Constructor <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngineAction.<init>()> calls method <jmri.jmrix.nce.NceSystemConnectionMemo.getDisabled()> in (NceConsistEngineAction.java:33)
Constructor <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngineAction.<init>()> calls method <jmri.jmrix.nce.NceSystemConnectionMemo.getNceTrafficController()> in (NceConsistEngineAction.java:32)
Constructor <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngineAction.<init>()> calls method <jmri.jmrix.nce.NceSystemConnectionMemo.getNceUsbSystem()> in (NceConsistEngineAction.java:31)
Constructor <jmri.managers.ManagerDefaultSelector.<init>()> calls method <jmri.jmrix.SystemConnectionMemoManager.getDefault()> in (ManagerDefaultSelector.java:90)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (ConnectionLabel.java:26)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (ConnectionLabel.java:26)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionConfig.name()> in (ConnectionLabel.java:23)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionStatus.addConnection(java.lang.String, java.lang.String)> in (ConnectionLabel.java:26)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionStatus.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (ConnectionLabel.java:29)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (ConnectionLabel.java:26)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (ConnectionLabel.java:29)
Constructor <jmri.swing.ConnectionLabel.<init>(jmri.jmrix.ConnectionConfig)> gets field <jmri.jmrix.JmrixConfigPane.NONE> in (ConnectionLabel.java:23)
Method <jmri.jmrit.DccLocoAddressSelector.setAddress(jmri.DccLocoAddress)> calls method <jmri.jmrix.openlcb.OpenLcbLocoAddress.getNode()> in (DccLocoAddressSelector.java:109)
Method <jmri.jmrit.beantable.AbstractTableAction.configureManagerComboBox(jmri.swing.ManagerComboBox, jmri.Manager, java.lang.Class)> calls method <jmri.jmrix.SystemConnectionMemoManager.getDefault()> in (AbstractTableAction.java:242)
Method <jmri.jmrit.beantable.AbstractTableAction.configureManagerComboBox(jmri.swing.ManagerComboBox, jmri.Manager, java.lang.Class)> calls method <jmri.jmrix.SystemConnectionMemoManager.getSystemConnectionMemoForUserName(java.lang.String)> in (AbstractTableAction.java:243)
Method <jmri.jmrit.beantable.SensorTableAction.setDefaultState(javax.swing.JFrame)> calls method <jmri.jmrix.internal.InternalSensorManager.getDefaultStateForNewSensors()> in (SensorTableAction.java:354)
Method <jmri.jmrit.beantable.SensorTableAction.setDefaultState(javax.swing.JFrame)> calls method <jmri.jmrix.internal.InternalSensorManager.setDefaultStateForNewSensors(int)> in (SensorTableAction.java:391)
Method <jmri.jmrit.beantable.SignalHeadTableAction.makeEditSignalWindow()> calls method <jmri.jmrix.acela.AcelaAddress.getNodeFromSystemName(java.lang.String, jmri.jmrix.acela.AcelaSystemConnectionMemo)> in (SignalHeadTableAction.java:2208)
Method <jmri.jmrit.beantable.SignalHeadTableAction.makeEditSignalWindow()> calls method <jmri.jmrix.acela.AcelaNode.getOutputSignalHeadType(int)> in (SignalHeadTableAction.java:2217)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls constructor <jmri.jmrix.acela.AcelaSignalHead.<init>(java.lang.String, java.lang.String, jmri.jmrix.acela.AcelaSystemConnectionMemo)> in (SignalHeadTableAction.java:1302)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls constructor <jmri.jmrix.acela.AcelaSignalHead.<init>(java.lang.String, jmri.jmrix.acela.AcelaSystemConnectionMemo)> in (SignalHeadTableAction.java:1300)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls constructor <jmri.jmrix.grapevine.SerialSignalHead.<init>(java.lang.String, java.lang.String, jmri.jmrix.grapevine.GrapevineSystemConnectionMemo)> in (SignalHeadTableAction.java:1351)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaAddress.getNodeFromSystemName(java.lang.String, jmri.jmrix.acela.AcelaSystemConnectionMemo)> in (SignalHeadTableAction.java:1314)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadType(int, int)> in (SignalHeadTableAction.java:1317)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadType(int, int)> in (SignalHeadTableAction.java:1320)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadType(int, int)> in (SignalHeadTableAction.java:1323)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadType(int, int)> in (SignalHeadTableAction.java:1326)
Method <jmri.jmrit.beantable.SignalHeadTableAction.okPressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadType(int, int)> in (SignalHeadTableAction.java:1330)
Method <jmri.jmrit.beantable.SignalHeadTableAction.updatePressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaAddress.getNodeFromSystemName(java.lang.String, jmri.jmrix.acela.AcelaSystemConnectionMemo)> in (SignalHeadTableAction.java:2546)
Method <jmri.jmrit.beantable.SignalHeadTableAction.updatePressed(java.awt.event.ActionEvent)> calls method <jmri.jmrix.acela.AcelaNode.setOutputSignalHeadTypeString(int, java.lang.String)> in (SignalHeadTableAction.java:2553)
Method <jmri.jmrit.display.RpsPositionIcon.dispose()> calls method <jmri.jmrix.rps.Distributor.instance()> in (RpsPositionIcon.java:317)
Method <jmri.jmrit.display.RpsPositionIcon.dispose()> calls method <jmri.jmrix.rps.Distributor.removeMeasurementListener(jmri.jmrix.rps.MeasurementListener)> in (RpsPositionIcon.java:317)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getReading()> in (RpsPositionIcon.java:259)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getReading()> in (RpsPositionIcon.java:260)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getReading()> in (RpsPositionIcon.java:276)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getX()> in (RpsPositionIcon.java:287)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getY()> in (RpsPositionIcon.java:288)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.getZ()> in (RpsPositionIcon.java:269)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Measurement.isOkPoint()> in (RpsPositionIcon.java:269)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Reading.getId()> in (RpsPositionIcon.java:260)
Method <jmri.jmrit.display.RpsPositionIcon.notify(jmri.jmrix.rps.Measurement)> calls method <jmri.jmrix.rps.Reading.getId()> in (RpsPositionIcon.java:276)
Method <jmri.jmrit.display.RpsPositionIcon.setRpsCurrentLocation()> calls method <jmri.jmrix.rps.Measurement.getX()> in (RpsPositionIcon.java:380)
Method <jmri.jmrit.display.RpsPositionIcon.setRpsCurrentLocation()> calls method <jmri.jmrix.rps.Measurement.getY()> in (RpsPositionIcon.java:381)
Method <jmri.jmrit.mailreport.ReportContext.getReport(boolean)> calls method <jmri.jmrix.ConnectionConfig.getDisabled()> in (ReportContext.java:66)
Method <jmri.jmrit.mailreport.ReportContext.getReport(boolean)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (ReportContext.java:66)
Method <jmri.jmrit.mailreport.ReportContext.getReport(boolean)> calls method <jmri.jmrix.ConnectionConfig.getManufacturer()> in (ReportContext.java:66)
Method <jmri.jmrit.mailreport.ReportContext.getReport(boolean)> calls method <jmri.jmrix.ConnectionConfig.name()> in (ReportContext.java:66)
Method <jmri.jmrit.mailreport.ReportContext.getReport(boolean)> calls method <jmri.jmrix.ConnectionConfigManager.getConnections()> in (ReportContext.java:62)
Method <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngines.getNceConsist(int)> calls method <jmri.jmrix.nce.NceTrafficController.sendNceMessage(jmri.jmrix.nce.NceMessage, jmri.jmrix.nce.NceListener)> in (NceConsistEngines.java:226)
Method <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngines.readConsistMemory(int)> calls method <jmri.jmrix.nce.NceBinaryCommand.accMemoryRead(int)> in (NceConsistEngines.java:256)
Method <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngines.readConsistMemory(int)> calls method <jmri.jmrix.nce.NceMessage.createBinaryMessage(jmri.jmrix.nce.NceTrafficController, [B, int)> in (NceConsistEngines.java:257)
Method <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngines.reply(jmri.jmrix.nce.NceReply)> calls method <jmri.jmrix.nce.NceReply.getElement(int)> in (NceConsistEngines.java:280)
Method <jmri.jmrit.operations.rollingstock.engines.tools.NceConsistEngines.reply(jmri.jmrix.nce.NceReply)> calls method <jmri.jmrix.nce.NceReply.getNumDataElements()> in (NceConsistEngines.java:273)
Method <jmri.jmrit.progsupport.ProgOpsModePane.actionPerformed(java.awt.event.ActionEvent)> gets field <jmri.jmrix.loconet.LnProgrammerManager.LOCONETSV2MODE> in (ProgOpsModePane.java:329)
Method <jmri.jmrit.progsupport.ProgOpsModePane.setProgrammerFromGui(jmri.Programmer)> gets field <jmri.jmrix.loconet.LnProgrammerManager.LOCONETSV2MODE> in (ProgOpsModePane.java:365)
Method <jmri.jmrit.roster.swing.RosterFrame.buildWindow()> calls method <jmri.jmrix.ConnectionStatus.addPropertyChangeListener(java.beans.PropertyChangeListener)> in (RosterFrame.java:344)
Method <jmri.jmrit.roster.swing.RosterFrame.buildWindow()> calls method <jmri.jmrix.ConnectionStatus.instance()> in (RosterFrame.java:344)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$25(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1534)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$25(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1535)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$25(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfigManager.iterator()> in (RosterFrame.java:1533)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$26(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1557)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$26(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1558)
Method <jmri.jmrit.roster.swing.RosterFrame.lambda$updateProgrammerStatus$26(java.lang.String, jmri.jmrix.ConnectionConfigManager)> calls method <jmri.jmrix.ConnectionConfigManager.iterator()> in (RosterFrame.java:1556)
Method <jmri.jmrit.roster.swing.RosterFrame.systemsMenu()> calls method <jmri.jmrix.ActiveSystemsMenu.addItems(javax.swing.JMenuBar)> in (RosterFrame.java:1445)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1568)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1571)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1576)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1629)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1632)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (RosterFrame.java:1637)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (RosterFrame.java:1568)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (RosterFrame.java:1629)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (RosterFrame.java:1568)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (RosterFrame.java:1589)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (RosterFrame.java:1629)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.instance()> in (RosterFrame.java:1648)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.isConnectionOk(java.lang.String, java.lang.String)> in (RosterFrame.java:1568)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.isConnectionOk(java.lang.String, java.lang.String)> in (RosterFrame.java:1629)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.isSystemOk(java.lang.String)> in (RosterFrame.java:1589)
Method <jmri.jmrit.roster.swing.RosterFrame.updateProgrammerStatus(java.beans.PropertyChangeEvent)> calls method <jmri.jmrix.ConnectionStatus.isSystemOk(java.lang.String)> in (RosterFrame.java:1648)
Method <jmri.jmrit.throttle.AddressPanel.consistRosterSelected()> calls method <jmri.jmrix.nce.consist.NceConsistRoster.entryFromTitle(java.lang.String)> in (AddressPanel.java:513)
Method <jmri.jmrit.throttle.AddressPanel.consistRosterSelected()> calls method <jmri.jmrix.nce.consist.NceConsistRosterEntry.getConsistNumber()> in (AddressPanel.java:521)
Method <jmri.jmrit.throttle.AddressPanel.consistRosterSelected()> calls method <jmri.jmrix.nce.consist.NceConsistRosterEntry.getLoco1DccAddress()> in (AddressPanel.java:516)
Method <jmri.jmrit.throttle.AddressPanel.consistRosterSelected()> calls method <jmri.jmrix.nce.consist.NceConsistRosterEntry.getLoco1DccAddress()> in (AddressPanel.java:528)
Method <jmri.jmrit.throttle.AddressPanel.consistRosterSelected()> calls method <jmri.jmrix.nce.consist.NceConsistRosterEntry.isLoco1LongAddress()> in (AddressPanel.java:516)
Method <jmri.jmrit.throttle.AddressPanel.initGUI()> calls method <jmri.jmrix.nce.consist.NceConsistRoster.fullRosterComboBox()> in (AddressPanel.java:441)
Method <jmri.jmrit.throttle.AddressPanel.initGUI()> calls method <jmri.jmrix.nce.consist.NceConsistRoster.numEntries()> in (AddressPanel.java:442)
Method <jmri.managers.ProxyLightManager.makeInternalManager()> calls method <jmri.jmrix.internal.InternalSystemConnectionMemo.getLightManager()> in (ProxyLightManager.java:29)
Method <jmri.managers.ProxyReporterManager.makeInternalManager()> calls method <jmri.jmrix.internal.InternalSystemConnectionMemo.getReporterManager()> in (ProxyReporterManager.java:22)
Method <jmri.managers.ProxySensorManager.makeInternalManager()> calls method <jmri.jmrix.internal.InternalSystemConnectionMemo.getSensorManager()> in (ProxySensorManager.java:24)
Method <jmri.managers.ProxyTurnoutManager.makeInternalManager()> calls method <jmri.jmrix.internal.InternalSystemConnectionMemo.getTurnoutManager()> in (ProxyTurnoutManager.java:26)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getAdapter()> in (JsonUtilHttpService.java:526)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getAdapter()> in (JsonUtilHttpService.java:531)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (JsonUtilHttpService.java:525)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (JsonUtilHttpService.java:529)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getDisabled()> in (JsonUtilHttpService.java:523)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (JsonUtilHttpService.java:530)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.getManufacturer()> in (JsonUtilHttpService.java:527)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfig.name()> in (JsonUtilHttpService.java:530)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.ConnectionConfigManager.iterator()> in (JsonUtilHttpService.java:522)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.PortAdapter.getSystemConnectionMemo()> in (JsonUtilHttpService.java:526)
Method <jmri.server.json.util.JsonUtilHttpService.getSystemConnections(jmri.server.json.JsonRequest)> calls method <jmri.jmrix.PortAdapter.getSystemConnectionMemo()> in (JsonUtilHttpService.java:531)
Method <jmri.server.web.app.WebAppServlet.processAbout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (WebAppServlet.java:146)
Method <jmri.server.web.app.WebAppServlet.processAbout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getDisabled()> in (WebAppServlet.java:144)
Method <jmri.server.web.app.WebAppServlet.processAbout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (WebAppServlet.java:147)
Method <jmri.server.web.app.WebAppServlet.processAbout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.name()> in (WebAppServlet.java:147)
Method <jmri.server.web.app.WebAppServlet.processAbout(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfigManager.iterator()> in (WebAppServlet.java:143)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (ConnectionLabel.java:36)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (ConnectionLabel.java:40)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getDisabled()> in (ConnectionLabel.java:33)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (ConnectionLabel.java:40)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (ConnectionLabel.java:43)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (ConnectionLabel.java:47)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.getManufacturer()> in (ConnectionLabel.java:38)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.name()> in (ConnectionLabel.java:43)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionConfig.name()> in (ConnectionLabel.java:47)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionStatus.instance()> in (ConnectionLabel.java:40)
Method <jmri.swing.ConnectionLabel.update()> calls method <jmri.jmrix.ConnectionStatus.isConnectionOk(java.lang.String, java.lang.String)> in (ConnectionLabel.java:40)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getDefault()> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.isValid()> calls method <jmri.jmrix.SystemConnectionMemoManager.getSystemConnectionMemoForSystemPrefix(java.lang.String)> in (AbstractActionModel.java:89)
Method <jmri.util.startup.AbstractActionModel.performAction()> calls method <jmri.jmrix.swing.SystemConnectionAction.setSystemConnectionMemo(jmri.SystemConnectionMemo)> in (AbstractActionModel.java:125)
Method <jmri.util.startup.AbstractActionModelFactory.lambda$getDialogMessage$3(javax.swing.JComboBox, javax.swing.JLabel, javax.swing.JList, javax.swing.event.ListSelectionEvent)> calls method <jmri.jmrix.swing.SystemConnectionAction.getSystemConnectionMemoClasses()> in (AbstractActionModelFactory.java:111)
Method <jmri.web.servlet.about.AboutServlet.processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getConnectionName()> in (AboutServlet.java:39)
Method <jmri.web.servlet.about.AboutServlet.processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getDisabled()> in (AboutServlet.java:38)
Method <jmri.web.servlet.about.AboutServlet.processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.getInfo()> in (AboutServlet.java:39)
Method <jmri.web.servlet.about.AboutServlet.processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfig.name()> in (AboutServlet.java:39)
Method <jmri.web.servlet.about.AboutServlet.processRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)> calls method <jmri.jmrix.ConnectionConfigManager.iterator()> in (AboutServlet.java:37)
+10
View File
@@ -0,0 +1,10 @@
#
#Sat Oct 03 16:37:00 PDT 2020
classes\ that\ reside\ in\ a\ package\ 'jmri.jmrit..'\ should\ only\ be\ accessed\ by\ any\ package\ ['jmri.jmrit..',\ 'apps..']=788ffcd8-d213-479d-a8a6-d7854e18adef
no\ classes\ that\ reside\ in\ a\ package\ 'jmri.util..'\ should\ depend\ on\ classes\ that\ reside\ outside\ of\ packages\ ['jmri',\ 'jmri.util..',\ 'java..',\ 'javax..',\ 'org..']=1399b807-0aa3-487f-8c8a-1ff1268293fd
classes\ that\ reside\ in\ a\ package\ 'jmri.jmrix..'\ should\ only\ be\ accessed\ by\ any\ package\ ['jmri.jmrix..',\ 'apps..']=c240fd69-85bb-485e-af60-5c59a4b51978
no\ classes\ that\ reside\ in\ a\ package\ 'jmri.jmris'\ should\ depend\ on\ classes\ that\ reside\ in\ a\ package\ 'jmri.jmrit..'=0593c15b-2922-4e2d-8f6d-cc41a895be82
no\ classes\ that\ reside\ in\ a\ package\ 'jmri.util..'\ should\ depend\ on\ classes\ that\ reside\ outside\ of\ packages\ ['jmri',\ 'jmri.util..',\ 'java..',\ 'javax..',\ 'org..',\ 'edu.umd..']=369a58b8-e2b0-4077-a3de-68b398fb3610
no\ classes\ that\ reside\ in\ a\ package\ 'jmri'\ should\ depend\ on\ classes\ that\ reside\ in\ a\ package\ 'jmri.jmrit..'=84324b13-47c7-4ccb-9494-e59787afc534
no\ classes\ that\ reside\ in\ a\ package\ 'jmri..'\ and\ are\ not\ annotated\ with\ @Deprecated\ should\ depend\ on\ classes\ that\ reside\ in\ a\ package\ 'org.apache.log4j'=708e61a4-8bb0-49a6-8881-fd7cbc8446dc
classes\ that\ reside\ in\ a\ package\ 'apps..'\ should\ only\ be\ accessed\ by\ any\ package\ ['apps..']=f32654a4-1dcc-4e71-aab2-75039c24bbf4
+3025
View File
File diff suppressed because it is too large Load Diff
+82
View File
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Check Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
<!--
Checkstyle-Configuration: JMRI
Description: Checkstyle configuration for JMRI
-->
<module name="Checker">
<!-- default severity is warning to not fail in CI -->
<!-- individual checks that should fail in CI have error severity -->
<property name="severity" value="warning"/>
<module name="SuppressWarningsFilter"/>
<module name="BeforeExecutionExclusionFileFilter">
<!-- do not check images -->
<property name="fileNamePattern" value=".*(gif|png)$"/>
</module>
<module name="TreeWalker">
<module name="SuppressWarningsHolder"/>
<module name="RedundantImport">
<property name="severity" value="error"/>
</module>
<module name="UnusedImports"/>
<module name="PackageDeclaration">
<property name="severity" value="error"/>
</module>
<module name="UpperEll">
<property name="severity" value="error"/>
</module>
<module name="InterfaceIsType"/>
<module name="MissingOverride">
<property name="severity" value="error"/>
</module>
<module name="Regexp">
<!-- Flag uses of FindBugs NonNull that need to be javax.annotations.Nonnull -->
<property name="format" value="edu\.umd\.cs\.findbugs\.annotations\.NonNull"/>
<property name="illegalPattern" value="true"/>
<property name="severity" value="error"/>
<!-- message is appended to "Line matches the illegal pattern " -->
<property name="message" value="edu.umd.cs.findbugs.annotations.NonNull (replace with javax.annotations.Nonnull)" />
</module>
<module name="Regexp">
<!-- Flag uses of e.g. {0} in a logging statement (should be {} ) -->
<!-- the attribute takes the regex string, without Java quoting, then uses the Java regex support -->
<property name="format" value="log\..*\(.*\{[0-9][0-9]*}"/>
<property name="illegalPattern" value="true"/>
<property name="severity" value="error"/>
<!-- message is appended to "Line matches the illegal pattern " -->
<property name="message" value="{digit} in logging call, should be {}" />
</module>
</module>
<module name="FileTabCharacter">
<property name="severity" value="error"/>
<property name="eachLine" value="true"/>
<property name="fileExtensions" value="java"/>
</module>
<module name="NewlineAtEndOfFile">
<property name="severity" value="error"/>
<property name="lineSeparator" value="lf"/>
<property name="fileExtensions" value="java, xml, py"/>
</module>
<!-- disable newline at end of file check for JHelpDev generated content -->
<module name="SuppressionSingleFilter">
<property name="checks" value="NewlineAtEndOfFile"/>
<property name="files" value="help\/(en|fr)/JmriHelp_(en|fr)(Index|TOC)\.xml$"/>
</module>
<!-- from https://stackoverflow.com/questions/32903412/how-to-tell-checkstyle-to-check-all-lines-for-linefeed-newline-lf-and-not-crlf/33000451 -->
<module name="RegexpMultiline">
<property name="format" value="\r\n"/>
<property name="message" value="CRLF line endings are prohibited"/>
</module>
<!-- disable warnings for existing interfaces that are not types -->
<!-- serves as example of suppressing a check against a Regex of files -->
<module name="SuppressionSingleFilter">
<property name="checks" value="InterfaceIsType"/>
<property name="files" value="(\/ussctc\/|\/rps\/)Constants.java$"/>
</module>
<!-- disable package name check on sample package-info.java -->
<module name="SuppressionSingleFilter">
<property name="checks" value="PackageDeclaration"/>
<property name="files" value="java\/package-info.java$"/>
</module>
</module>
+21
View File
@@ -0,0 +1,21 @@
coverage:
# number of decimal places to display
precision: 1
round: up
status:
project:
default:
# allow a 2% project drop to reduce noise
threshold: 2%
patch:
default:
# this is the coverage of the patch code only, don't hold to high average
threshold: 20%
# see https://docs.codecov.io/docs/codecov-yaml#section-default-yaml for defaults
github_checks:
annotations: false
# see https://docs.codecov.io/docs/github-checks-beta
+123
View File
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
# default_lcf.xml
# Default logging configuration file for JMRI project development.
#
# If making changes here that should be included in the distribution
# please also update the file for distribution at 'scripts/default_lcf.xml'
# JMRI itself uses Log4J et al for logging. Some of the components
# that JMRI uses, however, use other approaches.
# purejavacomm: Uses a "purejavacomm.loglevel" system property not controlled here,
# c.f.the build.xml file for how we handle it when running under Ant.
# #############################################################
# Log4J2 Configuration
# #############################################################
# Output is sent to system.err, generally a console window.
# The output info consists of relative time, priority, thread name,
# category name, nested diagnostic context, and the message in
# that order.
# For the general syntax of this Configuration File see
# https://logging.apache.org/log4j/2.x/manual/configuration.html#XML
# Valid Level names are OFF, FATAL, ERROR, WARN, INFO, DEBUG and TRACE.
# The root category is set to log priority INFO and above
# to the console (A1), to rolling log files (T), and to a single file (R).
# The root category is the only category that is given
# a default priority. All other categories do not have a default
# priority, in which case the priority is inherited from the
# hierarchy. See the end of the file for examples of how to
# control this at a finer level.
-->
<Configuration status="INFO">
<Appenders>
<!-- The Appenders use PatternLayout to format the LogEvent, see -->
<!-- https://logging.apache.org/log4j/2.x/manual/layouts.html#pattern-layout -->
<!-- BEWARE, some pattern characters are expensive operations and may impact performance. -->
<!-- A1 Console Appender writes to system.err to synchronize with e.g. exception traces -->
<Console name="A1" target="SYSTEM_ERR">
<PatternLayout pattern="%d{ABSOLUTE} %-37.37c{8} %-5p - %m [%t]%n"/>
<!-- %d{ABSOLUTE}: Time in HH:mm:ss, such as "15:30:45".
%-37.37c{8}: Logger (class) name with a width of 37 characters, left-aligned.
The {8} specifies that only the last 8 segments of the fully-qualified class name will be shown.
%-5p: This part specifies the log level with a width of 5 characters, left-aligned.
%m: This part represents the actual log message.
[%t]: This part represents the thread name in square brackets.
%n: This is the newline character, which adds a new line after each log message. -->
</Console>
<!-- R File Appender set to output to a single log file.
This is defined for systems that can't (or don't want to) have rolling files. -->
<RollingFile name="R" fileName="${sys:jmri.log.path}session.log"
filePattern="${sys:jmri.log.path}session.log" append="false">
<PatternLayout pattern="%d{ISO8601} %-37.37c{2} %-5p - %m [%t]%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="5MB"/>
</Policies>
</RollingFile>
<!-- T Rolling File Appender is set to output to a rolling file.
This only works for certain systems, but manages files in a convenient way.
T is defined to preserve messages between sessions and to keep up to
2 previous log files in addition to the current. -->
<RollingFile name="T" fileName="${sys:jmri.log.path}messages.log"
filePattern="${sys:jmri.log.path}messages.%i.log" append="true">
<PatternLayout pattern="%d{ISO8601} %-37.37c{2} %-5p - %m [%t]%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1000KB"/>
</Policies>
<DefaultRolloverStrategy max="2"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root Logger -->
<Root level="INFO">
<AppenderRef ref="A1"/><!-- Console Appender -->
<AppenderRef ref="R"/><!-- Session Log File -->
<AppenderRef ref="T"/><!-- Rolling Log File -->
</Root>
<!-- Jetty Server Logger only logging WARN since it can be verbose at points -->
<Logger name="org.eclipse.jetty" level="WARN"/>
<Logger name="org.eclipse.jetty.server.handler" level="WARN"/>
<!-- Turning off logging for Java Xerces; emits WARNING messages during routine use -->
<Logger name="org.jdom2.transform" level="OFF"/>
<!-- JMDNS Logger -->
<Logger name="javax.jmdns.impl" level="ERROR"/>
<!-- libraries used by BiDiB support -->
<Logger name="RX" level="WARN"/>
<Logger name="TX" level="WARN"/>
<Logger name="RAW" level="WARN"/>
<!-- Examples of changing priority of specific categories (classes, packages): -->
<!-- Remove the comment symbols before and after the class, then relaunch JMRI to activate. -->
<!-- Valid Level names are OFF, FATAL, ERROR, WARN, INFO, DEBUG and TRACE. -->
<!-- <Logger name="jmri" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.beantable.LogixTableAction" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.display" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.display.IndicatorTrackPaths" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.progsupport" level="TRACE"/> -->
<!-- <Logger name="jmri.jmrit.symbolicprog.tabbedframe" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.symbolicprog.DecVariableValue" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrix" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrix.nce.NceTrafficController" level="WARN"/> -->
<!-- <Logger name="jmri.jmrit.display.layoutEditor" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.display.layoutEditor.LayoutBlock" level="DEBUG"/> -->
<!-- <Logger name="jmri.jmrit.operations" level="DEBUG"/> -->
</Loggers>
</Configuration>
+27
View File
@@ -0,0 +1,27 @@
# List of files to exclude when rsync'ing this directory
# to a web sie. This allows exclusion of every other
# file from delete, e.g. in other repositories
.git
.gitignore
/exclude-list
/include-list
/xml/XSLT/pages
/JavaDoc/doc/*
/xml/XSLT/properties
.classpath
//.project
/.settings
/build.xml
/default_lcf.xml
/java
/lib
/nbproject
/python.properties
/release.properties
/runtest.csh
/scripts
/serialver.csh
/tests_lcf.xml
+372
View File
@@ -0,0 +1,372 @@
JMRI is free software; you can redistribute it and/or modify it
under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
JMRI is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of version 2 of the GNU General Public License is
appended below. For more information, see
<http://www.gnu.org/licenses/>.
Linking JMRI or its parts statically or dynamically with other
modules is making a combined work based on this library. Thus, the
terms and conditions of the GNU General Public License 2.0 cover
the whole combination.
As a special exception, the copyright holders of JMRI give you
permission to link JMRI with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on JMRI. If you modify JMRI, you may extend this exception
to your version of JMRI, but you are not obligated to do so. If you do
not wish to do so, delete this exception statement from your version.
-------------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
+12
View File
@@ -0,0 +1,12 @@
This is the JMRI "help" directory, the root of the
JMRI JmriHelp file tree.
To ease later localization, the English-language help is in
the en/ directory.
See the COPYING file for license information.
For more information on JMRI, see
https://jmri.org
+5
View File
@@ -0,0 +1,5 @@
RewriteEngine on
# Provide redirects for removed pages
RewriteRule "index.html" "/help/en/index.shtml" [R=302,L]
File diff suppressed because it is too large Load Diff
+59
View File
@@ -0,0 +1,59 @@
<!-- SidebarA.shtml -->
<!-- This special sidebar is to be used only by Acknowledgements.shtml -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<dt><a href="Acknowledgements.shtml">Acknowledgements</a></dt>
<dd>
<a href="#A">A</a>
<a href="#B">B</a>
<a href="#C">C</a>
<a href="#D">D</a>
<a href="#E">E</a>
<a href="#F">F</a>
<a href="#G">G</a>
<a href="#H">H</a>
<a href="#I">I</a>
<br>
<a href="#J">J</a>
<a href="#K">K</a>
<a href="#L">L</a>
<a href="#M">M</a>
<a href="#N">N</a>
<a href="#O">O</a>
<a href="#P">P</a>
<a href="#Q">Q</a>
<a href="#R">R</a>
<br>
<a href="#S">S</a>
<a href="#T">T</a>
<a href="#U">U</a>
<a href="#V">V</a>
<a href="#W">W</a>
<a href="#X">X</a>
<a href="#Y">Y</a>
<a href="#Z">Z</a>
<dd>
<!--#include virtual="/help/en/parts/SidebarApplications.shtml" -->
<!--#include virtual="/help/en/parts/SidebarTools.shtml" -->
<!--#include virtual="/help/en/parts/SidebarLayoutAutomation.shtml" -->
<!--#include virtual="/help/en/parts/SidebarSupportedHardware.shtml" -->
<!--#include virtual="/help/en/parts/SidebarInstall.shtml" -->
</dl>
<!--#include virtual="/help/en/parts/SidebarTail.shtml" -->
</div> <!-- closes #side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /SidebarA.shtml -->
+372
View File
@@ -0,0 +1,372 @@
JMRI is free software; you can redistribute it and/or modify it
under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
JMRI is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
A copy of version 2 of the GNU General Public License is
appended below. For more information, see
<http://www.gnu.org/licenses/>.
Linking JMRI or its parts statically or dynamically with other
modules is making a combined work based on this library. Thus, the
terms and conditions of the GNU General Public License 2.0 cover
the whole combination.
As a special exception, the copyright holders of JMRI give you
permission to link JMRI with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on JMRI. If you modify JMRI, you may extend this exception
to your version of JMRI, but you are not obligated to do so. If you do
not wish to do so, delete this exception statement from your version.
-------------------------------------------------------------------
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
+6
View File
@@ -0,0 +1,6 @@
RewriteEngine on
# Provide redirects for removed pages
RewriteRule "index.shtml" "/help/en/manual/index.shtml" [R=302,L]
+13
View File
@@ -0,0 +1,13 @@
</ul>
</div>
<div id="searchID" class="help-list hide">
<h3>Search result</h3>
<ul id="searchResult"></ul>
</div>
<iframe class="help-page" id="page" height="600" src="../index.shtml" title="JMRI Help"></iframe>
</div><p class="clear"> &nbsp; </p>
</body>
</html>
+220
View File
@@ -0,0 +1,220 @@
<!DOCTYPE html>
<html lang="en">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>JMRI Help System: JMRI Local</title>
<meta name="author" content="Dave Sand">
<meta name="keywords" content="JMRI Help Index">
<!--=====================================================================-->
<!--This file is automatically generated by Ant from JmriHelp_enTOC.xml-->
<!--Do not edit it directly-->
<!--=====================================================================-->
<script type="text/javascript" src="search.json"></script>
<script>
var use_internet = false;
function openLink(link) {
if (link.includes("/manual/")) {
if (!use_internet) {
if (window.confirm("Manual help pages are not installed.\nIf internet is available, use jmri.org?")) {
use_internet = true;
}
}
if (use_internet) {
link = "https://jmri.org/help/en/manual/" + link;
} else {
return;
}
}
document.getElementById("page").src = link;
}
function onLoad() {
var url = window.location.href;
var i = url.indexOf('#');
if (i > 0) {
// Loaded via JMRI, the page url is in the url fragment
var urlFragment = url.slice(i+1);
var link = urlFragment.replace(/\./g, '/')
// The page url might include a fragment after the first underscore
var frag = '';
var j = link.indexOf('_');
if (j > 0) {
var fragParts = [link.slice(0,j), link.slice(j+1)];
link = fragParts[0];
frag = '#' + fragParts[1];
}
var newURL = '../' + link + '.shtml' + frag;
openLink(newURL);
} else {
// Directly loaded by the browser
openLink('../index.shtml');
}
}
function selectTOC() {
document.getElementById("indexID").classList.add("hide");
document.getElementById("searchID").classList.add("hide");
document.getElementById("tocID").classList.remove("hide");
}
function selectIndex() {
document.getElementById("tocID").classList.add("hide");
document.getElementById("searchID").classList.add("hide");
document.getElementById("indexID").classList.remove("hide");
}
function selectSearch() {
// Get the search argument
var searchTerm = window.prompt('-- Enter search term --\n\
Format: full-word | starts-with* | *ends-with');
if (!searchTerm) {
// console.log("Nothing returned")
return;
}
// Get the search type based on asterisks
var type = 'fullword';
if (searchTerm.indexOf('*') == 0) {
type = 'endswith';
searchTerm = searchTerm.substring(1);
}
if (searchTerm.indexOf('*') == searchTerm.length - 1) {
if (type == 'fullword') {
type = 'startswith';
} else {
alert('Word fragment searches, *xxxx*, are not supported');
return;
}
searchTerm = searchTerm.substring(0, searchTerm.length - 1);
}
var numChars = searchTerm.length;
if (numChars < 3) {
alert('The search term, ' + searchTerm + ', has to be at least three characters long');
return;
}
// Build the json content
window.searchIndexData = JSON.parse(searchIndexWholeWord);
switch (type) {
case 'startswith':
window.searchIndexData = JSON.parse(searchIndexBeginning);
break;
case 'endswith':
window.searchIndexData = JSON.parse(searchIndexEnd);
break;
}
var wordMap = window.searchIndexData.words[numChars];
var fileIDs = wordMap[searchTerm];
if (typeof fileIDs === 'undefined') {
alert("The search term \""+searchTerm+"\" is not found");
return;
}
// Remove previous results, if any
var searchResult = document.getElementById("searchResult");
while (searchResult.firstChild) {
searchResult.removeChild(searchResult.lastChild);
}
// Get the iframe
let target = document.getElementById("page");
// Build the result list
for (i=0; i < fileIDs.length; i++) {
if (fileIDs[i] != -1) {
let fileName = window.searchIndexData.files[fileIDs[i]][0];
let title = window.searchIndexData.files[fileIDs[i]][1];
var liTag = document.createElement("li");
var aTag = document.createElement("a");
aTag.onclick = function(){ target.src = "../../../" + fileName; window.scrollTo(0,0); return false; };
var text = document.createTextNode(title);
aTag.appendChild(text);
liTag.appendChild(aTag);
searchResult.appendChild(liTag);
}
}
// Switch to the result list
document.getElementById("tocID").classList.add("hide");
document.getElementById("indexID").classList.add("hide");
document.getElementById("searchID").classList.remove("hide");
}
function searchHelp() {
var text = 'Search options:\n\
A single word\n\
The beginnging of a word followed by an asterisk, for example loco*\n\
The end of a word preceded by an asterisk, for example *net';
alert(text);
}
</script>
<style>
h2, p {
text-align: center;
}
.hide {
display: none;
}
a {
text-decoration: underline;
cursor: pointer;
}
.float-container {
border: 3px solid #fff;
padding: 20px;
}
.help-list {
width: 30%;
float: left;
padding: 20px;
border: 2px solid black;
height: 600px;
overflow: auto;
}
.help-page {
width: 60%;
float: left;
padding: 20px;
border: 2px solid black;
}
.clear {
clear: both;
}
</style>
</head>
<body onload="onLoad()">
<div class="help-container">
<div>
<h2>JmriHelp</h2>
<p>
<button onclick="selectTOC()">Table of Contents</button>
<button onclick="selectIndex()">Index</button>
<button onclick="selectSearch()">Search...</button>
<label onclick="searchHelp()">?</label>
</p>
</div>
<div id="tocID" class="help-list">
<h3>Table of Contents</h3>
<ul>
+896
View File
@@ -0,0 +1,896 @@
<?xml version="1.0" encoding="UTF-8"?>
<index xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://jmri.org/xml/schema/help-index.xsd">
<indexitem text="Frequently Asked Questions (FAQ) " target="html.FAQ"/>
<indexitem text="Acela (CTI) - Hardware, Connection, Tools " target="html.hardware.acela.index"/>
<indexitem text="Acknowledgements " target="Acknowledgements"/>
<indexitem text="Additional Applications with connections to JMRI " target="html.apps.index_addapp"/>
<indexitem text="Anyma DMX " target="html.hardware.anyma.index"/>
<indexitem text="AnyRail " target="html.apps.index_addapp"/>
<indexitem text="AppleScript " target="html.tools.scripting.AppleScript"/>
<indexitem text="Arduinos " target="html.hardware.arduino.index">
<indexitem text="Connection Details " target="html.hardware.arduino.index_connect"/>
<indexitem text="Example Uses " target="html.hardware.arduino.index_using"/>
</indexitem>
<indexitem text="Aspect (Signaling-) " target="html.tools.signaling.AspectSignaling"/>
<indexitem text="Audio " target="html.tools.Audio"/>
<indexitem text="Audio Table " target="package.jmri.jmrit.beantable.AudioTable"/>
<indexitem text="Automation in JMRI " target="html.tools.automation.index"/>
<indexitem text="Bachrus - Hardware, Connection, Tools " target="html.hardware.bachrus.index"/>
<indexitem text="BiDiB - Hardware, Connection, Tools " target="html.hardware.bidib.index">
<indexitem text="Signal Masts " target="html.hardware.bidib.BiDiB-SignalMast"/>
</indexitem>
<indexitem text="Blocks " target="html.tools.Blocks">
<indexitem text="Add Blocks " target="package.jmri.jmrit.beantable.BlockAddEdit"/>
<indexitem text="Block Table " target="package.jmri.jmrit.beantable.BlockTable"/>
<indexitem text="Block Tracking " target="html.tools.tracker.index"/>
<indexitem text="Edit Blocks " target="package.jmri.jmrit.beantable.BlockEdit"/>
</indexitem>
<indexitem text="Block Table " target="package.jmri.jmrit.beantable.BlockTable"/>
<indexitem text="CATS (Crandic Automated Traffic System) " target="html.apps.index_addapp"/>
<indexitem text="C/MRI - Hardware, Connection, Tools " target="html.hardware.cmri.CMRI">
<indexitem text="C/MRI Signals " target="html.hardware.cmri.Signals"/>
<indexitem text="Check Pin Assignments " target="package.jmri.jmrix.cmri.serial.assignment.ListFrame"/>
<indexitem text="Configure Nodes " target="package.jmri.jmrix.cmri.serial.nodeconfig.NodeConfigFrame"/>
<indexitem text="Diagnostics " target="package.jmri.jmrix.cmri.serial.diagnostic.DiagnosticFrame"/>
<indexitem text="Byte Communications using Arduinos " target="html.hardware.arduino.ArduinoCMRIByteComm"/>
</indexitem>
<indexitem text="Cab Signals " target="package.jmri.jmrit.cabsignals.CabSignalPane"/>
<indexitem text="CAN Bus - Hardware, Connection, Tools " target="html.hardware.can.index"/>
<indexitem text="CBUS " target="html.hardware.can.cbus.index">
<indexitem text="Connection Details " target="html.hardware.merg.Details"/>
<indexitem text="Console Tool " target="package.jmri.jmrix.can.cbus.swing.console.CbusConsoleFrame"/>
<indexitem text="Event Capture Tool " target="package.jmri.jmrix.can.cbus.swing.eventrequestmonitor.CbusEventRequestTablePane"/>
<indexitem text="Event Table Tool " target="package.jmri.jmrix.can.cbus.swing.eventtable.EventTablePane"/>
<indexitem text="Firmware update " target="package.jmri.jmrix.can.cbus.swing.bootloader.CbusBootloaderPane"/>
<indexitem text="Naming Events " target="html.hardware.can.cbus.Names"/>
<indexitem text="Node Config Tool " target="package.jmri.jmrix.can.cbus.swing.nodeconfig.NodeConfigToolPane"/>
<indexitem text="Send Frame / Event Tool " target="package.jmri.jmrix.can.swing.send.CanSendFrame"/>
<indexitem text="Simulator " target="package.jmri.jmrix.can.cbus.swing.simulator.SimulatorPane"/>
<indexitem text="Voltage / Current Meter " target="html.hardware.can.cbus.CbusMeters"/>
</indexitem>
<indexitem text="Circuit Builder (CPE) " target="package.jmri.jmrit.display.CircuitBuilder"/>
<indexitem text="Configuration Profiles (Setup) " target="html.setup.profiles"/>
<indexitem text="Consisting Tool " target="html.tools.consisttool.ConsistTool"/>
<indexitem text="Continuous Integration (CI) (Developers) " target="html.doc.Technical.ContinuousIntegration"/>
<indexitem text="Control Panel Editor (CPE) " target="package.jmri.jmrit.display.ControlPanelEditor"/>
<indexitem text="CTC (Tool) " target="package.jmri.jmrit.ctc.CTC">
<indexitem text="CTC Main " target="package.jmri.jmrit.ctc.CTC_ctcMain"/>
<indexitem text="CTCEditor ">
<indexitem text="CTC Editor " target="package.jmri.jmrit.ctc.CTC_editor"/>
<indexitem text="Edit Buttons ">
<indexitem text="Call On " target="package.jmri.jmrit.ctc.CTC_frmCO"/>
<indexitem text="Code button " target="package.jmri.jmrit.ctc.CTC_frmCB"/>
<indexitem text="Indication locking " target="package.jmri.jmrit.ctc.CTC_frmIL"/>
<indexitem text="Signal direction indicators " target="package.jmri.jmrit.ctc.CTC_frmSIDI"/>
<indexitem text="Signal direction lever " target="package.jmri.jmrit.ctc.CTC_frmSIDL"/>
<indexitem text="Switch direction indicators " target="package.jmri.jmrit.ctc.CTC_frmSWDI"/>
<indexitem text="Switch direction lever " target="package.jmri.jmrit.ctc.CTC_frmSWDL"/>
<indexitem text="Traffic locking " target="package.jmri.jmrit.ctc.CTC_frmTRL"/>
<indexitem text="Turnout locking " target="package.jmri.jmrit.ctc.CTC_frmTUL"/>
</indexitem>
<indexitem text="Menus " target="package.jmri.jmrit.ctc.CTC_menuFile">
<indexitem text="Configure menu " target="package.jmri.jmrit.ctc.CTC_menuCfgDeb">
<indexitem text="Debugging " target="package.jmri.jmrit.ctc.CTC_menuCfgDeb"/>
<indexitem text="Defaults " target="package.jmri.jmrit.ctc.CTC_menuCfgDef"/>
<indexitem text="Fleeting " target="package.jmri.jmrit.ctc.CTC_menuCfgFlt"/>
<indexitem text="GUI Design " target="package.jmri.jmrit.ctc.CTC_menuCfgGui"/>
<indexitem text="Patterns " target="package.jmri.jmrit.ctc.CTC_menuCfgPat"/>
</indexitem>
<indexitem text="Edit menu " target="package.jmri.jmrit.ctc.CTC_menuEditFind">
<indexitem text="Fix Error(s)... " target="package.jmri.jmrit.ctc.CTC_menuEditFix"/>
</indexitem>
<indexitem text="File menu " target="package.jmri.jmrit.ctc.CTC_menuFile">
<indexitem text="Import " target="package.jmri.jmrit.ctc.CTC_menuFile"/>
<indexitem text="New " target="package.jmri.jmrit.ctc.CTC_menuFile"/>
</indexitem>
</indexitem>
<indexitem text="O.S. Sections List " target="package.jmri.jmrit.ctc.CTC_osList"/>
</indexitem>
<indexitem text="Definitions " target="package.jmri.jmrit.ctc.CTC_ctcDefinitions"/>
<indexitem text="Files " target="package.jmri.jmrit.ctc.CTC_ctcFiles"/>
</indexitem>
<indexitem text="DCC Specialties - Hardware, Connection, Tools " target="html.hardware.misc.DccSpecialties"/>
<indexitem text="DCC-EX Hardware, Connection, Tools " target="html.hardware.dcc-ex.index"/>
<indexitem text="Debug Menu " target="html.apps.PanelPro.DebugMenu"/>
<indexitem text="DecoderPro " target="html.apps.DecoderPro.index">
<indexitem text="Introduction " target="html.apps.DecoderPro.index"/>
<indexitem text="The Roster Pane " target="manual.DecoderPro3.Comp_Setup_Roster"/>
<indexitem text="Programming Decoders " target="manual.DecoderPro3.Programmer_Setup"/>
<indexitem text="Installing New Decoder Definitions " target="html.apps.DecoderPro.FileUpdate"/>
<indexitem text="Error Messages " target="html.tools.programmer.messages"/>
<indexitem text="Manual " target="manual.index"/>
</indexitem>
<indexitem text="Digikeijs (Digirails) - Hardware, Connection, Tools " target="html.hardware.digirails.index"/>
<indexitem text="DigiTrainsPro (Throttle for Android) " target="html.apps.index_addapp"/>
<indexitem text="Digitrax - Hardware, Connection, Tools " target="html.hardware.loconet.Digitrax">
<indexitem text="BDL16 " target="package.jmri.jmrix.loconet.bdl16.BDL16Frame"/>
<indexitem text="BDL162 " target="package.jmri.jmrix.loconet.bdl16.BDL16Frame"/>
<indexitem text="BDL168 " target="package.jmri.jmrix.loconet.bdl16.BDL16Frame"/>
<indexitem text="Digitrax Duplex Radio System " target="package.jmri.jmrix.loconet.duplexgroup.DuplexGroupTabbedPanel"/>
<indexitem text="DS54 " target="html.hardware.loconet.DS54"/>
<indexitem text="DS64 " target="package.jmri.jmrix.loconet.ds64.DS64TabbedPanel"/>
<indexitem text="LocoNet ID " target="package.jmri.jmrix.loconet.locoid.LocoIdFrame"/>
<indexitem text="LocoNet Interface Statistics " target="package.jmri.jmrix.loconet.locostats.LocoStatsFrame"/>
<indexitem text="LocoNet Monitor " target="package.jmri.jmrix.loconet.locomon.LocoMonFrame"/>
<indexitem text="LocoNet Tools " target="html.hardware.loconet.LocoNetTools"/>
<indexitem text="PM4 " target="package.jmri.jmrix.loconet.pm4.PM4Frame"/>
<indexitem text="PR2 " target="html.hardware.loconet.PR2"/>
<indexitem text="PR3 " target="html.hardware.loconet.PR3"/>
<indexitem text="PR3 Mode Selection Tool " target="package.jmri.jmrix.loconet.pr3.swing.Pr3Select"/>
<indexitem text="SE8C " target="package.jmri.jmrix.loconet.se8.SE8Frame"/>
<indexitem text="Slot Monitor " target="package.jmri.jmrix.loconet.slotmon.SlotMonFrame"/>
<indexitem text="Sound ">
<indexitem text="Downloader " target="package.jmri.jmrix.loconet.soundloader.LoaderFrame"/>
<indexitem text="SDF Sound Program Editor " target="package.jmri.jmrix.loconet.sdfeditor.EditorFrame"/>
<indexitem text="SPJ Project File Editor " target="package.jmri.jmrix.loconet.soundloader.EditorFrame"/>
</indexitem>
<indexitem text="Standalone LocoNet " target="html.hardware.loconet.StandaloneLocoNet"/>
<indexitem text="Throttle Messages " target="package.jmri.jmrix.loconet.swing.throttlemsg.MessageFrame"/>
<indexitem text="UR90 " target="package.jmri.jmrix.loconet.locoid.LocoIdFrame"/>
<indexitem text="UR90X " target="package.jmri.jmrix.loconet.locoid.LocoIdFrame"/>
<indexitem text="UR91 " target="package.jmri.jmrix.loconet.locoid.LocoIdFrame"/>
<indexitem text="UR92 " target="package.jmri.jmrix.loconet.duplexgroup.DuplexGroupTabbedPanel"/>
</indexitem>
<indexitem text="Dispatcher (Tool) " target="package.jmri.jmrit.dispatcher.Dispatcher"/>
<indexitem text="DispatcherPro " target="html.apps.DispatcherPro.index">
<indexitem text="Active Trains " target="package.jmri.jmrit.dispatcher.Dispatcher_atrains"/>
<indexitem text="Dispatcher Options " target="package.jmri.jmrit.dispatcher.Options"/>
<indexitem text="Glossary " target="package.jmri.jmrit.dispatcher.Dispatcher"/>
<indexitem text="New Train " target="package.jmri.jmrit.dispatcher.NewTrain"/>
<indexitem text="Requirements " target="package.jmri.jmrit.dispatcher.Dispatcher_requirements"/>
</indexitem>
<indexitem text="Dispatcher System (Python Extension) " target="html.scripthelp.DispatcherSystem.DispatcherSystem"/>
<indexitem text="Dropbox (Profile Sharing) " target="html.setup.Dropbox"/>
<indexitem text="EasyDCC - Hardware, Connection, Tools " target="html.hardware.easydcc.EasyDCC"/>
<indexitem text="Eclipse IDE (Developers) " target="html.doc.Technical.Eclipse"/>
<indexitem text="ECoS - Hardware, Connection, Tools " target="html.hardware.ecos.index"/>
<indexitem text="Entry-Exit Routing - Tool " target="html.tools.EntryExit"/>
<indexitem text="Error Codes " target="html.apps.Errors"/>
<indexitem text="Fast Clock " target="html.tools.fastclock.index">
<indexitem text="LocoNet Fast Clock " target="html.tools.fastclock.LocoNetClock"/>
<indexitem text="Setting The Internal Clock " target="package.jmri.jmrit.simpleclock.SimpleClockFrame"/>
</indexitem>
<indexitem text="File Locations (JMRI-, User-) " target="html.setup.Files"/>
<indexitem text="FindBugs (Developers) " target="html.doc.Technical.SpotBugs"/>
<indexitem text="Fleischmann - Hardware, Connection, Tools " target="html.hardware.loconet.Fleischmann"/>
<indexitem text="Git (Developers) ">
<indexitem text="Getting the Source Code Via Git " target="html.doc.Technical.getgitcode"/>
<indexitem text="Git FAQs " target="html.doc.Technical.GitFAQ"/>
<indexitem text="Git for Developers " target="html.doc.Technical.gitdeveloper"/>
</indexitem>
<indexitem text="Glossary of JMRI Terms " target="glossary.index"/>
<indexitem text="Grapevine - Hardware, Connection, Tools " target="html.hardware.grapevine.index"/>
<indexitem text="Hardware, Connecting to " target="html.hardware.index"/>
<indexitem text="Hornby Elite " target="html.hardware.XPressNet.index"/>
<indexitem text="Help Menu " target="html.apps.PanelPro.HelpMenu"/>
<indexitem text="ID Tag " target="html.tools.IdTags"/>
<indexitem text="IEEE 801.2.5.4 - Hardware, Connection, Tools ">
<indexitem text="Add Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.AddNodeFrame"/>
<indexitem text="Configure Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.NodeConfigFrame"/>
<indexitem text="Edit Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.EditNodeFrame"/>
</indexitem>
<indexitem text="Install JMRI, How To " target="html.setup.index"/>
<indexitem text="InstallTest (Setup on Windows) " target="package.apps.InstallTest.InstallTest"/>
<indexitem text="Insteon " target="html.hardware.powerline.index"/>
<indexitem text="IntelliJ IDE (Developers) " target="html.doc.Technical.IntelliJ"/>
<indexitem text="Internationalization/I18N (Developers) " target="html.doc.Technical.I8N"/>
<indexitem text="iPhone/iPod, Connecting to (Hardware) " target="html.tools.throttle.AdvancedThrottleControl_iphone"/>
<indexitem text="Issue Reporter " target="package.apps.util.issuereporter.swing.IssueReporter"/>
<indexitem text="Javadoc (Developers) " target="html.doc.Technical.Javadoc"/>
<indexitem text="JavaHelp (Developers) " target="html.doc.Technical.Help"/>
<indexitem text="JUnit, Testing Code with (Developers) " target="html.doc.Technical.JUnit"/>
<indexitem text="Jynstruments " target="html.tools.scripting.Jynstruments"/>
<indexitem text="Jython (in Scripting) " target="html.tools.scripting.Python"/>
<indexitem text="Jython Apps for JMRI " target="html.tools.scripting.JythonApps"/>
<indexitem text="Layout Editor (Panels) " target="package.jmri.jmrit.display.LayoutEditor"/>
<indexitem text="LccPro " target="package.apps.gui3.lccpro.LccPro"/>
<indexitem text="LDT Signals " target="html.tools.signaling.ldt.output"/>
<indexitem text="Lenz XpressNet - Hardware, Connection, Tools " target="html.hardware.XPressNet.index"/>
<indexitem text="Lights " target="html.tools.Lights">
<indexitem text="What are Lights? " target="html.tools.Lights_what"/>
<indexitem text="Add/Edit a Light " target="package.jmri.jmrit.beantable.LightAddEdit"/>
<indexitem text="Light Table " target="package.jmri.jmrit.beantable.LightTable"/>
<indexitem text="Variable Intensity Lights " target="html.tools.Lights_variablelight"/>
</indexitem>
<indexitem text="Light Table " target="package.jmri.jmrit.beantable.LightTable"/>
<indexitem text="Lionel TMCC - Hardware, Connection, Tools " target="html.hardware.tmcc.index"/>
<indexitem text="LNCV Programmer " target="package.jmri.jmrix.loconet.swing.lncvprog.LncvProgPane"/>
<indexitem text="LocoNet ">
<indexitem text="BDL16/BDL162/BDL168 " target="package.jmri.jmrix.loconet.bdl16.BDL16Frame"/>
<indexitem text="Command Station Configuration Tool " target="package.jmri.jmrix.loconet.cmdstnconfig.CmdStnConfigFrame"/>
<indexitem text="DS54 " target="html.hardware.loconet.DS54"/>
<indexitem text="DS64 " target="package.jmri.jmrix.loconet.ds64.DS64TabbedPanel"/>
<indexitem text="Duplex Group " target="package.jmri.jmrix.loconet.duplexgroup.DuplexGroupTabbedPanel"/>
<indexitem text="Fast Clock " target="package.jmri.jmrix.loconet.clockmon.ClockMonFrame"/>
<indexitem text="Firmware Downloader " target="package.jmri.jmrix.loconet.downloader.LoaderFrame"/>
<indexitem text="Manage LNCV Modules " target="package.jmri.jmrix.loconet.swing.lncvprog.LncvProgPane"/>
<indexitem text="Manage LNSV1 Modules " target="package.jmri.jmrix.loconet.swing.lnsv1prog.Lnsv1ProgPane"/>
<indexitem text="LocoBuffer " target="html.hardware.loconet.LocoBuffer"/>
<indexitem text="LocoBuffer-II " target="html.hardware.loconet.LocoBufferII"/>
<indexitem text="LocoBuffer-USB " target="html.hardware.loconet.LocoBufferUSB"/>
<indexitem text="LocoBuffer-NG " target="html.hardware.loconet.LocoBufferUSB"/>
<indexitem text="LocoIO " target="html.hardware.loconet.LocoIO"/>
<indexitem text="LocoNet Addressing " target="html.hardware.loconet.Addressing"/>
<indexitem text="LocoNet Monitor " target="package.jmri.jmrix.loconet.locomon.LocoMonFrame"/>
<indexitem text="LocoNet Status " target="package.jmri.jmrix.loconet.locostats.LocoStatsFrame"/>
<indexitem text="Packet sender " target="package.jmri.jmrix.loconet.locogen.LocoGenFrame"/>
<indexitem text="PM4 " target="package.jmri.jmrix.loconet.pm4.PM4Frame"/>
<indexitem text="PR2 " target="html.hardware.loconet.PR2"/>
<indexitem text="PR3 " target="html.hardware.loconet.PR3"/>
<indexitem text="SE8C " target="package.jmri.jmrix.loconet.se8.SE8Frame"/>
<indexitem text="Slot Monitor " target="package.jmri.jmrix.loconet.slotmon.SlotMonFrame"/>
<indexitem text="Standalone LocoNet " target="html.hardware.loconet.StandaloneLocoNet"/>
</indexitem>
<indexitem text="Logix " target="html.tools.Logix">
<indexitem text="Add Logix " target="package.jmri.jmrit.beantable.LogixAddEdit"/>
<indexitem text="Add/Edit Conditionals using the List Editor " target="package.jmri.jmrit.conditional.ConditionalListEditor"/>
<indexitem text="Add/Edit Conditionals using the Tree Editor " target="package.jmri.jmrit.conditional.ConditionalTreeEditor"/>
<indexitem text="Conditional State Variable and Action List " target="package.jmri.jmrit.conditional.StateVariableActionList"/>
<indexitem text="Edit Logix " target="package.jmri.jmrit.beantable.LogixAddEdit"/>
<indexitem text="Logix Table " target="package.jmri.jmrit.beantable.LogixTable"/>
</indexitem>
<indexitem text="LogixNG " target="html.tools.logixng.LogixNG">
<indexitem text="LogixNG Reference " target="html.tools.logixng.reference.index"/>
<indexitem text="LogixNG Table " target="package.jmri.jmrit.beantable.LogixNGTable"/>
<indexitem text="LogixNG Table Editor " target="package.jmri.jmrit.logixng.LogixNGTableEditor"/>
<indexitem text="ConditionalNG Editor " target="package.jmri.jmrit.logixng.ConditionalNGEditor"/>
<indexitem text="LogixNG Module Table " target="package.jmri.jmrit.beantable.LogixNGModuleTable"/>
<indexitem text="LogixNG Module Table Editor " target="package.jmri.jmrit.logixng.ModuleEditor"/>
<indexitem text="LogixNG Tables Table " target="package.jmri.jmrit.beantable.LogixNGTableTable"/>
<indexitem text="LogixNG Tables Table Editor " target="package.jmri.jmrit.logixng.LogixNGTableTableEditor"/>
<indexitem text="LogixNG Initialization Table " target="package.jmri.jmrit.logixng.LogixNGInitializationTable"/>
<indexitem text="LogixNG Logix Import " target="package.jmri.jmrit.logixng.LogixImport"/>
</indexitem>
<indexitem text="LRoute " target="html.tools.LRoutes">
<indexitem text="Add/Edit LRoute " target="package.jmri.jmrit.beantable.LRouteAddEdit"/>
<indexitem text="LRoute Table " target="package.jmri.jmrit.beantable.LRouteTable"/>
</indexitem>
<indexitem text="macOS Serial Ports (Hardware) " target="html.hardware.MacintoshSerialPorts"/>
<indexitem text="Manifest Creator " target="html.apps.index_addapp"/>
<indexitem text="Manuals " target="manual.index"/>
<indexitem text="Maple Systems - Hardware, Connection, Tools " target="html.hardware.maple.index"/>
<indexitem text="Marklin - Hardware, Connection, Tools " target="html.hardware.marklin.index"/>
<indexitem text="Memory (-Variable) " target="html.tools.Memories">
<indexitem text="Add Memory Variable " target="package.jmri.jmrit.beantable.MemoryAddEdit"/>
<indexitem text="Memory Monitor " target="package.jmri.jmrit.MemoryFrameAction"/>
<indexitem text="Memory Variable Table " target="package.jmri.jmrit.beantable.MemoryTable"/>
</indexitem>
<indexitem text="MERG - Hardware, Connection, Tools " target="html.hardware.merg.index"/>
<indexitem text="Modbus - Hardware, Connection, Tools " target="html.hardware.modbus.index"/>
<indexitem text="MQTT - Hardware, Connection, Tools " target="html.hardware.mqtt.index"/>
<indexitem text="MRC - Hardware, Connection, Tools " target="html.hardware.mrc.index"/>
<indexitem text="Multi-Decoder Control " target="package.jmri.jmrit.dualdecoder.DualDecoderSelectFrame"/>
<indexitem text="Multi-sensor Icon " target="package.jmri.jmrit.display.MultiSensorIconFrame"/>
<indexitem text="Naming JMRI Objects " target="html.doc.Technical.Names"/>
<indexitem text="NCE - Hardware, Connection, Tools " target="html.hardware.nce.NCE">
<indexitem text="NCE Speedometer " target="html.tools.speedometer.NCE-Speedometer"/>
</indexitem>
<indexitem text="NetBeans IDE (Developers) " target="html.doc.Technical.NetBeans"/>
<indexitem text="NX Warrants " target="package.jmri.jmrit.logix.NXWarrant"/>
<indexitem text="OakTree Systems - Hardware, Connection, Tools " target="html.hardware.oaktree.OakTree"/>
<indexitem text="OBlock (Occupancy Block, Warrants) " target="package.jmri.jmrit.logix.OBlockTable"/>
<indexitem text="OBlock (using tabbed interface) " target="package.jmri.jmrit.beantable.OBlockTable"/>
<indexitem text="OPath (Occupancy Path, Warrants) " target="package.jmri.jmrit.logix.OBlockEdit"/>
<indexitem text="Occupancy Sensor " target="html.tools.Sensors"/>
<indexitem text="OpenLCB - Hardware, Connection, Tools " target="html.hardware.openlcb.index">
<indexitem text="Configure Nodes " target="package.jmri.jmrix.openlcb.swing.networktree.NetworkTreePane"/>
<indexitem text="Event Table" target="package.jmri.jmrix.openlcb.swing.eventtable.EventTablePane"/>
<indexitem text="Memory Tool" target="package.jmri.jmrix.openlcb.swing.memtool.MemoryToolPane"/>
<indexitem text="Names " target="html.hardware.openlcb.Names"/>
<indexitem text="Signal Masts " target="html.hardware.openlcb.OlcbSignalMast"/>
<indexitem text="Send Frame" target="package.jmri.jmrix.openlcb.swing.send.OpenLcbCanSendFrame"/>
</indexitem>
<indexitem text="OperationsPro " target="html.apps.OperationsPro.index">
<indexitem text="Comprehensive Info " target="package.jmri.jmrit.operations.Operations"/>
<indexitem text="Building Trains " target="package.jmri.jmrit.operations.Operations_BuildingTrains"/>
<indexitem text="Cars " target="package.jmri.jmrit.operations.Operations_Cars"/>
<indexitem text="Locations " target="package.jmri.jmrit.operations.Operations_Locations">
<indexitem text="Interchange Tracks " target="package.jmri.jmrit.operations.Operations_Interchange"/>
<indexitem text="Spur Tracks " target="package.jmri.jmrit.operations.Operations_Sidings"/>
<indexitem text="Staging Tracks " target="package.jmri.jmrit.operations.Operations_Staging"/>
<indexitem text="Yard Tracks " target="package.jmri.jmrit.operations.Operations_Yards"/>
</indexitem>
<indexitem text="Locomotives " target="package.jmri.jmrit.operations.Operations_Locomotives"/>
<indexitem text="Routes " target="package.jmri.jmrit.operations.Operations_Routes"/>
<indexitem text="Schedules " target="package.jmri.jmrit.operations.Operations_Schedules"/>
<indexitem text="Settings " target="package.jmri.jmrit.operations.Operations_Settings"/>
<indexitem text="Switch List " target="package.jmri.jmrit.operations.Operations_SwitchList"/>
<indexitem text="Trains " target="package.jmri.jmrit.operations.Operations_Trains"/>
</indexitem>
<indexitem text="Panel Editor " target="package.jmri.jmrit.display.PanelEditor"/>
<indexitem text="PanelPro " target="html.apps.PanelPro.index">
<indexitem text="Intro " target="html.apps.PanelPro.index"/>
<indexitem text="Panel Editor " target="package.jmri.jmrit.display.PanelEditor"/>
<indexitem text="Control Panel Editor " target="package.jmri.jmrit.display.ControlPanelEditor"/>
<indexitem text="Switchboard Editor " target="package.jmri.jmrit.display.SwitchboardEditor"/>
<indexitem text="Layout Editor " target="package.jmri.jmrit.display.LayoutEditor"/>
<indexitem text="Panel Controls " target="package.jmri.jmrit.display.PanelTarget"/>
<indexitem text="Handling Errors " target="package.jmri.configurexml.ErrorHandler"/>
<indexitem text="Display Panel Files " target="html.apps.PanelPro.ShowPanel"/>
</indexitem>
<indexitem text="Panels Menu " target="package.jmri.jmrit.display.PanelMenuHelp"/>
<indexitem text="Path (in OBlock) " target="package.jmri.jmrit.logix.OBlockTable"/>
<indexitem text="Pi (Raspberry) - Hardware, Connection, Tools " target="html.hardware.pi.index"/>
<indexitem text="Portals (Warrants) " target="package.jmri.jmrit.logix.OBlockEdit"/>
<indexitem text="Power Control Panel " target="package.jmri.jmrit.powerpanel.PowerPanelFrame"/>
<indexitem text="Powerline - Hardware, Connection, Tools " target="html.hardware.powerline.index"/>
<indexitem text="Preferences, JMRI " target="package.apps.TabbedPreferences"/>
<indexitem text="Prefix, Hardware Connection- " target="html.doc.Technical.Names_hardware"/>
<indexitem text="Profile, User- " target="html.setup.profiles"/>
<indexitem text="Programmer ">
<indexitem text="DecoderPro Basic Programmer " target="manual.DecoderPro.Basic_Start"/>
<indexitem text="DecoderPro Comprehensive Programmer " target="manual.DecoderPro3.dp3_Main_Main"/>
<indexitem text="Single CV Programmer " target="package.jmri.jmrit.simpleprog.SimpleProgFrame"/>
</indexitem>
<indexitem text="Programmer Messages " target="html.tools.programmer.messages"/>
<indexitem text="Properties Files (Developers, I18N) " target="html.doc.Technical.Properties"/>
<indexitem text="Python (in Scripting) " target="html.tools.scripting.Python"/>
<indexitem text="QSI - Hardware, Connection, Tools " target="html.hardware.qsi.index"/>
<indexitem text="RailCom " target="package.jmri.jmrit.beantable.RailComTable"/>
<indexitem text="RailDriver Throttle " target="html.hardware.raildriver.index"/>
<indexitem text="Raspberry Pi - Hardware, Connection, Tools " target="html.hardware.pi.index"/>
<indexitem text="Reporter " target="html.tools.Reporters">
<indexitem text="Add Reporter " target="package.jmri.jmrit.beantable.ReporterAddEdit"/>
<indexitem text="Reporter Table " target="package.jmri.jmrit.beantable.ReporterTable"/>
</indexitem>
<indexitem text="RFID " target="html.hardware.rfid.index"/>
<indexitem text="Roco - Hardware, Connection, Tools " target="html.hardware.roco.z21.index"/>
<indexitem text="Roster (Decoder List) " target="manual.DecoderPro.Main_Roster">
<indexitem text="Roster Group Table " target="package.jmri.jmrit.roster.swing.RosterGroupTable"/>
<indexitem text="Roster Groups " target="manual.DecoderPro.Main_RosterGroup"/>
</indexitem>
<indexitem text="Route ">
<indexitem text="Add/Edit a Route " target="package.jmri.jmrit.beantable.RouteAddEdit"/>
<indexitem text="Route Table " target="package.jmri.jmrit.beantable.RouteTable"/>
</indexitem>
<indexitem text="Route Table " target="package.jmri.jmrit.beantable.RouteTable"/>
<indexitem text="RPS Position System " target="html.hardware.rps.index">
<indexitem text="Panel Icons " target="package.jmri.jmrit.display.RpsIcon"/>
<indexitem text="Polling Control " target="package.jmri.jmrix.rps.swing.polling.PollTableFrame"/>
<indexitem text="Receiver Control " target="package.jmri.jmrix.rps.aligntable.AlignTableFrame"/>
<indexitem text="RPS Debug Display " target="package.jmri.jmrix.rps.swing.debugger.DebuggerFrame"/>
<indexitem text="RPS Sensors " target="html.hardware.rps.sensors"/>
<indexitem text="Sound Speed Control " target="package.jmri.jmrix.rps.swing.soundset.SoundSetFrame"/>
<indexitem text="Storing Your Work " target="html.apps.StoringYourWork"/>
<indexitem text="Tracking Display " target="package.jmri.jmrix.rps.trackingpanel.RpsTrackingFrame"/>
</indexitem>
<indexitem text="SC Warrant (Signal Controlled) " target="package.jmri.jmrit.logix.SCWarrant"/>
<indexitem text="Scripting " target="html.tools.scripting.index">
<indexitem text="Getting Started " target="html.tools.scripting.Start"/>
<indexitem text="Example: Setting Turnouts " target="html.tools.scripting.ex_set_turnouts"/>
<indexitem text="Examples (Links) " target="html.tools.scripting.Examples"/>
<indexitem text="Python 3 Introduction" target="html.tools.scripting.Python3"/>
<indexitem text="Scripting How To... " target="html.tools.scripting.HowTo"/>
<indexitem text="Scripting What...Where " target="html.tools.scripting.WhatWhere"/>
</indexitem>
<indexitem text="SECSI (TrakTronix) " target="html.hardware.secsi.index"/>
<indexitem text="Section " target="html.tools.Sections">
<indexitem text="Add/Edit a Section " target="package.jmri.jmrit.beantable.SectionAddEdit"/>
<indexitem text="Section Table " target="package.jmri.jmrit.beantable.SectionTable"/>
</indexitem>
<indexitem text="Send DCC Packet " target="package.jmri.jmrit.sendpacket.SendPacketFrame"/>
<indexitem text="Sensor " target="html.tools.Sensors">
<indexitem text="Add/Edit a Sensor " target="package.jmri.jmrit.beantable.SensorAddEdit"/>
<indexitem text="Sensor Groups " target="package.jmri.jmrit.sensorgroup.SensorGroupFrame"/>
<indexitem text="Sensor Table " target="package.jmri.jmrit.beantable.SensorTable"/>
</indexitem>
<indexitem text="Sensor Table " target="package.jmri.jmrit.beantable.SensorTable"/>
<indexitem text="Setting up JMRI " target="html.setup.index"/>
<indexitem text="Signal Aspects " target="html.tools.signaling.AspectSignaling"/>
<indexitem text="Signal Head " target="html.tools.signaling.SignalHeads">
<indexitem text="Add/Edit a Signal Head " target="package.jmri.jmrit.beantable.SignalAddEdit"/>
<indexitem text="European Examples " target="html.tools.signaling.ldt.output"/>
<indexitem text="Signal Head Table " target="package.jmri.jmrit.beantable.SignalHeadTable"/>
</indexitem>
<indexitem text="Signal Head Table " target="package.jmri.jmrit.beantable.SignalHeadTable"/>
<indexitem text="Signal Mast " target="html.tools.signaling.SignalMasts">
<indexitem text="Add/Edit a Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit"/>
<indexitem text="Signal Mast Table " target="package.jmri.jmrit.beantable.SignalMastTable"/>
</indexitem>
<indexitem text="Signal Mast Logic " target="package.jmri.jmrit.signalling.SignallingSourceFrame">
<indexitem text="Signal Mast Logic " target="package.jmri.jmrit.beantable.SignalMastLogicTable"/>
<indexitem text="Signal Mast Logic Edit " target="package.jmri.jmrit.signalling.AddEditSignalingLogic"/>
</indexitem>
<indexitem text="Signal Mast Repeater " target="package.jmri.jmrit.beantable.SignalMastRepeater"/>
<indexitem text="Signal Mast Table " target="package.jmri.jmrit.beantable.SignalMastTable"/>
<indexitem text="Signaling " target="html.tools.signaling.index"/>
<indexitem text="Signals " target="html.tools.signaling.index"/>
<indexitem text="Simple Clock " target="package.jmri.jmrit.simpleclock.SimpleClockFrame"/>
<indexitem text="Simple Light Control " target="package.jmri.jmrit.simplelightctrl.SimpleLightCtrl"/>
<indexitem text="Simple Signal Logic " target="package.jmri.jmrit.blockboss.BlockBossFrame"/>
<indexitem text="Simple Turnout Control " target="package.jmri.jmrit.simpleturnoutctrl.SimpleTurnoutCtrl"/>
<indexitem text="SoundPro " target="html.apps.SoundPro.SoundPro"/>
<indexitem text="Speed Matching, Locomotive " target="html.tools.speedometer.SpeedMatch"/>
<indexitem text="Speedometer " target="html.tools.speedometer.index"/>
<indexitem text="SpotBugs (Developers) " target="html.doc.Technical.SpotBugs"/>
<indexitem text="SPROG " target="html.hardware.sprog.SPROG">
<indexitem text="Console " target="package.jmri.jmrix.sprog.console.SprogConsoleFrame"/>
<indexitem text="Send Packet " target="package.jmri.jmrix.sprog.packetgen.SprogPacketGenFrame"/>
<indexitem text="Slot Monitor " target="package.jmri.jmrix.sprog.sprogslotmon.SprogSlotMonFrame"/>
<indexitem text="SPROG Version " target="package.jmri.jmrix.sprog.update.SprogVersionFrame"/>
<indexitem text="Update SPROG II " target="package.jmri.jmrix.sprog.update.SprogIIUpdateFrame"/>
</indexitem>
<indexitem text="SPROG Generation 5 " target="html.hardware.sproggen5.index">
<indexitem text="Hardware Support " target="html.hardware.sproggen5.hardware"/>
<indexitem text="Pi SPROG 3 Mode Switcher " target="package.jmri.jmrix.can.cbus.swing.modeswitcher.SprogCbusSimpleModeSwitcherFrame"/>
<indexitem text="Pi-Sprog/SPROG 3 Plus Mode Switcher " target="package.jmri.jmrix.can.cbus.swing.modeswitcher.SprogCbusSprog3PlusModeSwitcherFrame"/>
<indexitem text="See also: CBUS " target="html.hardware.can.cbus.index"/>
</indexitem>
<indexitem text="StringIO " target="html.tools.StringIOs">
<indexitem text="Add/Edit a StringIO " target="package.jmri.jmrit.beantable.StringIOAddEdit"/>
<indexitem text="StringIO Table " target="package.jmri.jmrit.beantable.StringIOTable"/>
</indexitem>
<indexitem text="Supported Decoders " target="html.apps.DecoderPro.index_decoderlisting"/>
<indexitem text="Supported Digital Control Hardware " target="html.hardware.index"/>
<indexitem text="Supported Operating Systems to run JMRI " target="html.setup.index"/>
<indexitem text="Swing (Developers) " target="html.doc.Technical.Swing"/>
<indexitem text="Switchboard Editor (Panels) " target="package.jmri.jmrit.display.SwitchboardEditor"/>
<indexitem text="System Console (JMRI System Messages) " target="package.apps.SystemConsole"/>
<indexitem text="TAMs " target="html.hardware.tams.index"/>
<indexitem text="TCH Tech " target="html.hardware.tchtech.index"/>
<indexitem text="TCS " target="html.hardware.openlcb.TCS"/>
<indexitem text="Technical " target="html.doc.Technical.index"/>
<indexitem text="Terminal Server connection " target="html.hardware.TerminalServer"/>
<indexitem text="Thread Monitor (Developers) " target="package.jmri.jmrit.automat.monitor.AutomatTableFrame"/>
<indexitem text="Throttle " target="html.tools.throttle.ThrottleMain">
<indexitem text="Add a Throttle " target="package.jmri.jmrit.throttle.ThrottleFrame"/>
<indexitem text="Android Phone as Throttle " target="package.jmri.jmrit.withrottle.UserInterface"/>
<indexitem text="Z21 Throttle (Z21 App and WlanMaus) " target="package.jmri.jmrit.z21server.z21server"/>
<indexitem text="inControl - Web Throttles and Panels (older version) " target="package.jmri.jmrit.inControl.inControl"/>
<indexitem text="iPhone/iPod as Throttle " target="package.jmri.jmrit.withrottle.UserInterface"/>
<indexitem text="USB Joypad as Throttle " target="html.tools.throttle.AdvancedThrottleControl_joypad"/>
<indexitem text="webThrottle - Web Throttles and Panels " target="package.jmri.jmrit.webThrottle.webThrottle"/>
<indexitem text="Wii Remote as Throttle " target="html.tools.throttle.AdvancedThrottleControl_wii"/>
</indexitem>
<indexitem text="Timetable " target="html.tools.TimeTable"/>
<indexitem text="TMCC (Lionel) " target="html.hardware.tmcc.index"/>
<indexitem text="Tools Menu " target="html.apps.PanelPro.ToolsMenu"/>
<indexitem text="Tracker " target="html.tools.tracker.index"/>
<indexitem text="Train Throttle App (Windows Throttle) " target="html.apps.index_addapp"/>
<indexitem text="Train Trackers (Warrants) " target="package.jmri.jmrit.logix.Tracker"/>
<indexitem text="TrainCrew " target="html.apps.index_addapp"/>
<indexitem text="Transit " target="html.tools.Transits">
<indexitem text="Add/Edit a Transit " target="package.jmri.jmrit.beantable.TransitAddEdit"/>
<indexitem text="Transit Actions " target="package.jmri.jmrit.beantable.ViewSpecialActions"/>
<indexitem text="Transit Table " target="package.jmri.jmrit.beantable.TransitTable"/>
</indexitem>
<indexitem text="Translate (Move) Selection (Panels) " target="package.jmri.jmrit.display.TranslateSelection"/>
<indexitem text="Turnout " target="html.tools.Turnouts">
<indexitem text="Add/Edit a Turnout " target="package.jmri.jmrit.beantable.TurnoutAddEdit"/>
<indexitem text="Turnout Table " target="package.jmri.jmrit.beantable.TurnoutTable"/>
</indexitem>
<indexitem text="Uhlenbrock Intelllibox - Hardware, Connection, Tools " target="html.hardware.loconet.Uhlenbrock"/>
<indexitem text="Upload Debugging Information " target="package.jmri.jmrit.mailreport.Report"/>
<indexitem text="US&amp;S CTC Tools " target="html.tools.uss.index">
<indexitem text="Follower " target="package.jmri.jmrit.ussctc.FollowerFrame"/>
<indexitem text="OS Indicator " target="package.jmri.jmrit.ussctc.OsIndicatorFrame"/>
</indexitem>
<indexitem text="USB Port " target="package.jmri.jmrix.jinput.treemodel.TreeFrame"/>
<indexitem text="USB-to-Serial Adapter (Hardware) " target="html.hardware.USBtoSerial"/>
<indexitem text="Variable Intensity Lights " target="html.tools.Lights_variablelight"/>
<indexitem text="Virtual Sound Decoder " target="html.tools.vsd.index"/>
<indexitem text="Wangrow - Hardware, Connection, Tools " target="html.hardware.nce.Wangrow"/>
<indexitem text="Warrants " target="html.tools.WarrantsIntro">
<indexitem text="Warrants Overiew and Getting Started " target="package.jmri.jmrit.logix.Warrant"/>
<indexitem text="Creating and Editing Warrants " target="package.jmri.jmrit.logix.CreateEditWarrant"/>
<indexitem text="Warrant List " target="package.jmri.jmrit.logix.WarrantTable"/>
<indexitem text="When Warrant Speeds Are Modified " target="package.jmri.jmrit.logix.SpeedChanges"/>
</indexitem>
<indexitem text="Web Access to JMRI " target="html.web.index"/>
<indexitem text="Where Used " target="package.jmri.jmrit.whereused.WhereUsed"/>
<indexitem text="Wii Remote, Connecting to " target="html.tools.throttle.AdvancedThrottleControl_wii"/>
<indexitem text="WiThrottle for iPhone/iPad " target="package.jmri.jmrit.withrottle.UserInterface"/>
<indexitem text="X10 (Powerline) - Hardware, Connection, Tools " target="html.hardware.powerline.index"/>
<indexitem text="xAP - Hardware, Connection, Tools " target="html.hardware.xap.index"/>
<indexitem text="XBee - Hardware, Connection, Tools " target="html.hardware.XBee.index"/>
<indexitem text="XML (Developers) " target="html.apps.DecoderPro.IntroXML">
<indexitem text="Technical Information " target="html.doc.Technical.XmlView"/>
<indexitem text="Viewing Panel Files " target="html.apps.PanelPro.ShowPanel"/>
<indexitem text="XML Editors " target="html.doc.Technical.XmlEditors"/>
<indexitem text="XML Schema " target="html.doc.Technical.XmlSchema"/>
<indexitem text="XML Usage " target="html.doc.Technical.XmlUsage"/>
</indexitem>
<indexitem text="XPressNet (Lenz) - Hardware, Connection, Tools " target="html.hardware.XPressNet.index"/>
<indexitem text="XTrackCAD/Reader " target="html.apps.index_addapp"/>
<indexitem text="YAAT - YetAnotherAutoTrain.py " target="html.scripthelp.yaat.YAAT"/>
<indexitem text="Zimo - Hardware, Connection, Tools " target="html.hardware.zimo.Zimo"/>
<indexitem text="ZTC - Hardware, Connection, Tools " target="html.hardware.XPressNet.index"/>
</index>
+8
View File
@@ -0,0 +1,8 @@
</ul>
</div>
<div id="indexID" class="help-list hide">
<h3>Index</h3>
<ul>
+978
View File
@@ -0,0 +1,978 @@
<?xml version="1.0" encoding="UTF-8"?>
<toc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://jmri.org/xml/schema/help-toc.xsd">
<tocitem text="JMRI Help Main Page " target="index"/>
<tocitem text="Acknowledgements " target="Acknowledgements"/>
<tocitem text="Frequently Asked Questions (FAQ) " target="html.FAQ"/>
<tocitem text="Glossary " target="glossary.index"/>
<tocitem text="Manuals " target="manual.index_Top"/>
<tocitem text="Setup " target="html.setup.index">
<tocitem text="JMRI Preferences Pane " target="package.apps.TabbedPreferences"/>
<tocitem text="Configuration Profiles " target="html.setup.profiles"/>
<tocitem text="The System Console " target="package.apps.SystemConsole"/>
<tocitem text="Names &amp; Naming Rules " target="html.doc.Technical.Names"/>
<tocitem text="USB input " target="package.jmri.jmrix.jinput.treemodel.TreeFrame"/>
<tocitem text="Error Codes " target="html.apps.Errors"/>
<tocitem text="InstallTest (Windows) " target="package.apps.InstallTest.InstallTest"/>
</tocitem>
<tocitem text="Hardware Support " target="html.hardware.index">
<tocitem text="Anyma " target="html.hardware.anyma.index"/>
<tocitem text="Arduino " target="html.hardware.arduino.index"/>
<tocitem text="Atlas Commander " target="html.hardware.XPressNet.index"/>
<tocitem text="Bachrus Speedo " target="package.jmri.jmrix.bachrus.SpeedoConsoleFrame"/>
<tocitem text="BiDiB " target="html.hardware.bidib.index"/>
<tocitem text="CAN Bus Overview " target="html.hardware.can.index"/>
<tocitem text="CBUS " target="html.hardware.can.cbus.index"/>
<tocitem text="C/MRI " target="html.hardware.cmri.CMRI"/>
<tocitem text="CTI Acela " target="html.hardware.acela.index"/>
<tocitem text="CVP EasyDCC " target="html.hardware.easydcc.EasyDCC"/>
<tocitem text="DCC-EX " target="html.hardware.dcc-ex.index"/>
<tocitem text="DCC4PC Railcom Reader " target="html.hardware.dcc4pc.index"/>
<tocitem text="DCC Specialties " target="html.hardware.misc.DccSpecialties"/>
<tocitem text="Digi XBee " target="html.hardware.XBee.index"/>
<tocitem text="Digikeijs Digirail " target="html.hardware.digirails.index"/>
<tocitem text="Digitrax " target="html.hardware.loconet.Digitrax"/>
<tocitem text="Digitrax PR3 " target="html.hardware.loconet.PR3"/>
<tocitem text="ESU ECoS " target="html.hardware.ecos.index"/>
<tocitem text="Fleischmann Twin Center " target="html.hardware.loconet.Fleischmann"/>
<tocitem text="Hornby Elite " target="html.hardware.XPressNet.index"/>
<tocitem text="Insteon " target="html.hardware.powerline.index"/>
<tocitem text="Lenz " target="html.hardware.XPressNet.index"/>
<tocitem text="Lionel TMCC " target="html.hardware.tmcc.index"/>
<tocitem text="LocoNet " target="html.hardware.loconet.Digitrax"/>
<tocitem text="Maple Systems " target="html.hardware.maple.index"/>
<tocitem text="Marklin " target="html.hardware.marklin.index"/>
<tocitem text="MERG " target="html.hardware.merg.index"/>
<tocitem text="Modbus " target="html.hardware.modbus.index"/>
<tocitem text="MQTT " target="html.hardware.mqtt.index"/>
<tocitem text="MRC " target="html.hardware.mrc.index"/>
<tocitem text="NAC Services RPS " target="html.hardware.rps.index"/>
<tocitem text="NCE " target="html.hardware.nce.NCE"/>
<tocitem text="OakTree Systems (Railroad Control Systems) " target="html.hardware.oaktree.OakTree"/>
<tocitem text="OpenDCC " target="html.hardware.XPressNet.index"/>
<tocitem text="OpenLCB " target="html.hardware.openlcb.index"/>
<tocitem text="Powerline " target="html.hardware.powerline.index"/>
<tocitem text="ProTrak Grapevine " target="html.hardware.grapevine.index"/>
<tocitem text="QSI Quantum Programmer " target="html.hardware.qsi.index"/>
<tocitem text="Pi Engineering RailDriver Throttle " target="html.hardware.raildriver.index"/>
<tocitem text="Railroad Control Systems (Oak Tree Systems) " target="html.hardware.oaktree.OakTree"/>
<tocitem text="Raspberry Pi " target="html.hardware.pi.index"/>
<tocitem text="RFID Readers " target="html.hardware.rfid.index"/>
<tocitem text="Roco z21 " target="html.hardware.roco.z21.index"/>
<tocitem text="TracTronix SECSI " target="html.hardware.secsi.index"/>
<tocitem text="SPROG " target="html.hardware.sprog.SPROG"/>
<tocitem text="SPROG Generation 5 " target="html.hardware.sproggen5.index"/>
<tocitem text="SRCP " target="html.hardware.qsi.index"/>
<tocitem text="TAMs Master Control " target="html.hardware.tams.index"/>
<tocitem text="TCS CS-105 " target="html.hardware.openlcb.TCS"/>
<tocitem text="X10 " target="html.hardware.powerline.index"/>
<tocitem text="xAP " target="html.hardware.xap.index"/>
<tocitem text="XPressNet " target="html.hardware.XPressNet.index"/>
<tocitem text="Zimo MX-1 " target="html.hardware.zimo.Zimo"/>
<tocitem text="ZTC Controls " target="html.hardware.XPressNet.index"/>
</tocitem>
<tocitem text="Applications " target="html.apps.index">
<tocitem text="DecoderPro " target="html.apps.DecoderPro.index">
<tocitem text="Quick Tour " target="html.apps.DecoderPro.Tour"/>
<tocitem text="Supported Decoder Manufacturers and Models " target="html.apps.DecoderPro.index_decoderlisting"/>
<tocitem text="Installing New Decoder Definitions " target="html.apps.DecoderPro.FileUpdate"/>
<tocitem text="Roster Groups " target="manual.DecoderPro3.dp3_settings_rosterGroups"/>
<tocitem text="Multi-Decoder Control " target="package.jmri.jmrit.dualdecoder.DualDecoderSelectFrame"/>
<tocitem text="Error Messages " target="manual.DecoderPro3.Error"/>
<tocitem text="DecoderPro Manual " target="manual.DecoderPro3.index">
<tocitem text="Getting Started " target="manual.DecoderPro3.Start_DCC">
<tocitem text="Setting Preferences " target="manual.DecoderPro3.Start_Preferences"/>
</tocitem>
<tocitem text="Using DecoderPro " target="manual.DecoderPro3.Programmer_Setup">
<tocitem text="Set Up " target="manual.DecoderPro3.Programmer_Setup_newloco"/>
<tocitem text="Choose Decoder " target="manual.DecoderPro3.Programmer_Setup_newloco"/>
<tocitem text="Programming Modes " target="manual.DecoderPro3.Programmer_SingleCV"/>
</tocitem>
<tocitem text="Basic Programmer ">
<tocitem text="Using the Roster " target="manual.DecoderPro3.dp3_rosterTable"/>
<tocitem text="The Basic Programmer " target="manual.DecoderPro3.Basic_Start"/>
<tocitem text="What Next? " target="manual.DecoderPro3.Basic_BasicPane_DoMore"/>
</tocitem>
<tocitem text="Comprehensive Programmer ">
<tocitem text="Setup and Roster Panes " target="manual.DecoderPro3.Comp_Setup_Roster"/>
<tocitem text="Basic Pane " target="manual.DecoderPro3.Comp_Basic"/>
<tocitem text="Motor Control Pane " target="manual.DecoderPro3.Comp_Motor"/>
<tocitem text="Speed Control Pane " target="manual.DecoderPro3.Comp_Speed"/>
<tocitem text="Function Mapping Pane " target="manual.DecoderPro3.Comp_FMap"/>
<tocitem text="Lighting Functions and FX Pane " target="manual.DecoderPro3.Comp_LightFX"/>
<tocitem text="Consisting Functions Pane " target="manual.DecoderPro3.Comp_Consist"/>
<tocitem text="Advanced Features Pane " target="manual.DecoderPro3.Comp_Advanced"/>
<tocitem text="Sound FX Pane " target="manual.DecoderPro3.Comp_SoundFX"/>
<tocitem text="Sound Levels Pane " target="manual.DecoderPro3.Comp_SoundLevels"/>
<tocitem text="Global CV Listing Pane " target="manual.DecoderPro3.Comp_GlobalCVs"/>
<tocitem text="Manufacturer Specific Data Pane " target="manual.DecoderPro3.Comp_ManfSpecific"/>
<tocitem text="Printing Decoder Data " target="manual.DecoderPro3.Comp_PrintData"/>
</tocitem>
<tocitem text="All Manuals " target="manual.index"/>
</tocitem>
</tocitem>
<tocitem text="DispatcherPro " target="package.jmri.jmrit.dispatcher.Dispatcher">
<tocitem text="Introduction " target="package.jmri.jmrit.dispatcher.Dispatcher">
<tocitem text="Glossary " target="package.jmri.jmrit.dispatcher.Dispatcher_glossary"/>
<tocitem text="Using Transits and Sections " target="package.jmri.jmrit.dispatcher.Dispatcher_transits"/>
<tocitem text="Dispatcher Window " target="package.jmri.jmrit.dispatcher.Dispatcher_window"/>
<tocitem text="Active Train Table " target="package.jmri.jmrit.dispatcher.Dispatcher_atrains"/>
<tocitem text="Allocation Request Table " target="package.jmri.jmrit.dispatcher.Dispatcher_arequests"/>
</tocitem>
<tocitem text="Options Menu " target="package.jmri.jmrit.dispatcher.Options"/>
<tocitem text="Allocated Section Window " target="package.jmri.jmrit.dispatcher.Dispatcher_allocated"/>
<tocitem text="Allocate Extra " target="package.jmri.jmrit.dispatcher.AllocateExtra"/>
<tocitem text="New Train " target="package.jmri.jmrit.dispatcher.NewTrain"/>
</tocitem>
<tocitem text="OperationsPro " target="html.apps.OperationsPro.index">
<tocitem text="OperationsPro Information " target="package.jmri.jmrit.operations.Operations"/>
<tocitem text="Settings " target="package.jmri.jmrit.operations.Operations_Settings"/>
<tocitem text="Locations " target="package.jmri.jmrit.operations.Operations_Locations">
<tocitem text="Yard Tracks " target="package.jmri.jmrit.operations.Operations_Yards"/>
<tocitem text="Spur Tracks " target="package.jmri.jmrit.operations.Operations_Sidings"/>
<tocitem text="Interchange Tracks " target="package.jmri.jmrit.operations.Operations_Interchange"/>
<tocitem text="Staging Tracks " target="package.jmri.jmrit.operations.Operations_Staging"/>
<tocitem text="Schedules " target="package.jmri.jmrit.operations.Operations_Schedules"/>
</tocitem>
<tocitem text="Cars " target="package.jmri.jmrit.operations.Operations_Cars"/>
<tocitem text="Locomotives " target="package.jmri.jmrit.operations.Operations_Locomotives"/>
<tocitem text="Routes " target="package.jmri.jmrit.operations.Operations_Routes"/>
<tocitem text="Trains " target="package.jmri.jmrit.operations.Operations_Trains"/>
<tocitem text="Switch List " target="package.jmri.jmrit.operations.Operations_SwitchList"/>
</tocitem>
<tocitem text="PanelPro " target="html.apps.PanelPro.index">
<tocitem text="Panel Editor " target="package.jmri.jmrit.display.PanelEditor"/>
<tocitem text="Control Panel Editor " target="package.jmri.jmrit.display.ControlPanelEditor"/>
<tocitem text="Layout Editor " target="package.jmri.jmrit.display.LayoutEditor"/>
<tocitem text="Switchboard Editor " target="package.jmri.jmrit.display.SwitchboardEditor"/>
<tocitem text="Panel Controls " target="package.jmri.jmrit.display.PanelTarget"/>
<tocitem text="Displaying Panel Files " target="html.apps.PanelPro.ShowPanel"/>
</tocitem>
<tocitem text="SoundPro " target="html.apps.SoundPro.SoundPro">
<tocitem text="Intro " target="html.apps.SoundPro.SoundPro"/>
</tocitem>
<tocitem text="LccPro " target="package.apps.gui3.lccpro.LccPro">
<tocitem text="Intro " target="package.apps.gui3.lccpro.LccPro"/>
</tocitem>
<tocitem text="Additional Applications with connections to JMRI " target="html.apps.index_addapp">
<tocitem text="Manifest Creator " target="html.apps.ManifestCreator.index"/>
</tocitem>
<tocitem text="Jython Apps for JMRI " target="html.tools.scripting.JythonApps">
<tocitem text="YAAT - YetAnotherAutoTrain " target="html.scripthelp.yaat.YAAT"/>
<tocitem text="Dispatcher System (Python Extension) " target="html.scripthelp.DispatcherSystem.DispatcherSystem"/>
</tocitem>
</tocitem>
<tocitem text="Panels " target="html.apps.PanelPro.index">
<tocitem text="Panel Editor " target="package.jmri.jmrit.display.PanelEditor"/>
<tocitem text="Control Panel Editor " target="package.jmri.jmrit.display.ControlPanelEditor"/>
<tocitem text="Layout Editor " target="package.jmri.jmrit.display.LayoutEditor"/>
<tocitem text="Displaying Panel Files " target="html.apps.PanelPro.ShowPanel"/>
<tocitem text="Handling Errors " target="package.jmri.configurexml.ErrorHandler"/>
<tocitem text="Switchboards " target="package.jmri.jmrit.display.SwitchboardEditor"/>
</tocitem>
<tocitem text="Tables ">
<tocitem text="Turnout Table " target="package.jmri.jmrit.beantable.TurnoutTable"/>
<tocitem text="Light Table " target="package.jmri.jmrit.beantable.LightTable"/>
<tocitem text="Sensor Table " target="package.jmri.jmrit.beantable.SensorTable"/>
<tocitem text="StringIO Table " target="package.jmri.jmrit.beantable.StringIOTable"/>
<tocitem text="Signal Head Table " target="package.jmri.jmrit.beantable.SignalHeadTable"/>
<tocitem text="Signal Mast Table " target="package.jmri.jmrit.beantable.SignalMastTable"/>
<tocitem text="Block Table " target="package.jmri.jmrit.beantable.BlockTable"/>
<tocitem text="OBlock Tables (tabbed) " target="package.jmri.jmrit.beantable.OBlockTable"/>
<tocitem text="O(ccupancy)Block Table " target="package.jmri.jmrit.logix.OBlockTable"/>
<tocitem text="Route Table " target="package.jmri.jmrit.beantable.RouteTable"/>
<tocitem text="LRoute Table " target="package.jmri.jmrit.beantable.LRouteTable"/>
<tocitem text="Logix Table " target="package.jmri.jmrit.beantable.LogixTable"/>
<tocitem text="Memory Variable Table " target="package.jmri.jmrit.beantable.MemoryTable"/>
<tocitem text="Reporter Table " target="package.jmri.jmrit.beantable.ReporterTable"/>
<tocitem text="RailCom Table " target="package.jmri.jmrit.beantable.RailComTable"/>
</tocitem>
<tocitem text="Tools " target="html.tools.index">
<tocitem text="Audio " target="html.tools.Audio"/>
<tocitem text="Blocks " target="html.tools.Blocks">
<tocitem text="Block Table " target="package.jmri.jmrit.beantable.BlockTable"/>
<tocitem text="Add/Edit Blocks " target="html.tools.Blocks_addBlock"/>
</tocitem>
<tocitem text="Consisting Tool " target="html.tools.consisttool.ConsistTool"/>
<tocitem text="CTC " target="package.jmri.jmrit.ctc.CTC">
<tocitem text="CTCEditor " target="package.jmri.jmrit.ctc.CTC_editor">
<tocitem text="Menus " target="package.jmri.jmrit.ctc.CTC_menuFile">
<tocitem text="File menu " target="package.jmri.jmrit.ctc.CTC_menuFile">
<tocitem text="New " target="package.jmri.jmrit.ctc.CTC_menuFile"/>
<tocitem text="Import " target="package.jmri.jmrit.ctc.CTC_menuFile"/>
</tocitem>
<tocitem text="Edit menu " target="package.jmri.jmrit.ctc.CTC_menuEditFind">
<tocitem text="Fix Error(s)... " target="package.jmri.jmrit.ctc.CTC_menuEditFix"/>
</tocitem>
<tocitem text="Configure menu " target="package.jmri.jmrit.ctc.CTC_menuCfgDeb">
<tocitem text="Debugging " target="package.jmri.jmrit.ctc.CTC_menuCfgDeb"/>
<tocitem text="Defaults " target="package.jmri.jmrit.ctc.CTC_menuCfgDef"/>
<tocitem text="Fleeting " target="package.jmri.jmrit.ctc.CTC_menuCfgFlt"/>
<tocitem text="Patterns " target="package.jmri.jmrit.ctc.CTC_menuCfgPat"/>
<tocitem text="GUI Design " target="package.jmri.jmrit.ctc.CTC_menuCfgGui"/>
</tocitem>
</tocitem>
<tocitem text="O.S. Sections List " target="package.jmri.jmrit.ctc.CTC_osList"/>
<tocitem text="Edit Buttons " target="package.jmri.jmrit.ctc.CTC_frmCB">
<tocitem text="Code button " target="package.jmri.jmrit.ctc.CTC_frmCB"/>
<tocitem text="Signal direction indicators " target="package.jmri.jmrit.ctc.CTC_frmSIDI"/>
<tocitem text="Signal direction lever " target="package.jmri.jmrit.ctc.CTC_frmSIDL"/>
<tocitem text="Switch direction indicators " target="package.jmri.jmrit.ctc.CTC_frmSWDI"/>
<tocitem text="Switch direction lever " target="package.jmri.jmrit.ctc.CTC_frmSWDL"/>
<tocitem text="Call On " target="package.jmri.jmrit.ctc.CTC_frmCO"/>
<tocitem text="Traffic locking " target="package.jmri.jmrit.ctc.CTC_frmTRL"/>
<tocitem text="Turnout locking " target="package.jmri.jmrit.ctc.CTC_frmTUL"/>
<tocitem text="Indication locking " target="package.jmri.jmrit.ctc.CTC_frmIL"/>
</tocitem>
</tocitem>
<tocitem text="Files " target="package.jmri.jmrit.ctc.CTC_ctcFiles"/>
<tocitem text="CTCMain " target="package.jmri.jmrit.ctc.CTC_ctcMain"/>
<tocitem text="Definitions " target="package.jmri.jmrit.ctc.CTC_ctcDefinitions"/>
</tocitem>
<tocitem text="Fast Clocks " target="html.tools.fastclock.index">
<tocitem text="Introduction " target="html.tools.fastclock.index"/>
<tocitem text="Setting the Internal Clock " target="package.jmri.jmrit.simpleclock.SimpleClockFrame"/>
<tocitem text="The LocoNet Clock " target="html.tools.fastclock.LocoNetClock"/>
</tocitem>
<tocitem text="Lights " target="html.tools.Lights">
<tocitem text="Light Table " target="package.jmri.jmrit.beantable.LightTable"/>
<tocitem text="Add/Edit Light " target="package.jmri.jmrit.beantable.LightAddEdit"/>
<tocitem text="Light Controls " target="package.jmri.jmrit.beantable.LightAddEdit_lightcontrol"/>
<tocitem text="Simple Light Control " target="package.jmri.jmrit.simplelightctrl.SimpleLightCtrl"/>
</tocitem>
<tocitem text="Locomotive Speed Matching " target="html.tools.speedometer.SpeedMatch"/>
<tocitem text="Logix " target="html.tools.Logix">
<tocitem text="Logix Table " target="package.jmri.jmrit.beantable.LogixTable"/>
<tocitem text="Add/Edit Logix " target="package.jmri.jmrit.beantable.LogixAddEdit"/>
<tocitem text="Add/Edit Conditionals using the List Editor " target="package.jmri.jmrit.conditional.ConditionalListEditor"/>
<tocitem text="Add/Edit Conditionals using the Tree Editor " target="package.jmri.jmrit.conditional.ConditionalTreeEditor"/>
<tocitem text="Conditional State Variable and Action List " target="package.jmri.jmrit.conditional.StateVariableActionList"/>
</tocitem>
<tocitem text="LogixNG " target="html.tools.logixng.LogixNG">
<tocitem text="LogixNG Reference " target="html.tools.logixng.reference.index"/>
<tocitem text="LogixNG Table " target="package.jmri.jmrit.beantable.LogixNGTable"/>
<tocitem text="LogixNG Table Editor " target="package.jmri.jmrit.logixng.LogixNGTableEditor"/>
<tocitem text="ConditionalNG Editor " target="package.jmri.jmrit.logixng.ConditionalNGEditor"/>
<tocitem text="LogixNG Module Table " target="package.jmri.jmrit.beantable.LogixNGModuleTable"/>
<tocitem text="LogixNG Module Table Editor " target="package.jmri.jmrit.logixng.ModuleEditor"/>
<tocitem text="LogixNG Tables Table " target="package.jmri.jmrit.beantable.LogixNGTableTable"/>
<tocitem text="LogixNG Tables Table Editor " target="package.jmri.jmrit.logixng.LogixNGTableTableEditor"/>
<tocitem text="LogixNG Initialization Table " target="package.jmri.jmrit.logixng.LogixNGInitializationTable"/>
<tocitem text="LogixNG Logix Import " target="package.jmri.jmrit.logixng.LogixImport"/>
</tocitem>
<tocitem text="LRoutes " target="html.tools.LRoutes">
<tocitem text="LRoute Table " target="package.jmri.jmrit.beantable.LRouteTable"/>
<tocitem text="Add/Edit LRoutes " target="package.jmri.jmrit.beantable.LRouteAddEdit"/>
</tocitem>
<tocitem text="Memory Variables " target="html.tools.Memories">
<tocitem text="Memory Variable Table " target="package.jmri.jmrit.beantable.MemoryTable"/>
<tocitem text="Add/Edit Memory Variables " target="package.jmri.jmrit.beantable.MemoryAddEdit"/>
<tocitem text="Memory Monitor " target="package.jmri.jmrit.MemoryFrameAction"/>
</tocitem>
<tocitem text="Programmers ">
<tocitem text="Single CV Programmer " target="package.jmri.jmrit.simpleprog.SimpleProgFrame"/>
<tocitem text="DecoderPro programmer " target="manual.DecoderPro3.Basic_BasicPane"/>
</tocitem>
<tocitem text="Reporters " target="html.tools.Reporters">
<tocitem text="Reporter Table " target="package.jmri.jmrit.beantable.ReporterTable"/>
<tocitem text="Add/Edit Reporters " target="package.jmri.jmrit.beantable.ReporterAddEdit"/>
</tocitem>
<tocitem text="Routes " target="html.tools.Routes">
<tocitem text="Route Table " target="package.jmri.jmrit.beantable.RouteTable"/>
<tocitem text="Add/Edit Routes " target="package.jmri.jmrit.beantable.RouteAddEdit"/>
</tocitem>
<tocitem text="Scripting " target="html.tools.scripting.index">
<tocitem text="Getting Started " target="html.tools.scripting.Start"/>
<tocitem text="Python/Jython " target="html.tools.scripting.Python"/>
<tocitem text="Example: Setting Turnouts " target="html.tools.scripting.ex_set_turnouts"/>
<tocitem text="Examples (Links) " target="html.tools.scripting.Examples"/>
<tocitem text="Scripting How To... " target="html.tools.scripting.HowTo"/>
<tocitem text="Scripting What...Where " target="html.tools.scripting.WhatWhere"/>
<tocitem text="Jynstruments " target="html.tools.scripting.Jynstruments"/>
<tocitem text="Jython Apps for JMRI " target="html.tools.scripting.JythonApps"/>
<tocitem text="Python 3 Introduction" target="html.tools.scripting.Python3"/>
<tocitem text="Open Scripting Arch (Apple) " target="html.tools.scripting.AppleScript"/>
</tocitem>
<tocitem text="Sections " target="html.tools.Sections">
<tocitem text="Section Table " target="package.jmri.jmrit.beantable.SectionTable"/>
<tocitem text="Add/Edit Sections " target="package.jmri.jmrit.beantable.SectionAddEdit"/>
</tocitem>
<tocitem text="Send DCC Packet Tool " target="package.jmri.jmrit.sendpacket.SendPacketFrame"/>
<tocitem text="Sensors " target="html.tools.Sensors">
<tocitem text="Sensor Table " target="package.jmri.jmrit.beantable.SensorTable"/>
<tocitem text="Add/Edit Sensors " target="package.jmri.jmrit.beantable.SensorAddEdit"/>
<tocitem text="Sensor Groups " target="package.jmri.jmrit.sensorgroup.SensorGroupFrame"/>
</tocitem>
<tocitem text="StringIOs " target="html.tools.StringIOs">
<tocitem text="StringIO Table " target="package.jmri.jmrit.beantable.StringIOTable"/>
<tocitem text="Add/Edit StringIOs " target="package.jmri.jmrit.beantable.StringIOAddEdit"/>
</tocitem>
<tocitem text="Signaling " target="html.tools.signaling.index">
<tocitem text="Signaling Quick Start " target="html.tools.signaling.SignalingSetup"/>
<tocitem text="Signal Heads " target="html.tools.signaling.SignalHeads">
<tocitem text="Signal Head Table " target="package.jmri.jmrit.beantable.SignalHeadTable"/>
<tocitem text="Add/Edit Signal Heads " target="package.jmri.jmrit.beantable.SignalAddEdit"/>
<tocitem text="European Examples " target="html.tools.signaling.ldt.output"/>
</tocitem>
<tocitem text="Signal Aspects " target="html.tools.signaling.AspectSignaling"/>
<tocitem text="Signal Masts " target="html.tools.signaling.SignalMasts">
<tocitem text="Signal Mast Table " target="package.jmri.jmrit.beantable.SignalMastTable"/>
<tocitem text="Add/Edit Signal Masts " target="package.jmri.jmrit.beantable.SignalMastAddEdit"/>
<tocitem text="Virtual Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit_virtual"/>
<tocitem text="Signal Head Controlled Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit_headCtl"/>
<tocitem text="Turnout Controlled Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit_turnoutCtl"/>
<tocitem text="Output Matrix Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit_matrixCtl"/>
<tocitem text="DCC Signal Mast " target="package.jmri.jmrit.beantable.SignalMastAddEdit_dccsmd"/>
</tocitem>
<tocitem text="Signal Mast Logic " target="package.jmri.jmrit.beantable.SignalMastLogicTable"/>
<tocitem text="Simple Signal Logic " target="package.jmri.jmrit.blockboss.BlockBossFrame"/>
</tocitem>
<tocitem text="Cab Signaling " target="package.jmri.jmrit.cabsignals.CabSignalPane"/>
<tocitem text="Speedometer " target="html.tools.speedometer.index"/>
<tocitem text="Throttles " target="html.tools.throttle.ThrottleMain">
<tocitem text="Android Phone as Throttle " target="package.jmri.jmrit.withrottle.UserInterface"/>
<tocitem text="iPhone/iPod Touch as Throttle " target="package.jmri.jmrit.withrottle.UserInterface"/>
<tocitem text="Z21 Throttle (Z21 App and WlanMaus) " target="package.jmri.jmrit.z21server.z21server"/>
<tocitem text="webThrottle - Web Throttles and Panels " target="package.jmri.jmrit.webThrottle.webThrottle"/>
<tocitem text="inControl - Web Throttles and Panels (older version) " target="package.jmri.jmrit.inControl.inControl"/>
</tocitem>
<tocitem text="Timetable " target="html.tools.TimeTable"/>
<tocitem text="Where Used " target="package.jmri.jmrit.whereused.WhereUsed"/>
<tocitem text="Tracker (Blocks) " target="html.tools.tracker.index"/>
<tocitem text="Transits " target="html.tools.Transits">
<tocitem text="Transit Table " target="package.jmri.jmrit.beantable.TransitTable"/>
<tocitem text="Add/Edit Transits " target="package.jmri.jmrit.beantable.TransitAddEdit"/>
<tocitem text="Transit Actions " target="package.jmri.jmrit.beantable.ViewSpecialActions"/>
</tocitem>
<tocitem text="Turnouts " target="html.tools.Turnouts">
<tocitem text="Turnout Table " target="package.jmri.jmrit.beantable.TurnoutTable"/>
<tocitem text="Add/Edit Turnouts " target="package.jmri.jmrit.beantable.TurnoutAddEdit"/>
<tocitem text="Simple Turnout Control " target="package.jmri.jmrit.simpleturnoutctrl.SimpleTurnoutCtrl"/>
</tocitem>
<tocitem text="Virtual Sound Decoder " target="html.tools.vsd.index"/>
<tocitem text="Warrants " target="html.tools.WarrantsIntro">
<tocitem text="Warrants Overview and Getting Started " target="package.jmri.jmrit.logix.Warrant"/>
<tocitem text="Creating and Editing Warrants " target="package.jmri.jmrit.logix.CreateEditWarrant"/>
<tocitem text="NXWarrants " target="package.jmri.jmrit.logix.NXWarrant"/>
<tocitem text="SCWarrants " target="package.jmri.jmrit.logix.SCWarrant"/>
<tocitem text="The Warrant List " target="package.jmri.jmrit.logix.WarrantTable"/>
<tocitem text="When Warrant Speeds Are Modified " target="package.jmri.jmrit.logix.SpeedChanges"/>
<tocitem text="Train Trackers " target="package.jmri.jmrit.logix.Tracker"/>
<tocitem text="The Occupancy Block Tables " target="package.jmri.jmrit.logix.OBlockTable"/>
<tocitem text="Creating and Editing OBlocks, Portals and OPaths " target="package.jmri.jmrit.logix.OBlockEdit"/>
<tocitem text="Circuit Builder " target="package.jmri.jmrit.display.CircuitBuilder"/>
</tocitem>
<tocitem text="USS CTC Tools " target="html.tools.uss.index">
<tocitem text="OS Indicator " target="package.jmri.jmrit.ussctc.OsIndicatorFrame"/>
<tocitem text="Follower " target="package.jmri.jmrit.ussctc.FollowerFrame"/>
</tocitem>
</tocitem>
<tocitem text="System-Specific Tools ">
<tocitem text="Acela ">
<tocitem text="Configure Nodes " target="package.jmri.jmrix.acela.nodeconfig.NodeConfigFrame"/>
<tocitem text="Monitor " target="package.jmri.jmrix.acela.acelamon.AcelaMonFrame"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.acela.packetgen.AcelaPacketGenFrame"/>
</tocitem>
<tocitem text="Bachrus " target="html.hardware.bachrus.index">
<tocitem text="Speedo Console " target="package.jmri.jmrix.bachrus.SpeedoConsoleFrame"/>
</tocitem>
<tocitem text="BiDiB " target="html.hardware.bidib.index">
<tocitem text="Signal Masts " target="html.hardware.bidib.BiDiB-SignalMast"/>
</tocitem>
<tocitem text="C/MRI ">
<tocitem text="Check Pin Assignments " target="package.jmri.jmrix.cmri.serial.assignment.ListFrame"/>
<tocitem text="Configure Nodes " target="package.jmri.jmrix.cmri.serial.nodeconfig.NodeConfigFrame"/>
<tocitem text="Diagnostics " target="package.jmri.jmrix.cmri.serial.diagnostic.DiagnosticFrame"/>
<tocitem text="Signals " target="html.hardware.cmri.Signals"/>
</tocitem>
<tocitem text="Ecos " target="html.hardware.ecos.index">
<tocitem text="Ecos Preferences " target="package.jmri.jmrix.ecos.swing.preferencesframe.PreferencesFrame"/>
<tocitem text="Loco Table " target="package.jmri.jmrix.ecos.swing.locodatabase.EcosLocoTable"/>
<tocitem text="Status " target="package.jmri.jmrix.ecos.swing.statusframe.StatusFrame"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.ecos.swing.packetgen.PacketGenFrame"/>
</tocitem>
<tocitem text="Digitrax ">
<tocitem text="BDL16, BDL162, BDL168 Configuration Tool " target="package.jmri.jmrix.loconet.bdl16.BDL16Frame"/>
<tocitem text="Digitrax Command Station Configuration Tool " target="package.jmri.jmrix.loconet.cmdstnconfig.CmdStnConfigFrame"/>
<tocitem text="DS64 Configuration Tool " target="package.jmri.jmrix.loconet.ds64.DS64TabbedPanel"/>
<tocitem text="Duplex Network Configuration Tool " target="package.jmri.jmrix.loconet.duplexgroup.DuplexGroupTabbedPanel"/>
<tocitem text="Firmware Downloader Tool " target="package.jmri.jmrix.loconet.downloader.LoaderFrame"/>
<tocitem text="Manage LNCV Modules " target="package.jmri.jmrix.loconet.swing.lncvprog.LncvProgPane"/>
<tocitem text="Manage LocoIO Modules " target="package.jmri.jmrix.loconet.swing.lnsv1prog.Lnsv1ProgPane"/>
<tocitem text="LocoNet Addresses " target="html.hardware.loconet.Addressing"/>
<tocitem text="LocoNet Clock Monitor Tool " target="package.jmri.jmrix.loconet.clockmon.ClockMonFrame"/>
<tocitem text="LocoNet ID " target="package.jmri.jmrix.loconet.locoid.LocoIdFrame"/>
<tocitem text="LocoNet Interface Statistics Tool " target="package.jmri.jmrix.loconet.locostats.LocoStatsFrame"/>
<tocitem text="LocoNet Monitor " target="package.jmri.jmrix.loconet.locomon.LocoMonFrame"/>
<tocitem text="LocoNet Simulator Tool " target="package.jmri.jmrix.loconet.locogen.LocoGenFrame"/>
<tocitem text="PM4, PM42 Configuration Tool " target="package.jmri.jmrix.loconet.pm4.PM4Frame"/>
<tocitem text="PR3 Mode Selection Tool " target="package.jmri.jmrix.loconet.pr3.swing.Pr3Select"/>
<tocitem text="Sound ">
<tocitem text="Sound Loader " target="package.jmri.jmrix.loconet.soundloader.LoaderFrame"/>
<tocitem text="Sound Editor " target="package.jmri.jmrix.loconet.soundloader.EditorFrame"/>
</tocitem>
<tocitem text="SE8C Configuration Tool " target="package.jmri.jmrix.loconet.se8.SE8Frame"/>
<tocitem text="Slot Monitor " target="package.jmri.jmrix.loconet.slotmon.SlotMonFrame"/>
<tocitem text="Throttle Messages " target="package.jmri.jmrix.loconet.swing.throttlemsg.MessageFrame"/>
<tocitem text="DCS52 Mode Select " target="package.jmri.jmrix.loconet.usb_dcs52.swing.Dcs52UsbModeSelect"/>
<tocitem text="DCS240 Mode Select " target="package.jmri.jmrix.loconet.usb_dcs240.swing.Dcs240UsbModeSelect"/>
</tocitem>
<tocitem text="Grapevine " target="html.hardware.grapevine.index">
<tocitem text="Configure Node " target="package.jmri.jmrix.grapevine.nodeconfig.NodeConfigFrame"/>
<tocitem text="Node Table " target="package.jmri.jmrix.grapevine.nodetable.NodeTableFrame"/>
<tocitem text="Renumber Node " target="package.jmri.jmrix.grapevine.nodetable.RenumberFrame"/>
</tocitem>
<tocitem text="IEEE802154 ">
<tocitem text="Add Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.AddNodeFrame"/>
<tocitem text="Edit Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.EditNodeFrame"/>
<tocitem text="Configure Node " target="package.jmri.jmrix.ieee802154.swing.nodeconfig.NodeConfigFrame"/>
</tocitem>
<tocitem text="Maple " target="html.hardware.maple.index">
<tocitem text="List " target="package.jmri.jmrix.maple.assignment.ListFrame"/>
<tocitem text="Configure Node " target="package.jmri.jmrix.maple.nodeconfig.NodeConfigFrame"/>
<tocitem text="Monitor Maple Traffic " target="package.jmri.jmrix.maple.serialmon.SerialMonFrame"/>
</tocitem>
<tocitem text="M&#228;rklin ">
<tocitem text="Send Packet " target="package.jmri.jmrix.marklin.swing.packetgen.PacketGenFrame"/>
</tocitem>
<tocitem text="MERG " target="html.hardware.merg.index">
<tocitem text="CBUS Tools ">
<tocitem text="Command Station Monitor " target="package.jmri.jmrix.can.cbus.swing.cbusslotmonitor.CbusSlotMonitorPane"/>
<tocitem text="Console Tool " target="package.jmri.jmrix.can.cbus.swing.console.CbusConsoleFrame"/>
<tocitem text="Event Capture Tool " target="package.jmri.jmrix.can.cbus.swing.configtool.ConfigToolFrame"/>
<tocitem text="Event Table Tool " target="package.jmri.jmrix.can.cbus.swing.eventtable.EventTablePane"/>
<tocitem text="Firmware Update " target="package.jmri.jmrix.can.cbus.swing.bootloader.CbusBootloaderPane"/>
<tocitem text="Node Config Tool " target="package.jmri.jmrix.can.cbus.swing.nodeconfig.NodeConfigToolPane"/>
<tocitem text="Send Frame / Event Tool " target="package.jmri.jmrix.can.swing.send.CanSendFrame"/>
<tocitem text="Simulator " target="package.jmri.jmrix.can.cbus.swing.simulator.SimulatorPane"/>
<tocitem text="Voltage / Current Meter " target="html.hardware.can.cbus.CbusMeters"/>
</tocitem>
</tocitem>
<tocitem text="MRC " target="html.hardware.mrc.index">
<tocitem text="MRC Traffic Monitor " target="package.jmri.jmrix.mrc.swing.monitor.MrcMonPanel"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.mrc.swing.packetgen.MrcPacketGenPanel"/>
</tocitem>
<tocitem text="NCE ">
<tocitem text="Send Command " target="package.jmri.jmrix.nce.packetgen.NcePacketGenFrame"/>
<tocitem text="Edit Macro " target="package.jmri.jmrix.nce.macro.NceMacroEditFrame"/>
<tocitem text="Edit Consist " target="package.jmri.jmrix.nce.consist.NceConsistEditFrame"/>
<tocitem text="DCC Packet Analyzer " target="package.jmri.jmrix.nce.analyzer.NcePacketMonitorFrame"/>
<tocitem text="Monitor Clock " target="package.jmri.jmrix.nce.clockmon.ClockMonFrame"/>
<tocitem text="USB Interface tool " target="package.jmri.jmrix.nce.usbinterface.UsbInterfacePanel"/>
</tocitem>
<tocitem text="Oaktree " target="html.hardware.oaktree.OakTree">
<tocitem text="Configure Nodes " target="package.jmri.jmrix.oaktree.nodeconfig.NodeConfigFrame"/>
</tocitem>
<tocitem text="OpenLCB " target="html.hardware.openlcb.index">
<tocitem text="Configure Nodes " target="package.jmri.jmrix.openlcb.swing.networktree.NetworkTreePane"/>
<tocitem text="Event Table" target="package.jmri.jmrix.openlcb.swing.eventtable.EventTablePane"/>
<tocitem text="Memory Tool" target="package.jmri.jmrix.openlcb.swing.memtool.MemoryToolPane"/>
<tocitem text="Names " target="html.hardware.openlcb.Names"/>
<tocitem text="Signal Masts " target="html.hardware.openlcb.OlcbSignalMast"/>
<tocitem text="Send Frame" target="package.jmri.jmrix.openlcb.swing.send.OpenLcbCanSendFrame"/>
</tocitem>
<tocitem text="Powerline " target="html.hardware.powerline.index">
<tocitem text="Send Packet " target="package.jmri.jmrix.powerline.packetgen.PowerlinePacketGenPane"/>
<tocitem text="Traffic Monitor " target="package.jmri.jmrix.powerline.serialmon.SerialMonFrame"/>
<tocitem text="Configure Nodes " target="package.jmri.jmrix.powerline.nodeconfig.NodeConfigFrame"/>
</tocitem>
<tocitem text="RPS Positioning System " target="html.hardware.rps.index">
<tocitem text="Receiver Control " target="package.jmri.jmrix.rps.aligntable.AlignTableFrame"/>
<tocitem text="Polling Control " target="package.jmri.jmrix.rps.swing.polling.PollTableFrame"/>
<tocitem text="Debugger Window " target="package.jmri.jmrix.rps.swing.debugger.DebuggerFrame"/>
<tocitem text="RPS Sensors " target="html.hardware.rps.sensors"/>
<tocitem text="Tracking Display " target="package.jmri.jmrix.rps.trackingpanel.RpsTrackingFrame"/>
<tocitem text="Sound Speed Control " target="package.jmri.jmrix.rps.swing.soundset.SoundSetFrame"/>
</tocitem>
<tocitem text="SRCP " target="html.hardware.SRCP.index"/>
<tocitem text="SECSI " target="html.hardware.secsi.index">
<tocitem text="Configure Node " target="package.jmri.jmrix.secsi.nodeconfig.NodeConfigFrame"/>
<tocitem text="Traffic Monitor " target="package.jmri.jmrix.secsi.serialmon.SerialMonFrame"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.secsi.packetgen.SerialPacketGenFrame"/>
</tocitem>
<tocitem text="SPROG " target="html.hardware.sprog.SPROG_tools">
<tocitem text="Console " target="package.jmri.jmrix.sprog.console.SprogConsoleFrame"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.sprog.packetgen.SprogPacketGenFrame"/>
<tocitem text="Slot Monitor " target="package.jmri.jmrix.sprog.sprogslotmon.SprogSlotMonFrame"/>
<tocitem text="SPROG Version " target="package.jmri.jmrix.sprog.update.SprogVersionFrame"/>
<tocitem text="Update SPROG II " target="package.jmri.jmrix.sprog.update.SprogIIUpdateFrame"/>
</tocitem>
<tocitem text="SPROG Generation 5 ">
<tocitem text="SPROG Generation 5 Tools ">
<tocitem text="Pi-SPROG 3 Mode Switcher " target="package.jmri.jmrix.can.cbus.swing.modeswitcher.SprogCbusSimpleModeSwitcherFrame"/>
<tocitem text="Pi-SPROG/SPROG 3 Plus Mode Switcher " target="package.jmri.jmrix.can.cbus.swing.modeswitcher.SprogCbusSprog3PlusModeSwitcherFrame"/>
</tocitem>
<tocitem text="CBUS Tools ">
<tocitem text="Console Tool " target="package.jmri.jmrix.can.cbus.swing.console.CbusConsoleFrame"/>
<tocitem text="Send Frame / Event Tool " target="package.jmri.jmrix.can.swing.send.CanSendFrame"/>
<tocitem text="Event Capture Tool " target="package.jmri.jmrix.can.cbus.swing.configtool.ConfigToolFrame"/>
<tocitem text="Event Table Tool " target="package.jmri.jmrix.can.cbus.swing.eventtable.EventTablePane"/>
<tocitem text="Node Config Tool " target="package.jmri.jmrix.can.cbus.swing.nodeconfig.NodeConfigToolPane"/>
<tocitem text="Command Station Monitor " target="package.jmri.jmrix.can.cbus.swing.cbusslotmonitor.CbusSlotMonitorPane"/>
<tocitem text="Simulator " target="package.jmri.jmrix.can.cbus.swing.simulator.SimulatorPane"/>
<tocitem text="Firmware Update " target="package.jmri.jmrix.can.cbus.swing.bootloader.CbusBootloaderPane"/>
<tocitem text="Voltage / Current Meter " target="html.hardware.can.cbus.CbusMeters"/>
</tocitem>
</tocitem>
<tocitem text="TAMs " target="html.hardware.tams.index">
<tocitem text="Loco Database " target="package.jmri.jmrix.tams.swing.locodatabase.LocoDataFrame"/>
<tocitem text="Send Packet " target="package.jmri.jmrix.tams.swing.packetgen.PacketGenFrame"/>
</tocitem>
<tocitem text="TMCC " target="html.hardware.tmcc.index"/>
<tocitem text="Zimo " target="html.hardware.zimo.Zimo">
<tocitem text="Mx1 Monitor " target="package.jmri.jmrix.zimo.swing.monitor.Mx1MonPanel"/>
<tocitem text="Send Mx1 Packet " target="package.jmri.jmrix.zimo.swing.packetgen.Mx1PacketGenPanel"/>
</tocitem>
<tocitem text="XBee " target="html.hardware.XBee.index_tools">
<tocitem text="Configure XBee Node " target="html.hardware.XBee.XBeeNodeConfigurationTool"/>
</tocitem>
<tocitem text="XPressNet (Lenz) " target="html.hardware.XPressNet.index_tools">
<tocitem text="System Information " target="html.hardware.XPressNet.XNetSystemInformationtool"/>
<tocitem text="LI101 Configuration " target="html.hardware.XPressNet.LI101Configurationtool"/>
<tocitem text="LZV100 Configuration " target="html.hardware.XPressNet.LZV100Configurationtool"/>
</tocitem>
</tocitem>
<tocitem text="Technical " target="html.doc.Technical.index">
<tocitem text="Getting the Source Code ">
<tocitem text="Via Git " target="html.doc.Technical.getgitcode"/>
<tocitem text="Git FAQs " target="html.doc.Technical.GitFAQ"/>
<tocitem text="Git for Developers " target="html.doc.Technical.gitdeveloper"/>
</tocitem>
<tocitem text="Building Your Own Copy of JMRI ">
<tocitem text="Building with Ant " target="html.doc.Technical.Ant"/>
<tocitem text="Building with NetBeans " target="html.doc.Technical.NetBeans"/>
<tocitem text="Building with Eclipse " target="html.doc.Technical.Eclipse"/>
<tocitem text="Building with IDEA IntelliJ " target="html.doc.Technical.IntelliJ"/>
</tocitem>
<tocitem text="How We Do Stuff ">
<tocitem text="Recommended Practices for Programmers " target="html.doc.Technical.RP"/>
<tocitem text="JMRI Library Structure " target="html.doc.Technical.IntroStructure"/>
<tocitem text="JMRI Program Structure " target="html.doc.Technical.AppStructure"/>
<tocitem text="Names and Naming " target="html.doc.Technical.Names"/>
<tocitem text="Code Structure Patterns " target="html.doc.Technical.Patterns"/>
<tocitem text="Swing Structure " target="html.doc.Technical.Swing"/>
<tocitem text="External Connection Structure " target="html.doc.Technical.SystemStructure"/>
<tocitem text="Threads and Threading " target="html.doc.Technical.Threads"/>
<tocitem text="JavaHelp HowTo " target="html.doc.Technical.Help"/>
<tocitem text="Documentation with Javadoc and UML " target="html.doc.Technical.Javadoc"/>
<tocitem text="Unit testing with JUnit " target="html.doc.Technical.JUnit"/>
<tocitem text="The JMRI Website " target="html.doc.Technical.WebSite"/>
<tocitem text="Help and Web Site " target="html.doc.Technical.Help">
<tocitem text="Providing Help using JavaHelp " target="html.doc.Technical.Help"/>
<tocitem text="The JMRI Web Site " target="html.doc.Technical.WebSite"/>
<tocitem text="Updating JMRI Web and Help " target="html.doc.Technical.UpdatingDocs"/>
<tocitem text="Creating Help for New Hardware " target="html.doc.Technical.Help_hwhelp"/>
<tocitem text="Program Documentation Using Javadoc " target="html.doc.Technical.Javadoc"/>
</tocitem>
</tocitem>
<tocitem text="XML Information " target="html.apps.DecoderPro.IntroXML">
<tocitem text="Technical Info " target="html.doc.Technical.XmlView"/>
<tocitem text="XML Editors " target="html.doc.Technical.XmlEditors"/>
<tocitem text="Displaying Panel Files " target="html.apps.PanelPro.ShowPanel"/>
</tocitem>
</tocitem>
<tocitem text="Web Access to JMRI " target="html.web.index"/>
</toc>
+22
View File
@@ -0,0 +1,22 @@
English JmriHelp files for JMRI
This directory contains metadata for the jmrihelp sub-system,
plus the actual content.
There are several content subtrees:
manual - a help version of the original DecoderPro manual
html - a help-customized version of the website
package - package-sensitive help, organized by Java package
The template-no-sidebar.shtml and template-sidebar.shtml files
are basic templates to copy when making a new file.
For more information on maintaining the various metadata in the
help system, please see:
<https://jmri.org/help/en/html/doc/Technical/Help.shtml>
The build.xml and format.xsl files are used to create the webtoc.html
and webindex.shtml files automatically. Those use Server-Side Includes
to display the standard JMRI header and footer, and also some
explanatory content from the tocheader and indexheader files.
+92
View File
@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xml/XSLT/antdoc.xsl"?>
<!-- an ANT build.xml file for JMRI XSLT -->
<!-- Bob Jacobsen, Copyright 2002, 2003, 2004, 2005, 2008, 2010, 2015 -->
<!-- This file is part of JMRI. -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<project name="JMRI" default="all" basedir=".">
<!-- basedir="." means all paths are relative to the "java/help/en" subdir -->
<!-- in the project. We expect that lib et al will be present in -->
<!-- .. from there -->
<description>
Provides build services for JMRI web pages from help/en metadata
</description>
<!-- set global properties for this build -->
<property name="helptarget" value="."/>
<target name="init" description="create needed directories for en/help">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${helptarget}"/>
</target>
<target name="index" depends="init"
description="create an en/index page">
<xslt basedir="${basedir}"
destdir="${helptarget}"
extension=".html"
style="format.xsl"
includes="JmriHelp_enIndex.xml"
>
</xslt>
<move file="JmriHelp_enIndex.html" tofile="webindex.shtml"/>
</target>
<target name="TOC" depends="init"
description="create a en/TOC page">
<xslt basedir="${basedir}"
destdir="${helptarget}"
extension=".html"
style="format.xsl"
includes="JmriHelp_enTOC.xml"
>
</xslt>
<move file="JmriHelp_enTOC.html" tofile="webtoc.shtml"/>
</target>
<target name="Local" depends="init"
description="create a en/local/index.html page">
<xslt basedir="${basedir}"
destdir="${helptarget}"
extension=".local"
style="formatLocal.xsl"
includes="JmriHelp_enTOC.xml, JmriHelp_enIndex.xml"
>
</xslt>
<concat destfile="local/index.html">
<fileset file="JmriHelp_enHeader.local" />
<fileset file="JmriHelp_enTOC.local" />
<fileset file="JmriHelp_enMiddle.local" />
<fileset file="JmriHelp_enIndex.local" />
<fileset file="JmriHelp_enFooter.local" />
</concat>
<delete file="JmriHelp_enTOC.local" />
<delete file="JmriHelp_enIndex.local" />
</target>
<target name="all" depends="init, index, TOC, Local"
description="create all en/help pages" />
</project>
+145
View File
@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Stylesheet to convert JavaHelp index and TOC pages into HTML -->
<!-- This file is part of JMRI. Copyright 2007, 2015. -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Need to instruct the XSLT processor to use HTML output rules.
See http://www.w3.org/TR/xslt#output for more details
-->
<xsl:output method="html" encoding="UTF-8"/>
<!-- This first template matches our root element in the input file.
This will trigger the generation of the header.
In between we let the processor recursively process any contained
elements, which is what the apply-templates instruction does.
We also pick some stuff out explicitly in the head section using
value-of instructions.
-->
<xsl:template match='index'>
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;&#xA;</xsl:text>
<html lang="en">
<head>
<title>JMRI Help System: Index</title>
<meta name="author" content="Bob Jacobsen" />
<meta name="keywords" content="JMRI Help Index" />
<xsl:comment>=====================================================================</xsl:comment>
<xsl:comment>This file is automatically generated by Ant from JmriHelp_enIndex.xml</xsl:comment>
<xsl:comment>Do not edit it directly</xsl:comment>
<xsl:comment>=====================================================================</xsl:comment>
<xsl:comment>#include virtual="/help/en/parts/Style.shtml" </xsl:comment>
<script src="/js/help.js"></script>
</head>
<body>
<xsl:comment>#include virtual="/help/en/parts/Header.shtml" </xsl:comment>
<xsl:comment>#include virtual="indexheader" </xsl:comment>
<ul>
<xsl:apply-templates/>
</ul>
<xsl:comment>#include virtual="/help/en/parts/Footer.shtml" </xsl:comment>
</body>
</html>
</xsl:template>
<!-- recursively handle index items -->
<!-- if there's a target, convert to a HREF -->
<xsl:template match="indexitem">
<li>
<xsl:if test="@target" >
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:variable name="target" select="@target" />
<xsl:for-each select="document('local/jmri_map.xml')/map/mapID">
<xsl:if test="( @target = $target )" >
<xsl:value-of select="@url"/>
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="@text"/>
</xsl:element>
</xsl:if>
<xsl:if test="not(@target)" >
<xsl:value-of select="@text"/>
</xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
</li>
</xsl:template>
<xsl:template match='toc'>
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;&#xA;</xsl:text>
<html lang="en">
<head>
<title>JMRI Help System: Table of Contents</title>
<meta name="author" content="Bob Jacobsen" />
<meta NAME="keywords" content="JMRI Help TOC Table of Contents" />
<xsl:comment>=====================================================================</xsl:comment>
<xsl:comment>This file is automatically generated by Ant from JmriHelp_enIndex.xml</xsl:comment>
<xsl:comment>Do not edit it directly</xsl:comment>
<xsl:comment>=====================================================================</xsl:comment>
<xsl:comment>#include virtual="/help/en/parts/Style.shtml" </xsl:comment>
<script src="/js/help.js"></script>
</head>
<body>
<xsl:comment>#include virtual="/help/en/parts/Header.shtml" </xsl:comment>
<xsl:comment>#include virtual="tocheader" </xsl:comment>
<ul>
<xsl:apply-templates/>
</ul>
<xsl:comment>#include virtual="/help/en/parts/Footer.shtml" </xsl:comment>
</body>
</html>
</xsl:template>
<!-- recursively handle TOC items -->
<!-- if there's a target, convert to a HREF -->
<xsl:template match="tocitem">
<li>
<xsl:if test="@target" >
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:variable name="target" select="@target" />
<xsl:for-each select="document('local/jmri_map.xml')/map/mapID">
<xsl:if test="( @target = $target )" >
<xsl:value-of select="@url"/>
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="@text"/>
</xsl:element>
</xsl:if>
<xsl:if test="not(@target)" >
<xsl:value-of select="@text"/>
</xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
+92
View File
@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Stylesheet to convert JmriHelp index and TOC pages into HTML -->
<!-- This file is part of JMRI. Copyright 2007, 2015. -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Need to instruct the XSLT processor to use HTML output rules.
See http://www.w3.org/TR/xslt#output for more details
-->
<xsl:output method="html" encoding="UTF-8"/>
<!-- The TOC and Index xml files are converted to html ul/li/a tags. The ant process
will wrap the two sections with the header, middle and footer html.
-->
<!-- recursively handle toc items -->
<!-- if there's a target, convert to a iframe link -->
<xsl:template match="tocitem">
<li>
<xsl:if test="@target">
<xsl:element name="a">
<xsl:attribute name="id">
<xsl:value-of select="@target" />
</xsl:attribute>
</xsl:element>
<xsl:element name="a">
<xsl:attribute name="onclick">
<xsl:variable name="target" select="@target" />
<xsl:for-each select="document('local/jmri_map.xml')/map/mapID">
<xsl:if test="( @target = $target )" >
openLink('../<xsl:value-of select="@url"/>')
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="@text"/>
</xsl:element>
</xsl:if>
<xsl:if test="not(@target)" >
<xsl:value-of select="@text"/>
</xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
</li>
</xsl:template>
<!-- recursively handle index items -->
<!-- if there's a target, convert to a iframe link -->
<xsl:template match="indexitem">
<li>
<xsl:if test="@target">
<xsl:element name="a">
<xsl:attribute name="id">
<xsl:value-of select="@target" />
</xsl:attribute>
</xsl:element>
<xsl:element name="a">
<xsl:attribute name="onclick">
<xsl:variable name="target" select="@target" />
<xsl:for-each select="document('local/jmri_map.xml')/map/mapID">
<xsl:if test="( @target = $target )" >
openLink('../<xsl:value-of select="@url"/>')
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="@text"/>
</xsl:element>
</xsl:if>
<xsl:if test="not(@target)" >
<xsl:value-of select="@text"/>
</xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
+174
View File
@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Stylesheet to convert JavaHelp index and TOC pages into HTML -->
<!-- This file is part of JMRI. Copyright 2007, 2015. -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Need to instruct the XSLT processor to use HTML output rules.
See http://www.w3.org/TR/xslt#output for more details
-->
<xsl:output method="html" encoding="UTF-8"/>
<!-- This first template matches our root element in the input file.
This will trigger the generation of the header.
In between we let the processor recursively process any contained
elements, which is what the apply-templates instruction does.
We also pick some stuff out explicitly in the head section using
value-of instructions.
-->
<xsl:template match='toc'>
<xsl:text disable-output-escaping='yes'>&lt;!DOCTYPE html&gt;&#xA;</xsl:text>
<html lang="en">
<head>
<title>JMRI Help System: JMRI Local TOC</title>
<meta name="author" content="Dave Sand" />
<meta name="keywords" content="JMRI Help Index" />
<xsl:comment>=====================================================================</xsl:comment>
<xsl:comment>This file is automatically generated by Ant from JmriHelp_enTOC.xml</xsl:comment>
<xsl:comment>Do not edit it directly</xsl:comment>
<xsl:comment>=====================================================================</xsl:comment>
<script>
var use_internet = false;
function openLink(link) {
if (link.includes("/manual/")) {
if (!use_internet) {
if (window.confirm("Manual help pages are not installed.\nIf internet is available, use jmri.org?")) {
use_internet = true;
}
}
if (use_internet) {
link = "https://jmri.org/help/en/manual/" + link;
} else {
return;
}
}
document.getElementById("page").src = link;
}
function onLoad() {
var url = window.location.href;
var i = url.indexOf('#');
var urlParts = [url.slice(0,i), url.slice(i+1)];
if (urlParts[1] != "") {
var link = urlParts[1].replace(/\./g, '/')
// find fragment
var frag = '';
var j = link.indexOf('_');
if (j > 0) {
var fragParts = [link.slice(0,j), link.slice(j+1)];
link = fragParts[0];
frag = '#' + fragParts[1];
}
var newURL = '../' + link + '.shtml' + frag;
openLink(newURL);
} else {
openLink('../index.shtml');
}
}
</script>
<style>
h2 {
text-align: center;
}
a {
text-decoration: underline;
cursor: pointer;
}
.float-container {
border: 3px solid #fff;
padding: 20px;
}
.float-child-index {
width: 30%;
float: left;
padding: 20px;
border: 2px solid black;
height: 600px;
overflow: auto;
}
.float-child-page {
width: 60%;
float: left;
padding: 20px;
border: 2px solid black;
}
.clear {
clear: both;
}
</style>
</head>
<body onload="onLoad()">
<div class="float-container">
<div class="float-child-index">
<ul>
<xsl:apply-templates/>
</ul>
</div>
<iframe class="float-child-page" id="page" height="600" src="../index.shtml" title="JMRI Help"></iframe>
</div>
<xsl:text disable-output-escaping='yes'>&lt;p class="clear"&gt; &#x26;nbsp; &lt;/p&gt; &#xA;</xsl:text>
</body>
</html>
</xsl:template>
<!-- recursively handle toc items -->
<!-- if there's a target, convert to a iframe link -->
<xsl:template match="tocitem">
<li>
<xsl:if test="@target">
<xsl:element name="a">
<xsl:attribute name="id">
<xsl:value-of select="@target" />
</xsl:attribute>
</xsl:element>
<xsl:element name="a">
<xsl:attribute name="onclick">
<xsl:variable name="target" select="@target" />
<xsl:for-each select="document('local/jmri_map.xml')/map/mapID">
<xsl:if test="( @target = $target )" >
openLink('../<xsl:value-of select="@url"/>')
</xsl:if>
</xsl:for-each>
</xsl:attribute>
<xsl:value-of select="@text"/>
</xsl:element>
</xsl:if>
<xsl:if test="not(@target)" >
<xsl:value-of select="@text"/>
</xsl:if>
<ul>
<xsl:apply-templates/>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
File diff suppressed because it is too large Load Diff
+323
View File
@@ -0,0 +1,323 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Frequently Asked Questions (General)</title>
<meta name="author" content="Jerry Grochow"><!--#include virtual="/help/en/parts/Style.shtml" -->
<!-- special inline FAQ styles -->
<style type="text/css">
* {
box-sizing: border-box;
}
/* Create two equal columns that float next to each other */
.column {
float: left;
width: 50%;
padding: 10px;
}
/* Clear floats after the columns */
.row:after {
content: "";
display: table;
clear: both;
}
</style><!-- FAQ-Head -->
<script type="text/javascript">
/*<![CDATA[*/document.documentElement.className="hasJS";/*]]>*/
</script>
<link rel="stylesheet" type="text/css" href="/web/css/faq.css" media="screen"><!-- /FAQ-Head -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: Frequently Asked Questions (General)</h1>
<p>Making it easy for all model railroaders to get started with JMRI is important. Below are
some common questions and answers frequently asked in user forums, of experienced users, and
of developers. As your experience with JMRI grows, you will have your own questions. The best
place to get help is by asking for it in the JMRI User Forum. Below are links to other topics
that will also further your understanding:</p>
<div class="row">
<div class="column">
<p>Introductions and Getting Started Guides:</p>
<ul>
<li>
<a href="apps/PanelPro/GettingStarted.shtml">Getting Started With PanelPro</a>
</li>
<li>
<a href="apps/DecoderPro/Tour.shtml">DecoderPro Quick Tour</a>
</li>
<li>
<a href="apps/LoadStoreWork.shtml">Loading and Storing Your Work</a>
</li>
<li>
<a href="tools/signaling/SignalingSetup.shtml">Signaling Quick Start</a>
</li>
<li>
<a href="tools/consisttool/ConsistTool.shtml">Consist Basics</a>
</li>
<li>
<a href="hardware/rfid/GettingStartedWithRFID.shtml">Getting Started with RFID</a>
</li>
<li>
<a href="tools/scripting/HowTo.shtml">Scripting "How To"</a>
</li>
<li>
<a href="../package/jmri/jmrit/logix/Warrant.shtml">Getting Started with Warrants</a>
</li>
<li>
<a href=
"../package/jmri/jmrit/operations/Operations.shtml#QuickStartHelp">OperationsPro
Quick Start</a>
</li>
</ul>
</div>
<div class="column">
<p>Additional FAQs on specific topics:</p>
<ul>
<li>
<a href="apps/PanelPro/FAQ.shtml">PanelPro FAQ</a>
</li>
<li>
<a href="apps/DecoderPro/FAQ.shtml">DecoderPro FAQ</a>
</li>
<li>
<a href="setup/FAQ.shtml">JMRI Setup FAQ (TBD)</a>
</li>
<li>
<a href="../../../install/FAQLinux.shtml">Linux FAQ</a>
</li>
<li>
<a href="doc/Technical/GitFAQ.shtml">Git (Development Tool) FAQ</a>
</li>
</ul>
</div>
</div>
<div id="para">
<dl class="faq">
<dt class="on" id="canuse">Can I use JMRI to...</dt>
<dd>
<ul>
<li>
<strong>operate my DCC trains?</strong><br>
Yes. JMRI provides the functions of a <a href=
"tools/throttle/ThrottleMain.shtml">throttle (or many throttles)</a> to your DCC
command station.
</li>
<li>
<strong>program the decoders in my locomotives?</strong><br>
Yes. JMRI <a href="apps/DecoderPro/index.shtml">DecoderPro</a> greatly simplifies
programming decoders through your DCC command station.
</li>
<li>
<strong>control accessories on my layout?</strong><br>
Yes, <a href="hardware/index.shtml">of all kinds</a> including turnouts, lights,
signals, room lighting, automations - anything that can be electrically connected
to your computer, DCC or other object control system which uses any <a href=
"hardware/index.shtml#networks">network or protocol</a> that JMRI supports.
</li>
<li>
<strong>receive and process feedback from my layout?</strong><br>
Yes. Any type of <a href="tools/Sensors.shtml">sensor</a> can be used to provide
feedback from different aspects of your layout.
</li>
<li><strong>operate my DC trains?</strong><br>
Only to the extent that they can be controlled by whatever DCC system you are
using.</li>
<li>
<strong>control signals on my layout?</strong><br>
Yes, according to many different <a href=
"tools/signaling/index.shtml">signaling</a> protocols.
</li>
<li>
<strong>automate train operation?</strong><br>
Yes, in <a href="tools/automation/index.shtml">many different ways.</a>
</li>
<li><strong>do more than one of these things at the same time?</strong><br>
YES! You can use JMRI for as little or as much as you want. Start small with one
function. Keep adding more as you learn and your layout grows.</li>
</ul>
</dd>
<dt id="wherestart">JMRI has so many features, where do I start?</dt>
<dd>
Many people start by connecting their DCC system controller and registering their
locomotives using <a href="apps/DecoderPro/index.shtml">DecoderPro</a> . You can then
start running trains using a throttle in JMRI, a <a href=
"../package/jmri/jmrit/withrottle/UserInterface.shtml">wireless throttle, or your
smartphone / tablet.</a> Alternatively, you can dig right in entering layout
information on a Layout Editor Panel in PanelPro (<a href=
"apps/PanelPro/GettingStarted.shtml">tutorial</a>). Before moving on to <a href=
"apps/DispatcherPro/index.shtml">DispatcherPro</a> and <a href=
"apps/OperationsPro/index.shtml">OperationsPro</a>, make sure you have a working Panel.
More advanced operations using these modules requires a more complex setup before they
will work properly. The KEY... Don't do too much at once. Get the more basic aspects of
JMRI working before you take the next step.
</dd>
<dt id="wherelearn">Where can I learn about using JMRI?</dt>
<dd>
The internet - There are many presentations and videos available to help in learning
different aspects of JMRI. The JMRI.org website has getting started guides (<a href=
"apps/PanelPro/GettingStarted.shtml">PanelPro</a>, <a href=
"apps/DecoderPro/Tour.shtml">DecoderPro</a>). Reading questions and responses asked by
others on the user forum. Asking your own questions on the forum.
</dd>
<dt id="apps">What is the difference between using PanelPro, DecoderPro, and the other
JMRI modules?</dt>
<dd>
The JMRI application is a series of functions and user interfaces operating on a common
linked set of data. While <a href="apps/DecoderPro/index.shtml">DecoderPro</a> ,
<a href="apps/PanelPro/index.shtml">PanelPro</a> , <a href=
"apps/DispatcherPro/index.shtml">DispatcherPro,</a> <a href=
"../package/jmri/jmrit/operations/Operations.shtml">OperationsPro,</a> <a href=
"apps/SoundPro/SoundPro.shtml">and SoundPro</a> serve different purposes, all use the
same set of data. For example, when opening PanelPro, you get a main window with
pulldowns that include all the functions of DecoderPro. If you start by opening
DecoderPro, you get a roster window with pulldowns that include all the functions of
PanelPro.
</dd>
<dt id="programming">How much computer programming knowledge do I need to use JMRI?</dt>
<dd>
None - to use most of the functions of JMRI. Advanced JMRI capabilities use
programming-like logic (such as the <a href="tools/Logix.shtml">Logix</a> tool), but
basic capabilities necessary to run your railroad are always available with a simpler
interface (such as the <a href="tools/Routes.shtml">Routes</a> and <a href=
"tools/LRoutes.shtml">LRoutes</a> tools). Those with computer programming knowledge can
write <a href="tools/scripting/index.shtml">"scripts"</a> and even develop complete
applications that use the underlying JMRI functions (for example, <a href=
"http://cats4ctc.wikidot.com/">CATS</a> and <a href="apps/index.shtml#addapp">many
others</a>).
</dd>
<dt id="commandsta">Is JMRI a DCC command station?</dt>
<dd>No. JMRI is software that greatly enhances your ability to control your trains
through your DCC command station.</dd>
<dt id="connections">Can I have more than one "connection" to JMRI?</dt>
<dd>
Yes. You can have multiple connections to multiple DCC controllers, to networks of
accessory controllers, etc. See <a href=
"../package/apps/TabbedPreferences.shtml#Connection">here</a> for information on how to
set up multiple connections. For a complete list of all hardware supported, see
<a href="hardware/index.shtml">here</a>.
</dd>
<dt id="problem">What if I have a problem using JMRI?</dt>
<dd>
There many people who are available via the user group (<a href=
"https://groups.io/g/jmriusers">JMRI Users at groups.io</a>) to assist you. Just ask a
question! There are also dozens of blogs and videos on the internet posted by people,
just like you, who want to help. <strong>The important thing is... don't give
up!</strong> We all want you to succeed in using JMRI, making your model railroad as
good as it can be.
</dd>
<dt id="errormsg">What does it mean to get Error 301, Error 306 or any other errors?</dt>
<dd>
JMRI will display various errors when it finds something wrong in attempting to
communicate with your DCC command station. This <a href="apps/Errors.shtml">list of all
error messages</a> also provides some suggestions about how to clear them.
</dd>
<dt id="bug">What if my "problem" turns out to be a bug in JMRI?</dt>
<dd>
JMRI is open source and maintained by JMRI community volunteers. They are proud of
their work and want it to be "bug free". As JMRI continously develops, there will be
bugs. If you find one, please report it on JMRI Users forum or directly to <a href=
"https://github.com/JMRI/JMRI/issues">the JMRI issues lists on Github.</a> The many
developers will review them and work to resolve the issue. What this means is that you
can't get a schedule of what bugs will be fixed when, but you can count on the
community to address bugs that are stopping you from enjoying JMRI as quickly as they
can. In some cases, that might even be a day or less; in others, unfortunately, it
could be months. Remember that all who work on JMRI are volunteering their time. All
are dedicated to doing the best they can to make JMRI as great as it can be.
</dd>
<!--
<dt id="MORE">MORE</dt>
<dd>
MORE
</dd>
-->
<dt id="develops">Who develops and maintains JMRI?</dt>
<dd>
We do! JMRI is open source and community maintained. There are over 300 model
railroaders who have already made contributions to the effort since 2005 (see their
names on the <a href="../Acknowledgements.shtml">Acknowledgements</a> page). Anyone
with knowledge of Java (to maintain the programs), HTML (to maintain help
documentation), or XML (to maintain decoder definitions) can join in. Become one of the
almost 10,000 registered JMRI Users on the groups.io forum, asking your questions and
answering the questions of others.
</dd>
<dt id="wanttohelp">I don't have the skills to help maintain JMRI but I still want to
help. What can I do to help?</dt>
<dd>
First and foremost, you can use JMRI. When you find an issue, or have a good idea,
contribute to the <a href="https://groups.io/g/jmriusers">JMRI Users forum on
groups.io</a>. You can also <a href="../../../donations.shtml">contribute money</a> -
JMRI.org has a small financial need to maintain the website and source libraries so
contributions are always welcome.
</dd>
</dl>
</div>
<!-- close Para -->
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<!-- FAQ-Tail -->
<script type="text/javascript" src="/web/js/faq.js"></script><!-- /FAQ-Tail -->
<script src="/js/help.js"></script>
</body>
</html>
+27
View File
@@ -0,0 +1,27 @@
<!-- Sidebar.shtml -->
<!-- This is the common sidebar definition for help/en/html/ pages -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<!--#include virtual="/help/en/parts/SidebarApplications.shtml" -->
<!--#include virtual="/help/en/parts/SidebarTools.shtml" -->
<!--#include virtual="/help/en/parts/SidebarLayoutAutomation.shtml" -->
<!--#include virtual="/help/en/parts/SidebarSupportedHardware.shtml" -->
<!--#include virtual="/help/en/parts/SidebarInstall.shtml" -->
</dl>
<!--#include virtual="/help/en/parts/SidebarTail.shtml" -->
</div> <!-- closes #side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /Sidebar.shtml -->
+33
View File
@@ -0,0 +1,33 @@
<!-- Compact version of sidebar -->
<!-- SidebarCompact.shtml -->
<!-- This is the common sidebar definition for Help system pages -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<!--#include virtual="/help/en/parts/SidebarApplications.shtml" -->
<dt><a href="/help/en/html/tools/index.shtml">Tools</a></dt>
<dd>JMRI provides powerful tools for working with your layout.</dd>
<dt><a href="/help/en/html/tools/automation/index.shtml">Layout Automation</a></dt>
<dd>Use JMRI to automate parts of your layout, from simply controlling a crossing gate
to running trains in the background.</dd>
<dt><a href="/help/en/html/hardware/index.shtml">Supported Hardware</a></dt>
<dd>JMRI supports a wide range of DCC systems, command stations and protocols.</dd>
<dt><a href="/help/en/html/setup/index.shtml">Installing JMRI</a></dt>
<dd>JMRI can be installed on a variety of hardware and operating systems.</dd>
</dl>
<!--#include virtual="/help/en/parts/SidebarTail.shtml" -->
</div> <!-- closes #side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /SidebarCompact.shtml -->
+34
View File
@@ -0,0 +1,34 @@
<!-- SidebarNew.shtml -->
<!-- THIS VERSION OF SIDEBAR FOR EXPERIMENTING WITH NEW FORMATS. LINK TO BE DISTRIBUTED ON JMRI-DEVELOPERS FOR REVIEW @jerryg2003 01/27/2020 -->
<!-- This is the common sidebar definition for Help system pages -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<!--#include virtual="/help/en/parts/SidebarApplicationsNew.shtml" -->
<!--#include virtual="/help/en/parts/SidebarToolsNew.shtml" -->
<!--#include virtual="/help/en/parts/SidebarLayoutAutomationNew.shtml" -->
<!--#include virtual="/help/en/parts/SidebarSupportedHardwareNew.shtml" -->
<!--#include virtual="/help/en/parts/SidebarInstallNew.shtml" -->
</dl>
<!--#include virtual="/help/en/parts/SidebarTailNew.shtml" -->
</div> <!-- ends side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /Sidebar.shtml -->
<!-- ============================================================================ -->
<!-- Help pages should use Sidebar in help/en/html unless something unique to add -->
<!-- [pound sign]include virtual="/help/en/html/Sidebar.shtml" -->
+651
View File
@@ -0,0 +1,651 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Understanding the Data Management</title>
<meta name="author" content="Jerry Grochow">
<!--#include virtual="/help/en/parts/Style.shtml" -->
<!-- Sortable tables -->
<!-- <script src="../../../web/js/sorttable.js"></script> for local testing -->
<script src="/web/js/sorttable.js" type="text/javascript"></script>
<style type="text/css">
table.sortable th {
background-color: #EEECF6;
color: #383DB3;
font-weight: bold;
cursor: default;
}
tr:nth-of-type(odd) {
background-color:#eee;
}
* {
box-sizing: border-box;
}
/* Create three equal columns that float next to each other */
.column {
float: left;
width: 33.33%;
padding: 10px;
}
/* Clear floats after the columns */
.row:after {
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1 id="TopOfPage">JMRI: Understanding the Data Management</h1>
<p class="subtitle">A Work-In-Progress</p>
<div class="noted">
<span class="since">since 4.23.3</span>
<p>Note: The PanelPro main menu has changed. See <a href="LoadStoreWork.shtml">Loading
and Storing Your Work</a> for details. The menu references below are for the new menu
structure, with the old menu paths in braces.</p>
</div>
<ul class="snav">
<li>
<a href="#category">Elements by Category</a>
</li>
<li>
<a href="#catalpha">Category/Alpha Index</a>
</li>
</ul>
<p class="noted">This page includes information intended for advanced users of JMRI. Basic
information on commands to load and store your work is available <a href=
"LoadStoreWork.shtml">here</a>. The additional information on the current page is
not necessary for ordinary, day-to-day use of JMRI but may be of interest to those who want
to understand in more detail when, how, and where JMRI stores the data you and the system
create and update.</p>
<p>As you work with JMRI, you will create and update many different items within JMRI's various
applications and tools. You may also develop and run "scripts" (external programs) that will
do that as well. JMRI will update some of these at certain points during train operation.
Although JMRI tries to hide lots of technical details from you, some model railroaders want
to know how things work: what data is created when you take various actions, when it gets
updated by the JMRI programs, and also whether it gets saved once you quit JMRI and come back
at another time. This page provides a reference guide to all JMRI data, how it gets created
and updated, when it gets saved (some doesn't!), and, for more advanced users, where it gets
stored.</p>
<p>We want to stress that this is <span class="co">additional technical detail</span>. You
should not need to know this for normal operation of the programs. If you find that you do,
perhaps there's something going wrong, and before reading this page you should ask for help
on the <a href="https://groups.io/g/jmriusers/">JmriUsers group</a> or elsewhere.</p>
<p>The <a href="#category">Elements by Category</a> table columns show the following
information:</p>
<p><strong>Category:</strong> The tables below categorize the different types of JMRI data to
make this information easier to present and hopefully to understand. These categories are
shown in the column labelled <strong>"Category"</strong>:</p>
<ul>
<li>Layout Elements: all the things that describe my layout and how it works, such as
turnouts, tracks, pictures there of, blocks, signals, etc.). All this information is
entered in <a href="PanelPro/index.shtml">PanelPro</a>.
</li>
<li>Roster Information: roster entries for each of your engines and other DCC controlled
accessories, pictures of engines, the roster itself, and related information. Roster
information is entered in <a href="DecoderPro/index.shtml">DecoderPro</a>.
</li>
<li>Operations Elements: data related to operating your railroad (manually or with some
degree of automation) such as warrants, paths, and dozens of other things. Operational
elements are entered in various "Tools" listed in PanelPro including <a href=
"../../package/jmri/jmrit/dispatcher/Dispatcher.shtml">"Dispatcher..."</a>.
</li>
<li>System Preferences: all the things you enter under Preferences, either in DecoderPro or
PanelPro.</li>
</ul>
<p><strong>Creates/Stores:</strong>When it comes to saving what you input and/or what JMRI
does with that input, there are multiple different situations, shown in the table column
<strong>"Creates/Stores"</strong>. There is data that is:</p>
<ul>
<li>User created, user stored (e.g. turnout table entries, layout panels, connections,
start-up preferences)</li>
<li>User created, automatically stored (e.g. size and position of windows, roster entries
when change made to the roster table)</li>
<li>Automatically created, user stored (e.g. Logix from LRoute)</li>
<li>Automatically created, automatically stored (e.g. default profile)</li>
<li>Automatically created, not stored! (e.g. turnout status)</li>
</ul>
<p>The key to successful operation with JMRI is understanding which is which. And that is
what the tables below will show you.</p>
<p><strong>Save Command:</strong>Unfortunately, there is no single command to save all user
created or modified data. It is important to recognize when and where you have to take some
action to make sure your work is there the next time you come back to it. As the table shows
in the column labelled <strong>"Save Command"</strong>, these are the places where a command
to "save" or "store" will save and store some portion of your work:</p>
<ol>
<li>Preferences: "Save"</li>
<li>Panel editors: <strong>File &rArr; Store ALL table content and panels...</strong> {<em>Old:
<strong>File &rArr; Store Panels...</strong></em>} or use the PanelPro main menu item
<strong>File &rArr; Store ALL table content and panels...</strong> {<em>Old: <strong>Panels &rArr;
Store Panels...</strong></em>}</li>
<li>Tables (also Fast Clock): <strong>File &rArr; Store &rArr; Store ALL table content and panels...
</strong> {<em>Old: <strong>Store configuration and panels</strong></em>}</li>
<li>Roster entry: (a) automatic (b) File &rArr; Save or "Save to Roster" (c) "Write" to
Decoder</li>
<li>Images/Icons: "Save Image Index"</li>
<li>Scripts: "Store..." (on Script Entry window)</li>
</ol>
<p>These commands are identified in the tables by these numbers.</p>
<p><strong>Where Stored:</strong> Data stored on disk by JMRI is separated into a number of
files and directories. The typical user shouldn't have to deal with these, but for those who
are interested, see the help page on <a href=
"../doc/Technical/ProfileFileStructure.shtml">Profile File Structure.</a></p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="category">JMRI Elements by Category</h2>
<p>This index cross-references JMRI data by <strong>Category</strong>: Layout Element,
Operations Element, Roster Element, Preferences, and Other. The column
<strong>Creates/Saves</strong> uses abbreviations for the situations listed above, e.g.
"UC/US" means "User Created/ User Stored." The <strong>Store Command</strong> uses the
numbers above for the different commands.</p>
<p>Click a heading to sort the list up or down by that column.</p>
<table class="sortable">
<tr style="text-align: left">
<th style="width: 8%">Category</th>
<th style="width: 20%">Data Types</th>
<th style="width: 15%">Where Created</th>
<th>Creates/Stores</th>
<th style="width: 10%">Store Command</th>
<th>Where Stored</th>
<th></th>
</tr>
<tr>
<td class="type">Layout Elements</td>
<td class="data">LE Panels, Track Connections, Block Assignments, Signal Placement</td>
<td class="where">
<a href="../../package/jmri/jmrit/display/LayoutEditor.shtml">Layout Editor</a></td>
<td class="who">UC/US</td>
<td class="cmd">2, 3(b)</td>
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Layout Elements</td>
<td class="data">Sensor, Turnout, Block, Light</td>
<td class="where">Table for specific element type</td>
<td class="who">UC/US</td>
<td class="cmd">2, 3
<!-- "Save->" under the File pulldown on each Table window. Wherever "Store Panels" is a command.
In <a href="../../package/jmri/jmrit/display/LayoutEditor.shtml">Layout Editor</a>: "Store configuration only" or
"Store configuration and panels" which stores tables and panels --></td>
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Layout Elements</td>
<td class="data">Icons, Images, Image Index</td>
<td class="where">
<a href="../../package/jmri/jmrit/display/IconAdder.shtml">Icon Editor</a>, Image Index Editor</td>
<td class="who">UC/US</td>
<td class="cmd">5</td>
<!-- In Image Index Editor or <a href="/package/jmri/jmrit/display/ControlPanelEditor.shtml">Control Panel Editor</a>:
"Store Image Index" under the File pulldown menu. -->
<td class="store">Image/icon files where specified (default is the User Files Location
directory). Image index in catalogTrees.xml in the User Files location.</td>
<td></td>
</tr>
<tr>
<td class="type">Layout Elements</td>
<td class="data">Blocks</td>
<td class="where">
<a href="../../package/jmri/jmrit/beantable/BlockTable.shtml">Block Table</a></td>
<td class="who">UC/US</td>
<td class="cmd">2, 3</td>
<!-- "Save->" under the File pulldown on each Table window. Wherever "Store Panels" is a command.
In <a href="../../package/jmri/jmrit/display/LayoutEditor.shtml">Layout Editor</a>: "Store configuration only" or
"Store configuration and panels" which stores tables and panels -->
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Throttles</td>
<td class="where">??</td>
<td class="who">UC/US</td>
<td class="cmd"></td>
<td class="store"></td>
<td></td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Consisting</td>
<td class="where">??</td>
<td class="who">UC/US</td>
<td class="cmd"></td>
<td class="store"></td>
<td></td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Block Contents (Value)</td>
<td class="where">
<a href="../../package/jmri/jmrit/beantable/BlockTable.shtml">Block Table</a></td>
<td class="who">UC/<strong>AS</strong> [User enters then Block Tracking auto updates]
or <strong>AC/AS</strong> [if Reporter linked to Block]</td>
<td class="cmd">NA</td>
<td class="store">blockvalues.xml in User Files location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Sensor Status, Turnout Status, Block (Occupancy) Status</td>
<td class="where">Table for specific element type</td>
<td class="who"><strong>AC</strong>/NS</td>
<td class="cmd">Status data is not saved when JMRI is closed.</td>
<td class="store">NA</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Occupancy Block (OBlock)</td>
<td class="where">
<a href="../../package/jmri/jmrit/logix/OBlockTable.shtml">OBlock Table</a>
</td>
<td class="who">UC/US</td>
<td class="cmd">2, 3</td>
<!-- "Save->" under the File pulldown on each Table window. In
<a href="/package/jmri/jmrit/display/ControlPanelEditor.shtml">Control Panel Editor</a>: "Store Panels" under
the File pulldown menu. -->
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">OBlock, Portal, OPath</td>
<td class="where">
<a href="../../package/jmri/jmrit/display/CircuitBuilder.shtml">Circuit Builder</a>
</td>
<td class="who"><strong>AC</strong>/US</td>
<td class="cmd">2, 3</td>
<!-- "Save->" under the File pulldown on each Table window. In
<a href="/package/jmri/jmrit/display/ControlPanelEditor.shtml">Control Panel Editor</a>: "Store Panels" under
the File pulldown menu. -->
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Reporter</td>
<td class="where">Automatically by LocoNet transponding, RFID;
or manually <a href="../tools/Reporters.shtml">Reporter Table</a></td>
<td class="who"><strong>AC</strong> or UC/US</td>
<td class="cmd">3</td>
<td class="store">"[user named].xml" files where specified (default is the User Files
Location directory)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Scripts</td>
<td class="where">
<a href="../tools/scripting/index.shtml">Script Entry window</a> or external editor
</td>
<td class="who">UC/US</td>
<td class="cmd">6</td>
<td class="store">Scripts are stored in ".py" or ".js" files where specified by user
(default: Script Location)</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Speedometer</td>
<td class="where">
</td>
<td class="who">UC/US</td>
<td class="cmd">Tools &rArr; Speedometer, Hit "Save as default"</td>
<td class="store">In PanelProSpeedometer.xml in User Files location. NOTE: <em>"Save as default"
causes sensors to be created if they do not already exist. These must then be saved in a panel file.</em></td>
<td>
</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Timetable data</td>
<td class="where">
</td>
<td class="who">UC/US</td>
<td class="cmd">Tools &rArr; Timetable, Hit "Save"</td>
<td class="store">In timetable/TimeTableData.xml in User Files location</td>
<td>
</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">CTC data</td>
<td class="where">
</td>
<td class="who">UC/US</td>
<td class="cmd">2, 3</td>
<td class="store">Included in the tables and panels xml data file</td>
<td>
</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Dispatcher</td>
<td class="where">
</td>
<td class="who">UC/US</td>
<td class="cmd">?</td>
<td class="store">In dispatcheroptions.xml in User Files location</td>
<td>
</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">Dispatcher trains</td>
<td class="where">
</td>
<td class="who">UC/US</td>
<td class="cmd">?</td>
<td class="store">In dispatcheroptions.xml in User Files location</td>
<td>
</td>
</tr>
<tr>
<td class="type">Operations Elements</td>
<td class="data">OperationsPro data</td>
<td class="where">
<a href="../../package/jmri/jmrit/operations/Operations.shtml">Operations Pro</a>
(Operations menu)
</td>
<td class="who">UC/<strong>AS</strong></td>
<td class="cmd">Appropriate file saved when changes made</td>
<td class="store">In six files in operations/ in User Files location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Other</td>
<td class="data">Window size/location</td>
<td class="where">
</td>
<td class="who">UC/<strong>AS</strong></td>
<td class="cmd">Saved when window is moved or resized</td>
<td class="store">Saved in the user-interface.xml file in the Profile location.</td>
<td>
</td>
</tr>
<tr>
<td class="type">Other</td>
<td class="data">Backup panels</td>
<td class="where">Whenever tables and panels are stored with the same file name.</td>
<td class="who"><strong>AC/AS</strong>
</td>
<td class="cmd">NA</td>
<td class="store">In backupPanels/ in User Files location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">RFID</td>
<td class="data">ID Tag Info</td>
<td class="where">When RFID tags are read via RFID, MQTT, or other Reporter message</td>
<td class="who"><strong>AC/AS</strong></td>
<td class="cmd">NA</td>
<td class="store">In subdirectory "idtags" in User Files Location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Roster Entry Info</td>
<td class="where">Changing info on main Roster page</td>
<td class="who">UC/<strong>AS</strong></td>
<td class="cmd">4(a)</td>
<td class="store">Individual files in subdirectory "roster" in Roster Files Location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Roster Entry (full)</td>
<td class="where">
"Save" <a href="DecoderPro/Roster.shtml">Roster Entry</a>
</td>
<td class="who">UC/US</td>
<td class="cmd">4(b)</td>
<td class="store">Individual files in subdirectory "roster" in Roster Files Location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Decoder CVs</td>
<td class="where">
"Write" <a href="DecoderPro/Roster.shtml">Roster Entry</a>
</td>
<td class="who">UC/US</td>
<td class="cmd">4(c)</td>
<td class="store">Individual files in subdirectory "roster" in Roster Files Location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Roster Group</td>
<td class="where">
DecoderPro Settings &rArr; options for <a href=
"../../manual/DecoderPro/Main_RosterGroup.shtml">Roster Group</a>
</td>
<td class="who">UC/<strong>AS</strong></td>
<td class="cmd">4(a)</td>
<td class="store">roster.xml Roster Files Location</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Consisting</td>
<td class="where">Select "Consist" tab on individual roster entry</td>
<td class="who">UC/US</td>
<td class="cmd">
</td>
<td class="store">Individual decoder files in Roster Files Location</td>
<td>
</td>
</tr>
<tr>
<td class="type">Roster Info</td>
<td class="data">Consisting</td>
<td class="where">Direct Entry to Consisting window</td>
<td class="who">UC/<strong>NS</strong></td>
<td class="cmd">??</td>
<td class="store">Not saved.</td>
<td>
</td>
</tr>
<tr>
<td class="type">System Preferences</td>
<td class="data">Config Profiles</td>
<td class="where">
Select <a href="../setup/profiles.shtml">Config Profiles</a> in Preferences window
under Edit pulldown
</td>
<td class="who">UC/US</td>
<td class="cmd">1</td>
<td class="store">In subdirectories under Config File location.</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">System Preferences</td>
<td class="data">Connections, Defaults, File Locations, Start Up Actions, etc.</td>
<td class="where">Select different items in Preferences window under Edit pulldown</td>
<td class="who">UC/US</td>
<td class="cmd">1</td>
<td class="store">In several files in the Settings Location.</td>
<td>&#10004;</td>
</tr>
<tr>
<td class="type">MORE</td>
<td class="data">MORE</td>
<td class="where">
</td>
<td class="who">
</td>
<td class="cmd">1, 2, 3, 4(a), 4(b), 4(c), 5, 6?</td>
<td class="store">
</td>
<td>
</td>
</tr>
</table>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="catalpha">Category/Alphabetic Index</h2>
<h3 id="layout">Layout elements:</h3>
Describe the physical layout
<ul>
<li>Layout Editor (LE) Panel</li>
<li>Control Panel Editor (CPE) Panel</li>
<li>Block</li>
<li>Turnout</li>
<li>Sensor</li>
<li>Light</li>
<li>MORE</li>
</ul>
<br>
<h3 id="roster">Roster information:</h3>
Specify engine and other DCC controlled components
<ul>
<li>Roster main page</li>
<li>Roster entry</li>
<li>Roster group</li>
</ul>
<br>
<h3 id="opns">Operations elements:</h3>
Additional information about the physical layout used for operational control of the railroad
<ul>
<li>Block</li>
<li>OBlock</li>
<li>OPath</li>
<li>Portal</li>
<li>Route</li>
<li>LRoute</li>
<li>Warrant</li>
<li>Script</li>
<li>Memory Variable</li>
<li>Reporter</li>
<li>MORE</li>
</ul>
<br>
<h3 id="hardware">Hardware:</h3>
Additional information about specific types of hardware
<ul>
<li>RFID</li>
<li>MORE</li>
</ul>
<br>
<h3 id="pref">System preferences:</h3>
Information used by JMRI to customize look, feel, and operation of the JMRI system
<ul>
<li>Connection</li>
<li>Start-up</li>
<li>MORE</li>
</ul>
<br>
<h3 id="other">Other:</h3>
<ul>
<li>Window size/position</li>
<li>Script</li>
<li>MORE</li>
</ul>
<br>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
+204
View File
@@ -0,0 +1,204 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Debugging</title>
<meta name="keywords" content="JMRI panelpro decoderpro help debug debugging log logging">
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: Debugging and System Logging</h1>
<ul class="snav">
<li><a href="#where">Where JMRI Logs to</a></li>
<li><a href="#tools">Debugging Tools</a></li>
<li><a href="#levels">Logger Levels and Names</a></li>
<li><a href="#logging_configuration">Logging Configuration</a></li>
<li><a href="#xml">Debugging XML Files</a></li>
</ul>
<p>For installation issues, see <a href="https://www.jmri.org/install/Debug.shtml">Debugging an installation</a></p>
<h3 id="where">Where JMRI Logs to</h3>
<p>The System Console can be viewed via Help &rArr; System Console<br>
This displays the log from the current JMRI session.
</p>
<p>The &quot;session.log&quot; file contains the log for the current session.
<br>This log file is reset just before each JMRI session startup.
<br>This file can be viewed live with the tail command.
</p>
<p>Rolling Log Files contain logging for the current and previous sessions.
<br>These start from &quot;messages.log&quot; and have a maximum file size of 1000KB .
<br>Logs are rolled over, up to 3 files deep.
</p>
<p>The session and rolling log files are stored in the &quot;log&quot; directory within the User Settings Directory.
<br>Help &rArr; File Locations &rArr; <span class="textbutton">Open Log Files Location</span>
</p>
<p>These defaults can be changed by editing your <a href="#logging_configuration">Logging Configuration</a>.</p>
<h3 id="tools">Debugging Tools</h3>
<p><a href="../../package/apps/SystemConsole.shtml">JMRI System Console</a>
<br>Displays current session log.
<br>Help &rArr; System Console
</p>
<p><a href="../../package/apps/jmrit/log/Log4JTreePane.shtml">View / Edit Log Categories</a>
<br>View current logging levels for each Logger category name.
<br>Debug &rArr; Display / Edit Logging Categories
</p>
<p>Log Message...
<br>Manually add a LogEvent to the logging.
<br>Debug &rArr; Log Message...
</p>
<p>There are various tools for checking files in the <a href="PanelPro/DebugMenu.shtml">Debug Menu</a>.
<h3 id="levels">Logger Levels and Names</h3>
<p>A Logger Category is essentially the name given to an Event Logger.
<br>The Logger Category name is normally defined by the JMRI Java Class associated with it.
<br>Typical Logger Category names would be <code>jmri.jmrit</code> or <code>jmri.jmrit.operations</code>
<br>Loggers inherit, so for example <code>apps.jmrit.log.Log4JTreePane</code> , the Level would be inherited from one of these Logger categories :</p>
<ul>
<li>apps.jmrit.log.Log4JTreePane</li>
<li>apps.jmrit.log</li>
<li>apps.jmrit</li>
<li>apps</li>
<li>Root Logging Level</li>
</ul>
<p>Setting the Logging Level will also invoke the higher levels.
<br>e.g. setting a Category to WARN will also display ERROR messages but not INFO or below.
<br>The Logging levels are :</p>
<ul>
<li>ALL ( TRACE + DEBUG + INFO + WARN + ERROR )</li>
<li>TRACE ( + DEBUG + INFO + WARN + ERROR )</li>
<li>DEBUG ( + INFO + WARN + ERROR ) </li>
<li>INFO ( + WARN + ERROR )</li>
<li>WARN ( + ERROR )</li>
<li>ERROR</li>
<li>OFF</li>
</ul>
<p>The FATAL level ( not in the SLF4J interface hence not used by JMRI ) between ERROR and OFF is omitted for clarity</p>
<h3 id="logging_configuration">Logging Configuration</h3>
<p>It is possible to edit the current state of Logger Categories and their
Logging Levels via the View / Edit Logging Categories Tool ( Debug Menu ).
<br>Changes are maintained for the duration of the JMRI session.
</p>
<p>To make persistent changes to the Logging Configuration effective from JMRI startup,
changes will need to be made within the &quot;<a
href="https://github.com/JMRI/JMRI/blob/master/default_lcf.xml">default_lcf.xml</a>&quot; file.
</p>
<p>A &quot;default_lcf.xml&quot; file in the Settings directory will take
precedence over the default_lcf.xml file in the main program directory.
<br>
The main program directory version will be reset each time JMRI is updated,
whereas the user preference version will not be updated.
<br>
Some parts of the file are required for JMRI logging setup.
The settings version does not inherit from the program directory version.
</p>
<ul>
<li>Use the existing default_lcf.xml from the program directory as a starting template.
<br>For a Windows install that's typically &quot;C:\Program Files (x86)\JMRI\default_lcf.xml&quot;, or see
<a href="https://github.com/JMRI/JMRI/blob/master/default_lcf.xml"
title="JMRI Default Logging Configuration File">https://github.com/JMRI/JMRI/blob/master/default_lcf.xml</a>.
</li>
<li>Copy and paste the file from program directory to Settings.
<br>For a Windows install, that's typically C&colon;&sol;Users&sol;&lt;username&gt;&sol;JMRI&sol; , or see
<a href="../setup/Files.shtml" title="JMRI Setup: Configuration Files">JMRI Setup: Configuration Files</a>.
</li>
<li>Open up the file using a text editor.</li>
<li>Add customisations towards the end of the Loggers section, where the examples are ( see below ).</li>
<li>Save the file.</li>
<li>JMRI will read the file on each restart.</li>
</ul>
<p>The &quot;default_lcf.xml&quot; file contains lots of comments on what the various terms mean.
<br>Content within the <code>&lt;&#33;&#45;&#45; &#45;&#45;&gt;</code> symbols is processed as a comment,
not part of the configuration.</p>
<p>Of most relevance is the section towards the bottom of the file containing the Logger elements.
<br>eg. to enable logging at DEBUG level for the whole of JMRI core, remove the comment arrows.</p>
<p class="important"><code><strong>&lt;Logger name=&quot;jmri&quot; level=&quot;DEBUG&quot;&sol;&gt;</strong></code></p>
<p>The Logger name is the Logging Category ( in this case &quot;jmri&quot; ) which will set jmri
and all classes inheriting from it ( a lot of classes ) to log code comments which are set at DEBUG Level or higher.</p>
<p>If the file is saved and JMRI restarted, there will be a LOT of extra events in the logs.</p>
<p>The TRACE and DEBUG levels will output a lot of information, and will slow down
operation significantly.
<p>It is possible to request more information on just parts of JMRI.</p>
<p>For example, Layout Editor begugging could be enabled by adding
<br><code><strong>&lt;Logger name=&quot;jmri.jmrit.display.layoutEditor&quot; level=&quot;DEBUG&quot;&sol;&gt;</strong></code>
<p>Remember to save the default_lcf.xml file in your Settings for the configuration to be retained
following JMRI being updated.</p>
<p class="important">Prior to JMRI 5.5.4 , logging configuration was controlled by a &quot;default.lcf&quot;
file within the JMRI program install directory, or overridden by a file of the same name in the user settings directory.
<br>Open that file with a standard text editor for details on how to change the logging category levels.</p>
<p>For the full configuration specification and to change other logging settings ( rolling log file sizes etc. ), see
<a href="https://logging.apache.org/log4j/2.x/manual/configuration.html#XML">Log4J2 xml Configuration</a>.</p>
<p>For more technical details on JMRI Logging, see <a href="https://www.jmri.org/help/en/html/doc/Technical/Logging.shtml">JMRI Code: How to Use the Logging Facilities</a>.</p>
<h3 id="xml">Debugging problems with XML files</h3>
<p>When an XML file can't be parsed, you'll get some hard-to-understand error messages.
The most important part of this is the line number. Use that to start looking for the
problem.</p>
<p>You might be able to get better debugging information by trying to open the file with
Internet Explorer. The debugging information it provides is generally more detailed than
that provided by the XML routines in the JDOM libraries used by JMRI and DecoderPro.</p>
<p>Note that Explorer needs to see both the .xml file, plus the definition information in
the .xsd Schema file. If you get a message like "error in system resource", you need to put a
copy of the associated .xsd file (e.g. decoder-config.xsd; see the top few lines of your file)
in the directory with your new
file. Schema .xsd's can be found in the Schema subdirectory of the xml directory.</p>
<p>Also see the checking tools within the Debug Menu.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
+6
View File
@@ -0,0 +1,6 @@
RewriteEngine on
# Provide redirects for removed pages
# Debug.shtml moved to html\apps
RewriteRule ^Debug\.shtml$ ../Debug.shtml [R=301,L]
@@ -0,0 +1,434 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - Creating A Custom Decoder File</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Creating A Custom Decoder File</h2>
<p>This page provides information on how the decoder definition files for the DecoderPro
Symbolic Programmer work and how to create a new one.</p>
<p>In this user guide, we walk you through the process of creating a file to describe a new
decoder. You might benefit from reading the other sections of the DecoderPro user guide to
get background information, especially the <a href="IntroXML.shtml">XML introduction</a> and
the section on <a href="../../doc/Technical/ProfileFileStructure.shtml">Configuration Files contents</a>.</p>
<p>The easiest way to create a configuration file is to modify an existing one. In this
section, we walk you through doing this.</p>
<dl>
<dt class="left">Make a copy of a similar file.</dt>
<dd class="first">
<p>Although you can call this new file anything you like, it will work best if you use
the same convention as the provided files. That's <code>"manufacturer name"_"decoder
family".xml</code>, for example: <code>Digitrax_1x2.xml</code> and
<code>Atlas_DualMode.xml</code></p>
<p>For the provided files, we use the same capitalization, etc, that the decoder
manufacturer uses in their documentation.</p>
<p>This new file should go in the <code>decoders</code> subdirectory in the
<code>JMRI</code> User Files Location so that the program can find it.
You may have to create this directory if it hasn't already been created.
You can select "File Locations"
from the JMRI Help menu to find (and open) the User Files Location. (See the <a href=
"../../doc/Technical/ProfileFileStructure.shtml"><em>configuration files page</em></a>
for further details about how to find that directory and its contents)</p>
<p>If you're modifying a decoder definition, it is best to start with the most recent
version, which can always be found here on the JMRI website at <a href=
"https://www.jmri.org/xml/decoders/">https://www.jmri.org/xml/decoders/</a>. That way, it won't
be hard to merge your changes with ones that might have come before. Please don't do any
more reformatting than you have to. If you change the tech stuff in the top 5 or 10
lines, or reformat the contents, it gets very hard to tell what's changed and what has
not.</p>
<p>After adding your new decoder definition, do not forget to recreate the <b>Decoder Index</b>,
see below for futher instructions</p>
</dd>
<dt class="left">Edit the new file</dt>
<dd>
<p>Open the new file with your favorite text editor.</p>
</dd>
<dt class="left">File contents: XML Header</dt>
<dd>
<p>You'll see something like this at the top of the file (the examples are from the
<a href="https://github.com/JMRI/JMRI/blob/master/xml/decoders/0NMRA.xml">0NMRA.xml</a> file):</p>
<p class="example">&lt;?xml version="1.0" encoding="utf-8"?&gt;<br>
&lt;?xml-stylesheet type="text/xsl" href="../XSLT/decoder.xsl"?&gt;<br>
&lt;!-- Copyright (C) JMRI 2001, 2005, 2007, 2-009, 2010 All rights reserved --&gt;<br>
...<br>
&lt;decoder-config xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jmri.org/xml/schema/decoder.xsd"&gt;<br></p>
<p>Don't mess with these lines; they describe the format of the file.</p>
</dd>
<dt class="left">File contents: Author</dt>
<dd>
<p>The next element describes the author and version of this decoder file:</p>
<p class="example">&lt;version author="jake@physics.berkeley.edu"<br>
version="1" lastUpdated="20011201"/&gt;</p>
<p>These attributes are only read by people, not the program, so their exact format isn't
critical. But we encourage you to insert your email address in files you create or
change, so that if anybody has any questions they can find you. The version and
lastUpdated attributes provide a way of telling different versions of a decoder
definition apart, so we'd also like you to update those. For a new file, set the version
back to "1", and if you're modifying an existing file, increment the version attribute to
the next number.</p>
</dd>
<dt class="left">File contents: Decoder Family and Model</dt>
<dd>
The next lines identify the "family" of decoders that this file describes:
<p class="example">&lt;decoder&gt;<br>
&lt;family name="Digitrax 1x2" mfg="Digitrax"<br>
lowVersionID="240" highVersionID="242"<br>
comment="Digitrax DH142, etc" &gt;<br>
&lt;model model="DH142" numOuts="4" numFns="2"/&gt;<br>
&lt;model model="DN142" numOuts="4" numFns="2"/&gt;<br>
&lt;model model="DH083" numOuts="5" numFns="2"/&gt;<br>
&lt;/family&gt;</p>
<p>The spacing is not important, but it is useful to indent the file like this to make it
more readable. XML uses "elements" and "attributes" to carry information. The
&lt;model&gt; things are elements; attributes like numOuts are set to specific values
within elements. In the 2nd through 4th lines above</p>
<p class="example">&lt;family name="Digitrax 1x2" mfg="Digitrax"<br>
lowVersionID="240" highVersionID="242"<br>
comment="Digitrax DH142, etc" &gt;</p>
<p>the element is 'family', with attributes 'name', 'mfg', 'lowVersionID',
'highVersionID', and 'comment'. An attribute is given a value with an equals sign and a
value in quotes (the quotes are required). The order of the attributes is not important,
and you can break them across lines if that makes the file easier to read. Note that all
of the attributes must be inside the angle brackets, and after the name of the
element.</p>
<p>In this element, change the attributes to match your new decoder:</p>
<ul>
<li><dfn>name</dfn> - the name of the decoder family. It's best if you use the same
name here as you used in the filename.</li>
<li><dfn>mfg</dfn> - the manufacturer of the decoder. It's best if you use the same
manufacturer name here as you used in the filename.</li>
<li>
<dfn>lowVersionID</dfn>, <dfn>highVersionID</dfn> - The manufacturer can load a
version number into CV 7 of a decoder. Not all manufacturers do this, but if one is
available the programmer can check if this file is being used with the expected
decoder type. If only one specific value is valid, define the both lowVersionID and
highVersionID with the same value, e.g.
<code>lowVersionID="123" highVersionID="123"</code>
If the decoder type can have any one of a range of numbers, for example because the
manufacturer has made some updates, define both attributes to cover the range:
<code>lowVersionID="21" highVersionID="42"</code>
If you don't know the version number, don't define either of these attributes; just
leave them off. lowVersionID defaults to 0, highVersionID defaults to 255, so
together the defaults mean "any value".
</li>
<li><dfn>comment</dfn> - this is optional. You might want to include your name, or
other info about the changes in the file.</li>
</ul>
<p>The following lines:</p>
<p class="example">&lt;model model="DH142" numOuts="4" numFns="2"/&gt;<br>
&lt;model model="DN142" numOuts="4" numFns="2"/&gt;<br>
&lt;model model="DH083" numOuts="5" numFns="2"/&gt;</p>
allow you to list a number of different decoder models that can use this file. For a
single decoder, remove all but one of the "model" elements, and give it the model name of
the decoder. The numOuts and numFns are described later, but for now you can just delete
them, leaving something like:
<p class="example">&lt;model model="DH142" /&gt;</p>
The model element can also contain lowVersionID and/or highVersionID attributes, which
apply to just that model. If one doesn't appear, the value from the family element (or
its default) will be used.
<p>It is important to note that <em>the 'family'+'model' combination must be unique</em>.
This is the <em>only</em> information that can be used to match a decoder definition to
an existing roster entry.</p>
<ul>
<li>There can be multiple instances of model 'x' but they must reside in different
families.</li>
<li>There can be multiple definitions of family 'y' (in different decoder files) but
model 'x' can only appear within one of these.</li>
<li>The 'family'+'model' uniqueness restriction applies irrespective of
manufacturer.</li>
</ul>
</dd>
<dt class="left">File contents: Programming Modes</dt>
<dd>
<p>The next element defines what programming modes the decoder can understand:</p>
<p class="example">&lt;programming direct="byteOnly" paged="yes"<br>
register="yes" ops="yes"&gt;&lt;/programming&gt;</p>
<p>Paged, register and ops can be set to either "yes" or "no". Direct can be set to "no",
"bitOnly", "byteOnly", or "yes". The programmer uses this information to select the
programming mode to use when working with a decoder.</p>
</dd>
<dd id="variable">
</dd>
<dt class="left">File contents: Variable names</dt>
<dd>
<p>The next part of the file consists of a set of 'variable' elements defining specific
variables, nested inside a 'variables' (note the extra "s") element. An example:</p>
<pre>
&lt;variables&gt;
&lt;variable CV="1" item="Primary Address" default="03"&gt;
&lt;decVal min="1" max="127"/&gt;
&lt;label&gt;Short Address&lt;/label&gt;
&lt;comment&gt;NMRA standard form&lt;/comment&gt;
&lt;tooltip&gt;Digitrax systems only address 1-99&lt;/tooltip&gt;
&lt;/variable&gt;
(followed by more &lt;variable&gt; entries)
(Insert new ones at the end)
&lt;/variables&gt;</pre>
<p>Each variable represents one thing to configure. They can represent a single CV, e.g.
address, or a few bits that can be configured to control a particular function. If some
of these aren't appropriate to your decoder, you can just remove them. Make sure you
remove the entire element from the <code>&lt;variable&gt;</code> up to and including the matching
<code>&lt;/variable&gt;</code>. You can also rearrange them if you'd prefer a different order.</p>
<p>The attributes include:</p>
<ul>
<li>
<dfn>item</dfn> - The 'standard' name for this variable. See the <a href=
"Programmer.shtml#id">discussion on the programmer definition page</a> for more
information on this. Generally, look at the Comprehensive programmer to find
something similar, and use the "name" attribute of that.
</li>
<li><dfn>CV</dfn> - Which CV contains the configuration information for this
variable.</li>
<li>
<dfn>mask</dfn> - A pattern to control which part in the CV contains the variable.<br>
JMRI supports 2 types:
<p>A string like <code>XXXVVVXX</code> where each "V" is a bit that's included, and "X"
is a bit that's not to be included. It's best to have eight characters, as that makes it clearer
what's going on. If the variable is a full byte, the mask attribute can be omitted.<br>
Example:
<p class="example">&lt;variable item="Dim Lamp 3" CV="13" mask="XXVVXXXX"&gt;<br>
...<br>
&lt;/variable&gt;</p>
<p>Generally, the V characters should be a contiguous block of bits as specified in
the manufacturer's documentation for the decoder. In certain rare cases, the layout
of the decoder might require a different pattern like <code>XXVVXXVV</code>, but in
those cases please check the operation of the resulting decoder definition carefully
to make sure it does what you want.</p>
<p>A second mask pattern, Radix, is useful in cases where instead of bits, digits you enter
make up a pattern such as 1234C where "1234" is a turnout address and "C" is some other variable.
A Radix mask can handle CVs that are coded in bases other than binary: Ones that store their parts
as decimal digits (as our example), or even base 3 or 5. That's a bit more technical, it's rarely
needed, but if you do need it refer to the <a href="CreateDecoderAdvanced.shtml#mask">Advanced
Decoder</a> help page or the <a href=
"https://www.jmri.org/JavaDoc/doc/jmri/jmrit/symbolicprog/VariableValue.html">javadoc</a> for
more details. The <a href="https://github.com/JMRI/JMRI/blob/master/xml/decoders/Uhlenbrock_63410.xml">Uhlenbrock_63410</a> definition
provides an example on CV1.
</li>
<li><dfn>default</dfn> - The default value for this variable. This is used for a new
decoder, or when you want to set the decoder back to its defaults.</li>
</ul>
<p>(There are a few more, which we'll leave for the advanced section below)</p>
<p>The "label" included element provides a human-comfortable name for this variable. This
is generally what the decoder manufacturer calls this item, even if other manufacturers
or the NMRA use a different name for similar things. It is optional, in which case the
"item" value will be used to label it when it's presented to the user.</p>
<p>The "comment" element let you provide additional information to future developers.
This information is visible when editing the definition, but isn't provided to somebody
who's just using DecoderPro.</p>
<p>The "tooltip" element let you provide additional information to the user when the user
hovers their cursor over the variable on the screen.</p>
</dd>
<dt class="left">File contents: Creating new Variable definitions</dt>
<dd>
<p>You can also define new variables. A good starting point is to copy a similar
definition, change its item name to a new value, and then edit its contents.</p>
<p>To define how the new variable is displayed and edited, you add elements within the
'variable' element. There are several possible forms:</p>
<ul>
<li>For a decimal value, you include a <code>&lt;decVal&gt;</code> element like the
example above. The two optional attributes are 'min' and 'max', which define the range of acceptable
values. If you omit them, values from 0 to 255 are allowed.
If 'min' is present and less than zero, the value will be stored
as a twos-complement number which allows negative values. If not,
the number will be stored as an unsigned number.</li>
<li>If you'd rather enter and display values in hexadecimal, use a <code>&lt;hexVal&gt;</code> element.
It's otherwise the same as the <code>&lt;decVal&gt;</code> element we've already discussed.</li>
<li>
<p>If your decoder supports a long address, you can add a <code>&lt;longAddressVal&gt;</code>
element. It's perhaps easiest to copy this from another file, or from this example:</p>
<p class="example">&lt;variable item="Long Address" CV="17"&gt;<br>
&lt;longAddressVal/&gt;<br>
&lt;/variable&gt;</p>
</li>
<li>
<p>If your decoder supports it, you can enter a <code>&lt;speedTableVal&gt;</code> element for
the speed table. Optional attributes are: "entries", "min", "max" and "mfx" (when true enables
the M&auml;rklin mfx&reg; style speed table). Example:</p>
<p class="example">&lt;variable item="Speed Table" CV="67"&gt;<br>
&lt;speedTableVal/&gt;<br>
&lt;/variable&gt;</p>
</li>
<li>Some decoder options are best represented by "choose one option". These are
represented by the <code>&lt;enumVal&gt;</code> element. Example:
<p class="example">&lt;variable item="F6 during DC operation" CV="13"
mask="XXVXXXXX"&gt;<br>
&lt;enumVal&gt;<br>
&nbsp;&nbsp;&lt;enumChoice choice="Off"/&gt;<br>
&nbsp;&nbsp;&lt;enumChoice choice="On"/&gt;<br>
&lt;/enumVal&gt;<br>
&lt;/variable&gt;</p>
<p>Each enumChoice element describes one possibility. There can be as many of these
as desired. For a one bit choice, you use two enumChoice elements as in the example.
For a 4 bit choice, like the FX codes in a Digitrax decoder, you can use up to 16
choices. They are displayed in the order they are entered in the file, and are also
numbered in that order. If the first is chosen, "0" is entered in the CV bits;
choosing the second stores "1"; etc.</p>
<p>If you need to specify a specific value for an enum option, add a "value"
attribute:</p>
<p class="example">&lt;enumChoice choice="Blue" value="32"/&gt;</p>
</li>
</ul>
</dd>
<dt class="left">Including fragment files</dt>
<dd>
<p>Decoder definitions can include "fragment files" which provide common definitions of
some CVs. This has the advantage that they're already created and tested, and often
include tooltip text, translations and other nice features. See the existing decoder
definitions for <a href="https://www.jmri.org/xml/decoders/nmra/">examples</a>. Some key
ones:</p>
<ul>
<li>CV1, the primary or short address, CV17 and 18, the extended or long address, and
the corresponding CV29 bits can be handled by one of these, depending on what the
decode supports:
<ul>
<li>xml/decoders/nmra/shortAddressOnly.xml</li>
<li>xml/decoders/nmra/shortAndLongAddress.xml</li>
</ul>
</li>
<li>CV19, the consist address and direction, can be handled by one of these:
<ul>
<li>xml/decoders/nmra/consistAddr.xml</li>
<li>xml/decoders/nmra/consistAddrDirection.xml</li>
</ul>
</li>
<li>The CV16/CV15 decoder lock feature can be handled by the
xml/decoders/nmra/decoderLockId16.xml fragment file. Note that only CV16 is included;
CV15 should not be included in the definition to prevent it from being changed after
decoder installation.</li>
</ul>
<p>You can also use fragment files to include (hence simplify) <a href=
"https://www.jmri.org/xml/decoders/parts/">common sets of enum choices</a>.</p>
<p>Note that you should use the full format for an include statement so that JMRI can find it:
<p class="example">&lt;xi:include href="http://jmri.org/xml/decoders/nmra/shortAndLongAddress.xml"/&gt;
</p>
</dd>
<dt class="left">Checking for syntax errors</dt>
<dd>
<p>At this point, you've created a new configuration file!</p>
<p>You can check it for syntax by selecting the "Validate XML file" item from the "Debug"
menu. It opens a file selection dialog; select your file and click "open". If all is
well, you'll get a dialog box that says "OK". If not, you'll get a completely
incomprehensible error message. About the only useful part of that message is the line
number; open an editor to that line and try to see what's wrong with the syntax.</p>
</dd>
<dt class="left">Add the file to the index</dt>
<dd>
<p>All that's left is to enter your new file in the index. This index is used to speed
the startup of the program, when the list of available decoders is constructed.</p>
<p>Select the "Recreate decoder index" item from the DecoderPro "Actions" menu or the
PanelPro "Debug" menu.</p>
<p>Restart JMRI to see the new changes take effect</p>
</dd>
</dl>
<p>Congratulations! You're done. Next, open the programmer application and try it.</p>
<p>For more advanced information on the content of the files, please see the <a href=
"CreateDecoderAdvanced.shtml">Advanced Decoder Definitions</a> page.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
File diff suppressed because it is too large Load Diff
+117
View File
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: DecoderPro Frequently Asked Questions</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
<!-- FAQ-Head -->
<script type="text/javascript">
/*<![CDATA[*/document.documentElement.className="hasJS";/*]]>*/
</script>
<link rel="stylesheet" type="text/css" href="/web/css/faq.css" media="screen"><!-- /FAQ-Head -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Frequently Asked Questions</h2>
<p>This page is the JMRI DecoderPro "frequently asked questions" list. Items get listed here
if they're asked a lot, even if they're also available somewhere else. See also the <a href=
"../../FAQ.shtml">JMRI general FAQ.</a></p>
<dl class="faq">
<dt class="on" id="newdecoder">How can I get a new decoder type defined?</dt>
<dd>
A completely new decoder needs a new or updated decoder configuration file. You can
<a href="CreateDecoder.shtml">create your own</a> or ask on <a href=
"https://groups.io/g/jmriusers">JMRI users</a> for somebody to create one for you.<br>
<br>
In many cases, you can use an existing decoder that's "close enough". For example, a
decoder from the same manufacturer that has a different size or current rating might have
the same configuration CVs, so its decoder definition would work fine.
</dd>
<dt id="newfile">What do I do with this new decoder file?</dt>
<dd>
For DecoderPro to use the definition of a decoder type in a new decoder file, the new
file has to be included in DecoderPro's index of decoder types. To do this:
<ul>
<li>In your JMRI install directory, you should find a directory named "xml". Under that
directory, there should be one named "decoders". You should put your new file in
there.</li>
<li>Now start up DecoderPro, and open the "Debug" menu. Select the "Rebuild Decoder
Index" option.</li>
<li>The computer will run for a minute or two with the selection highlighted. As soon
as that goes away, the new definition should be available to you.</li>
</ul>
Please make sure that the new configuration file has been contributed to the project so
it will be included in future releases, and so you won't have to remake the index each
time you update.
</dd>
<dt id="update">How can I get the latest decoder definitions?</dt>
<dd>
The easiest way to update really is to download a new version of the program. This is
unlikely to cause problems, and automatically installs the latest versions of that have
been contributed to DecoderPro.<br>
<br>
Updates occur continuously between versions of the program. As files are contributed, we
make them available on our <a href="../../../../../xml/decoders/">collected decoder
definitions</a> web page. You can download them from there, but note that most web
browsers will not let you directly view them; you really do have to download them.<br>
<br>
While people are working on decoder definitions, they often put their draft definitions
in the <a href="https://groups.io/g/jmriusers/files">"Files" area of JMRI users</a> (log
in to access). You can <a href=
"https://groups.io/g/jmriusers/files/Decoder%20files">download them from the Decoder
Files folder</a>.<br>
<br>
Note that as an anti-spam measure, you will have to <a href=
"https://groups.io/g/jmriusers/join">join the group</a> to be able to download the files.
</dd>
<dt id="errormsg">What does it mean to get Error 301 or Error 306 or any other errors?</dt>
<dd>
JMRI will display various errors when it finds something wrong in attempting to
communicate with your DCC command station. In particular, Error 301 means that DecoderPro
doesn't see a locomotive on the programming track when it is trying to program a decoder.
If you do have an engine on the track (only one!), clean the wheels and the track and try
again. Error 306 means that JMRI is not getting the expected signal from the command
station. If this happens when you are first setting things up, check your wiring,
connections, and com port selection. This <a href="../Errors.shtml">list of all error
messages</a> also provides some suggestions about how to clear them.
</dd>
<dt id="lb-xp">Why does my LocoBuffer-II not work in Windows XP?</dt>
<dd>With Windows XP, your serial port parameters might not be properly set for hardware
flow control. To fix this, right-click on My Computer and select Properties. Go to the
Hardware tab and click on Device Manager. Open up the section that says Ports (COM & LPT).
Right-click on the serial port you have the LocoBuffer hooked to and select Properties. Go
to the Port Settings tab and set the options to: <em>19200, 8, None, 1, Hardware</em>.
Click <em>OK</em>. Close the Properties panel. Restart JMRI and verify your connection
settings.</dd>
</dl>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script> <!-- FAQ-Tail -->
<script src="/web/js/faq.js"></script><!-- /FAQ-Tail -->
</body>
</html>
@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - Updating Decoder Definitions</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Updating Decoder Definitions</h2>
New and updated decoder definitions are occasionally created.
The best way to get them is to update your copy of JMRI to the
most recent
<a href="https://www.jmri.org/download/">test release</a>.
If you don't want to wait for a monthly test release, you can also
pick up a
<a href="https://builds.jmri.org/jenkins/job/development/job/packages/">development release</a>.
Development releases are available within a day of the new decoder definition being
merged into JMRI.
<p>Sometimes, a user will put a new/updated definition in the <a href=
"https://groups.io/g/jmriusers/files">files area of JMRI users</a> (log in to access).</p>
<p>To use these xml files you need to download and install them.</p>
<p>The installation process was simplified in JMRI 2.3.6, where "Import Decoder File" and
"Import Decoder URL" menu items were added to the Debug menu (in PanelPro or "legacy"
DecoderPro) and to the File menu (in DecoderPro "Roster view").</p>
<p><strong>Note that this download and install process only works for the main
decoder definition file.</strong>
Some decoder definitions include small subsidiary files from subdirectories. Updates
to these are best obtained via a test or development release to ensure consistency.</p>
<h2 id="after236">JMRI v 2.3.6 and later</h2>
This section describes adding a new decoder definition when you are using JMRI version 2.3.6
or later.
<h3>Loading a definition from the web</h3>
If you have a URL for a decoder definition, perhaps copied from a web page or email, and your
computer has an active Internet connection, you can directly install the definition.
<ul>
<li>Copy the URL address from your mail etc.</li>
<li>Select the "Import Decoder URL" item from the "Debug" menu (in PanelPro or "legacy"
DecoderPro) or from the File menu (in DecoderPro "Roster view").</li>
<li>You'll be prompted for the URL. Enter it, or paste it in and click OK.</li>
</ul>
Unless there are errors, the file will be copied onto your local computer and installed in
your JMRI Preferences directory.<br>
Learn about <a href="../../setup/Files.shtml">JMRI Configuration Files</a>
<h3>Loading a definition from a file</h3>
If you have local file containing a decoder definition, perhaps downloaded from a web page or
received via email, you can install that definition in JMRI.
<ul>
<li>Select the "Import Decoder File" item from the "Debug" menu (in PanelPro or "legacy"
DecoderPro) or from the File menu (in DecoderPro "Roster view").</li>
<li>You'll be shown a file selection dialog.</li>
<li>If the file doesn't have a ".xml" extension, you may have to select the "show all
files" filter at the bottom of the dialog.</li>
<li>Navigate to your file, and click OK.</li>
</ul>
Unless there are errors, the file will be copied into your JMRI Preferences directory and
installed.
<h3>How This Works</h3>
Both of these tools take the decoder definition information from the source you indicate and
copy it to your local JMRI Preferences directory so that it will be available from now on.
For this to work, you can't already have a decoder definition file there by the same name. If
such a file does exist, the program will indicate an error and not replace the file.
<p>The definition is stored in your Preferences directory, instead of the JMRI distribution
directory, so that installing a new version of JMRI doesn't delete it. Note, however, that if
a newer version of JMRI comes along with a copy of this decoder definition installed, the
program will give priority to the specific version that you imported. JMRI thinks you knew
what you were doing when you specifically imported that specific version. If you'd prefer to
use the one in the new JMRI version, you should delete yours from your Preferences directory
and select "Rebuild Decoder Index" in the debug menu.</p>
<h2 id="before236">JMRI v 2.3.5 and earlier</h2>
This section describes adding a new decoder definition when you are using JMRI version 2.3.5
or before.
<h3>On Windows Systems</h3>
<ul>
<li>In Windows Explorer, go to the location where the decoder.xml file is located and right
click on the file.<br>
(Don't double click or you will open the file rather than saving it.)</li>
<li>Choose the menu selection "Save as..." or "Save target as...". After you choose this
menu item a window will pop up and ask you for a location that you want to save the file.
<p>You can either type in a directory name or click the browse button. To save a step I
suggest that you choose "Browse..." and then select the "Program
files\JMRI\xml\decoders\" directory.</p>
<p>If you save the file to any other directory, or to the desktop, you will have to copy
the file over to the correct directory using the copy and paste in Windows Explorer. It's
easier to just save it in the correct directory in the first place.</p>
</li>
<li>Once the file is in the decoders directory you need to open DecoderPro and choose the
<strong>Debug</strong> menu item. It's one of the menu items on the main menu on the
opening screen.</li>
<li>From the drop down Debug menu, choose the item that says "Rebuild decoder index". After
you have rebuilt the decoder index the new decoder should show up in the drop down list of
the Programmer.
<p>The key to make this work is that the downloaded .xml file needs to be in the
JMRI/xml/decoders directory, otherwise DecoderPro doesn't know that it is there, and
won't see it when you rebuild the decoder index.<br>
Note that a new JMRI install may overwrite your customized decoder definition.</p>
</li>
</ul>
<h3>On Mac OS X Systems</h3>
<ul>
<li>Create a new folder inside your JMRI Preferences folder /Users/me/Library/JMRI/ and
name it "decoders"</li>
<li>Copy or drag the new decoder.xml file into this new "decoders" folder.</li>
<li>From the drop down Debug menu, choose the item that says "Rebuild decoder index". After
you have rebuilt the decoder index, the new decoder should show up in the drop down list of
the Programmer.</li>
</ul>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
+114
View File
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - Configuration Files</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Configuration Files</h2>
<p>This section attempts to explain where DecoderPro Configuration (settings) Files are
stored on your computer and what information they contain.</p>
<dl id="location">
<dt class="left">Configuration File Locations</dt>
<dd class="first">
There are two places where JMRI Configuration Files can be found:
<ol>
<li>The originally-distributed versions of JMRI Configuration Files live in an 'xml'
directory in the JMRI application package and its subdirectories. Note that anything
you modify here will be lost when you update JMRI to a new version.<br>
The JMRI application is installed in your Programs folder by default.</li>
<li>The user's JMRI Preferences directory and its subdirectories is also of importance.
JMRI looks here first for any files it needs.<br>
You should put any locally-modified versions of files here so they don't get
overwritten by a JMRI update. Any files that the program writes to containing local
information, e.g. Roster entries and Panel files, are also written here.<br>
The default user's Preferences location varies by computer operating system.
Normally, it's located:
<ul>
<li>On a Linux machine, look for a .jmri directory in your home directory.</li>
<li>On macOS, Preferences are stored in a "JMRI" folder in the
/Users/me/Library/Preferences/ folder.</li>
<li>On Windows, this can be in a number of places depending on the Windows version
you're running and whether you have multiple users configured. Start by looking
under "Documents" or "User Documents" or "Users and Documents". You're looking for
a folder called "JMRI".</li>
</ul>
<p>The easiest way to find it is to start a JMRI program, e.g. DecoderPro or
PanelPro, and select "File Locations" from the "Help" menu. A special treat for
Windows users: if you go to the Windows Start Menu, in the JMRI section, you can
select "Preferences" to have it open that directory for you.</p>
<p>You may set or change the location scripts and user files in the <a href=
"../../../package/apps/TabbedPreferences.shtml#FileLocations">Preferences... -&gt;
File Locations</a> panel. Note that changing the "User Files Location" will also
change the default location for Panels, Rosters etc.</p>
</li>
</ol>
</dd>
<dt class="left">Types of Configuration Files</dt>
<dd>
Inside your JMRI Preferences folder are a number of types of configuration files used by
DecoderPro:
<ul>
<li>Decoder definitions - Stored in the <strong>decoders</strong> subdirectory, one for
any customized decoder; these define how a specific family of decoders is
configured.</li>
<li>Locomotive configurations - Stored in the <strong>roster</strong> subdirectory, one
for each Locomotive; these record the specific configuration of each Locomotive in your
Roster.</li>
<li>Programmer definitions - Stored in the <strong>programmers</strong> subdirectory
when you've used at least one Programmer; these define the formats for the various
programming sheets that are available in DecoderPro.</li>
<li>The DecoderPro folder, containing your profiles.</li>
</ul>
</dd>
<dt class="left">General Configuration Files</dt>
<dd>
There are many more JMRI Configuration Files, some shared by applications, which live in
the user's Preferences directory:
<ul>
<li><code>roster.xml</code> - an index of your Locomotives</li>
<li><code>decoderIndex.xml</code> - an index of the available decoder definition files.
It also contains the information on which specific decoder model uses which file, how
to identify them, and what options they implement.</li>
<li><code>names.xml</code> - not used during normal operation, this is a list of the
standard Variable Names for use in programmer definitions.</li>
</ul>
</dd>
</dl>
More information about the <a href="../../setup/Files.shtml">JMRI Configuration Files</a>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: Function Mapping in Programmer Files</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Function Mapping in Programmer Files</h2>
The "fnmapping" element provides a convenient way to display the CV bits used to map
functions and outputs in a decoder.
<p>You can do a similar thing with lots of rows and columns in the display, but it would be a
lot more work, and the display wouldn't be nicely tuned.</p>
<p>The "fnmapping" element works by looking for variables with names like "F2 controls output
1". Specifically, it's looking for a name that consists of four (or five) parts:</p>
<ol>
<li>A function name. This could be "FL" or "Fn" or "Fnn", where n or nn is a decimal number
in the range 0-28.<br>
Also supported are some special non-key states used by some decoders to control outputs.
These currently include "STOP", "DRIVE", "FWD", "REV" and "Sn" or "Snn", where n or nn is a
decimal sensor number in the range 0-28.</li>
<li>An optional "(f)" or "(r)" suffix to the function name.</li>
<li>The exact string " controls output ". Note the single spaces before and after!</li>
<li>An output's decimal number.</li>
<li>An optional "(alt)" suffix to the output number (or name). This allows for an alternate
definition of an output, such as for the Tsunami function group exchange feature.</li>
</ol>
<p>After finding all the matching variables in the configuration file, the fnmapping element
creates a rectangular grid to display them.</p>
<p>In the context of a "fnmapping" element, variables have several useful attributes and
elements:</p>
<ul>
<li>Default - this can be used to set the default values. This is particularly useful for
constant (readonly) variables, as otherwise they don't have any useful value.</li>
<li>minOut - sets the minimum number of outputs that the decoder needs to have defined
before this variable is effective. Since different decoders in the same family often have
different numbers of outputs wires, this allows a single configuration file to handle
multiple decoders. (See below for an example)</li>
<li>minFn - similar to minOut, but working on the number of functions that the decoder will
respond to. This is generally not as useful.</li>
<li>constant - this is an element, not an attribute, that lets you define a variable as
having a constant value that the user can't change. An example of using this to display a
fixed map is displayed below.</li>
</ul>
<p>Several attributes and elements (e.g. "tooltip" & "label") on a fnmapping variable are
ignored and <strong><em>should not</em></strong> be added to a definition file:</p>
<p>Several attributes and elements of the "model" element of the decoder file also affect
the Function Map display:</p>
<ul>
<li>numOuts - the number of physical outputs (wires) on the decoder.</li>
<li>numFns - this is a legacy attribute that limits the total number of function mapping
lines displayed. It is no longer required as the JMRI code now automatically suppresses
unused lines.</li>
<li>output - the "name" and "label" attributes of the "output" element can be used to
modify what is displayed in Function Map columns. For details see this <a href=
"/JavaDoc/doc/jmri/jmrit/symbolicprog/FnMapPanel.html" target="_blank">Javadoc page</a>.
</li>
<li>extFnsESU - when set, invokes the specialised Function Map page required for later
model ESU decoders. The requirements and meaning of some fnmapping elements are also
changed. For details (and current valid settings for "extFnsESU") see this <a href=
"/JavaDoc/doc/jmri/jmrit/symbolicprog/FnMapPanelESU.html" target="_blank">Javadoc page</a>.
</li>
</ul>
<h2>Mapping Example</h2>
These examples are taken from the <a href=
"../../../../../xml/decoders/Digitrax_01x3.xml">Digitrax_01x3.xml</a> decoder definition
file.
<p>The block of definitions for function zero in the forward direction look like this:</p>
<pre>
&lt;variable item="FL(f) controls output 1" CV="33" mask="XXXXXXXV" minOut="1" default="1"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 2" CV="33" mask="XXXXXXVX" minOut="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 3" CV="33" mask="XXXXXVXX" minOut="3"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 4" CV="33" mask="XXXXVXXX" minOut="4"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 5" CV="33" mask="XXXVXXXX" minOut="5"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 6" CV="33" mask="XXVXXXXX" minOut="6"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 7" CV="33" mask="XVXXXXXX" minOut="7"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="FL(f) controls output 8" CV="33" mask="VXXXXXXX" minOut="8"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
</pre>Note that the "minOut" attribute ensure that only outputs actually defined as present are
displayed.
<p>The similar block of definitions for function two configure a different CV, but are
otherwise quite similar:</p>
<pre>
&lt;variable item="F2 controls output 1" CV="36" mask="XXXXXXXV" minOut="1" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 2" CV="36" mask="XXXXXXVX" minOut="2" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 3" CV="36" mask="XXXXXVXX" minOut="3" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 4" CV="36" mask="XXXXVXXX" minOut="4" minFn="2" default="1"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 5" CV="36" mask="XXXVXXXX" minOut="5" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 6" CV="36" mask="XXVXXXXX" minOut="6" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 7" CV="36" mask="XVXXXXXX" minOut="7" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F2 controls output 8" CV="36" mask="VXXXXXXX" minOut="8" minFn="2"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
</pre>The only new thing here is that the "minFn" attribute is being used. This is useful when a
family of decoders supports different numbers of functions (not outputs!) in different decoder
models.
<p>As you go to higher function numbers, the NMRA mapping between the bits in the CVs and the
output numbers changes. You can see that by looking at an example of how function ten is
mapped to outputs 7 through 14:</p>
<pre>
&lt;variable item="F10 controls output 7" CV="44" mask="XXXXXXXV" minOut="7" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 8" CV="44" mask="XXXXXXVX" minOut="8" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 9" CV="44" mask="XXXXXVXX" minOut="9" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 10" CV="44" mask="XXXXVXXX" minOut="10" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 11" CV="44" mask="XXXVXXXX" minOut="11" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 12" CV="44" mask="XXVXXXXX" minOut="12" minFn="10" default="1"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 13" CV="44" mask="XVXXXXXX" minOut="13" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
&lt;variable item="F10 controls output 14" CV="44" mask="VXXXXXXX" minOut="14" minFn="10"&gt; &lt;enumVal&gt;
&lt;enumChoice choice="No"/&gt; &lt;enumChoice choice="Yes"/&gt; &lt;/enumVal&gt; &lt;/variable&gt;
</pre>
<h2>Fixed Mapping Example</h2>
You might still want to include the mapping values in a configuration file, even if the
decoder doesn't have a way to change them. This is an example of a constant mapping:
<pre>
&lt;!-- Define the fixed Function-Output mapping --&gt;
&lt;constant item="FL(f) controls output 1" minOut="1" default="1" /&gt;
&lt;constant item="FL(r) controls output 2" minOut="2" default="1" /&gt;
&lt;constant item="F1 controls output 3" minOut="3" minFn="1" default="1" /&gt;
&lt;constant item="F2 controls output 4" minOut="4" minFn="2" default="1" /&gt;
&lt;constant item="F3 controls output 5" minOut="5" minFn="3" default="1" /&gt;
&lt;constant item="F4 controls output 6" minOut="6" minFn="4" default="1" /&gt;
&lt;constant item="F5 controls output 7" minOut="7" minFn="5" default="1" /&gt;
&lt;constant item="F6 controls output 8" minOut="8" minFn="6" default="1" /&gt;
&lt;constant item="F7 controls output 9" minOut="9" minFn="7" default="1" /&gt;
&lt;constant item="F8 controls output 10" minOut="10" minFn="8" default="1" /&gt;
</pre>This will be displayed in the same way as other mappings, except that the individual
checkboxes will be inactive (grayed out). <!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
+139
View File
@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - How DecoderPro Identifies Decoders</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>How DecoderPro Identifies Decoders</h2>
<p>To properly program a decoder, DecoderPro needs to be able to find a "definition" for the
decoder. That definition specifies which CVs are understood by the decoder, what they mean,
what values are valid, etc.</p>
<p>DecoderPro allows a user to pick which decoder model they have installed, in which case it
can automatically find the right definition. But it also provides an "Ident" function which
attempts to locate the right definition based on information it reads from the decoder.</p>
<p>Ident starts by reading the manufacturer code from CV8. The NMRA has defined a set of
unique values for this CV. Since (almost) all decoders properly provide this information,
DecoderPro can use it to narrow-down the list of possible definitions to just those from a
particular manufacturer.</p>
<p>Next, DecoderPro reads the value from CV7. The NMRA has defined this as the "version"
number. Unfortunately, not all manufacturers use this number in a way that provides necessary
information. There are two ways that this can go wrong:</p>
<ol>
<li>Too many decoders with the same version number:
<p>If many different types of decoders have the same version number, and if those
versions differ enough, then the version number doesn't provide enough information to
pick a specific definition.</p>
<p>For example, if version number 3 can be found in both a low-cost decoder with few CVs,
and in a high-function decoder with lots of CVs, finding a 3 in CV7 doesn't provide
enough information.</p>
<p>This problem happens most often when a particular model can have a range of version
numbers in CV7, and those ranges overlap from one model to another.</p>
</li>
<li>Not enough information available about what a version number means:
<p>This is particularly a problem when the version number changes because new features
have been added, but the model number of the decoder stays the same. For example,
consider the confusion that's caused when a manufacturer adds BEMF to their XYZ123
without calling it a new model. Now we find that some XYZ123 decoders have BEMF, and some
don't. Further, we find that there are two version numbers: 23 and 51, and have no
official information on what the differences are. It's very hard to sort that out, and
customers get very frustrated.</p>
</li>
</ol>
<p>In addition to using the version number in CV7, DecoderPro can look at values in other,
manufacturer-specific CVs to identify the decoder. This can be very powerful, as
manufacturers can use their own CVs to make as much information available as desired.</p>
<p>Unfortunately, even those manufacturers who use additional CVs for identification
information rarely make the meaning of values in those CVs publicly available. We then have
to deduce what a 103 in a particular CV means, and we often get it wrong.</p>
<p>It's important to note that there are good business reasons for some of the things that
manufacturers have done with identification information so far. For example:</p>
<ul>
<li>Manufacturers often use the same processor chip and software in multiple decoder
models; it would be cost-prohibitive to change the chip to have a unique identification
code for each specific model.
<p>But we don't need a unique tag for each model. We only need to identify what CVs are
present and what they mean; two decoders that are running the same software will have the
same CVs present. (We handle as a special case the number of outputs that are physically
available, etc.)</p>
</li>
<li>Manufacturers are concerned that users and dealers will use the version identification
information to identify "stale stock", and insist on free updates to the most recent
version. This would be a huge economic burden to the manufacturer, particularly given that
most requests might be motivated by a desire to for a "latest and greatest" rather than the
need for specific bug to be fixed.
<p>It's important to note, however, that we don't need to be able to identify the
specific version of firmware per se; we only want to identify the CV programming needed.
Internal changes need not affect the identification information.</p>
</li>
</ul>
<h3>Recommendations</h3>
What should a responsible manufacturer do?
<p>Generally:</p>
<ul>
<li>Have a plan for how to identify the feature set and CVs of a decoder, and disclose that
plan to users. It might be something like "you can look in CV7 and CV150 to identify the
features of a decoder". To deal with the history of past decoders, etc, it might have to be
more complicated: "Match the values in CV7, CV150 and CV 188 to the possible values on this
web page". We'll find a way to deal with anything that can be described in terms of CV
values.</li>
<li>As new types of decoders are produced, make sure to publish the specific information
needed to identify the decoder. This might be as simple as putting the identification
values on a web page for the decoder. (Since the values might change, putting them in an
manual is of limited use)</li>
</ul>
Beyond that:
<ul>
<li>The most value for the customer would come if a <em>specific</em> model can be
identified. An additional CV for this would be ideal, but any method of narrowing down to a
model 2XYZ123AB decoder would be ideal.</li>
<li>If concerned about separating "firmware update version" from "feature set", consider
using separate CVs for that, and perhaps not even making the "firmware update" information
available to users.</li>
<li>An easy way to handle older decoders when moving to a new method is to identify a
specific CV7 value that hasn't been used, and define that as a flag that other CVs should
be consulted for more information.</li>
<li>When new features are added to a decoder, consider calling it a new model. Having many
different versions of the XYZ123 decoder, some with BEMF, some without, some with special
lighting options, some without etc., confuses both the customer and the people trying to
support customers with software like DecoderPro. And why not get credit for the new
features from people who'll ask for the new model?</li>
</ul>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2015 -->
<title>JMRI: Downloading and Installing DecoderPro</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Downloading and installing</h2>
<p>DecoderPro is distributed as part of the free JMRI downloads. The steps to getting it
working are:</p>
<dl>
<dt class="left">Make sure DecoderPro can run on your computer</dt>
<dd class="first">
The DecoderPro software will work on Windows, Linux, and Mac OS X. It will probably also
work on most other modern operating systems that have Java available; contact us for help
if you'd like to try it on some other system. You need to have a serial port available,
either on the computer itself, or via a <a href="../../hardware/USBtoSerial.shtml">USB
adapter</a>.
</dd>
<dt class="left">Make sure JMRI works with your DCC system</dt>
<dd class="first">
The <a href="../../hardware/index.shtml">hardware page</a> lists the DCC systems
compatible with DecoderPro, along with the known limitations and the available tools.
</dd>
<dt class="left">Download and install JMRI</dt>
<dd class="first">
The <a href="https://www.jmri.org/download/index.shtml">Download page</a> on the main JMRI
website provides links to download various JMRI versions, along with links to release
notes, etc.
<p>Note that there are different downloads for different types of computers (Macintosh,
Windows, etc), and the procedures for installing JMRI differ. You'll find all that
explained on the <a href="https://www.jmri.org/download/index.shtml">Download page</a>.</p>
</dd>
<dt class="left">Setup JMRI</dt>
<dd class="first">
Please consult <a href="../../setup/index.shtml">JMRI Setup Help</a>. When Setup is
completed, you should have a working DecoderPro installation.
</dd>
</dl>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- close #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,83 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: Intro to XML</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<div class="list">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Intro to XML</h2>
<p>All of the JMRI configuration files use the XML format. This section is a brief
explanation of that format to make it a little easier to understand.</p>
<h3>Elements and Tags</h3>
<p>XML files are made up of "elements", which are delimited by "tags". It's a lot like
HTML, if you're familiar with that. A tag is enclosed in angle brackets, for example
&lt;decoder&gt;. An element can either begin and end with a tag:</p>
<p class="example">&lt;decoder&gt;<br>
other stuff here<br>
&lt;/decoder&gt;<br></p>
or have both the start and end tags combined:
<p class="example">&lt;decoder/&gt;</p>
<p>Note the back-slash characters. They mark the end of the element. The starting tag of an
element can also carry attributes:</p>
<p class="example">&lt;decoder name="foo"&gt;<br>
other stuff here<br>
&lt;/decoder&gt;<br></p>
<p>This example shows the attribute "name" being set to a value of "foo". Some attributes
are required, and some are optional. Note the double-quotes around the attribute value.
They are required.</p>
<h3>Line Breaks and Indentation</h3>
<p>Finally, a word about line-breaks and indentation. Tabs, spaces and line-breaks don't
mean anything in XML files except within the double quotes of an attribute value. To make
it easier to read the original file, we often use the indenting to show what elements are
inside each other. Each time we start a new element, we indent its contents by another four
spaces. An example would be:</p>
<p class="example">&lt;decoder&gt;<br>
&lt;variable&gt;<br>
stuff in the 1st variable element<br>
&lt;/variable&gt;<br>
&lt;variable&gt;<br>
stuff in the 2nd variable element<br>
&lt;/variable&gt;<br>
&lt;/decoder&gt;</p>
<p>You can break the contents of an element across a line, if that makes it easier to
read:</p>
<p class="example">&lt;tagWithLotsOfAttributes<br>
firstAttribute="foo"<br>
secondAttribute="bar"<br>
thirdAttribute="biff"<br>
fourthAttribute="bing" /&gt;</p>
</div>
<!-- closes list -->
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- close #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - Locomotive Files</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Locomotive Files</h2>
<p>DecoderPro maintains the information for each roster entry in a separate file. You
generally don't have to edit these, or even look at them. This page describes their content
just in case you're interested.</p>
<p>First, the XML contains some header information that describes the format & history of the
file:</p>
<p class="example">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>
&lt;!DOCTYPE locomotive-config SYSTEM "locomotive-config.dtd"&gt;<br>
&lt;locomotive-config&gt;<br>
&lt;!--Written by JMRI version 1.6.1 on Sat Oct 08 07:00:30 PDT 2005 $Id$--&gt;</p>
This is followed by the summary information for the entry. Most of this comes from the
"Roster Entry" pane in DecoderPro:
<p class="example">&lt;locomotive id="UP 792" roadNumber="" roadName="" mfg="" model=""
dccAddress="792" comment=""&gt;<br>
&lt;decoder model="DH163" family="Series 3 with FX3, silent, readback" comment=""
/&gt;<br></p>
That's then followed by a section that contains values for all the variables defined in the
decoder definition file. Note that these are numeric values; the decoder definition file are
used to convert these to strings, etc, when this is read back in.
<p class="example">&lt;values&gt;<br>
&lt;decoderDef&gt;<br>
&lt;varValue item="Primary Address" value="24" /&gt;<br>
&lt;varValue item="Start Volts" value="0" /&gt;<br>
&lt;varValue item="Acceleration Rate" value="0" /&gt;<br>
&lt;varValue item="Deceleration Rate" value="0" /&gt;<br>
&lt;varValue item="Max Volts" value="0" /&gt;<br>
&lt;varValue item="Mid Volts" value="0" /&gt;<br>
&lt;varValue item="Version ID" value="0" /&gt;<br></p>
Finally, there's a similar section that contains numeric values for all the CVs. We store
both variables and CVs so that if a decoder definition changes in the future, we can sort out
what's actually in the decoder.
<p class="example">&lt;CVvalue name="1" value="24" /&gt;<br>
&lt;CVvalue name="2" value="0" /&gt;<br>
&lt;CVvalue name="3" value="0" /&gt;<br>
&lt;CVvalue name="4" value="0" /&gt;<br></p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div><!-- close #mainContent -->
</div><!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
+126
View File
@@ -0,0 +1,126 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - The Details</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>DecoderPro Details</h2>
<p>This page provides information on how DecoderPro (Symbolic Programmer) works.<br>
For details on the JMRI internals, please see the <a href=
"../../doc/Technical/IntroStructure.shtml">Technical Documentation pages</a>.</p>
<dl>
<dt class="left">Configuration Files</dt>
<dd class="first">
<p>There are three types of <a href="Files.shtml">Configuration Files</a>:</p>
<ul>
<li>Decoder configuration files - These carry the description of a specific type of
decoder, and control how the programmer displays the variable information.</li>
<li>Locomotive configuration files - These carry the specific information on a single
locomotive.</li>
<li>Programmer definitions - These define the formats for the various programming
sheets.</li>
</ul>
<p>The programmer can read either type of file. If you select a decoder file after
clicking Read File, the programmer will be set up with the variables, options, etc for
that type. The values will be blank, as the programmer doesn't know anything about what's
been programmed into a specific decoder unit.</p>
<p>If you select a locomotive file after clicking Read File, information on both the
decoder configuration and the specific settings in this locomotive will be displayed.
This shows you how the locomotive is already configured, allowing you to make small
changes with less chance of confusion.</p>
<p>You can also write locomotive files with the Write File button. This will store the
known contents of the decoder, allowing you to come back to it later.</p>
<p>The configuration files are stored in XML format. This is a standard form for
structured data. XML is being widely used to standardize the exchange of data between
different manufacturers in many fields; perhaps someday DCC decoder manufacturers will
provide an XML description of each decoder they make. In the meantime, the configuration
files are being created by volunteers. If one doesn't exist for a specific decoder you've
got, you can <a href="CreateDecoder.shtml">create your own</a>. You can also modify a
file if you'd prefer different names, a different grouping of options, or you just never
want to see that certain options that you don't use. A simple text editor can create
these files easily, as the format doesn't have fixed length fields, special characters,
etc. There are also powerful public-domain XML tools that make it really easy to manage a
large number of decoder files.</p>
</dd>
<dt class="left">Variables</dt>
<dd>
<p>A "variable" defines the value that will be loaded into all or part of a CV. For
example, a variable can be defined that sets the value of the three most-significant bits
of CV 47. If there are several options configured in a single CV, these would normally be
handled by separate variables. Currently, there are several types of variables:</p>
<ul>
<li>Decimal - numbers entered in the usual decimal notation. These are useful for short
address, starting voltages, etc.</li>
<li>Enum (enumerated) - choose from a set of options. These can be used for simple
on/off, yes/no choices, or more complicated sets like the FX lighting example above.
The configuration contains a name for each possibility.</li>
<li>Long address - like a decimal value, except the constraints on a valid long address
are taken into account.</li>
<li>Hex - This is not so much needed, since the multiple options in a single CV can be
handled by multiple variables. But if its needed for some reason, the capability is
present.</li>
<li>Speed table - not yet really working well, this type of variable is intended to
provide a graphic speed table chart that you can drag around to configure as you
wish.</li>
</ul>
</dd>
<dt class="left">Programmer communication: States</dt>
<dd>
<p>Communication with the Command Station/programmer, hence reading and writing of the
decoder, are only done when the "Read" or "Write" buttons are pressed. DecoderPro keeps
track of whether a value has been sent to the decoder using four States for variables or
CVs:</p>
<ul>
<li>Read - The value shown was read from the decoder.</li>
<li>Stored - The value shown has been written to the decoder.</li>
<li>Edited - The value shown has been changed in the computer, but not yet written to
the decoder. Push the Write button when you're happy with the value.</li>
<li>Unknown - A default value, or a read has failed, or for some other reason the
program has no confidence that the value is what you really want. Edit the value or
press the Write button.</li>
</ul>
</dd>
</dl>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,195 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - Multi-Decoder Tool</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Multi-Decoder Tool</h2>
Digitrax invented a <a href="#digitraxproposal">mechanism</a> for having more than one
decoder in locomotive, and still be able to read and write them separately. It uses CV15 and
CV16 in a particular way to do this.
<p>CV16 is the ID of a particular decoder; if you have more than one decoder in a locomotive,
they should have different values in CV16.</p>
<p>CV15 is used to unlock one decoder (and lock the others), so it can be written.</p>
<p>Only decoders that have the value in CV15 equal to the value in CV16 will respond to reads
and writes. Since you're supposed to originally set up the two decoders with different CV16
values, this means you can use CV15 to select which decoder you want to talk to.</p>
<h2>DecoderPro's Handling of CV15 and CV16</h2>
Really, the DecoderPro "paned programmer" shouldn't handle CV15 and CV16 at all. They're not
really "configuration data", in the sense that you can freely adjust them and see what they
do. Rather, CV16 is a "set once before assembling the locomotive", and CV15 is an operational
command "which decoder can talk now".
<p>If a DecoderPro user did a write-all-sheets and changed either of those, future
programming operations would be problematic.</p>
<p>Hence, people writing decoder definitions are strongly encouraged not to include CV15 and
CV16 (when they are used for decoder lock) in their definitions, or to include them only as
"constant" CVs so the program will not write them. The user can then program those CVs using
the "Single CV Programmer".</p>
<h2>The Multi-Decoder Tool</h2>
<a href="images/MultiControl.gif"><img src="images/MultiControl.gif" width="121" height="283"
class="floatRight" alt="multi decoder tool"></a> When this feature was first coming into use,
a "Multi-Decoder Tool" was written for JMRI (see image to right).
<p>It has several parts.</p>
<p>At the top are 8 buttons that you can click to unlock a particular decoder in the
locomotive. E.g. if you click "3", the decoder configured with "3" in CV16 will be unlocked.
If possible, the program tries to verify that the decoder is present and communicating; the
status is shown in the middle of the window ("OK" in the illustration).</p>
<p>If you click the "Legacy" button, all decoders with the lock feature will be locked out.
This is so you can write to an additional decoder without the lock feature. E.g. if you have
one decoder with, say "2", and one without the lock feature, you can still configure them
by:</p>
<ol>
<li>Click "2" - both decoders are now active.</li>
<li>Write the information for "2", which will go to both.</li>
<li>Click "Legacy", locking out "2".</li>
<li>Write the information for the non-locking decoder, overwriting what you put in it
above</li>
</ol>
Yes, that's ugly, but it can be made to work.
<p>In the center are some buttons for automated operations you might find useful:</p>
<ul>
<li>"Search" - walks through a <u>long</u> series of writes and reads to determine which
decoders are present. Buttons for decoders that aren't present will be disabled (grayed
out).</li>
<li>"Reset" - sometimes a decoder, even if installed by itself in the locomotive, can get
accidentally locked when CV15 and/or CV16 is set to some spurious value. This button does a
bunch of reads and writes to figure out what's happened and unlock the decoder.</li>
<li>"Init DH163 + SoundTraxx" - If you have a DH163 or similar decoder with the lock
feature, plus another decoder without the feature, this button works through a series of
operations to configure the Digitrax lock feature so you can use it. (Normally you'd take
the locomotive apart so as to be able to load the Digitrax CV16 value).</li>
</ul>
<p>Finally, the bottom part of the page allows you to control the programming mode in
use.</p>
<p>Although it's possible to use this tool in "Ops mode" (programming on the main), in that
case it's not able to confirm operations, so one can't be 100% sure that the right decoder is
selected.</p>
<h2 id="digitraxproposal">Digitrax's Original Proposal</h2>
<p>DCC users sometimes want to install more than one decoder in a single locomotive. One
common case is using separate decoders for motor control and sound. Because these decoders
often need to have their CVs configured separately, a mechanism is needed to communicate with
only one at a time.</p>
<p>This mechanism must be able to:</p>
<ol>
<li>Do service-mode read and write from a specific decoder, with no need to disconnect
other decoders electrically.</li>
<li>Discover the type of decoder(s) present inside a locomotive, without disassembly, and
despite multiple decoders being present.</li>
<li>Work with existing DCC systems without modification</li>
</ol>
<h3>Proposal:</h3>
CV16 will carry a number from 0 to 7 inclusive. This is called the "ID number". This number
identifies a single decoder, so a unique value must be assigned to each decoder in a
particular locomotive. Because most users will use this mechanism with decoders that provide
different functions, the recommended coding is:
<pre>
0: Reset value, as shipped
1: Motor decoder
2: Sound decoder
3: Function-only decoder (e.g. for additional lights)
</pre>CV15 is used to select the decoder that will respond. When the values in CV15 and CV16 are
equal, all CVs in the decoder can be read or written. When the values in CV15 and CV16 are not
equal, only CV15 can be written.
<p>Some manufacturers may want to provide a bit in a CV to enable/disable this feature. If
so, that should be in a CV reserved for the manufacturers use, as no NMRA CV has been
reserved for this purpose.</p>
<p>Note that a command to reset the decoder to default CV values must not be acted upon
unless the CV15 and CV16 values are equal. This prevents the user from accidentally resetting
multiple decoders at the same time, and losing the ability to separately address them.</p>
<p>To configure decoders at installation:</p>
<p>Before installing each decoder in the locomotive:</p>
<ol>
<li>Connect it to the programming track all by itself</li>
<li>Write 8 to CV8 to ensure CV15 and CV16 are both zero</li>
<li>If desired, read CV15 to confirm that the decoder can be addressed (This is a read of
0, hence fast)</li>
<li>Write CV16 to the desired ID number, e.g. 2</li>
<li>Write CV15 to the ID number</li>
<li>Configure the rest of the decoder</li>
<li>Disconnect it and install it in the locomotive</li>
</ol>
Repeat in turn for each decoder to be installed
<p>Note that if the user is installing only one decoder, there is no need to modify the
default values of zero in CV15 and CV16.</p>
<p>To access a decoder after installation:</p>
<ol>
<li>Write the ID of the desired decoder into CV15</li>
<li>Read or write other CVs as needed</li>
</ol>
To identify the decoder(s) present in a locomotive:
<ol>
<li>Write a 0 to CV15</li>
<li>Attempt to read a 0 from CV16.</li>
<li>If no acknowledge is received, there is no decoder with ID 0. If an acknowledge is
received, a decoder with ID 0 exists.</li>
</ol>
Repeat this process for ID 1 through 7 to check for those.
<p>Because the ID values are low, a successful read is quite fast. An unsuccessful read, i.e.
when the decoder is not present, will take some time on many existing command stations, but
eventually give an answer. This can be made faster in the future by having command stations
attempt to read just the expected value, instead of 0 to 255, in the absense of an
acknowledge.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - Sharing DecoderPro Rosters across a Network</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Sharing DecoderPro Rosters across a Network</h2>
<strong>Note:</strong>
<p><strong>The information on this page is somewhat dated in terms of file locations,
Preferences settings and a recommended solution. For more up-to-date information see <a href=
"../../setup/Dropbox.shtml">Using DropBox</a>.</strong>
</p>
A common question:
<blockquote>
I have a computer at both my workbench, where I program my engines, and one at my layout
location. They are not portable, but all the PC's at my house are networked together
(Windows XP clients and a Windows 2000 Server). I would like to store the roster and all
else that is needed on the Windows 2000 server and be able to run copies of DecoderPro on
at lease two of the Windows XP PC's. Is that possible?
</blockquote>
Yes!
<p>Configure the Windows machines so there's a shared directory, and then you can set the
JMRI "advanced preferences" to put the roster information inside that.</p>
<ol>
<li>Set up a shared directory.</li>
<li>Select which roster you want to start with (since there might be separate ones on
different machines already). On that machine, find the "roster.xml" file and "roster"
directory in the preferences directory.
<p>For more information, please see the DecoderPro pages on the <a href=
"RosterFile.shtml">roster files</a> and <a href="Files.shtml#location">file
locations</a>.</p>
<p>Copy, _do not move_, the roster.xml file and roster folder to the shared folder. You
must copy the _entire_ contents of the roster directory!</p>
</li>
<li>On each machine that is to use the shared roster, start DecoderPro, select Preferences
from the Edit menu, and click "Show Advanced Preferences". The window will get bigger.
Press "Set" under "Roster:" and follow directions.</li>
</ol>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,320 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - Create a Custom DecoderPro Programmer</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Create a Custom Programmer</h2>
<p>How do I create my own custom programmer?</p>
<p>The answer starts with the creation of an xml file in the "programmers" subdirectory of
the JMRI distribution. The contents of the file are described here.</p>
<p>After some initial parts (which you can just copy from an existing file), the rest of the
file is a series of "pane" definition elements. Each one become a pane in the DecoderPro
window.</p>
<p>The panes in the programmer file appear when you select that programmer in DecoderPro.
Note that panes can also be defined in the decoder definition, in which case those panes
appear after the ones in the programmer definitions.</p>
<ul>
<li>There is an option to present/hide panes from the decoder file. If you're writing a
very basic programmer, you might want to hide them to keep the interface simple.</li>
<li>If a pane is defined in the decoder file and programmer file with the same name, the
one from the decoder file (the more specific one) appears.</li>
</ul>
<dl>
<dt class="left">Specifying items to display</dt>
<dd class="first">
<p>The basic element of a programmer pane is a "display". This tells the programmer to
present a single variable. The attributes are:</p>
<ul>
<li><dfn>name</dfn> - (Required) This is the "standard name" of the variable to be
presented.</li>
<li><dfn>label</dfn> - If present, this will be used to label the variable on the pane
instead of the name or standard name of the variable.</li>
<li><dfn>layout</dfn> - Where to locate the label with respect to the editable field,
e.g. the text box. Possible values are "left", "above", "below", "right" with a default
of "right".</li>
<li><dfn>viewOnly</dfn> - Present the variable but do not allow the user to change
its value in this place. Possible values are "yes" or "no", with a default of "no".</li>
<li>
<dfn>format</dfn> -
<p>How the variable should be presented. Numeric variables can be presented as</p>
<ul>
<li>an editable text field, which is the default if nothing is specified</li>
<li><dfn>hslider</dfn> - a horizontal slider</li>
<li><dfn>vslider</dfn> - a vertical slider</li>
</ul>
<p>Enum variables can be presented as</p>
<ul>
<li>a selection box, which is the default if nothing is specified</li>
<li><dfn>radiobuttons</dfn> - Each possible value is presented as an individual
button</li>
<li><dfn>checkbox</dfn> - An enum with only two states can also be presented as a
checkbox</li>
<li><dfn>offradiobutton</dfn> - A single button that sets the 0 choice for the
variable when selected</li>
<li><dfn>onradiobutton</dfn> - A single button that sets the 1 choice for the
variable when selected</li>
</ul>
<p>These last two can be useful for indicating which parts of a configuration are
active; see the "Speed Table" pane of Comprehensive.xml for an example.</p>
</li>
<li>
<dfn>tooltip</dfn> - Allows you to specify a default tooltip to be presented when the
cursor is left over the variable. This tooltip will be overridden by any tooltip
defined in the decoder file. (Note: This behaviour differs from <a href=
"#display">the behaviour of the label attribute</a>.)
</li>
</ul>
<p id="display">Which name to display is controlled by the pane's 'nameFmt' attribute,
and the 'label' attribute on each display element (variable).</p>
<p>The choices are:</p>
<ul>
<li>If a label is specified, it will be used. Use a label if you want absolute control
over what a variable should be called, regardless of what the decoder file calls it,
and you don't like the standard name.</li>
<li>The pane's nameFmt attribute is "item", in which case the item name will be used
regardless of what the decoder file calls the variable. Use this is you want a uniform
appearance for the pane for all decoders. But be aware that some standard names are
really so generic as to be useless.</li>
<li>If the pane's nameFmt attribute is allowed to default, or contains "mfg", the
decoder definition file's name will be used. This is the normal form, as it allows a
manufacturer to specify in some detail what a variable defines.</li>
</ul>
</dd>
<dt class="left">Formatting</dt>
<dd>
<p>Each pane of the programmer consists of (nested) rows and/or columns. Columns lay out
variables from top to bottom. Rows lay out variables from left to right. You can nest
these to achieve various effects; for an example of this, see the "Speed Table" pane of
the Comprehensive.xml file. It has two columns; the left of each uses a row to put some
sliders from left to right.</p>
</dd>
<dt class="left">Special Elements</dt>
<dd>
There are a number of elements you can use to get the programmer formatted exactly the
way you want:
<ul>
<li>
<dfn>grid</dfn> - Create a grid for laying out elements in aligned rows and columns.
See the <a href="#grid">Grid Layout</a> section below.
</li>
<li><dfn>label</dfn> - Add text to a pane.</li>
<li><dfn>soundlabel</dfn> - Add a soundlabel (from the decoder definition file) to a
pane. It has a one attribute:</li>
<li style="list-style: none">
<ul>
<li><dfn>num</dfn> - (Required) This is the number of the sound label to be
presented.</li>
</ul>
</li>
<li><dfn>separator</dfn> - Add a separator line to a pane. If included in a column,
this will be a horizontal separator line. If included in a row, it will be a vertical
line.</li>
<li><dfn>cvtable</dfn> - Insert a table of CV values onto the pane. To get the spacing
right you should probably not combine this with other variables on the same pane.</li>
<li>
<dfn>fnmapping</dfn> - Show a function mapping grid. This requires variables with
specific names, which are described on a <a href="FnMapping.shtml">separate page</a>.
</li>
<li><dfn>dccaddress</dfn> - Show a combined variable for the DCC address. This consists
of a checkbox that selects use of short vs long address, and a single text field for
entering the address. Depending on how the checkbox is set, the text field will
configure the CV1 short address or the CV17/18 long address.</li>
</ul>
</dd>
<dt id="grid" class="left">Formatting with the Grid Layout</dt>
<dd>
The "row" and "column" elements allow you to align elements in rows or columns, but if
you have multiple columns within a row element (or vice versa) it is not possible to
ensure that rows in adjacent columns (or vice versa) stay aligned.<br>
The Grid Layout allows you to align elements in rows and columns, maintaining alignment
even if a particular element is absent. There are two elements:
<ul>
<li><dfn>grid</dfn> - Create a grid layout (within a "row" or "column" element):</li>
<li style="list-style: none">
<ul>
<li>It may have one or more optional attributes.</li>
<li>The only allowed sub-element is "griditem" and there must be at least one of
these.</li>
</ul>
</li>
<li><dfn>griditem</dfn> - Create a grid item (within a "grid" element):</li>
<li style="list-style: none">
<ul>
<li>It should have "gridx" and "gridy" attributes.</li>
<li>It may also have one or more optional attributes.</li>
<li>It must contain one or more elements, which can be any combination of any of
the other elements listed above, including "row", "column", or even another
"grid".</li>
</ul>
</li>
</ul>
<p>The "gridx" and "gridy" attributes of a grid item specify the location of that item
within the grid. A value of gridx="0" puts the item in the leftmost column. A value of
gridy="0" puts the item in the topmost row. Other attributes to control the format of the
grid items are available and are documented in the <a href=
"https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html" target=
"_blank">Java&reg; GridBagLayout Tutorial</a>.</p>
<ul>
<li>Attributes of "grid" apply to all items in the table.</li>
<li>Attributes of "griditem" apply to only that item and override any equivalent
attribute of "grid".</li>
<li>Both numeric and named constant values (as specified by the <a href=
"https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html" target=
"_blank">documentation</a>) can be used.
</li>
<li>Two extra named constant values are available for "gridx" and "gridy":</li>
<li style="list-style: none">
<ul>
<li>"CURRENT" is the value from the last added "griditem" (i.e. the same row or
column).</li>
<li>"NEXT" is one more than the value from the last added "griditem" (i.e. the next
row or column).<br>
("NEXT" is actually a synonym for "RELATIVE".)</li>
</ul>
</li>
<li>The "insets" attribute is specified as insets="top,left,bottom,right" where "top"
etc. are integers.</li>
<li>A "griditem" can span more than one grid cell. Attributes "gridwidth" and
"gridheight" control this.</li>
<li>By default grid items clump together in the centre of a container. Attribute
"weightx" can override this and left/right justify.</li>
<li>It is possible in some circumstances to omit either or both of "gridx" and "gridy"
from a "griditem" and specify a default value in "grid". See <a href=
"https://github.com/JMRI/JMRI/blob/master/xml/decoders/esu/v4fnOutPane.xml" target=
"_blank">xml/decoders/esu/v4fnOutPane.xml</a> for an example of this usage to generate
a simple single-column right-aligned grid. (However if you are not careful with use of
this technique and/or the "RELATIVE" constant, results can be bizarre.)
</li>
<li>Unfortunately "ipadx", "ipady" and "insets" allocate space even if the enclosed
display variable(s) fail qualification. A workaround is to qualify the whole "griditem"
enclosing the variable (if that is appropriate to the situation).</li>
</ul>
<p>For an example of Grid Layout use (with some explanations of attributes used), see
<a href="https://github.com/JMRI/JMRI/blob/master/xml/decoders/esu/v4soundPane.xml"
target="_blank">xml/decoders/esu/v4soundPane.xml</a>. The LokSound Select (and V4)
definitions use this file.</p>
</dd>
<dt class="left">Installing your new programmer</dt>
<dd>
<p>All of the .xml files in the "programmers" subdirectory will appear in the selection
box when you create a new programmer in DecoderPro. To use your new file, just put it in
the "programmers" subdirectory of the "prefs" directory and select it. You don't have to
restart the program, as the list is remade each time you open a new programmer
window.</p>
</dd>
</dl>
<h3 id="id">How variables in a decoder file match up with the programmer file</h3>
Each decoder file defines <a href="CreateDecoder.shtml#variable">variables</a> that describe
specific controls within the decoder. The programmer file then describes how to place those
on panes so that the user can find and manipulate them.
<p>Each "display" element in the programmer file defines one thing to show. But which one?
That's controlled by the "name" attribute of the "display" element. DecoderPro takes that
"name" and looks through the decoder definition for a "variable" element that has either the
same "item" or "label" attribute.</p>
<p>This has some nice effects:</p>
<ol>
<li>The "name" in the "display" element is effectively a "standard name", that can be used
in decoder definition files from different manufacturers. Since this is separate from
the "label" on the decoder variable, it's possible to have a generic programmer file that
works for many types of different decoders, while still displaying specific variable names.
For more on this, please <a href="#display">see above</a>.
</li>
<li>It lets you use very generic names to control where somewhat different things go. For
example, different sound decoders provide different controls. One might have "Airpump",
while another doesn't have that at all, and instead has "Brake Squeal". We don't want to
have the programmer files contain zillions of "display" elements to handle every possible
option. Instead, we use elements with more generic names, like "Sound Option 1", for the
display name.
<p>The decoder definition then has a "label" of "Airpump" or whatever, and an "item" of
"Sound Option 1". Everything matches up properly, and "Airpump" appears on the computer's
screen.</p>
</li>
</ol>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
+325
View File
@@ -0,0 +1,325 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - Rosters</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI: DecoderPro User Guide</h1>
<div class="flex-container">
<div class="flex-item-70">
<h2>Rosters</h2>
<p>Reading the contents of a decoder generally takes a long time, and with some command
stations it's not even possible. The JMRI Roster stores the known values of decoder
configuration values to make it unnecessary to read them from the decoder. It can contain
"Roster entries" for an unlimited number of individual locomotives. Stationary
decoders which are configurable using a decoder definition xml file can be added too.</p>
</div>
<div class="flex-item-30">
<img src="images/DP5Roster.png" class="floatRight" alt="roster window">
</div>
</div>
<p>Each Roster entry has an "identifier" (Roster ID/ID column) by which it's known. This is your name
for it. When the program wants you to select a Roster entry, it will ask you to pick from a
selection box or menu containing Roster entry IDs. You can use anything you want for this as long it is unique
in the roster: Road number, type, even "That crummy old model I need to repaint" or "My beautiful
Shay".</p>
<h3>Roster Entry</h3>
<p>When you first open a JMRI programmer, you'll see a "Create New Loco" pane.<br>
Select a decoder from the tree, or click <strong>[Read type from decoder]</strong>
(only works on the programming track/Service Mode). The pane will expand:</p>
<div class="flex-container">
<div class="flex-item-30">
<img src="images/DP4StartScreen1.png" alt="new loco pane - Select decoder">
</div>
<div class="flex-item-70">
<img src="images/DP4StartScreen2.png" alt="new loco pane - Create Basic Roster Entry">
</div>
</div>
<p>The <em>Create Basic Roster Entry</em> area appearing on the right allows you to
edit the following items:</p>
<dl>
<dt>Roster ID</dt>
<dd>
Your name for the new roster item, see above. You can change an entry's ID later, in
which case it will appear in new selection boxes, etc. with the new ID name.</dd>
<dt>Active DCC Address</dt>
<dd>This is either a Short or Long Address, based on how the decoder is configured.</dd>
<dt>Buttons</dt>
<dd><strong>[Read]</strong> the information from a decoder with this address<br>
<strong>[Write]</strong> changes to that decoder or<br>
<strong>[Save]</strong> this new entry to disk without contacting the decoder at this
point, to work on it later.
</dd>
</dl>
<p>Click the <strong>[Open Comprehensive Programmer]</strong> button at lower right to continue.
Note that the program may warn this is not possible for some set-ups. In that case, click
Save and close the pane. Your new item will appear as a line in the Roster table.<br>
In case DecoderPro can open the Comprehensive Programmer, you will see a row of tabbed panes
with additional properties, many of which can be edited in place:</p>
<img src="images/DP4ComprehensiveTabs.png"
alt="DP Comprehensive Programmer tabs">
<dl>
<dt>Roster Entry pane</dt>
<dd>
The "Front Page" of a loco and its decoder:
<img src="images/DP5RosterEntryPane.png"
alt="DP5 Roster Entry screen">
<ul>
<li>ID<br>
Fix here if you made a typo while creating the entry.
</li>
<li>Road Name</li>
<li>Road Number</li>
<li>Manufacturer</li>
<li>Owner</li>
<li>Model<br>
Either the prototype model or the scale model product number, useful sorting your roster</li>
<li>DCC Address<br>
display only, editable on the Basic tab</li>
<li>Throttle Speed Limit</li>
<li><a href="#loco_data">Locomotive Data</a><span class="since">since 5.15.4</span></li>
<li>Comment<br>
Use this field for whatever you want.</li>
<li>Decoder Family</li>
<li>Decoder Model</li>
<li><span class="since">since 5.11.5</span>Programming Mode(s)<br>
These three fields are filled in based on the decoder that was selected when the entry
was created. They can't be edited later.</li>
<li>Decoder Comment<br>
You can put anything you want here. Some people have used it to record whether an NMRA
plug was used, whether the decoder was soldered in, etc.</li>
</ul>
</dd>
<dt>Basic pane</dt>
<dd>
Shows additional information about your Locomotive: Active DCC address, normal front
driving direction etc.
</dd>
<dt>Motor pane</dt>
<dd>
Adjust Acceleration, Deceleration etc.
</dd>
<dt>Basic Speed Control and Speed Table panes</dt>
<dd>
Simply set a start voltage or detailed Speed Steps to tune driving character of the loco.
</dd>
<dt>More panes...</dt>
<dd>
The information on some tabs depends on the decoder that was selected in step 1.<br>
Depending on your Preferences &gt; Roster &gt; Programmer settings, empty tabs may be hidden.
</dd>
</dl>
<h3 id="menu">The DecoderPro Menus</h3>
<div class="flex-container">
<div class="flex-item-30">
<img src="images/DP5FileMenu.png" alt="DecoderPro File menu">
</div>
<div class="flex-item-30">
<img src="images/DP5SettingsMenu.png" alt="DecoderPro Settings menu">
</div>
<div class="flex-item-30">
<img src="images/DP5RosterMenu.png" alt="PanelPro Roster menu">
</div>
</div>
<p>In addition to the buttons around the Roster table, the JMRI application main windows and
the DecoderPro windows have 3 menus that allow working with the application: File, Settings and
Roster. The latter is also available in PanelPro, and allows you to open the Roster by picking
the first item, appropriately named "Roster". Let's look at the Roster menu items:</p>
<dl>
<dt id="create">Create Entry...</dt>
<dd>Used to create a new Roster entry, even if you don't currently have a
connection to a layout. When you select this, you're given a window in which to select a
decoder type. Pick the correct decoder type, the format you want, and click "Open". You'll
see a DecoderPro-style window for changing the contents of the new entry. Don't forget to
click "Save to Roster" when you're done! The "New Loco" button is an alternative.
</dd>
<dt id="edit">Edit Entry...</dt>
<dd>Used to update the contents of a Roster entry, even when you don't have a
layout connection (normally, if you do have a layout connection, you'll use the DecoderPro
programming functions). First select an entry in the Roster table. You'll get a
DecoderPro-style window for viewing and changing the contents of the entry. Don't forget to
click "Save to Roster" when you're done! The "Program..." button works as an alternative.
</dd>
<dt id="copy">Copy Entry...</dt>
<dd>Used to create another Roster entry identical to the original except for its ID.
If you have a standard setup you'd like to use for new locomotives, you can
create a Roster entry with all the right values filled in, and then copy it every time you
want to program a new locomotive. A right click on a roster entry is an alternative.
</dd>
<dt id="import">Import Entry...</dt>
<dd>
The combination of "Export" then "Import" allows you to bring a locomotives Roster entry
when you move to another layout, with its own DecoderPro installation.<br>
When you select "Import Entry...", you'll be asked to locate an XML file to import. It
should have been created by an "Export Entry..." command. You'll also be asked for the ID
of the new Roster entry to be created. This can be the same as it was before it was exported,
or you can give it a new ID.
</dd>
<dt id="export">Export Entry...</dt>
<dd>
Although it is possible to find the XML files defining Roster entries in the preferences
directory, it's better not to mess with them directly. The "Export" command will create a
new file representing a Roster entry, including all comments, CV values, etc. You
can then take that to another copy of DecoderPro and import it into that Roster. Export
does not change your current Roster in any way, it just makes a copy for you of a
specific entry.<br>
When you select "Export Entry...", you'll be prompted to select a new filename. You can call it
anything you want, but it's best to put a ".xml" extension on the name.
</dd>
<dt id="delete">Delete Entry...</dt>
<dd>
This completely removes a Roster entry. You're asked once if you're sure and a backup is
made, in case of mistakes. A right click on a roster entry to see an alternative method.
</dd>
<dt id="summary">Print Summary...</dt>
<dd>
Prints a summary of the entire Roster, showing the primary information for each
entry as a separate text block.<br>
For a more detailed listing of a specific decoder, see the "File" menu on the
programmer screens.
</dd>
<dt id="list">Print List...</dt>
<dd>
Prints a summary of the entire Roster, presenting the primary information for each
entry in a very compact, paper saving table format.
</dd>
<dt id="previewsummary">Print Preview Summary...</dt>
<dd>
Shows the contents of the summary on your screen, so you can preview it before printing.
</dd>
<dt id="previewlist">Print Preview List...</dt>
<dd>
Shows the contents of the list on your screen, so you can preview it before printing.
</dd>
<dt id="rostergroups">Roster Groups</dt>
<dd>
A more advanced feature to categorize and
<a href="../../../manual/DecoderPro/Main_RosterGroup.shtml">group Roster Entries</a> into sets,
so that you can work on a subset.
</dd>
</dl>
<h3 id="loco_data"><span class="since">since 5.15.4</span>Locomotive Data</h3>
<p>The <strong>Locomotive Data</strong> pane is used to maintain non-decoder information that
is related to the current roster entry. This tab will only be shown when the
<strong>Locomotive Data</strong> checkbox is enabled.</p>
<p>The initial set of locomotive data consists of a set of physical characteristics that affect
locomotive acceleration and deceleration. The first application that makes use of this data
is <strong>Dispatcher</strong>.</p>
<h5>Locomotive Physics Data</h5>
<img src="images/physics_data.png"
alt="Locomotive physics data">
<dl>
<dt>Traction type</dt>
<dd>
<p>Whether the locomotive/railcar/unit is powered by steam; or diesel or electric.
This affects physics performance as steam locomotives behave differently (being constant
force machines).</p>
</dd>
<dt>Transmission</dt>
<dd>
<p>If <strong>Mechanical transmission</strong> is selected, the vehicle will pause its
acceleration at certain points for the driver to change gears.</p>
</dd>
<dt>Locomotive weight</dt>
<dd>
<p>Enter a value and select the unit of measure: <strong>Metric tonnes (t)</strong> |
<strong>Long tons (UK)</strong> | <strong>Short tons (US)</strong>.</p>
</dd>
<dt>Continuous power</dt>
<dd>
<p>Enter a value and select the unit of measure: <strong>kW</strong> | <strong>HP</strong>.</p>
</dd>
<dt>Tractive effort</dt>
<dd>
<p>This is the starting tractive effort. Enter a value and select the unit of measure:
<strong>kN</strong> | <strong>lbf</strong>.</p>
</dd>
<dt>Maximum speed</dt>
<dd>
<p>Enter a value and select the unit of measure: <strong>km/h</strong> | <strong>MPH</strong>.</p>
</dd>
<dt>Calibrate speed</dt>
<dd>
<p>The physic values are only used when a
<a href="../../../package/jmri/jmrit/roster/swing/speedprofile/SpeedProfileFrame.shtml">Speed Profile</a>
is also being used. The <strong>Speed profile&hellip;</strong> button provides a shortcut
to the speed profiling tool.</p>
</dd>
</dl>
<p>Use the <strong>Save to Roster</strong> button to save the changes to the values.</p>
<p>The <strong>Roster custom attributes</strong> feature is used to store the
<strong><em>unit of measure</em></strong>
selections. Custom attributes automatically add a column to the roster table. Right click on
the table header row to <strong>show/hide</strong> columns. <strong>Note:</strong> Custom
attributes are accessed using the <strong>Labels &amp; Media&hellip;</strong> button. Then
select the <strong>Roster Media</strong> tab.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro - Roster File Details</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Roster File Details</h2>
<p>The Roster information presented in the selection box, and used for automatic selection of
a Locomotive, is stored in a number of individual files. You can find their location by
choosing "File Locations" from the main JMRI Help menu. Click the "Open Roster Location" button to
open the directory in Finder/Explorer. More information is available on the <a href=
"Files.shtml#location">"Configuration Files" Help page</a>. You should only use the Roster
menu to manipulate the Roster file, to ensure that it stays self-consistent.</p>
<p>To move the entire Roster to another computer, choose "Export Complete Roster" from the
File menu, select a location to save the file, move that file to the other computer, then
choose "Import Complete Roster" from the menu to import it there.</p>
<p>To do this manually at the file level, there will be a file called "roster.xml", and a
directory called "roster". You need to move the "roster.xml" file, the "roster" directory,
and all its contents. Read more about the <a href="../../setup/Files.shtml">JMRI
Configuration Files</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,34 @@
<!-- Sidebar.shtml -->
<!-- Common sidebar for html/apps/[subdirectory] pages, mimics html/apps/Sidebar.shtml -->
<!-- NOTE: each subdirectory MUST have a SidebarAppLocalPart.shtml -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<!-- To include specific sidebar info for this subdirectory... -->
<!--#include virtual="SidebarAppLocalPart.shtml" -->
<!--#include virtual="/help/en/parts/SidebarApplications.shtml" -->
<!--#include virtual="/help/en/parts/SidebarTools.shtml" -->
<!--#include virtual="/help/en/parts/SidebarLayoutAutomation.shtml" -->
<dt><a href="/help/en/html/hardware/index.shtml">Supported hardware</a></dt>
<dd>JMRI supports a wide range of devices, DCC systems, command stations, networks, and protocols.</dd>
<!-- If someday we want to show the whole list, use #include virtual="/help/en/parts/SidebarSupportedHardware.shtml" -->
<!--#include virtual="/help/en/parts/SidebarInstall.shtml" -->
</dl>
<!--#include virtual="/help/en/parts/SidebarTail.shtml" -->
</div> <!-- close #side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /Sidebar.shtml -->
@@ -0,0 +1,30 @@
<!-- SidebarAppLocalPart.shtml -->
<!-- This is the local part sidebar definition for html/apps/DecoderPro pages -->
<dt class="dtheader">DecoderPro&reg;</dt>
<dd>
<ul>
<li><a href="./Tour.shtml">Quick Tour</a></li>
<li><a href="./MoreInfo.shtml">Some Details</a></li>
<li><a href="./Files.shtml">Configuration Files</a></li>
<li><a href="./Roster.shtml">Working with the Roster</a></li>
<li><a href="./FAQ.shtml">FAQ</a></li>
<li><a href="../../setup/index.shtml">JMRI Setup</a></li>
</ul>
</dd>
<dt class="dtheader">Advanced</dt>
<dd>
<ul>
<li><a href="./IntroXML.shtml">Intro to XML files</a></li>
<li><a href="./CreateDecoder.shtml">Create your own decoder definition</a></li>
<li><a href="./Programmer.shtml">Create a custom programmer definition</a></li>
<li><a href="./RosterFile.shtml">Store/update a Roster</a></li>
<li><a href="./LocoFile.shtml">Locomotive (Roster) files</a></li>
<li><a href="../Debug.shtml">Debugging</a></li>
<li><a href="./NetworkFiles.shtml">Sharing Rosters among computers</a></li>
<li><a href="./FileUpdate.shtml">Updating decoder definitions</a></li>
</ul>
</dd>
<!-- /SidebarAppLocalPart.shtml -->
+298
View File
@@ -0,0 +1,298 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008, 2022 -->
<title>JMRI: DecoderPro - Tour</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>A Short Tour</h2>
<p>This tour demonstrates DecoderPro version 5.1.3. Version 4 works similarly.</p>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/DP5Start.png"><img src="./images/DP5Start.png"
alt="DecoderPro 5 welcome screen"></a>
</div>
<div class="flex-item-70">
<h3>Start DecoderPro</h3>
When you first open DecoderPro, the main window will show. Read the steps and click
the "New Loco" button to start adding your first decoder. (This assumes you have already
<a href="../../hardware/index.shtml">connected</a> your computer to your layout and
have a locomotive on your programming track)
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/SelDecoder5.png"><img src="./images/SelDecoder5.png"
alt="Decoder Identification"></a>
</div>
<div class="flex-item-70">
<h3>Decoder and Programmer selection</h3>
<p>You'll get a new window to configure the programmer with information about a
specific type of decoder, or an existing locomotive. This will become your locomotive
roster as you program your decoders</p>
<p>To start working with a newly-installed decoder, click the "Read type from decoder" button
to have the programmer read the decoder and attempt to identify it. (You could also
explicitly tell the programmer the decoder type by selecting it from the "Decoder Installed"
list)</p>
<p>While the programmer is talking to the decoder, status will be displayed at the
bottom of the window; "Idle" or "OK" means that things are working. Number codes will point out
<a href="../Errors.shtml">errors</a>.<br>
If it succeeds, it will select the decoder model in the selection box. Usually it will only be
able to narrow the selection down to a few choices. Check that the right model is selected
in the "Decoder Installed" list; update the selection if desired.</p>
<p>Some people prefer a very plain programmer, and some want to have access to every
feature. To handle this, DecoderPro provides several programming interfaces which you can set in your
Preferences under Roster > Programmer:</p>
<ul>
<li>Basic - A simple one, with just the most popular information such as address and user info.</li>
<li>Comprehensive - The most complete display, with multiple panes of detailed
information.</li>
<li>Advanced - Adds advanced panes to the Comprehensive Programmer.</li>
<li>Registers - Complete configuration for a register-only decoder</li>
<li>Sample Club - A sample of how a club might define their own programmer format
that shows just their set of required variables</li>
<li>TrainShowBasic</li>
<li>Tutorial - Not useful for actually programming decoders, this contains examples
of how various special effects can be obtained when you're constructing your own
programmer.</li>
<li>ESU</li>
<li>Zimo - Adds a Zimo Specific tab to access special elements in their decoders.</li>
<li>Custom - You can even define your own programmer if you'd prefer to just see the variables
you use. </li>
</ul>
<p>For now, we stay with the "Comprehensive Programmer".</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="images/DP4StartScreen2.png"><img src="images/DP4StartScreen2.png"
alt="Create Roster Entry"></a>
</div>
<div class="flex-item-70">
<h3>Creating an entry</h3>
<p>After a single decoder is selected in the listing on the left, the right-hand side will open and
allow entering a unique roster ID and the (current) decoder address.</p>
<p>Continue by clicking "Open Programmer".</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/EditLoco5.png"><img src="./images/EditLoco5.png"
alt="Open Roster Entry"></a>
</div>
<div class="flex-item-70">
<h3>Filling it in</h3>
<p>You will be presented a new pane, opening on the first tab "Roster Entry".<br>
Enter any information on the locomotive model and the decoder installed. None of this is
programmed in the decoder, except for the Address, but you can't change it here. Still,
you can keep some notes here to track your model's internals.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/BasicPane5.png"><img src="./images/BasicPane5.png"
alt="Comprehensive Programmer Basic pane"></a>
</div>
<div class="flex-item-70">
<h3>Programmer Details</h3>
<p class="dl">Each of the tabs opens a new screen you can use to configure different
aspects of the decoder. The "Basic" pane handles the address and other settings you'll
need to start.</p>
<p class="dl">Using the buttons -- On the bottom of each screen are buttons that will
read values from or write values to the decoder. For example, to do a basic
configuration, enter values in the fields and click <code>Write sheet</code>. The
variable fields are color coded to represent their states:</p>
<dl>
<dt style="background:orange;">Edited</dt>
<dd>You've changed this value, or it contains default values from the decoder file.
This is shown as black numbers on an orange background, since the value differs from what's
expected or last seen in the decoder.</dd>
<dt style="background:yellow;">From File</dt>
<dd>The field contains values read from a locomotive file. This is shown on yellow,
since we're not certain that the file agrees with the decoder contents.</dd>
<dt style="background:white;">Read</dt>
<dd>The value shown has been read from the decoder. This is shown as white to
indicate that the value is trustworthy.</dd>
<dt style="background:white;">Stored</dt>
<dd>The value show has been written to the decoder. This is also shown as
white.</dd>
<dt style="background:red;">Unknown</dt>
<dd>If something goes wrong with the read or write process, we might have a
completely untrustworthy result. This results in the variable's state being marked
as UNKNOWN and shown on a red background.</dd>
</dl>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/SpeedTable5.png"><img src="./images/SpeedTable5.png"
alt="Speed table"></a>
</div>
<div class="flex-item-70">
<h3>Examples</h3>
<p>For example, after a "Read" the speed table values are shown on white in the first
image, while in the second image it shows that when you modify a value, it's marked on
yellow. Doing a write will set the color back to white; doing a read will reset the number to
the value in the decoder, and also reset the field to white.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/FnMap5.png"><img src="./images/FnMap5.png" alt="Function Mappings"></a>
</div>
<div class="flex-item-70">
<h3>Complex interactions - Function Mappings</h3>
<p>Although having a name for an entire CV is nice, where this really helps is with
complicated bit-mapped options. Digitrax FX lighting options, for example, require
configuring two sets of bits into one CV. Another example is configuring a Soundtraxx
decoder's mapping between functions and sounds. This involves bits and values spread
across a dozen different CVs, but DecoderPro turns that configuration job into simple
checking of boxes.</p>
<p>Each selection box, checkbox or radiobutton is mapped to specific bit(s) in the
decoder's CVs. The programmer handles the reading and writing of the CVs when the
individual settings are changed. Instead of bits, you're working with the name or
description from the decoder manual.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/Digitrax5.png"><img src="./images/Digitrax5.png" alt="Digitrax DH142"></a>
</div>
<div class="flex-item-70">
<h3>Decoder-specific programmer Panels</h3>
<p>DecoderPro is meant to be easily configurable to add new types of decoders. You
can also add programmer sheets, change their layout, and even redo the entire
appearance. To do that, DecoderPro is driven by human-readable files in XML format.
Read how to do that <a href="CreateDecoder.shtml">here</a>.</p>
<p>These files make it convenient to update DecoderPro to work with a new decoder.
For example, the unique capabilities of a Digitrax DH142 decoder appear on the
"Digitrax" tab.</p>
<p>Additional decoder-specific variables and sheets can be added via configuration
files. By choosing an industry-standard XML format for decoder information, we hope
to make it possible to create a complete library. Perhaps we can even interest
manufacturers in documenting their products in this format.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/CvTable5.png"><img src="./images/CvTable5.png" alt="CV Programmer"></a>
</div>
<div class="flex-item-70">
<h3>Direct CV Programming</h3>
<p>It is also possible to program the CVs directly using the CV Programmer. The "Read"
and "Write" buttons allow you to work with individual CV contents. Changes made here
will also update any associated values found on other programmer tabs.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<a href="./images/DP5Roster.png"><img src="./images/DP5Roster.png" alt="The Roster"></a>
</div>
<div class="flex-item-70">
<h3>Locomotive Roster</h3>
<p>DecoderPro maintains a Roster of your locomotives. You can save the decoder
configuration, and then later work with the stored CV values instead of having to
read them from the decoder. This saves the time it takes to read a complete decoder,
which can be quite long. The roster can also store locomotive information for you.
</p>
<p>From the DecoderPro main screen, you can select a specific locomotive to work on by
selecting it from the Roster list and then clicking the "Program..." button.
The programmer opens with the current values already present on the "Roster Entry" sheet.
After you made changes and wrote them to the decoder, click "Save to Roster" to store the
roster information to a file on your computer's local disk; you'll be reminded to do this
if you close the programmer with any unstored information.</p>
<p>For more info, see <a href="./Roster.shtml">Roster Help</a>.</p>
</div>
</div>
<div class="flex-container">
<div class="flex-item-30">
<img src="./images/DP5FileMenu.png" alt="The File Menu">
</div>
<div class="flex-item-30">
<img src="./images/DP5SettingsMenu.png" alt="The Settings Menu">
</div>
<div class="flex-item-30">
<img src="./images/DP5RosterMenu.png" alt="The Roster Menu">
</div>
</div>
<p>A combination of menus allow you to access and manipulate your roster entries.<br>
For example, you can print the information for a selected roster entry by choosing "Print Roster
&gt; Selected Entry" from the File menu.</p>
<h2>More Info</h2>
<p>For information on how to set up and use DecoderPro, please see <a href="index.shtml">the
DecoderPro User Guide</a>.</p>
<p>Here's more information on <a href="MoreInfo.shtml">how DecoderPro works</a> and
<a href="CreateDecoder.shtml">how to add a new Decoder Type</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- close #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,501 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: DecoderPro User Guide - Use XSLT Transformation for complex decoders File</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Use XSLT Transformation for complex decoders</h2>
<p>Some decoders contain <strong>repeated blocks</strong> of CVs, for example to define
behaviour of several accessories, each controlled by multiple CVs. An advanced turnout
decoder may for example define multiple paths, each containing several turnouts and their
desired position to form the travel path on the layout.</p>
<p>Although the decoder file must define dozens or even hundreds of CVs and their appearance
on panes in total, only a fraction of the CVs or displays are actually unique: the rest can
be <strong>generated from a template</strong>. While creating template, and the
transformation recipe is <strong>a lot more complex</strong> than copy-pasting CV
definitions, the benefit is <strong>a lot easier maintenance</strong> once the hard part is
done: each change propagates consistently to all generated parts.</p>
<p>To give some example of simplification possible - let's take the decoder file
<code>Public_Domain_dccdoma_ARD_SCOM_MX.xml</code>. It configures a decoder, capable of
displaying signal aspects on several signal masts. The configuration contains over 500 of CVs
- yet the basic idea behind the configuration is dead simple:</p>
<ul>
<li>a default aspect for each signal mast</li>
<li>for each signal mast AND for each one of 32 possible aspects, the number of signal to
be displayed, interpreted by the decoder itself</li>
</ul>
<p>A few statistics:</p>
<ul>
<li>original decoder's definition: <strong>870 kByte</strong> 20608 lines.</li>
<li>stylesheet file: <strong>12 kByte</strong>, 257 lines.</li>
<li>decoder file template: <strong>18 kByte</strong>, 390 lines.</li>
</ul>
<p>For JMRI itself or the speed of DecoderPro operation, these two approaches are the same:
the file template is internally transformed (expanded) to the decoder definition XML and
processed as if it was written entirely by hand. For <strong>maintenance</strong>, it is a
way easier to maintain ~600 lines of XML than 20600.</p>
<p>JMRI provides an option to apply a <strong>XSLT stylesheet</strong> to a decoder file,
<strong>before</strong> the file is loaded into DecoderPro and before it is interpreted as CV
variables and panels. This allows to hand-write unique CV definitions and their panes, and
<strong>add generated</strong> content where appropriate.</p>
<h2>Example files</h2>
<p>To illustrate the techniques described here, a few example files are provided; all the
files are licensed under GNU GPL.</p>
<ul>
<li><strong><a href="resources/decoder-template.xml">decoder-template.xml</a></strong> -
the decoder definition <strong>template</strong></li>
<li><strong><a href="resources/scom.xsl">scom.xsl</a></strong> - the stylesheet</li>
</ul>
<p>The decoder template should be placed into the <strong>xml/decoders</strong> folder of the
JMRI installation. It is <strong>based on Petr Sidlo's dccdoma.cz - ARD-SCOM-MX
decoder</strong> - generates the same decoder panels as the original one (as of 12/2019). The
stylesheet (<strong>scom.xsl</strong>) should be placed also into
<strong><code>xml/decoders</code></strong> folder of the JMRI installation.</p>
<p>The template can be processed from the commandline to generate the decoder XML, so you can
inspect effects of changing the stylesheet and/or data embedded in the decoder template. The
commandline for Linux:</p>
<pre>
xsltproc scom.xsl decoder-template.xml &gt; decoder-gen.xml
</pre>
<p>Remember to replace the files with their actual names or locations; for experimenting from
the commandline, the best is to place the decoder file template AND its stylesheet to some
directory and work in there. Later, move the stylesheet and the template to the folders as
described above.</p>
<h2>Apply stylesheet to the decoder file.</h2>
<p>An <strong>instruction to process the file as a template</strong> must be present in the
file, in order to act like a template. Otherwise, JMRI would pick it as just "ordinary"
decoder definition - all the display items (see below) "misused" to hold data for template
processing would appear in the UI !</p>
<p>The processing instruction must appear at the start of the decoder definition:</p>
<pre>
&lt;?transform-xslt href="http://jmri.org/xml/decoders/scom.xsl"?&gt;
</pre>
<p>So the decoder template's header would look like:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;?transform-xslt href="http://jmri.org/xml/decoders/scom.xsl"?&gt;
&lt;decoder-config xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://jmri.org/xml/schema/decoder.xsd" showEmptyPanes="no" &gt;
&lt;decoder&gt;
...
</pre>
<h2>Provide metadata to the stylesheet</h2>
<p>One of the critical points is how to generate CV numbers or other variable parts: XSLT
language provides simple numeric computation, but more sophisticated functions are typically
not accessible (by default). Some generated content is composed from a list of strings (i.e.
signal aspect names are repeated for each signal masts), and we have to provide such input to
the stylesheet. The decoder file is <strong>the only input</strong> provided for the
stylesheet by the JMRI framework.</p>
<p>The decoder template file is <strong>still interpreted as a decoder definition</strong>
and must adhere strictly to the <code>decoder.xsd</code> XML schema. For parts that we want
to generate from the template, the prescribed elements have to be <strong>carefully
misused</strong> to provide</p>
<ul>
<li>anchor points, where the generated content will be inserted</li>
<li>input data for the stylesheet</li>
</ul>
<p>There is a number of ways how to approach the problem, I will present a way I see as more
or less clean (although it misuses elements to provide data different than they formally
should !). The guide should be seen as a recommendation to keep the generated decoders
somewhat consistent. Please <strong>do not hesitate to contribute and provide simpler
approaches</strong>.</p>
<h3>Adding Variables</h3>
<p>Just adding variables is simple, and requires <strong>no extra placeholder</strong> in the
decoder file. However, the <strong><code>&lt;variables&gt;</code></strong> element must be
present, so the technique described below for generating variables works. The element could
look like this example:</p>
<pre>
&lt;variables&gt;
&lt;variable CV="1" item="Short Address" default="100" &gt;
&lt;splitVal highCV="9" upperMask="XXXXXVVV" factor="1" offset="0" /&gt;
&lt;label&gt;Decoder Address:&lt;/label&gt;
&lt;tooltip&gt;Accessory decoder address. CV1 - LSB. CV9 - MSB.&lt;/tooltip&gt;
&lt;/variable&gt;
&lt;/variables&gt;
</pre>
<p>Additional generated content will be <strong>appended</strong> inside that element.</p>
<h3>Data holder pane</h3>
<p>While <strong><code>variable</code></strong> element's definition is rather strict, UI
definitions seems most relaxed, so we abuse them. The following section describes some
typical kind of data, how they can be <strong>represented</strong> in decoder template file,
so the text conforms to the mandatory <code>decoder.xsd</code> rules. And finally how they
can be <strong>accessed</strong> from the stylesheet.</p>
<p><strong>All the data</strong> (not UI panel definitions) will be placed in a
<strong>single &lt;pane&gt; element</strong>. All panes must be named - the name can be
arbitrary, but should be <strong>unique</strong> so a system-defined pane or a custom
<strong>real</strong> pane is not replaced accidentally. In our example,
<strong>__Aspects</strong> name is used. I recommend to prefix the panel name with two
underscores. The pane's name <strong>must be used</strong> in selectors - so if you invent
your own name, replace the text in examples with whatever name you choose.</p>
<h4>Passing root of the data</h4>
<p>Each time, a value needs to be read by the stylesheet, it must be
<strong>selected</strong> by an XPath expression. For example:</p>
<pre>
&lt;xsl:template name="generate-masts"&gt;
&lt;xsl:variable name="cvStart" select="string(//pane[name/text() ='__Aspects']/display[@item='mastcount']/@tooltip)"/&gt;
&lt;xsl:variable name="outputs" select="string(//pane[name/text() ='__Aspects']/display[@item='outputs']/@label)"/&gt;
&lt;xsl:for-each select="//pane[name/text() ='__Aspects']/display[@item='masts']/label"&gt;
...
&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;
</pre>
<p>The selector always contains the common prefix part, which finds the "data holder" pane
within the decoder template file. We can save the typing by passing that element as a
<strong>parameter</strong>:</p>
<pre>
&lt;xsl:template name="generate-masts"&gt;
&lt;xsl:param name="root"/&gt;
&lt;xsl:variable name="cvStart" select="string($root/display[@item='mastcount']/@tooltip)"/&gt;
&lt;xsl:variable name="outputs" select="string($root/display[@item='outputs']/@label)"/&gt;
&lt;xsl:for-each select="$root/display[@item='masts']/label"&gt;
...
&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;
</pre>
<p>The invocation of such a generating template <strong>must pass the parameter</strong>:</p>
<pre>
&lt;xsl:call-template name="generate-masts"&gt;
&lt;xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/&gt;
&lt;/xsl:call-template&gt;
</pre>
<p>Note the strange suffix. This is because the display items can not be nested directly in
the <strong>pane</strong> element, they have to be in some kind of column, row, group etc.
The strange selector at the end will find <strong>first nested display element</strong> and
will take its <strong>parent element</strong> as the data root.</p>
<p>A <strong>global variable</strong> can be defined in a similar way - place this element
directly as top-level element in the stylesheet:</p>
<pre>
&lt;xsl:variable name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/&gt;
</pre>
<p>The templates can now reference the root of data by just <strong>$root</strong>
expression.</p>
<h4>Constants, max/min values, single values</h4>
<p>A constant can be used, e.g. as a maximum count of items, specific CV number, ... I
recommend to use <strong>display</strong> element to define a constant. That element has two
free-form attributes: <strong>label</strong> and <strong>tooltip</strong>. So we can define
actually two constants in a single element! This can be useful, if there are values closely
tied together, for example. Constants, that define maximum number of aspects handled by the
UI and starting CV can be written as:</p>
<pre>
&lt;display item="mastcount" label="15" tooltip="128"/&gt;
</pre>
<p>The "<strong>mastcount</strong>" is an arbitrary (but unique) name. Name it so after the
value's meaning to your decoder. It will be used in <em>selectors</em> to access the value
like this:</p>
<pre>
&lt;xsl:variable name="cvStart" select="string($root/display[@item='mastcount']/@tooltip)"/&gt;
</pre>
<ul>
<li><strong>$root</strong> is the parameter / variable that contains root of the data.</li>
<li><strong>mastcount</strong> is the name of the <strong>display</strong> element - your
value.</li>
<li><strong>@tooltip</strong> means that the selector will read the
<strong>tooltip</strong> attribute. You may use @label to access the other one.</li>
</ul>
<h4>Enumerations, sequences, lists</h4>
<p>Sometimes a CV (variable, display item) should be generated for e.g. each output identified
by a name, or number. The list can be coded as a series of <strong>&lt;label&gt;</strong>
sub-elements of a <strong>&lt;display&gt;</strong> element:</p>
<pre>
&lt;display item="masts" tooltip="512"&gt;
&lt;label&gt;0&lt;/label&gt;&lt;label&gt;1&lt;/label&gt;&lt;label&gt;2&lt;/label&gt;&lt;label&gt;3&lt;/label&gt;&lt;label&gt;4&lt;/label&gt;&lt;label&gt;5&lt;/label&gt;&lt;label&gt;6&lt;/label&gt;&lt;label&gt;7&lt;/label&gt;
&lt;label&gt;8&lt;/label&gt;&lt;label&gt;9&lt;/label&gt;&lt;label&gt;10&lt;/label&gt;&lt;label&gt;11&lt;/label&gt;&lt;label&gt;12&lt;/label&gt;&lt;label&gt;13&lt;/label&gt;&lt;label&gt;14&lt;/label&gt;&lt;label&gt;15&lt;/label&gt;
&lt;/display&gt;
</pre>
<p>We then may either iterate those items one by one, or access them by index/position as
needed. The following examples selects the <strong>masts</strong> data item under the data
root (see above for data root). For <strong>each of the items</strong> it calls another
template (not shown here), and passes the item's value (encoded into the label element
content) to the template as <strong>mast</strong> parameter:</p>
<pre>
&lt;xsl:template name="generate-panes"&gt;
&lt;xsl:param name="root"/&gt;
&lt;xsl:for-each select="$root/display[@item='masts']/label"&gt;
&lt;xsl:variable name="mast" select="string(./text())"/&gt;
&lt;xsl:call-template name="mast-pane"&gt;
&lt;xsl:with-param name="root" select="$root"/&gt;
&lt;xsl:with-param name="mast" select="$mast"/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;
</pre>
<p>Note, that element <strong>content</strong> is used as a value here - this allows to use
all awkward characters like quotes, doublequotes, "&gt;" and other chars not permitted in
attributes.</p>
<p>Individual items may be accessed by their index (which is passed as a parameter):</p>
<pre>
&lt;xsl:template name="generate-one-panes"&gt;
&lt;xsl:param name="root"/&gt;
&lt;xsl:param name="index"/&gt;
&lt;xsl:variable name="mast" select="string($root/display[@item='masts']/label[position() = $index]/text())"/&gt;
&lt;xsl:call-template name="mast-pane"&gt;
&lt;xsl:with-param name="root" select="$root"/&gt;
&lt;xsl:with-param name="mast" select="$mast"/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:template&gt;
</pre>
<p>You can easily use the above label list to make a loop from 1 to 15, which directly not
possible in XSLT. Instead of controlling the loop by a <em>control index variable</em>, we
control the loop by <em>the data that should apply in individual cycle iterations</em> and
derive the index variable from them. Here's the modified example:</p>
<pre>
&lt;xsl:template name="generate-panes"&gt;
&lt;xsl:param name="root"/&gt;
<strong>&lt;-- The loop count is controlled by the number of <em>label</em> variables --&gt;</strong>
&lt;xsl:for-each select="$root/display[@item='masts']/label"&gt;
&lt;xsl:variable name="mast" select="string(./text())"/&gt;
&lt;xsl:call-template name="mast-pane"&gt;
&lt;xsl:with-param name="root" select="$root"/&gt;
&lt;xsl:with-param name="mast" select="$mast"/&gt;
<strong>&lt;-- We use the current label's element <em>position</em> to derive the
"loop control variable" value --&gt;</strong>
&lt;xsl:with-param name="index" select="./position()"/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:for-each&gt;
&lt;/xsl:template&gt;
</pre>
<h3>Cycles and loops</h3>
<p>XSLT language is a declarative one, and variables, once assigned, cannot be changed - so
it does not have a <strong>loop construct</strong> as most programming languages do.
Sometimes, a cycle can be more illustratively replaced by iteration over the content.
Sometimes it is not possible: truly some fixed number of iterations need to be done, such as
<strong>generating sequential CVs</strong> with the same structure - just the sequence number
and the represented function index will differ.</p>
<p>This can be done by <strong>tail recursion</strong>, which replaces loops by invoking a
template from that template itself. The only caveat is that the number of iterations is
<strong>limited</strong> to about 100 (?), before the stack space is exhausted. The example
can be found in <code><a href=
"https://github.com/JMRI/JMRI/blob/master/xml/decoders/TamValleyDepot_QuadLn_S_11.xsl">TamsValleyDepot_QuadLn_s_11.xsl</a></code>,
look for template <code>AllLEDGroups</code>:</p>
<pre>
&lt;xsl:template name="AllLEDGroups"&gt;
<strong>&lt;-- Use <em>select=""</em> attribute to pick an initial value for the cycle.
Applies if the template does not get parameter on (first) invocation --&gt;</strong>
&lt;xsl:param name="CV1" select="633"/&gt;
&lt;xsl:param name="CV2" select="513"/&gt;
&lt;xsl:param name="CV3" select="537"/&gt;
<strong>&lt;-- This is the loop's control variable --&gt;</strong>
&lt;xsl:param name="index" select="1"/&gt;
<strong>&lt;!-- next line controls count --&gt;</strong>
&lt;xsl:if test="24 &gt;= $index"&gt;
&lt;xsl:call-template name="OneLEDGroup"&gt;
&lt;xsl:with-param name="CV1" select="$CV1"/&gt;
&lt;xsl:with-param name="CV2" select="$CV2"/&gt;
&lt;xsl:with-param name="CV3" select="$CV3"/&gt;
&lt;xsl:with-param name="index" select="$index"/&gt;
&lt;/xsl:call-template&gt;
&lt;!-- iterate until done --&gt;
<strong>&lt;-- The <em>if</em> a few lines above makes sure, this <em>call-template</em>
will not be executed for i &gt; 24 --&gt;</strong>
&lt;xsl:call-template name="AllLEDGroups"&gt;
&lt;xsl:with-param name="CV1" select="$CV1 +1"/&gt;
&lt;xsl:with-param name="CV2" select="$CV2 +1"/&gt;
&lt;xsl:with-param name="CV3" select="$CV3 +2"/&gt;
<strong>&lt;-- Call itself, but with control variable one higher, therefore counting
the number of cycles--&gt;</strong>
&lt;xsl:with-param name="index" select="$index+1"/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:if&gt;
&lt;/xsl:template&gt;
</pre>
<h2>Creating the stylesheet</h2>
<h3>A boilerplate</h3>
<p>The template is likely to have some boilerplate instructions. The following declarations
should be at the top, defining how output will be generated:</p>
<pre>
&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
exclude-result-prefixes="db"&gt;
&lt;xsl:output method="xml" encoding="utf-8" indent="yes"/&gt;
&lt;xsl:strip-space elements=""/&gt;
&lt;xsl:preserve-space elements="text"/&gt;
&lt;/xsl:stylesheet&gt;
</pre>
<p>The following will <strong>copy elements, and their attributes</strong> to the output:</p>
<pre>
&lt;xsl:template match="@*|node()"&gt;
&lt;xsl:copy&gt;
&lt;xsl:apply-templates select="@*|node()"/&gt;
&lt;/xsl:copy&gt;
&lt;/xsl:template&gt;
</pre>
<h3>Generating content to the insertion points</h3>
<p>Variable definitions are usually generated by the stylesheet. Basic and fixed variables
should be provided, as usual, in the <code>&lt;variables&gt;</code> element. The stylesheet
can then <strong>append generated variables</strong> at the end:</p>
<pre>
&lt;xsl:template match="variables"&gt;
&lt;variables&gt;
&lt;xsl:copy-of select="node()"/&gt;
&lt;!-- call-template instructions, that generate the content; example follows --&gt;
&lt;xsl:call-template name="generate-masts"&gt;
&lt;xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/&gt;
&lt;/xsl:call-template&gt;
&lt;xsl:call-template name="generate-aspects"&gt;
&lt;xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/&gt;
&lt;/xsl:call-template&gt;
&lt;/variables&gt;
&lt;/xsl:template&gt;
</pre>
<p>Note that, in this example, the <code>pane</code> element with a special name
(<code>__Aspects</code>) is used as a holder for input data for generation. While
<code>//pane[name/text() == '__Aspects']</code> selects the data holder, the
<code>//display[position() = 1]/..</code> selects an element <strong>within</strong> the
holder pane XML element. <strong>Pay attention to typos</strong> in the strings, otherwise
the select clauses select empty data, and nothing - or invalid content - will be
generated.</p>
<p>For <strong>UI Panels</strong> I recommend to <strong>replace</strong> the data holder
with the sequence of generated panels. In my example, data is provided from panel named
<strong>__Aspects</strong>, which we definitely <strong>do not want</strong> to be displayed
in DecoderPro as it ... isn't any UI panel, after all. The following will
<strong>replace</strong> the data holder (a top-level Pane) with panels generated by the
stylesheet:</p>
<pre>
&lt;xsl:template match="pane[name='__Aspects']" priority="100"&gt;
&lt;!-- call-template instructions for individual groups of panels to be generated; example follows --&gt;
&lt;xsl:call-template name="generate-panes"&gt;
&lt;xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/&gt;
&lt;/xsl:call-template&gt;
&lt;/xsl:template&gt;
</pre>
<p>The <code>match</code> clause will react on the <code>__Aspect</code> data holder pane
element, but unlike the variables insertion point, <strong>no copy instruction is
present</strong>. So the old content will be thrown away (entire <code>&lt;pane&gt;</code>
element!), replaced by whatever elements the <code>call-template</code> instructions
generate.</p>
<h2>Using XML fragments</h2>
<p>If part of the generated content <strong>does not change</strong> from place to place, it
is possible to prepare it as a <strong>XML fragment</strong> to be included: it won't be a
part of XSL stylesheet with all those strange <em>xsl:xxx</em> instructions, but will stored
as a separate, small and clean bit of XML. This can be useful for <strong>choice
values</strong>, or even repeated <strong>UI panels</strong> without variable content. An
example of the usage is again in <code><a href=
"https://github.com/JMRI/JMRI/blob/master/xml/decoders/TamValleyDepot_QuadLn_S_11.xsl">TamsValleyDepot_QuadLn_s_11.xsl</a></code>.
(LedPaneHeader)</p>
<p>Individual variables are generates using <em>xsl:template</em>, but the value part, mostly
a <em>choice</em> is included from a separate file. Note that the <em>xi:include</em> will be
generated into the resulting XML, so it is the DecoderPro panel reader, who does the content
inclusion, not the generator. The template substitutes the variable parts of the
definition:</p>
<pre>
&lt;variable item="Aspect{$index} LED1 Out" CV="{$CV2}" mask="XXXVVVVV" default="0"&gt;
&lt;xi:include href="http://jmri.org/xml/decoders/tvd/LedOutput.xml"/&gt;
&lt;/variable&gt;
</pre>
<p>There are two important things. When using <em>xi:</em> prefix, that <strong>prefix must
be declared</strong> at the top of the document (maybe in any parent element, but
conventionally prefixes are collected at the start). Use exactly the same URL (attribute
value), otherwise the instruction won't be recognized.</p>
<pre>
&lt;xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude" <strong>-- this is the prefix declaration</strong>
&gt;
</pre>
<p>The second issue is that the <em>xi:include</em> must use URLs that JMRI is able to
<strong>resolve locally</strong>. Otherwise, the DecoderPro would attempt to download parts
of the definition from the Internet, which requires an online connection - and is slow. The
prefix <strong>http://jmri.org/xml</strong> is guaranteed to resolve to the
<strong>xml</strong> directory of your local JMRI installation. For more mapping, please see
other JMRI documentation.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- close #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
+88
View File
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 -->
<title>JMRI: Decoder - Decoder Information</title><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI: DecoderPro User Guide</h1>
<h2>Decoder Information</h2>
<p>The JMRI project has collected a large amount of information about DCC decoders, which it
makes publicly available in several ways. These are described on this page.</p>
<h2>Access to the information via the web</h2>
<p>Web pages are automatically created from the DecoderPro configuration files as part of
each release. These contain:</p>
<ul>
<li>
<a href="../../xml/XSLT/pages/DecoderId.html">Decoder identification CV values</a> used
by DecoderPro to identify the manufacturer and type of an unknown decoder.
</li>
<li>
<a href="../../xml/XSLT/pages/decoderIndex.html">Index to individual decoder pages</a>,
listed by manufacturer. This provides a one-page summary of the characteristics and CV
contents of the decoders.
</li>
<li>Selection guides listing <a href=
"../../xml/XSLT/pages/SelectionGuide.html#size">decoder size</a>, and by <a href=
"../../xml/XSLT/pages/SelectionGuide.html#electrical">decoder electrical
characteristics</a>.
</li>
<li>
<a href="../../xml/XSLT/pages/CVSummary.html">Combined summary of CVs for all
decoders</a>.<br>
Note that this is a <em>very</em> large page!
</li>
</ul>
<h2>Information in Comma-Separated-Values (CSV) format</h2>
<p>To make it easier to import into a spreadsheet or other program, these are also made
available as files in Comma-Separated-Values (CSV) format.</p>
<ul>
<li>
<a href="../../xml/XSLT/pages/decodersizes.csv">decodersizes.csv</a> Physical size for
each defined decoder
</li>
<li>
<a href="../../xml/XSLT/pages/cvsummary.csv">cvsummary.csv</a> CVs present in each
decoder
</li>
<li>
<a href="../../xml/XSLT/pages/decoderpower.csv">decoderpower.csv</a> Power limits and
connector by decoder
</li>
</ul>
<h2>XML files</h2>
<p>The definitive version of the data is in XML files. These can be obtained from any JMRI
distribution, or via the web at <a href="https://www.jmri.org/xml">https://www.jmri.org/xml</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

+129
View File
@@ -0,0 +1,129 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: DecoderPro Symbolic Programmer</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI: DecoderPro User Guide</h1>
<p>The JMRI libraries contain the DecoderPro application for programming DCC decoders. This page
introduces the current application and how you may use it.<br>
It assumes you have <a href="Install.shtml">installed JMRI</a> and
<a href="../../hardware/index.shtml">connected</a> your computer to your layout.</p>
<h2>Introduction</h2>
<p>Modern DCC decoders are complicated beasts to program. The simple idea of "put the address
in CV01" doesn't cope well when you program complicated functions using combinations of bit
patterns. A friendlier interface is needed. There are programs that provide better ways of
programming specific decoders. Unfortunately, they are limited to specific types of
computers, and only their authors can customize them for new types of decoders.</p>
<p>The DecoderPro symbolic programmer was developed to solve this. It supports a wide range of decoders and
manufacturers via a consistent set of screens. As decoders became more advanced, DecoderPro had to give you
acces to all those settings, but by clearly labelling them and grouping them into sets, and adding
interactive tooltips the developers support you a long way. Behind the scenes, DecoderPro is
configured using text files, so that it can be adapted to additional decoder types easily.<br>
It talks to the decoders using the JMRI programming interface, so that it can run on any computer and layout hardware
that JMRI has been ported to. It's freely available for download. And since the code is
available via open source on <a href="../../doc/Technical/getgitcode.shtml">GitHub</a>, if
you want to improve on it, you can.</p>
<h2 id="guide">DecoderPro User Guide</h2>
<dl class="toc">
<dt>
<a href="./Tour.shtml">Quick Tour</a>
</dt>
<dt>
<a href="./Roster.shtml">Working with the Roster</a>
</dt>
<dt>
<a href="./Install.shtml">Install</a>
</dt>
<dt>
<a href="./MoreInfo.shtml">How DecoderPro Works</a>
</dt>
<dt>
<a href="./Files.shtml">Configuration Files</a>
</dt>
<dt>
DecoderPro <a href="./FAQ.shtml">Frequently Asked Questions</a>
</dt>
<dt>
Older <a href="../../../manual/index.shtml">Manuals</a>
</dt>
</dl>
<h3>Advanced subjects</h3>
<dl class="toc">
<dt>
<a href="./IntroXML.shtml">Intro to XML files</a>
</dt>
<dt>
<a href="./CreateDecoder.shtml">Create your own decoder definition</a>
</dt>
<dt>
<a href="./Programmer.shtml">Create a custom programmer definition</a>
</dt>
<dt>
<a href="./RosterFile.shtml">How the Roster is stored; updating it by hand</a>
</dt>
<dt>
<a href="./LocoFile.shtml">Locomotive (Roster) files</a>
</dt>
<dt>
<a href="../Debug.shtml">Debugging</a>
</dt>
<dt>
<a href="./NetworkFiles.shtml">Sharing Rosters among Computers</a>
</dt>
<dt>
<a href="./FileUpdate.shtml">Updating Decoder Definitions</a>
</dt>
</dl>
<p>DecoderPro is also covered in Joe Fugate's <a href=
"https://trainmasters.tv/programs/basic-decoder-programming-with-jmri?categoryId=1694&permalink=tmtv-16-11-iv-previewmp4">TrainMasters.TV
video library, episode 2016-11.4</a>, as he shows how he used DP on his Siskiyou Line layout.</p>
<h2 id="decoderlisting">Decoder Information</h2>
<p>The JMRI project has compiled a lot of information about decoders from many manufacturers,
which we make freely available in several forms. To learn more, see the <a href=
"https://www.jmri.org/xml/XSLT/">Decoder Information page</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,392 @@
<?xml version="1.0" encoding="utf-8"?>
<?transform-xslt href="http://jmri.org/xml/decoders/scom.xsl"?>
<!-- Copyright (C) JMRI 2002, 2004, 2020 All rights reserved -->
<!-- $Id$ -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<decoder-config xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://jmri.org/xml/schema/decoder.xsd" showEmptyPanes="no" >
<version author="Petr Šídlo sidlo64@hotmail.com" version="1" lastUpdated="20181201"/>
<version author="Petr Šídlo sidlo64@hotmail.com" version="2" lastUpdated="20190220"/>
<version author="Petr Šídlo sidlo64@hotmail.com" version="3" lastUpdated="20190305"/>
<version author="Svata Dedic svatopluk.dedic@gmail.com" version="4" lastUpdated="20191211"/>
<!-- Accessory decoder -->
<!-- Description of circuit diagram https://sites.google.com/site/sidloweb/elektrika/22-uni16ard -->
<!-- Program description https://sites.google.com/site/sidloweb/elektrika/29-ard-scom-mx -->
<!-- e-shop http://dccdoma.eshop-zdarma.cz/ -->
<decoder>
<family name="dccdoma.cz" mfg="Public-domain and DIY" >
<model model="XSL - ARD-SCOM-MX" lowVersionID="10" highVersionID="19" productID="16843265" maxInputVolts="24V AC" maxTotalCurrent="0.2A peak 3.3A" numOuts="16" connector="other" />
</family>
<programming direct="yes" paged="yes" register="no" ops="no" />
<variables>
<variable CV="1" item="Short Address" default="100" >
<splitVal highCV="9" upperMask="XXXXXVVV" factor="1" offset="0" />
<label>Decoder Address:</label>
<label xml:lang="cs">Adresa dekodéru:</label>
<tooltip>Accessory decoder address. CV1 - LSB. CV9 - MSB.</tooltip>
<tooltip xml:lang="cs">Adresa dekodéru příslušenství. CV1 - LSB. CV9 - MSB.</tooltip>
</variable>
<variable CV="7" item="Decoder Version" readOnly="yes" >
<decVal/>
<label>Decoder Version:</label>
<label xml:lang="cs">Verze software:</label>
</variable>
<variable CV="8" item="Manufacturer" readOnly="yes" default="13" >
<decVal/>
<label>Manufacturer:</label>
<label xml:lang="cs">Výrobce ID:</label>
</variable>
<variable CV="15" item="Key" default="0">
<decVal/>
<label>Key:</label>
<label xml:lang="cs">Klíč:</label>
<tooltip>Key for lock. Universal key is 255.</tooltip>
<tooltip xml:lang="cs">Klíč k zámku. Univerzální klíč je 255.</tooltip>
</variable>
<variable CV="16" item="Lock" default="0">
<decVal/>
<label>Lock:</label>
<label xml:lang="cs">Zámek:</label>
<tooltip>Value other than 0 lock the decoder.</tooltip>
<tooltip xml:lang="cs">Jiná hodnota než 0 zamkne dekodér.</tooltip>
</variable>
<variable CV="34" item="Addressing" default="1">
<enumVal>
<enumChoice choice="NMRA"/>
<enumChoice choice="ROCO"/>
</enumVal>
<label>Addressing:</label>
<label xml:lang="cs">Adresování:</label>
<tooltip>ROCO addressing is NMRA addressing + 4.</tooltip>
<tooltip xml:lang="cs">ROCO adresování je NMRA adresování + 4.</tooltip>
</variable>
<variable CV="41" item="Aspect lag" default="4" >
<decVal min="0" max="255" />
<label>Aspect lag:</label>
<label xml:lang="cs">Zpoždění návěsti:</label>
<tooltip>Signal delay after the last command. lag × 0.128 s</tooltip>
<tooltip xml:lang="cs">Zpoždění zobrazení návěsti po poslením příkazu. zpoždění × 0,128 s</tooltip>
</variable>
<variable CV="42" item="Bit period" default="20" >
<decVal min="4" max="30" />
<label>Bit period:</label>
<label xml:lang="cs">Perioda bitu:</label>
<tooltip>Length of bit period in ms.</tooltip>
<tooltip xml:lang="cs">Délka periody bitu v ms.</tooltip>
</variable>
<variable CV="43" item="Start delay" default="24" >
<decVal min="0" max="255" />
<label>Star delay:</label>
<label xml:lang="cs">Zpoždění startu:</label>
<tooltip>Delay of decoder after switching on. delay × 0.128 s</tooltip>
<tooltip xml:lang="cs">Zpoždění zahájení činnosti dekodéru po zapnutí. zpoždění × 0,128 s</tooltip>
</variable>
<variable CV="44" item="Address order" default="0">
<enumVal>
<enumChoice choice="All successively" value="0" >
<choice xml:lang="cs">Všechny postupně</choice>
</enumChoice>
<enumChoice choice="Only even" value="1" >
<choice xml:lang="cs">Pouze sudé</choice>
</enumChoice>
</enumVal>
<label>Address order:</label>
<label xml:lang="cs">Pořadí adres:</label>
<tooltip>Use all addresses sequentially or only even.</tooltip>
<tooltip xml:lang="cs">Použití všech adres postupně nebo pouze sudé.</tooltip>
</variable>
<variable CV="47" item="ProductID1" readOnly="yes" default="1" >
<decVal/>
<label>Product ID #1</label>
<label xml:lang="cs">Výrobek ID #1:</label>
<tooltip>Product ID #1</tooltip>
<tooltip xml:lang="cs">Výrobek ID #1</tooltip>
</variable>
<variable CV="48" item="ProductID2" readOnly="yes" default="1" >
<decVal/>
<label>Product ID #2</label>
<label xml:lang="cs">Výrobek ID #2:</label>
<tooltip>Product ID #2</tooltip>
<tooltip xml:lang="cs">Výrobek ID #2</tooltip>
</variable>
<variable CV="49" item="ProductID3" readOnly="yes" default="2" >
<decVal/>
<label>Product ID #3</label>
<label xml:lang="cs">Výrobek ID #3:</label>
<tooltip>Product ID #3</tooltip>
<tooltip xml:lang="cs">Výrobek ID #3</tooltip>
</variable>
<variable CV="50" item="ProductID4" readOnly="yes" default="1" >
<decVal/>
<label>Product ID #4</label>
<label xml:lang="cs">Výrobek ID #4:</label>
<tooltip>Product ID #4</tooltip>
<tooltip xml:lang="cs">Výrobek ID #4</tooltip>
</variable>
<!-- Outputs ============================================================== -->
</variables>
<resets>
<factReset CV="8" default="1">
<label>Reset All CVs Settings 16×1</label>
<label xml:lang="cs">Reset všech CV Nastavení 16×1</label>
</factReset>
<factReset CV="8" default="2">
<label>Reset All CVs Settings 16×2</label>
<label xml:lang="cs">Reset všech CV Nastavení 16×2</label>
</factReset>
<factReset CV="8" default="3">
<label>Reset All CVs Settings 14×2 + 2×3</label>
<label xml:lang="cs">Reset všech CV Nastavení 14×2 + 2×3</label>
</factReset>
<factReset CV="8" default="4">
<label>Reset All CVs Settings 13×2 + 3×3</label>
<label xml:lang="cs">Reset všech CV Nastavení 13×2 + 3×3</label>
</factReset>
<factReset CV="8" default="5">
<label>Reset All CVs Settings 12×2 + 4×3</label>
<label xml:lang="cs">Reset všech CV Nastavení 12×2 + 4×3</label>
</factReset>
</resets>
</decoder>
<pane>
<!-- Pane Decoder ========================================================= -->
<name>Decoder</name>
<name xml:lang="cs">Dekodér</name>
<column>
<display item="Addressing" />
<display item="Address order" />
<display item="Start delay" />
<display item="Bit period" />
<display item="Aspect lag" />
<display item="Key" />
<display item="Lock" />
</column>
<column>
<display item="ProductID1" />
<display item="ProductID2" />
<display item="ProductID3" />
<display item="ProductID4" />
</column>
</pane>
<pane>
<!-- Definition of Aspects; do NOT change panel name -->
<name>__Aspects</name>
<column>
<!--
Metadata: variable definition
label: is the highest number of mast, should be the same as number of labels in <display item="mast"/>
tooltip: starting CV
CVs are assigned sequentially, starting with mast(0)-aspect(0), going to mast(0)-aspect(31), then mast(1)-aspect(0)....
-->
<display item="mastcount" label="15" tooltip="128"/>
<!--
Metadata: output definition
label contains as many characters as outputs = masts. Each character represents one output.
-->
<display item="outputs" label="ABCDEFGHIJKLMNOP"/>
<!--
Metadata: mast names and default setup CVs
tooltip: gives the starting CV number
each label generates one mast; label's content is the mast name.
-->
<display item="masts" tooltip="512">
<label>0</label><label>1</label><label>2</label><label>3</label><label>4</label><label>5</label><label>6</label><label>7</label>
<label>8</label><label>9</label><label>10</label><label>11</label><label>12</label><label>13</label><label>14</label><label>15</label>
</display>
<!--
Metadata: aspect names
each label generates one aspect per mast; label's content is the aspect name.
-->
<display item="aspects">
<label>0</label><label>1</label><label>2</label><label>3</label><label>4</label><label>5</label><label>6</label><label>7</label>
<label>8</label><label>9</label><label>10</label><label>11</label><label>12</label><label>13</label><label>14</label><label>15</label>
<label>16</label><label>17</label><label>18</label><label>19</label><label>20</label><label>21</label><label>22</label><label>23</label>
<label>24</label><label>25</label><label>26</label><label>27</label><label>28</label><label>29</label><label>30</label><label>31</label>
</display>
<!--
Metadata: minimum outputs allowed for certain aspects
Each label represents an aspect of the same position (code). The label determines minimum of outputs for the
aspect to be displayed.
-->
<display item="minOutputs">
<label>1</label><label>1</label>
<label>2</label><label>2</label>
<label>3</label><label>3</label><label>3</label><label>3</label>
<label>4</label><label>4</label><label>4</label><label>4</label><label>4</label><label>4</label><label>4</label><label>4</label>
<label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label>
<label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label><label>5</label>
</display>
<!--
Metadata: binary representation table
Each label represents a binary number 0x00 - 0x1f
-->
<display item="binary">
<label></label>
<label></label>
<label>□√</label>
<label>√√</label>
<label>□□√</label>
<label>√□√</label>
<label>□√√</label>
<label>√√√</label>
<label>□□□√</label>
<label>√□□√</label>
<label>□√□√</label>
<label>√√□√</label>
<label>□□√√</label>
<label>√□√√</label>
<label>□√√√</label>
<label>√√√√</label>
<label>□□□□√</label>
<label>√□□□√</label>
<label>□√□□√</label>
<label>√√□□√</label>
<label>□□√□√</label>
<label>√□√□√</label>
<label>□√√□√</label>
<label>√√√□√</label>
<label>□□□√√</label>
<label>√□□√√</label>
<label>□√□√√</label>
<label>√√□√√</label>
<label>□□√√√</label>
<label>√□√√√</label>
<label>□√√√√</label>
<label>√√√√√</label>
</display>
<!-- Do not repmove this column, it's used to search for "aspectNames" template -->
<column>
<display item="aspectNames"/>
<!--
Blueprint:
this column will be copied to the output pane with all its contents.
No templates allowed.
-->
<column>
<label>
<text>0 Stop</text>
<text xml:lang="cs">0 Stůj</text>
</label>
<label>
<text>1 Clear</text>
<text xml:lang="cs">1 Volno</text>
</label>
<label>
<text>2 Caution</text>
<text xml:lang="cs">2 Výstraha</text>
</label>
<label>
<text>3 Preparing to 40</text>
<text xml:lang="cs">3 Očekávej 40</text>
</label>
<label>
<text>4 40 then clear</text>
<text xml:lang="cs">4 40 a volno</text>
</label>
<label>
<text>5 ××××× test</text>
<text xml:lang="cs">5 ××××× test</text>
</label>
<label>
<text>6 40 then caution</text>
<text xml:lang="cs">6 40 a výstraha</text>
</label>
<label>
<text>7 40 then preparing to 40</text>
<text xml:lang="cs">7 40 a očekávej 40</text>
</label>
<label>
<text>8 Call-on</text>
<text xml:lang="cs">8 Opatrně na přivolávací návěst</text>
</label>
<label>
<text>9 Shunting allowed</text>
<text xml:lang="cs">9 Posun dovolen</text>
</label>
<label>
<text>10 Shunting allowed</text>
<text xml:lang="cs">10 Posun dovolen - nezabezpečený</text>
</label>
<label>
<text>11 Repeated clear</text>
<text xml:lang="cs">11 Opakovaná volno</text>
</label>
<label>
<text>12 Repeated caution</text>
<text xml:lang="cs">12 Opakovaná výstraha</text>
</label>
<label>
<text>13 Unlit</text>
<text xml:lang="cs">13 Zhasnuto</text>
</label>
<label>
<text>14 Repeated preparing to 40</text>
<text xml:lang="cs">14 Opakovaná očekávej 40</text>
</label>
<label>
<text>15 40 and repeated caution</text>
<text xml:lang="cs">15 40 a opakovaná výstraha</text>
</label>
<label>
<text>16 40 and repeated preparing to 40</text>
<text xml:lang="cs">16 40 a opakovaná očekávej 40</text>
</label>
<label>
<text>17 Proceed according to perspective possibilities</text>
<text xml:lang="cs">17 Jízda podle rozhledových poměrů</text>
</label>
<label>
<text>18 40 and procced according to perspective possibilities</text>
<text xml:lang="cs">18 40 a jízda podle rozhledových poměrů</text>
</label>
</column>
</column>
</column>
</pane>
</decoder-config>
@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) JMRI 2002, 2004, 2020 All rights reserved -->
<!-- $Id$ -->
<!-- -->
<!-- JMRI is free software; you can redistribute it and/or modify it under -->
<!-- the terms of version 2 of the GNU General Public License as published -->
<!-- by the Free Software Foundation. See the "COPYING" file for a copy -->
<!-- of this license. -->
<!-- -->
<!-- JMRI is distributed in the hope that it will be useful, but WITHOUT -->
<!-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -->
<!-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -->
<!-- for more details. -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:db="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
exclude-result-prefixes="db"
>
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements=""/>
<xsl:preserve-space elements="text"/>
<!--
Generates one mast definition
-->
<xsl:template name="mast-definition">
<xsl:param name="cvname"/>
<xsl:param name="mast"/>
<xsl:param name="output"/>
<variable CV="{$cvname}" item="Signal mast {$mast} Default aspect" default="0" >
<decVal min="0" max="31"></decVal>
<label>Default aspect code:</label>
<label xml:lang="cs">Kód výchozí návěsti:</label>
<tooltip>Default aspect code for Signal mast <xsl:value-of select="$mast"/> - output <xsl:value-of select="$output"/>.</tooltip>
<tooltip xml:lang="cs">Kód výchozí návěsti pro návěstidlo <xsl:value-of select="$mast"/> - výstup <xsl:value-of select="$output"/>.</tooltip>
</variable>
<variable CV="{$cvname + 1}" item="Signal mast {$mast} Number of addresses" default="1" >
<decVal min="1" max="5" />
<label>Number of DCC addresses:</label>
<label xml:lang="cs">Počet DCC adres:</label>
<tooltip>Number of DCC addresses 1 5</tooltip>
<tooltip xml:lang="cs">Počet DCC adres 1 5</tooltip>
</variable>
</xsl:template>
<!--
Generates all mast definitions.
Iterates through labels in <display item="masts"/>, assigns CVs sequentially.
-->
<xsl:template name="generate-masts">
<xsl:param name="root"/>
<xsl:variable name="cvStart" select="string($root/display[@item='mastcount']/@tooltip)"/>
<xsl:variable name="outputs" select="string($root/display[@item='outputs']/@label)"/>
<xsl:for-each select="$root/display[@item='masts']/label">
<xsl:variable name="mast" select="./text()"/>
<xsl:variable name="mastIndex" select="position() - 1"/>
<xsl:call-template name="mast-definition">
<xsl:with-param name="cvname" select="$cvStart + $mastIndex * 2"/>
<xsl:with-param name="output" select="substring($outputs, position(), 1)"/>
<xsl:with-param name="mast" select="$mastIndex"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
Generates <variable> for one aspect on a specific mast
-->
<xsl:template name="one-mast-aspect">
<xsl:param name="mast"/>
<xsl:param name="aspect"/>
<xsl:param name="cvname"/>
<variable CV="{$cvname}" item="Signal mast {$mast} Aspect {$aspect}" default="{$aspect}" >
<decVal min="0" max="31" />
<label>Aspect number:</label>
<label xml:lang="cs">Číslo návěsti:</label>
<tooltip>Aspect number by S-com dccdoma.cz. Signal mast <xsl:value-of select="$mast"/> Aspect <xsl:value-of select="$aspect"/>.</tooltip>
<tooltip xml:lang="cs">Číslo návěst podle tabulky S-com dccdoma.cz. Návěstidlo <xsl:value-of select="$mast"/> Návěst <xsl:value-of select="$aspect"/>.</tooltip>
</variable>
</xsl:template>
<!--
Generates all aspects for all masts.
-->
<xsl:template name="generate-aspects">
<xsl:param name="root"/>
<xsl:variable name="startCV" select="string($root/display[@item='masts']/@tooltip)"/>
<xsl:variable name="aspectCount" select="count($root/display[@item='aspects']/label)"/>
<xsl:for-each select="$root/display[@item='masts']/label">
<xsl:variable name="mast" select="./text()"/>
<xsl:variable name="mastIndex" select="position() - 1"/>
<xsl:for-each select="$root/display[@item='aspects']/label">
<xsl:variable name="aspectIndex" select="position() - 1"/>
<xsl:variable name="aspectName" select="text()"/>
<xsl:call-template name="one-mast-aspect">
<xsl:with-param name="mast" select="$mast"/>
<xsl:with-param name="aspect" select="$aspectName"/>
<xsl:with-param name="cvname" select="$startCV + $mastIndex * $aspectCount + $aspectIndex"/>
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<!--
Generates conditionally a qualifier.
Outputs noting if min# of outputs is 1
-->
<xsl:template name="qualifier">
<xsl:param name="min"/>
<xsl:param name="mast"/>
<xsl:if test="$min > 1">
<qualifier>
<variableref>Signal mast <xsl:value-of select="$mast"/> Number of addresses</variableref>
<relation>ge</relation>
<value><xsl:value-of select="$min"/></value>
</qualifier>
</xsl:if>
</xsl:template>
<xsl:template name="mast-pane">
<xsl:param name="mast"/>
<xsl:param name="root"/>
<xsl:variable name="minOutputs" select="$root/display[@item='minOutputs']"/>
<xsl:variable name="aspects" select="$root/display[@item='aspects']"/>
<xsl:variable name="binary" select="$root/display[@item='binary']"/>
<pane>
<xsl:comment> Pane Signal mast <xsl:value-of select="$mast"/> =============================================== </xsl:comment>
<name>Signal mast <xsl:value-of select="$mast"/></name>
<name xml:lang="cs">Návěstidlo <xsl:value-of select="$mast"/></name>
<column>
<display item="Signal mast {$mast} Number of addresses" />
<display item="Signal mast {$mast} Default aspect" />
<label>
<text><xsl:value-of select="' '"/></text>
<text xml:lang="cs"><xsl:value-of select="' '"/></text>
</label>
<grid>
<!-- Hlavicka -->
<griditem gridx="0" gridy="0">
<label>
<text>Code</text>
<text xml:lang="cs">Kód</text>
</label>
</griditem>
<griditem gridx="1" gridy="0">
<label>
<text>Combination</text>
<text xml:lang="cs">Kombinace</text>
</label>
</griditem>
<griditem gridx="2" gridy="0">
<label>
<text>Aspect</text>
<text xml:lang="cs">Návěst</text>
</label>
</griditem>
<griditem gridx="0" gridy="1">
<label>
<text>of aspect</text>
<text xml:lang="cs">návěsti</text>
</label>
</griditem>
<griditem gridx="1" gridy="1">
<label>
<text>of outputs</text>
<text xml:lang="cs">výstupů</text>
</label>
</griditem>
<griditem gridx="2" gridy="1">
<label>
<text>S-com</text>
<text xml:lang="cs">S-com</text>
</label>
</griditem>
<xsl:for-each select="$aspects/label">
<xsl:variable name="aspect" select="text()"/>
<xsl:variable name="pos" select="position()"/>
<xsl:variable name="index" select="position() - 1"/>
<!-- Radek -->
<griditem gridx="0" gridy="{$index + 2}">
<xsl:call-template name="qualifier">
<xsl:with-param name="mast" select="$mast"/>
<xsl:with-param name="min" select="$minOutputs/label[$pos]/text()"/>
</xsl:call-template>
<label>
<text><xsl:value-of select="$aspect"/></text>
</label>
</griditem>
<griditem gridx="1" gridy="{$index + 2}" anchor="LINE_START">
<xsl:call-template name="qualifier">
<xsl:with-param name="mast" select="$mast"/>
<xsl:with-param name="min" select="$minOutputs/label[$pos]/text()"/>
</xsl:call-template>
<label>
<text><xsl:value-of select="$binary/label[$pos]/text()"/></text>
</label>
</griditem>
<griditem gridx="2" gridy="{$index + 2}">
<xsl:call-template name="qualifier" >
<xsl:with-param name="mast" select="$mast"/>
<xsl:with-param name="min" select="$minOutputs/label[$pos]/text()"/>
</xsl:call-template>
<display item="Signal mast {$mast} Aspect {$aspect}" label="" />
</griditem>
</xsl:for-each>
</grid>
</column>
<!-- Add aspect names from the template -->
<column>
<xsl:apply-templates select="$root/display[@item='aspectNames']/../column/*"/>
</column>
</pane>
</xsl:template>
<xsl:template name="generate-panes">
<xsl:param name="root"/>
<xsl:for-each select="$root/display[@item='masts']/label">
<xsl:variable name="mast" select="string(./text())"/>
<xsl:call-template name="mast-pane">
<xsl:with-param name="root" select="$root"/>
<xsl:with-param name="mast" select="$mast"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!--
Copy <variables> content, and add generated variables at the end
-->
<xsl:template match="variables">
<variables>
<xsl:copy-of select="node()"/>
<xsl:call-template name="generate-masts">
<xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/>
</xsl:call-template>
<xsl:call-template name="generate-aspects">
<xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/>
</xsl:call-template>
</variables>
</xsl:template>
<xsl:template match="pane[name='__Aspects']" priority="100">
<xsl:call-template name="generate-panes">
<xsl:with-param name="root" select="//pane[name/text() ='__Aspects']//display[position() = 1]/.."/>
</xsl:call-template>
</xsl:template>
<!--Identity template copies content forward -->
<!-- - - - MATCH - - - -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
@@ -0,0 +1,33 @@
<!-- Sidebar.shtml -->
<!-- Common sidebar for html/apps/[subdirectory] pages, mimics html/apps/Sidebar.shtml -->
<!-- NOTE: each subdirectory MUST have a SidebarAppLocalPart.shtml -->
<hr class="hide">
<div id="side"> <!-- Block of text on left side of page -->
<div style="text-align: center">JMRI&reg; is...</div>
<dl>
<!-- To include specific sidebar info for this subdirectory... -->
<!--#include virtual="SidebarAppLocalPart.shtml" -->
<!--#include virtual="/help/en/parts/SidebarApplications.shtml" -->
<!--#include virtual="/help/en/parts/SidebarTools.shtml" -->
<!--#include virtual="/help/en/parts/SidebarLayoutAutomation.shtml" -->
<dt><a href="/help/en/html/hardware/index.shtml">Supported hardware</a></dt>
<dd>JMRI supports a wide range of devices, DCC systems, command stations, networks, and protocols.</dd>
<!-- If someday we want to show the whole list, use #include virtual="/help/en/parts/SidebarSupportedHardware.shtml" -->
<!--#include virtual="/help/en/parts/SidebarInstall.shtml" -->
</dl>
<!--#include virtual="/help/en/parts/SidebarTail.shtml" -->
</div> <!-- close #side -->
<!-- button is in /Header -->
<script src="/js/side.js"></script>
<!-- /Sidebar.shtml -->
@@ -0,0 +1,12 @@
<!-- SidebarAppLocalPart.shtml -->
<!-- This is the local part sidebar definition for html/apps/DispatcherPro pages -->
<dt class="dtheader">DispatcherPro&trade;</dt>
<dd>
<ul>
<li><a href="../../tools/signaling/index.shtml">Signaling</a></li>
<li><a href="../../setup/index.shtml">JMRI Setup</a></li>
</ul>
</dd>
<!-- /SidebarAppLocalPart.shtml -->
@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: DispatcherPro Main Window</title>
<meta name="author" content="Bob Jacobsen">
<meta name="keywords" content="JMRI help preferences"><!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: DispatcherPro Main Window</h1>
<img src="../../../../../resources/logo.gif" class="floatRight" height="100" width="100" alt=
"">
<p><strong>Dispatcher</strong> is a primary tool within <a href="../PanelPro">PanelPro</a>
that provides functions and organizes information relating to dispatching trains on a model
railroad layout, allowing for automated running.</p>
<p>Dispatcher is dependent on PanelPro blocks, turnouts, sensors and signaling. It normally
uses a Layout Editor panel. The <a href="../PanelPro/GettingStarted.shtml">Getting Started
with PanelPro</a> tutorial describes the process to create these prerequisites.</p>
<p>You access the DispatcherPro main window by starting PanelPro and selecting <strong>Tools
&rArr; Dispatcher</strong>. The main help page is at <a href=
"../../../package/jmri/jmrit/dispatcher/Dispatcher.shtml">DispatcherPro</a>.</p>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- close #mainContent -->
</div>
<!-- closes #mBody -->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,21 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!-- $Id: CATS.shtml,v 1.1 2008-05-23 16:39:46 jacobsen Exp $ -->
<html>
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Redirected Page</title>
<meta http-equiv="PRAGMA" content="NO-CACHE"><!-- CHANGE FOLLOWING LINE -->
<meta http-equiv="Refresh" content=
"6; URL=../../scripthelp/DispatcherSystem/DispatcherSystem.shtml">
</head>
<body>
<p>The page you requested, DispatcherSystem.shtml, has been moved to the scripthelp folder, as
part of updating and reorganizing our website.</p>
<p>Its new location is:<a href=
"../../scripthelp/DispatcherSystem/DispatcherSystem.shtml">/help/en/html/scripthelp/DispatcherSystem/DispatcherSystem.shtml</a>)</p>
<p>You should be redirected to the new location within 6 seconds, or click the link above.</p>
</body>
</html>
+191
View File
@@ -0,0 +1,191 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<!-- Copyright Bob Jacobsen 2008 - 2016 -->
<title>JMRI Applications - Error Messages and Codes</title>
<!--#include virtual="/help/en/parts/Style.shtml" -->
</head>
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<!-- Page Body -->
<h1>JMRI Applications: Error Messages and Codes</h1>
<!-- THIS FILE SHOULD BE CONSIDERED THE MASTER COPY OF ERROR MESSAGE HELP: One almost-copy remains in help/en/manual/DecoderPro3/Error.shtml @jerryg2003 2021/01/05 -->
<p>Various things can go wrong when JMRI tries to work with your DCC command station to
program a DCC decoder. This page lists the error message that can result, and describes what
they mean.</p>
<h2>JMRI Error Codes</h2>
<dl>
<dt><strong>301 - no locomotive detected</strong>
</dt>
<dd>The command station has reported that it doesn't see a locomotive on the programming
track.</dd>
<dd>
<p>This can happen if the locomotive isn't making good electrical contact or if there's a
wiring fault in the locomotive.</p>
</dd>
<dt><strong>302 - programmer busy</strong>
</dt>
<dd>
<p>The command station has reported that it's busy doing something else, and can't do any
programming right now. This usually means that some other part of the DCC system is doing
a programming operation, e.g. a hand-held throttle.</p>
</dd>
<dd>
<p>Some DCC systems can't do ops-mode programming (programming on the main) while also
using the service mode programming track, in which case they'll return this error
message.</p>
</dd>
<dt><strong>303 - requested not implemented in command station</strong>
</dt>
<dd>
<p>This means that JMRI has requested the command station do something that it doesn't
support.</p>
</dd>
<dd>
<p>This is not supposed to happen, as JMRI should disable programming modes that the
command station can't provide. If you do see this message, please report the
circumstances on the <a href="https://groups.io/g/jmriusers">JMRI users Group</a>.</p>
</dd>
<dt><strong>304 - aborted by user</strong>
</dt>
<dd>
<p>The user has requested that the read or write operation stop early.</p>
</dd>
<dd>
<p>This is considered an error, because the program doesn't know whether the decoder
actually saw the operation complete or not.</p>
</dd>
<dt><strong>305 - confirm failed</strong>
</dt>
<dd>
<p>Some command stations allow you to "confirm" the content of a CV, rather that read the
value from it. In general, this is faster than doing a complete read. If the value in the
CV doesn't match the expected value, this message is issued. It's considered an error
because if the values don't match, we know that we don't know the correct value for the
CV contents.</p>
</dd>
<dt><strong>306 - timeout talking to command station</strong>
</dt>
<dd>
<p>The program did not hear back from the command station when it expected to.</p>
</dd>
<dd>
<p>This is by far the most common error message when people first start using JMRI. In
that case, it usually means that the connection to the command station isn't correct.
This could be a problem with the cable(s) making the connection, or a problem with how
the preferences are set. Picking the wrong serial port is particularly common.</p>
<p>Once JMRI is working properly, this error may occasionally happen due to a transient
error. DecoderPro generally will retry it successfully in that case.</p>
</dd>
<dt><strong>307 - Unknown error</strong>
</dt>
<dd>
<p>An error has happened, but JMRI doesn't know enough about it to be able to report more
detail.</p>
</dd>
<dd>
<p>In general, JMRI is pretty good at deciphering what went wrong, and this message isn't
very common. If you do see this message, please report the circumstances on the <a href=
"https://groups.io/g/jmriusers">JMRI users Group</a>.</p>
</dd>
<dt><strong>308 - No acknowledge from locomotive</strong>
</dt>
<dd>
<p>At the end of a CV read or write operation, the locomotive replies ("acknowledges") to
the command station using a pulse of current.</p>
</dd>
<dd>
<p>If that pulse isn't seen, some command stations provide this error message. It could
be due to poor electrical connections to the programming track or within the locomotive.
It could also be that the decoder doesn't support readback.</p>
<p>Some decoders, particularly certain sound decoders, draw so much current that the
reply pulse isn't detected by the command station. In that case, one of the various
"programming boosters" may solve the problem.</p>
</dd>
<dt><strong>309 - Short Circuit on Programming Track</strong>
</dt>
<dd>
<p>The command station has reported seeing a short circuit on the programming track. That
prevents programming operations.</p>
<p>Check the electrical connections to the programming track, and also within the
locomotive.</p>
</dd>
<dt><strong>310 - Sequence Error</strong>
</dt>
<dd>
<p>For some reason, the programming operation ended early and the command station
returned to normal mode (left service mode) before it should have.</p>
<p>This error can occur when some operations are performed in JMRI during programming.
Turning track power on during a programming operation on an XpressNet is one example of
how to create this error.</p>
<p>If you haven't performed any operations during your programming sequence, this error,
might indicate that you've selected the wrong command station type in JMRI Preferences.
Check that. If that's set correctly and error 310 still shows up, ask for help on the JMRI users
list.</p>
</dd>
<dt><strong>311 - Communication Error Between PC and Command Station</strong>
</dt>
<dd>
<p>The data between the PC and the Command Station was corrupted and the corruption was
detected before the Command Station processed the request.</p>
<p>If this error occurs frequently, this error might indicate a problem with the
connection between your computer and the command station or an issue with your system
interface. Wireless connections are more prone to this issue than connections with
physically connected cables.</p>
</dd>
</dl>
<hr>
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
+445
View File
@@ -0,0 +1,445 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Loading and Storing Your Work</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Author" content="Jerry Grochow"><!--#include virtual="/help/en/parts/Style.shtml" -->
</head><!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<body>
<!--#include virtual="/help/en/parts/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1 id="TopOfPage">JMRI: Loading and Storing Your Work</h1>
<p class="subtitle">What Everyone Should Know</p>
<p class="noted">This page provides the basic information you should know about what commands
are used to load and store the data you create and update in JMRI. A companion page with more
information for advanced users about when, how, and where JMRI stores data is available
<a href="DataManagement.shtml">here.</a></p>
<div class="noted">
<span class="since">since 4.23.3</span>
<p>The main PanelPro menu has changed as of JMRI release 4.23.3.</p>
<ul>
<li><strong>Panels &rArr; Load Panels...</strong> has moved to <strong>File &rArr; Load table
content and panels...</strong></li>
<li><strong>Panels &rArr; Store Panels...</strong> has moved to <strong>File &rArr; Store ALL table
content and panels...</strong></li>
<li><strong>Panels &rArr; Show History</strong> has moved to <strong>File &rArr; Show file
history</strong></li>
<li><strong>Panels &rArr; Run Script...</strong> has moved to <strong>Scripting &rArr; Run
Script...</strong></li>
<li><strong>Panels &rArr; Thread Monitor</strong> has moved to <strong>Scripting &rArr; Thread
Monitor</strong></li>
<li><strong>Panels &rArr; Script Output</strong> has moved to <strong>Scripting &rArr; Script
Output</strong></li>
<li><strong>Panels &rArr; Script Entry</strong> has moved to <strong>Scripting &rArr; Script
Entry</strong></li>
</ul>
<p>The text for the panel and table specific File menus is now consistent.</p>
<p>The panel <strong>Close</strong> button <strong>hides</strong> the panel. It can be
shown using the Window menu or <strong>Panels &rArr; Show Panel</strong>. To delete a panel, use
the panel's delete option in the panel's File menu or the new <strong>Panels &rArr; Delete
Panel...</strong> menu item.</p>
<p>The menu paths shown below are the new paths. The old paths are shown in braces.</p>
</div>
<p>JMRI's model for creating, updating, and storing (or discarding) the information it needs
to perform its various functions depends on which JMRI function you are dealing with. Certain
kinds of data are handled completely automatically. Others are created by you and updated by
JMRI. For still others, you have the ability to control whether or not to change or keep that
data from one run of JMRI to the next. For example, saving changes to roster entries is
separate from storing away your layout configuration.</p>
<p>As of JMRI 5.1.1, PanelPro will check for changes to tables and panels that have not been
stored. This occurs when <strong>Quit</strong> has been selected and provides an opportunity
to store the changes. For details, see <a href=
"https://www.jmri.org/help/en/package/apps/TabbedPreferences.shtml#Shutdown">Preferences &rArr;
Shutdown</a>. Previously some of the tables would have reminders, but there was no consistent
checking. This meant there was the possibility of losing changes to tables and panels.</p>
<p>To ensure that data you create (or is created and updated for you) is kept as you require,
you should understand when and how the different kinds of data get saved to a disk file, or
not, and, in the case of CVs, to your locomotives and other DCC decoders. This page is
intended to give you the basic information you need to know.</p>
<ul class="snav">
<li>
<a href="#uload">User initiated Load</a>
</li>
<li>
<a href="#usave">User initiated Store</a>
</li>
<li>
<a href="#autosave">Automatic Store</a>
</li>
<li>
<a href="#nosave">Not stored</a>
</li>
</ul>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="uload">Things you need to take action to "load" or "open"</h2>
<div class="para">
<ul>
<li>
<a href="../../package/apps/TabbedPreferences.shtml">Preferences (all apps)</a>
<ul>
<li><strong>All Preferences items</strong>: Preferences are automatically loaded
during JMRI start up.</li>
</ul>
<br>
</li>
<li>
<a href="DecoderPro/index.shtml">DecoderPro</a>
<ul>
<li>
<a href="DecoderPro/Roster.shtml"><strong>Roster entry</strong></a>: Select a
roster entry row, select the programming mode, <strong>Programming Track</strong>,
<strong>Programming on Main</strong> or <strong>Edit Only</strong>, click on
<strong>Program</strong>.
</li>
<li><strong>Roster Group</strong>: Roster groups are automatically loaded.</li>
</ul>
<br>
</li>
<li>
<a href="PanelPro/index.shtml">PanelPro</a>
<ul>
<li>
<strong>File &rArr; Load table content and panels...</strong> {<em>Old: <strong>Panels &rArr;
Load Panels...</strong></em>}
<ul>
<li>Table content for the tables located at <strong>Tools &rArr; Tables</strong></li>
<li>Panels</li>
<li>Fast clock settings at <strong>Tools &rArr; Clocks</strong></li>
</ul>
</li>
<li>An alternate method for loading the table content and panels is to use a
<a href="#startAction">start up action</a>.
</li>
<li>
<a href=
"../../package/jmri/jmrit/display/IconAdder.shtml"><strong>Images/Icons</strong></a>:
Loaded automatically by the panel editor.
</li>
<li>
<a href="../tools/scripting/index.shtml"><strong>Scripts</strong></a>:
<ul>
<li>Run script: <strong>Scripting &rArr; Run Script...</strong> {<em>Old:
<strong>Panels &rArr; Run Script...</strong></em>}</li>
<li>Load script: <strong>Scripting &rArr; Script Entry</strong> {<em>Old:
<strong>Panels &rArr; Script Entry</strong></em>} and then <strong>Load</strong>.</li>
</ul>
</li>
<li>
<a href="../tools/throttle/ThrottleChapter1.shtml"><strong>Throttles</strong></a>:
<strong>Tools &rArr; Throttles &rArr;</strong>
<ul>
<li><strong>Open Throttles Layout...</strong>
</li>
<li><strong>Load Default Throttles Layout</strong>
</li>
</ul>
</li>
</ul>
<br>
</li>
<li>
<a href="../../package/jmri/jmrit/dispatcher/Dispatcher.shtml">DispatcherPro</a>
<ul>
<li><strong>Tables (Sections, Transits)</strong>: Included in PanelPro tables.</li>
<li><strong>Dispatcher Options</strong>: Loaded automatically when Dispatcher
starts.</li>
</ul>
<br>
</li>
<li>
<a href="../../package/jmri/jmrit/operations/Operations.shtml">OperationsPro</a>
<ul>
<li>All data: Loaded automatically</li>
</ul>
<br>
</li>
<li>
<a href="SoundPro/SoundPro.shtml">SoundPro</a>
<ul>
<li><strong>Audio Tables (Listener, Buffer, Sources)</strong>: Included in PanelPro
tables.</li>
</ul>
<br>
</li>
</ul>
<h3 id="startAction">Loading table content and panels during startup</h3>
<p>The <strong>Preferences &rArr; Start Up</strong> option includes an <strong>Action</strong>
to load a file during the startup process. Click on the <strong>Add</strong> button and
select <strong>Open File...</strong>. The operating system <strong>Open File</strong>
dialog will be displayed with the <strong>user file location</strong> selected. Select a
file and click on <strong>Open</strong>. The new action will be added to the action list.
Click on the Preferences <strong>Save</strong> button to retain the startup action
change.</p>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
</div>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="usave">When to take action to "store" or "save"</h2>
<div class="para">
<p>JMRI will sometimes (but not always) notify you when you might want to "save" or
"store." These are the places where user action may be required:</p>
<ul>
<li>
<a href="../../package/apps/TabbedPreferences.shtml">Preferences (all apps)</a>
<ul>
<li><strong>All Preferences items</strong>: <em>Edit &rArr; Preferences</em>, Hit
<strong>Save</strong></li>
</ul>
<br>
</li>
<li>
<a href="DecoderPro/index.shtml">DecoderPro</a>
<ul>
<li>
<a href="DecoderPro/Roster.shtml"><strong>Roster entry</strong></a>:
<ul>
<li>On an individual roster entry window: Select <strong>File &rArr; Save</strong> or
<strong>Save to Roster</strong></li>
<li>On an individual roster entry window: Select <strong>Write</strong> to
Decoder in order to change CVs</li>
</ul>
</li>
<li>
<strong>Roster Group</strong>: <a href="#autosave">Stored Automatically</a>
</li>
</ul>
<br>
</li>
<li>
<a href="PanelPro/index.shtml">PanelPro</a>
<ul>
<li>
<strong>Panels</strong>:
<ul>
<li>From any panel editor: Select <strong>File &rArr; Store ALL table content and
panels...</strong> {<em>Old: <strong>File &rArr; Store Panels...</strong></em>}.</li>
<li>From the main PanelPro window: Select <strong>File &rArr; Store ALL table content
and panels...</strong> {<em>Old: <strong>Panels &rArr; Store
Panels...</strong></em>}.</li>
</ul>
</li>
<li>
<strong>Tables</strong>: <em>Tools &rArr; Tables &rArr; [Specific Table]</em>, Select:
<ul>
<li><strong>File &rArr; Store &rArr; Store ALL table content and panels...</strong>
{<em>Old: <strong>Store configuration and panels</strong></em>}.</li>
</ul>
</li>
<li><strong>Fast Clock</strong>: <em>Tools &rArr; Clocks &rArr; Set up Fast Clock...</em>, then
same as for Tables.</li>
<li>
<a href=
"../../package/jmri/jmrit/display/IconAdder.shtml"><strong>Images/Icons</strong></a>:
Hit <strong>Save Image Index</strong>
</li>
<li>
<a href="../tools/scripting/index.shtml"><strong>Scripts</strong></a>:
<strong>Scripting &rArr; Script Entry</strong> {<em>Old: <strong>Panel &rArr; Script
Entry</strong></em>}, Hit <strong>Store...</strong>
</li>
<li>
<a href="../tools/throttle/ThrottleChapter1.shtml"><strong>Throttles</strong></a>:
<strong>Tools &rArr; Throttles &rArr;</strong>
<ul>
<li><strong>Save Throttle Layout</strong>
</li>
<li><strong>New Throttle &rArr; File &rArr; Save Current Throttle</strong>
</li>
<li><strong>New Throttle &rArr; File &rArr; Save Current Throttle As...</strong>
[additionally allows you to save custom function buttons]</li>
</ul>
</li>
</ul>
<br>
</li>
<li>
<a href="../../package/jmri/jmrit/dispatcher/Dispatcher.shtml">DispatcherPro</a>
<ul>
<li><strong>Tables (Sections, Transits)</strong>: <em>Tools &rArr; Tables &rArr; [Specific
Table]</em>, then same as PanelPro Tables.</li>
<li><strong>Dispatcher Options</strong>: <em>Tools &rArr; Dispatcher &rArr;</em>
<strong>Options &rArr; Save Options</strong></li>
</ul>
<br>
</li>
<li>
<a href="../../package/jmri/jmrit/operations/Operations.shtml">OperationsPro</a>
<ul>
<li>All data: <a href="#autosave">Stored Automatically</a>
</li>
</ul>
<br>
</li>
<li>
<a href="SoundPro/SoundPro.shtml">SoundPro</a>
<ul>
<li><strong>Audio Tables (Listener, Buffer, Sources)</strong>: <em>Tools &rArr; Tables &rArr;
Audio</em>, then same as PanelPro Tables.</li>
</ul>
<br>
</li>
</ul>
<p>So make sure your hit <strong>"Save"</strong> and <strong>"Store"</strong> for all the
different tools you use within JMRI and you will always have what you worked on the next
time. And if there is a problem, remember that JMRI keeps backup files when it writes your
data to permanent storage, either automatically or by your command, so look for files with
the ".bak" suffix, and you'll be able to recover from most missteps.</p>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
<p class="important"><strong>Lost Panels:</strong> An issue commonly reported on <a href=
"https://groups.io/g/jmriusers">the JMRI user forum</a> is that panels have disappeared on
restarting PanelPro and opening a panel file. Often, this is because someone selected
"Store Only table content (No Panels)... {Store configuration}" rather than "Store ALL
table content and panels... {Store configuration and panels}" and overwrote an existing
panel file. Don't panic - the backup copy (in the directory "backupPanels" in the <a href=
"../doc/Technical/ProfileFileStructure.shtml">User Files Location</a>) is there. Best practice
in working with PanelPro is to almost always use <strong>"Store ALL table content and
panels...</strong> {<em>Old: <strong>Store configuration and panels</strong></em>}" or
<strong>"Store ALL table content and panels...</strong> {<em>Old: <strong>Store
Panels...</strong></em>}" where it appears, and to rename the file you are saving, so you
have multiple versions named by you to go back to if necessary. <strong><em>As of 4.99.4,
the option to store without panels has been removed.</em></strong></p>
</div>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="autosave">Things that are stored automatically</h2>
<div class="para">
<ul>
<li>Window positions and sizes (not all are saved)</li>
<li>
<a href="DecoderPro/index.shtml">DecoderPro</a>
<ul>
<li>
<a href="DecoderPro/Roster.shtml"><strong>Roster entry</strong></a>: Automatically
stored when changed on the main roster page
</li>
<li><strong>Roster Group</strong>: new, including changes to Roster Group Table
Association; also renaming and deletion of groups</li>
</ul>
</li>
<li>
<a href="../../package/jmri/jmrit/operations/Operations.shtml">OperationsPro</a> data:
automatically stored when data is changed.
</li>
<li>Block values may be restored, dependent on block occupancy and track power
status.</li>
<li>ID Tags are stored on exit, with their Time last seen and last Reporter position.
When restored on startup, these Reporters will also be created.</li>
<li>Connection specific tools, e.g. MERG CBUS Event Table may also have their own store /
restore settings.</li>
</ul>
<br>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
</div>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<h2 id="nosave">Things that are NOT stored after you quit JMRI</h2>
<div class="para">
<p>Some data you will create during your JMRI session or that will be created via
communication with your layout is <em>NOT</em> saved after you quite JMRI. This is normal
as this data represents the current state of your trains and layout (e.g. turnout position)
so requires feedback from you or your layout. These transitory data are:</p>
<ul>
<li>Sensor state</li>
<li>Turnout state</li>
<li>DispatcherPro Trains</li>
<li>[Possibly incomplete list]</li>
</ul>
<br>
<p><a href="#TopOfPage">[Go to top of page]</a>
</p>
</div>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- <p><a href="#TopOfPage">[Go to top of page]</a></p> -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!--#include virtual="/help/en/parts/Footer.shtml" -->
</div>
<!-- closes #mainContent-->
</div>
<!-- closes #mBody-->
<script src="/js/help.js"></script>
</body>
</html>
@@ -0,0 +1,20 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta name="generator" content="HTML Tidy for HTML5 for Apple macOS version 5.8.0">
<title>JMRI: Redirected Page</title>
<meta http-equiv="PRAGMA" content="NO-CACHE">
<!-- CHANGE FOLLOWING LINE TO POINT TO NEW LOCATION -->
<meta http-equiv="Refresh" content="5; URL=/community/connections/ManifestCreator/index.shtml">
</head>
<body>
This page has been moved to another location to be listed in community applications that connect
with JMRI (<a href=
"/community/connections/ManifestCreator/index.shtml">/community/connections/ManifestCreator/index.shtml</a>)
as part of updating our website.<br>
Please update your bookmarks.<br>
If you got to this page from another JMRI page, please let us know so we can fix it.<br>
You should be redirected to the new page within 5 seconds.
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Some files were not shown because too many files have changed in this diff Show More