Ejemplo n.º 1
0
  def __init__(self, scriptedPlugin):
    AbstractScriptedSubjectHierarchyPlugin.__init__(self, scriptedPlugin)

    self.exportAsAction = qt.QAction(f"Export as...", scriptedPlugin)
    self.exportTransformedAsAction = qt.QAction(f"Export transformed as...", scriptedPlugin)
    self.menu = qt.QMenu("Plugin Menu")
    self.transformedMenu = qt.QMenu("Transformed Plugin Menu")
    self.exportAsAction.setMenu(self.menu)
    self.exportTransformedAsAction.setMenu(self.transformedMenu)
Ejemplo n.º 2
0
  def __init__(self, scriptedPlugin):
    AbstractScriptedSubjectHierarchyPlugin.__init__(self, scriptedPlugin)

    pluginHandlerSingleton = slicer.qSlicerSubjectHierarchyPluginHandler.instance()
    self.subjectHierarchyNode = pluginHandlerSingleton.subjectHierarchyNode()

    self.exportAsAction = qt.QAction(f"Export as...", scriptedPlugin)
    self.exportTransformedAsAction = qt.QAction(f"Export transformed as...", scriptedPlugin)
    self.menu = qt.QMenu("Plugin Menu")
    self.transformedMenu = qt.QMenu("Transformed Plugin Menu")
    self.exportAsAction.setMenu(self.menu)
    self.exportTransformedAsAction.setMenu(self.transformedMenu)
Ejemplo n.º 3
0
    def __init__(self, scriptedPlugin):
        self.logic = MarkupEditorLogic()
        self.selectOptions = {
            "set": "Set selection",
            "add": "Add to selection",
            "unset": "Remove from selection"
        }

        self.selectViewAction = qt.QAction(f"Pick points with curve...",
                                           scriptedPlugin)
        self.selectViewAction.objectName = 'SelectViewAction'
        self.selectViewAction.connect("triggered()", self.onSelectViewAction)

        self.selectMenu = qt.QMenu("Select Menu")
        self.selectViewAction.setMenu(self.selectMenu)

        for selectOption in self.selectOptions.keys():
            action = self.selectMenu.addAction(
                self.selectOptions[selectOption])
            slot = lambda selectOption=selectOption: self.onSelectViewAction(
                selectOption)
            action.connect("triggered()", slot)

        self.editViewAction = qt.QAction(f"Edit selected points",
                                         scriptedPlugin)
        self.editViewAction.objectName = 'EditViewAction'
        self.editViewAction.connect("triggered()", self.onEditViewAction)

        self.deleteViewAction = qt.QAction(f"Delete selected points",
                                           scriptedPlugin)
        self.deleteViewAction.objectName = 'DeleteViewAction'
        self.deleteViewAction.connect("triggered()", self.onDeleteViewAction)

        self.reset()
Ejemplo n.º 4
0
  def __init__(self, scriptedPlugin):
    AbstractScriptedSubjectHierarchyPlugin.__init__(self, scriptedPlugin)

    pluginHandlerSingleton = slicer.qSlicerSubjectHierarchyPluginHandler.instance()
    self.subjectHierarchyNode = pluginHandlerSingleton.subjectHierarchyNode()
    self.formatMarkupsAction = qt.QAction(f"Apply formatting to siblings", scriptedPlugin)
    self.menu = qt.QMenu("Plugin Menu")
    self.formatMarkupsAction.setMenu(self.menu)
Ejemplo n.º 5
0
 def __init__(self):
   qt.QToolButton.__init__(self)
   ModuleBase.__init__(self)
   self.setPopupMode(self.InstantPopup)
   self.setMenu(qt.QMenu(self))
   self.action = qt.QWidgetAction(self)
   self.listWidget = None
   self.setIcon(Icons.edit)
   self.enabled = False
Ejemplo n.º 6
0
 def _onMeasurementItemRightClicked(self, point):
   if not self._measurementsListWidget.currentIndex() or not self._measurementsListWidget.model().rowCount():
     return
   self.listMenu = qt.QMenu()
   menu_item = self.listMenu.addAction("Remove Item")
   menu_item.triggered.connect(self._onRemoveFindingRequested)
   parentPosition = self._measurementsListWidget.mapToGlobal(qt.QPoint(0, 0))
   self.listMenu.move(parentPosition + point)
   self.listMenu.show()
Ejemplo n.º 7
0
 def onRightClick(self):
     menu = qt.QMenu()
     position = qt.QCursor.pos()
     action = qt.QAction("Delete highlighted fiducial(s)", menu)
     menu.addAction(action)
     connectObject = qt.QObject()
     connectObject.connect(action, 'triggered()', self.onDeleteOneFiducialButton)
     action2 = qt.QAction("Cancel", menu)
     menu.addAction(action2)
     connectObject.connect(action2, 'triggered()', menu.hide)
     menu.exec_(position)
