ENH: Improved scripted module loading error message

It happened multiple times in our group that a developer spent a lot of time trying to find errors in a scripted module, simplify the class, make it more similar to the template, etc. to find what can be wrong in the class because "Failed to load scripted pythonqt module class definition" error was reported. Then it turned out that the module class is perfect, only the name does not match the filename.

Implemented fix: changed the error message to "class ... not found in file ..." to make it clear that the problem is not in implementation of the class but in the name.

From: Andras Lasso <lasso@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23232 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Fixed DICOM browser persistence

If the DICOM browser persistent option is enabled (usually when the DICOM browser is displayed on a second monitor) then the browser should be kept open when an image is loaded or the user opens another module.
The persistent flag was observed almost everywhere where it was needed, except at the end of the image loading step.

From: Andras Lasso <lasso@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23233 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Allow users to acknowledge all DICOM loading errors with a single click

Problem: Each DICOM loading error was displayed in a separate popup, which
 required the user to click as many times as many series failed to load.
In some cases there are a large number of failures (for example,
experimental MRI sequences), which makes loading of a complete study very
frustrating (need to click 30 times, waiting several seconds between each).

Solution: Changed the error reporting to collect all errors and show it to the user at the end of the loading in a single error popup.

From: Andras Lasso <lasso@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23234 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Subject hierarchy module added

This is the first step of integrating Subject hierarchy into Slicer core.
Next steps include moving subject hierarchy plugins to their related
modules and making DICOM import plugins add loaded objects in the
hierarchy.
More information: http://www.slicer.org/slicerWiki/index.php/Documentation/Labs/SubjectHierarchy

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23235 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Node attribute table view and widget moved to MRMLWidgets

Now both Data and Subject hierarchy modules use qMRMLNodeAttributeTableView and
qMRMLNodeAttributeTableWidget, so they have been moved from Data module widgets to MRMLWidgets

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23236 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Moved core module subject hierarchy plugins to related module

Subject hierarchy plugins project contained plugins for core modules
Markups, Models and Volumes. Those plugins are now in the
SubjectHierarchyPlugins subdirectory of those loadable modules.
Also the subject hierarchy support moved from
SlicerRT/DicomRtImport/DicomRtImportPlugin.py to
DICOMScalarVolumePlugin.py. Now the loaded DICOM scalar volumes are
automatically added to subject hierarchy.

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23237 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Sank addSeriesInSubjectHierarchy function down to abstract DICOMPlugin

The addSeriesInSubjectHierarchy function (which was in DICOMScalarVolumePlugin so far) adds
the loaded node to subject hierarchy to the proper patient (subject) and study according to
the DICOM tags from the first file referenced in the associated loadable. This function is
now accessible from all the DICOM plugins. It needs to be called after the loaded object is
created in the load() function. Now it is called by DICOMDiffusionVolumePlugin too.

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23238 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: vtkMRMLHierarchyNode methods made virtual

Two methods in vtkMRMLHierarchyNode made virtual. GetAssociatedChildrendNodes contained
a typo so it is now called GetAssociatedChildrenNodes. Subject hierarchy volumes plugin
now can add volumes from potential list to tree

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23239 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: MRMLCLI_INCLUDE_DIRS CMake variable exported

It is needed for some subject hierarchy plugins to include the MRMLCLI indlude
directories, and by exporting this variable it is possible to do it without
manually constructing the paths in the CMakeLists files

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23240 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Subject hierarchy python tests moved to SlicerApp

As the subject hierarchy tests cover multiple modules, they have been moved
from the SubjectHierarchy folder to Applications/SlicerApp/Testing/Python;
Occasional SlicerRT strings removed/replaced in subject hierarchy code
(mostly include dir comments)

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23241 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Moved subject hierarchy base plugin classes in widgets

In order to subject hierarchy plugins be accessible from extensions,
the include directories need to be exported. So that the current
infrastructure can be used, all subject hierarchy plugin
classes (abstract, handler, core plugins not related to modules) were
moved from Plugins to Widgets. Plugins subdirectory thus became
unnecessary and removed.

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23242 3bd1e089-480b-0410-8dfb-8563597acbee
COMP: Fixed Mac and Linux build error

Subject hierarchy widget designer plugins were deployed to Slicer_DIR/bin,
which broke the Linux and Mac build. This explicit output directory
setting has been removed.

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23243 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Fixed subject hierarchy core plugins self test

Which failed due to renaming of GetAssociatedDataNode to GetAssociatedNode in
vtkMRMLSubjectHierarchyNode. It has been renamed, because by making
vtkMRMLHierarchyNode::GetAssociatedNode virtual, it became possible to override
it in subject hierarchy so that it can handle nested associations.

From: Csaba Pinter <csaba.pinter@queensu.ca>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23244 3bd1e089-480b-0410-8dfb-8563597acbee
STYLE: SubjectHierarchy - Fix build warnings and indentation

From: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23245 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Install SlicerWizard

Add rules to install the SlicerWizard modules. This gets us one step
closer to having the extension wizard available from an install tree,
and also makes the SlicerWizard package available from within Slicer
itself.

Note that installation of the SlicerWizard modules is conditional on
Slicer_BUILD_EXTENSIONMANAGER_SUPPORT being enabled.
ENH: Add "introspection" to TemplateManager

Add new methods to TemplateManager to get the list of known categories
and available templates (the latter taking an optional category). These
are helpful for allowing the user to select from available templates in
cases where listTemplates() is not optimal (e.g. from a GUI).
ENH: Create in-Slicer Extension Wizard (skeleton)

Create the initial skeleton of the in-Slicer Extension Wizard. This will
provide a graphical front-end to (some of) the Extension Wizard
functions. Right now, only creation is implemented.

Issue #3603
BUG: Fix TemplateManager unicode support

Add a helper function (in SlicerWizard.Utilities) to detect the
character encoding of an input byte sequence. Use this in
TemplateManager to correctly handle encoding conversion of template
files in case the replacement text is a unicode, rather than a str
(which otherwise results in an exception when automatic conversion tries
to convert non-ASCII files).
ENH: Add python-chardet external project

Add external project for chardet Python module used in the previous
commit, so that we have actual detection available and not just ASCII
vs. "don't know". Like GitPython and friends, this is only enabled if
Python and extension manager support are enabled, and system Python is
not used.
ENH: Improve styling of wizard actions

Replace the QPushButton extension wizard actions with "flat"
QToolButton's, using (for now) a forward-arrow icon. This gives a
cleaner look than the odd stack of unusually wide buttons, that is
loosely based on Windows wizards (which were the only example of a
list-of-possible-actions - as opposed to list-of-steps - type wizard I
could find).