Slicer: 490-qMRMLSceneHierarchyModel-avoid-extra-scene-lookup c031a49f

Author Committer Branch Timestamp Parent
lassoan lassoan 490-qMRMLSceneHierarchyModel-avoid-extra-scene-lookup 2016-04-11 00:57:13 490-qMRMLSceneHierarchyModel-avoid-extra-scene-lookup a1414e23
Changeset

BUG: Fixed edit properties option in node selectors

Fixes http://www.na-mic.org/Bug/view.php?id=2109

Now any module can associate a MRML node type with a module (instead of having a hardcoded list of modules
in qSlicerApplication) and when switching to a module, the chosen node is selected as active node.
Associations can be added by calling qSlicerApplication::registerNodeModule().
Multiple modules can be associated with the same MRML node type.

The best module for a specific node instance is determined run-time, by calling
qSlicerAbstractModuleWidget::nodeEditable() for each candidate and choosing
the one that has the highest confidence in handling the node.
This mechanism is used for selecting the CLI module that corresponds to a specific CLI module parameter node.
This mechanism is also used for switching to volume rendering module if a volume rendering clipping ROI node
is selected for editing (instead of switching to the Annotations module).
The most suitable module's qSlicerAbstractModuleWidget::setEditedNode() method is called to select the currently edited node.
qSlicerAbstractModuleWidget::nodeEditable() and qSlicerAbstractModuleWidget::setEditedNode() methods can be overridden
in scripted loadable modules as well.

As edited node selection is now possible using a clean, unified method call, it is no longer necessary
to access GUI widgets directly. Therefore, almost all editProperties() method calls in subject hierarchy plugins were
removed (replaced by a common implementation in the base class). This new, simplified method fixes robustness issues
of using node name filters for selecting a node in model hierarchy, inability to choose annotation hierarchy nodes, etc.

qSlicerAbstractModuleWidget::setEditedNode(vtkMRMLNode* node, QString role, QString context) has two extra (optional)
arguments. Role can be used to specify additional nodes for a module (e.g., if there are multiple inputs for a module
then role argument can select between them). Context can be used for specifying a sub-selection within a node (for
example, Segment Editor module can be activated for a selected segment - specified by 'context' - of a specific
segmentation node - specified by 'node').

Fixed code review errors (typos and API simplification).

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