Ejemplo n.º 8
0
  def _addMenu(self, button):
    menu = qt.QMenu(button)
    menu.name = button.name
    button.setMenu(menu)

    actionGroup = qt.QActionGroup(menu)
    actionGroup.setExclusive(False)

    for name, enabled in [(self.LINEAR_MEASUREMENT, True), (self.VOLUMETRIC_MEASUREMENT, False)]:
      action = qt.QAction(name, actionGroup)
      action.setEnabled(enabled)
      menu.addAction(action)
      actionGroup.addAction(action)
      action.triggered.connect(lambda triggered, a=action: self._onActionTriggered(a))
Ejemplo n.º 9
0
    def _addMenu(self, button):
        menu = qt.QMenu(button)
        menu.name = button.name
        button.setMenu(menu)

        actionGroup = qt.QActionGroup(menu)
        actionGroup.setExclusive(False)

        for name, enabled in [("Linear Measurement", True),
                              ("Volumetric Measurement", False)]:
            action = qt.QAction(name, actionGroup)
            action.setEnabled(enabled)
            menu.addAction(action)
            actionGroup.addAction(action)
            action.triggered.connect(
                lambda triggered, a=action: self._onActionTriggered(a))
Ejemplo n.º 10
0
    def __init__(self, parent=None):
        """
    Called when the user opens the module the first time and the widget is initialized.
    """
        ScriptedLoadableModuleWidget.__init__(self, parent)
        VTKObservationMixin.__init__(
            self)  # needed for parameter node observation
        self.logic = None
        self._parameterNode = None
        self._updatingGUIFromParameterNode = False
        self.currentFiducialNode = None
        self.currentControlPointID = "-1"  # API gets/sets it as a string

        # Observe JumpToPointEvent of the fiducial display node.
        self.fiducialDisplayNodeObservation = None
        # Menus
        self.tableMenu = qt.QMenu()
Ejemplo n.º 11
0
    def __init__(self):
        toolTip = ''
        AbstractToolWidget.__init__(self, 'Draw', toolTip)

        # set up menu
        nearestModelAction = qt.QAction('To Nearest Model', self.effectButton)
        nearestModelAction.setCheckable(True)
        nearestModelAction.setChecked(True)
        twoLinesAction = qt.QAction('To Following Line', self.effectButton)
        twoLinesAction.setCheckable(True)
        actionsGroup = qt.QActionGroup(self.effectButton)
        actionsGroup.addAction(nearestModelAction)
        actionsGroup.addAction(twoLinesAction)
        menu = qt.QMenu(self.effectButton)
        menu.addActions(actionsGroup.actions())
        self.effectButton.setMenu(menu)
        self.effectButton.setPopupMode(self.effectButton.DelayedPopup)
