Skip to content
  • lassoan's avatar
    BUG: Fixed edit properties option in node selectors · c031a49f
    lassoan authored
    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
    c031a49f