mod - Base/QTCLI/qSlicerCLIModule.cxx Diff File
mod - Base/QTCLI/qSlicerCLIModule.h Diff File
mod - Base/QTCLI/qSlicerCLIModuleWidget.cxx Diff File
mod - Base/QTCLI/qSlicerCLIModuleWidget.h Diff File
mod - Base/QTCore/qSlicerAbstractCoreModule.cxx Diff File
mod - Base/QTCore/qSlicerAbstractCoreModule.h Diff File
mod - Base/QTCore/qSlicerAbstractModuleFactoryManager.cxx Diff File
mod - Base/QTCore/qSlicerAbstractModuleRepresentation.cxx Diff File
mod - Base/QTCore/qSlicerAbstractModuleRepresentation.h Diff File
mod - Base/QTCore/qSlicerCoreApplication.cxx Diff File
mod - Base/QTCore/qSlicerCoreApplication.h Diff File
mod - Base/QTCore/qSlicerCoreApplication_p.h Diff File
mod - Base/QTGUI/Testing/Cxx/qSlicerScriptedLoadableModuleWidgetTest.cxx Diff File
mod - Base/QTGUI/Testing/Data/Input/qSlicerScriptedLoadableModuleNewStyleTest.py Diff File
mod - Base/QTGUI/Testing/Data/Input/qSlicerScriptedLoadableModuleNewStyleTestWidget.py Diff File
mod - Base/QTGUI/Testing/Data/Input/qSlicerScriptedLoadableModuleTest.py Diff File
mod - Base/QTGUI/Testing/Data/Input/qSlicerScriptedLoadableModuleTestWidget.py Diff File
mod - Base/QTGUI/qSlicerAbstractModuleWidget.cxx Diff File
mod - Base/QTGUI/qSlicerAbstractModuleWidget.h Diff File
mod - Base/QTGUI/qSlicerApplication.cxx Diff File
mod - Base/QTGUI/qSlicerApplication.h Diff File
mod - Base/QTGUI/qSlicerScriptedLoadableModule.cxx Diff File
mod - Base/QTGUI/qSlicerScriptedLoadableModule.h Diff File
mod - Base/QTGUI/qSlicerScriptedLoadableModuleWidget.cxx Diff File
mod - Base/QTGUI/qSlicerScriptedLoadableModuleWidget.h Diff File
mod - Libs/MRML/Logic/vtkMRMLSliceLogic.cxx Diff File
mod - Libs/MRML/Logic/vtkMRMLSliceLogic.h Diff File
mod - Modules/Loadable/Annotations/GUI/qSlicerAnnotationModuleWidget.cxx Diff File
mod - Modules/Loadable/Annotations/GUI/qSlicerAnnotationModuleWidget.h Diff File
mod - Modules/Loadable/Annotations/qSlicerAnnotationsModule.cxx Diff File
mod - Modules/Loadable/Annotations/qSlicerAnnotationsModule.h Diff File
mod - Modules/Loadable/Cameras/qSlicerCamerasModule.cxx Diff File
mod - Modules/Loadable/Cameras/qSlicerCamerasModule.h Diff File
mod - Modules/Loadable/Cameras/qSlicerCamerasModuleWidget.cxx Diff File
mod - Modules/Loadable/Cameras/qSlicerCamerasModuleWidget.h Diff File
mod - Modules/Loadable/Colors/qSlicerColorsModule.cxx Diff File
mod - Modules/Loadable/Colors/qSlicerColorsModule.h Diff File
mod - Modules/Loadable/Colors/qSlicerColorsModuleWidget.cxx Diff File
mod - Modules/Loadable/Colors/qSlicerColorsModuleWidget.h Diff File
mod - Modules/Loadable/CropVolume/qSlicerCropVolumeModule.cxx Diff File
mod - Modules/Loadable/CropVolume/qSlicerCropVolumeModule.h Diff File
mod - Modules/Loadable/CropVolume/qSlicerCropVolumeModuleWidget.cxx Diff File
mod - Modules/Loadable/CropVolume/qSlicerCropVolumeModuleWidget.h Diff File
mod - Modules/Loadable/Markups/SubjectHierarchyPlugins/qSlicerSubjectHierarchyMarkupsPlugin.cxx Diff File
mod - Modules/Loadable/Markups/SubjectHierarchyPlugins/qSlicerSubjectHierarchyMarkupsPlugin.h Diff File
mod - Modules/Loadable/Markups/qSlicerMarkupsModule.cxx Diff File
mod - Modules/Loadable/Markups/qSlicerMarkupsModule.h Diff File
mod - Modules/Loadable/Markups/qSlicerMarkupsModuleWidget.cxx Diff File
mod - Modules/Loadable/Markups/qSlicerMarkupsModuleWidget.h Diff File
mod - Modules/Loadable/Models/SubjectHierarchyPlugins/qSlicerSubjectHierarchyModelsPlugin.cxx Diff File
mod - Modules/Loadable/Models/SubjectHierarchyPlugins/qSlicerSubjectHierarchyModelsPlugin.h Diff File
mod - Modules/Loadable/Models/qSlicerModelsModule.cxx Diff File
mod - Modules/Loadable/Models/qSlicerModelsModule.h Diff File
mod - Modules/Loadable/Models/qSlicerModelsModuleWidget.cxx Diff File
mod - Modules/Loadable/Models/qSlicerModelsModuleWidget.h Diff File
mod - Modules/Loadable/Reformat/qSlicerReformatModule.cxx Diff File
mod - Modules/Loadable/Reformat/qSlicerReformatModule.h Diff File
mod - Modules/Loadable/Reformat/qSlicerReformatModuleWidget.cxx Diff File
mod - Modules/Loadable/Reformat/qSlicerReformatModuleWidget.h Diff File
mod - Modules/Loadable/SceneViews/GUI/qSlicerSceneViewsModuleWidget.cxx Diff File
mod - Modules/Loadable/SceneViews/GUI/qSlicerSceneViewsModuleWidget.h Diff File
mod - Modules/Loadable/SceneViews/SubjectHierarchyPlugins/qSlicerSubjectHierarchySceneViewsPlugin.cxx Diff File
mod - Modules/Loadable/SceneViews/SubjectHierarchyPlugins/qSlicerSubjectHierarchySceneViewsPlugin.h Diff File
mod - Modules/Loadable/SceneViews/qSlicerSceneViewsModule.cxx Diff File
mod - Modules/Loadable/SceneViews/qSlicerSceneViewsModule.h Diff File
mod - Modules/Loadable/SubjectHierarchy/Widgets/qSlicerSubjectHierarchyAbstractPlugin.cxx Diff File
mod - Modules/Loadable/SubjectHierarchy/Widgets/qSlicerSubjectHierarchyDefaultPlugin.cxx Diff File
mod - Modules/Loadable/SubjectHierarchy/Widgets/qSlicerSubjectHierarchyDefaultPlugin.h Diff File
mod - Modules/Loadable/Tables/SubjectHierarchyPlugins/qSlicerSubjectHierarchyTablesPlugin.cxx Diff File
mod - Modules/Loadable/Tables/SubjectHierarchyPlugins/qSlicerSubjectHierarchyTablesPlugin.h Diff File
mod - Modules/Loadable/Tables/qSlicerTablesModule.cxx Diff File
mod - Modules/Loadable/Tables/qSlicerTablesModule.h Diff File
mod - Modules/Loadable/Tables/qSlicerTablesModuleWidget.cxx Diff File
mod - Modules/Loadable/Tables/qSlicerTablesModuleWidget.h Diff File
mod - Modules/Loadable/Transforms/SubjectHierarchyPlugins/qSlicerSubjectHierarchyTransformsPlugin.cxx Diff File
mod - Modules/Loadable/Transforms/SubjectHierarchyPlugins/qSlicerSubjectHierarchyTransformsPlugin.h Diff File
mod - Modules/Loadable/Transforms/qSlicerTransformsModule.cxx Diff File
mod - Modules/Loadable/Transforms/qSlicerTransformsModule.h Diff File
mod - Modules/Loadable/Transforms/qSlicerTransformsModuleWidget.cxx Diff File
mod - Modules/Loadable/Transforms/qSlicerTransformsModuleWidget.h Diff File
mod - Modules/Loadable/VolumeRendering/Widgets/qSlicerVolumeRenderingModuleWidget.cxx Diff File
mod - Modules/Loadable/VolumeRendering/Widgets/qSlicerVolumeRenderingModuleWidget.h Diff File
mod - Modules/Loadable/VolumeRendering/qSlicerVolumeRenderingModule.cxx Diff File
mod - Modules/Loadable/VolumeRendering/qSlicerVolumeRenderingModule.h Diff File
mod - Modules/Loadable/Volumes/SubjectHierarchyPlugins/qSlicerSubjectHierarchyLabelMapsPlugin.cxx Diff File
mod - Modules/Loadable/Volumes/SubjectHierarchyPlugins/qSlicerSubjectHierarchyLabelMapsPlugin.h Diff File
mod - Modules/Loadable/Volumes/SubjectHierarchyPlugins/qSlicerSubjectHierarchyVolumesPlugin.cxx Diff File
mod - Modules/Loadable/Volumes/SubjectHierarchyPlugins/qSlicerSubjectHierarchyVolumesPlugin.h Diff File
mod - Modules/Loadable/Volumes/qSlicerVolumesModule.cxx Diff File
mod - Modules/Loadable/Volumes/qSlicerVolumesModule.h Diff File
mod - Modules/Loadable/Volumes/qSlicerVolumesModuleWidget.cxx Diff File
mod - Modules/Loadable/Volumes/qSlicerVolumesModuleWidget.h Diff File