Ejemplo n.º 12
0
  def setup(self):
    ScriptedLoadableModuleWidget.setup(self)

    # tracks the modified event observer on the currently
    # selected sequence browser node
    self.sequenceBrowserObserverRecord = None

    self.animatorActionsGUI = None

    self.logic = AnimatorLogic()

    # Instantiate and connect widgets ...

    #
    # Parameters Area
    #
    parametersCollapsibleButton = ctk.ctkCollapsibleButton()
    parametersCollapsibleButton.text = "Animation Parameters"
    self.layout.addWidget(parametersCollapsibleButton)

    # Layout within the dummy collapsible button
    parametersFormLayout = qt.QFormLayout(parametersCollapsibleButton)

    self.durationBox = ctk.ctkDoubleSpinBox()
    self.durationBox.suffix = " seconds"
    self.durationBox.decimals = 1
    self.durationBox.minimum = 1
    self.durationBox.value = 5
    self.durationBox.toolTip = "Duration cannot be changed after animation created"
    parametersFormLayout.addRow("New animation duration", self.durationBox)

    #
    # animation selector
    #
    self.animationSelector = slicer.qMRMLNodeComboBox()
    self.animationSelector.nodeTypes = ["vtkMRMLScriptedModuleNode"]
    self.animationSelector.setNodeTypeLabel("Animation", "vtkMRMLScriptedModuleNode")
    self.animationSelector.selectNodeUponCreation = True
    self.animationSelector.addEnabled = True
    self.animationSelector.addAttribute("vtkMRMLScriptedModuleNode", "ModuleName", "Animation")
    self.animationSelector.baseName = "Animation"
    self.animationSelector.removeEnabled = True
    self.animationSelector.noneEnabled = True
    self.animationSelector.showHidden = True
    self.animationSelector.showChildNodeTypes = False
    self.animationSelector.setMRMLScene( slicer.mrmlScene )
    self.animationSelector.setToolTip( "Pick the animation description." )
    parametersFormLayout.addRow("Animation Node: ", self.animationSelector)

    self.sequencePlay = slicer.qMRMLSequenceBrowserPlayWidget()
    self.sequencePlay.setMRMLScene(slicer.mrmlScene)
    self.sequenceSeek = slicer.qMRMLSequenceBrowserSeekWidget()
    self.sequenceSeek.setMRMLScene(slicer.mrmlScene)

    parametersFormLayout.addRow(self.sequencePlay)
    parametersFormLayout.addRow(self.sequenceSeek)

    self.actionsMenuButton = qt.QPushButton("Add Action")
    self.actionsMenuButton.enabled = False
    self.actionsMenu = qt.QMenu()
    self.actionsMenuButton.setMenu(self.actionsMenu)
    for actionName in slicer.modules.animatorActionPlugins.keys():
      qAction = qt.QAction(actionName, self.actionsMenu)
      qAction.connect('triggered()', lambda actionName=actionName: self.onAddAction(actionName))
      self.actionsMenu.addAction(qAction)
    parametersFormLayout.addWidget(self.actionsMenuButton)

    #
    # Actions Area
    #
    self.actionsCollapsibleButton = ctk.ctkCollapsibleButton()
    self.actionsCollapsibleButton.text = "Actions"
    self.layout.addWidget(self.actionsCollapsibleButton)

    # Layout within the dummy collapsible button
    self.actionsFormLayout = qt.QFormLayout(self.actionsCollapsibleButton)

    #
    # Export Area
    #
    self.exportCollapsibleButton = ctk.ctkCollapsibleButton()
    self.exportCollapsibleButton.text = "Export"
    self.layout.addWidget(self.exportCollapsibleButton)
    self.exportCollapsibleButton.enabled = False
    self.exportFormLayout = qt.QFormLayout(self.exportCollapsibleButton)

    self.sizeSelector = qt.QComboBox()
    for size in self.sizes.keys():
      self.sizeSelector.addItem(size)
    self.sizeSelector.currentText = self.defaultSize
    self.exportFormLayout.addRow("Animation size", self.sizeSelector)

    self.fileFormatSelector = qt.QComboBox()
    for format in self.fileFormats.keys():
      self.fileFormatSelector.addItem(format)
    self.fileFormatSelector.currentText = self.defaultFileFormat
    self.exportFormLayout.addRow("Animation format", self.fileFormatSelector)

    self.outputFileButton = qt.QPushButton("Select a file...")
    self.exportFormLayout.addRow("Output file", self.outputFileButton)

    self.exportButton = qt.QPushButton("Export")
    self.exportButton.enabled = False
    self.exportFormLayout.addRow("", self.exportButton)

    # connections
    self.animationSelector.connect("currentNodeChanged(vtkMRMLNode*)", self.onSelect)
    self.outputFileButton.connect("clicked()", self.selectExportFile)
    self.exportButton.connect("clicked()", self.onExport)

    # Add vertical spacer
    self.layout.addStretch(1)
Ejemplo n.º 13
0
    def setup(self):
        """
    Called when the user opens the module the first time and the widget is initialized.
    """
        ScriptedLoadableModuleWidget.setup(self)

        # Load widget from .ui file (created by Qt Designer).
        # Additional widgets can be instantiated manually and added to self.layout.
        uiWidget = slicer.util.loadUI(self.resourcePath('UI/LeadOR.ui'))
        self.layout.addWidget(uiWidget)
        self.ui = slicer.util.childWidgetVariables(uiWidget)

        if hasattr(slicer, 'vtkMRMLFiberBundleNode') and hasattr(
                slicer.vtkMRMLFiberBundleNode, 'GetExtractFromROI'):
            self.ui.stimulationCollapsibleButton.enabled = True
        else:
            self.ui.stimulationCollapsibleButton.enabled = False
            self.ui.stimulationCollapsibleButton.collapsed = True
            self.ui.stimulationCollapsibleButton.setToolTip(
                'Updated SlicerDMRI Extension needed for stimulation module')

        # AO Channels actions to ToolButton
        stimulationActionGroup = qt.QActionGroup(self.layout)
        for child in self.ui.microElectrodeLayoutFrame.children():
            if isinstance(child, qt.QToolButton):
                # channel
                AOChannelsAction = qt.QAction('AO Channels', self.layout)
                AOChannelsAction.setEnabled(False)
                AOChannelsAction.setMenu(qt.QMenu(child))
                child.addAction(AOChannelsAction)
                # stim
                stimulationAction = qt.QAction('Stim Source', self.layout)
                stimulationAction.setCheckable(True)
                stimulationAction.setEnabled(True)
                stimulationAction.toggled.connect(
                    self.updateStimulationTransform)
                stimulationActionGroup.addAction(stimulationAction)
                child.addAction(stimulationAction)

        # Set scene in MRML widgets. Make sure that in Qt designer the top-level qMRMLWidget's
        # "mrmlSceneChanged(vtkMRMLScene*)" signal in is connected to each MRML widget's.
        # "setMRMLScene(vtkMRMLScene*)" slot.
        uiWidget.setMRMLScene(slicer.mrmlScene)

        # Create logic class. Logic implements all computations that should be possible to run
        # in batch mode, without a graphical user interface.
        self.logic = LeadORLogic()

        # Connections

        # These connections ensure that we update parameter node when scene is closed
        self.addObserver(slicer.mrmlScene, slicer.mrmlScene.StartCloseEvent,
                         self.onSceneStartClose)
        self.addObserver(slicer.mrmlScene, slicer.mrmlScene.EndCloseEvent,
                         self.onSceneEndClose)

        # These connections ensure that whenever user changes some settings on the GUI, that is saved in the MRML scene
        # (in the selected parameter node).
        self.ui.distanceToTargetComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)",
            self.updateParameterNodeFromGUI)
        self.ui.trajectoryTransformComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)",
            self.updateParameterNodeFromGUI)
        self.ui.trajectoryTransformComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.guessSideFromTransform)

        # transforms hierarchy
        self.ui.distanceToTargetComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.setTransformsHierarchy)
        self.ui.trajectoryTransformComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)", self.setTransformsHierarchy)

        # reset ME when distance to target node change
        self.ui.distanceToTargetComboBox.currentNodeChanged.connect(
            lambda b, enabledList=[0] * 9: self.setMELayout(enabledList))

        # distance to target slider
        self.ui.distanceToTargetComboBox.connect(
            "currentNodeChanged(vtkMRMLNode*)", lambda node: self.ui.
            distanceToTargetSlider.setMRMLTransformNode(node))
        self.ui.distanceToTargetSlider.connect(
            "valueChanged(double)", lambda value: self.ui.
            distanceToTargetSlider.applyTransformation(value))

        # micro electrode layouts
        self.ui.MECenterLayoutPushButton.clicked.connect(
            lambda b, enabledList=[0, 0, 0, 0, 1, 0, 0, 0, 0
                                   ]: self.setMELayout(enabledList))
        self.ui.MEPlusLayoutPushButton.clicked.connect(
            lambda b, enabledList=[0, 1, 0, 1, 1, 1, 0, 1, 0
                                   ]: self.setMELayout(enabledList))
        self.ui.MEXLayoutPushButton.clicked.connect(
            lambda b, enabledList=[1, 0, 1, 0, 1, 0, 1, 0, 1
                                   ]: self.setMELayout(enabledList))

        # add connection for each micro electro toggle button
        for child in self.ui.microElectrodeLayoutFrame.children():
            if isinstance(child, qt.QToolButton):
                child.toggled.connect(
                    lambda b, N=int(child.objectName.split('_')[-1]
                                    ): self.microElectrodeLayoutToggle(b, N))

        # ME visibility
        self.ui.MEModelVisCheckBox.toggled.connect(
            lambda b: self.logic.setMEVisibility('microElectrodeModel', b))
        self.ui.MELineVisCheckBox.toggled.connect(
            lambda b: self.logic.setMEVisibility('trajectoryLine', b))
        self.ui.METipVisCheckBox.toggled.connect(
            lambda b: self.logic.setMEVisibility('tipFiducial', b))
        self.ui.METraceVisCheckBox.toggled.connect(
            lambda b: self.logic.setMEVisibility('traceModel', b))
        self.ui.MEClustersCheckBox.toggled.connect(
            lambda b: self.logic.setMEVisibility('clusterFiducials', b))

        # Stimulation
        self.ui.stimulationActiveCheckBox.connect('toggled(bool)',
                                                  self.onStimulationActivate)
        self.ui.stimulationAmplitudeSpinBox.valueChanged.connect(
            self.updateStimulationRadius)

        # Make sure parameter node is initialized (needed for module reload)
        self.initializeParameterNode()

        # AlphaOmega parameter node (Singleton)
        try:
            AOParameterNode = slicer.modules.alphaomega.logic(
            ).getParameterNode()
            self.addObserver(AOParameterNode, vtk.vtkCommand.ModifiedEvent,
                             self.updateParameterNodeFromAO)
            self.updateParameterNodeFromAO(AOParameterNode, None)
        except:
            pass
 def _addSubMenu(self, menu, layer, volumeClass):
   subMenuBackground = qt.QMenu(layer, menu)
   subMenuBackground.name = menu.name
   menu.addMenu(subMenuBackground)
   self._addActions(subMenuBackground, layer, volumeClass)
 def _addMenu(self, button):
   menu = qt.QMenu(button)
   menu.name = button.name
   button.setMenu(menu)
   menu.aboutToShow.connect(lambda m=menu: self._onMenuSelected(m))