def _init3DWidgetSpec_VolumeOpts(): return { 'numSteps': props.Widget('numSteps', showLimits=False), 'blendFactor': props.Widget('blendFactor', showLimits=False), 'blendByIntensity': props.Widget('blendByIntensity', showLimits=False), 'resolution': props.Widget('resolution', showLimits=False), 'numClipPlanes': props.Widget('numClipPlanes', slider=False, showLimits=False), 'clipMode': props.Widget('clipMode', labels=strings.choices['Volume3DOpts.clipMode']), 'showClipPlanes': props.Widget('showClipPlanes'), 'clipPosition': props.Widget('clipPosition', showLimits=False), 'clipAzimuth': props.Widget('clipAzimuth', showLimits=False), 'clipInclination': props.Widget('clipInclination', showLimits=False), 'custom_clipPlanes': _VolumeOpts_3DClipPlanes, }
def _initWidgetSpec_RGBVectorOpts(threedee): return { 'interpolation': props.Widget('interpolation', labels=strings.choices['VolumeOpts.interpolation']), 'unitLength': props.Widget('unitLength') }
def _initWidgetSpec_LineVectorOpts(threedee): return { 'directed': props.Widget('directed'), 'unitLength': props.Widget('unitLength'), 'orientFlip': props.Widget('orientFlip'), 'lineWidth': props.Widget('lineWidth', showLimits=False), 'lengthScale': props.Widget('lengthScale', showLimits=False), }
def _init3DWidgetSpec_MeshOpts(): return { 'wireframe': props.Widget('wireframe'), 'flatShading': props.Widget('flatShading', dependencies=['vertexData'], enabledWhen=lambda o, vd: vd is not None), }
def _initWidgetSpec_MaskOpts(threedee): return { 'custom_volume': _NiftiOpts_VolumeWidget, 'volume': props.Widget('volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndim > 3, spinWidth=6), 'volumeDim': props.Widget('volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndim > 4, spinWidth=2), 'interpolation': props.Widget('interpolation', labels=strings.choices['VolumeOpts.interpolation']), 'colour': props.Widget('colour'), 'invert': props.Widget('invert'), 'threshold': props.Widget('threshold', showLimits=False), 'outline': props.Widget('outline'), 'outlineWidth': props.Widget('outlineWidth', showLimits=False), }
def _initWidgetSpec_TensorOpts(threedee): return { 'lighting' : props.Widget('lighting'), 'orientFlip' : props.Widget('orientFlip'), 'tensorResolution' : props.Widget( 'tensorResolution', showLimits=False, spin=False, labels=[strings.choices['TensorOpts.tensorResolution.min'], strings.choices['TensorOpts.tensorResolution.max']]), 'tensorScale' : props.Widget( 'tensorScale', showLimits=False, spin=False), }
def __init__(self, parent, overlayList, displayCtx, frame, histPanel): """Create a ``HistogramToolBar``. :arg parent: The :mod:`wx` parent object. :arg overlayList: The :class:`.OverlayList` instance. :arg displayCtx: The :class:`.DisplayContext` instance. :arg frame: The :class:`.FSLeyesFrame` instance. :arg histPanel: The :class:`.HistogramPanel` instance. """ plottoolbar.PlotToolBar.__init__(self, parent, overlayList, displayCtx, frame, histPanel) togControl = actions.ToggleActionButton( 'toggleHistogramControl', actionKwargs={'floatPane': True}, icon=[ icons.findImageFile('spannerHighlight24'), icons.findImageFile('spanner24') ], tooltip=tooltips.actions[histPanel, 'toggleHistogramControl']) togList = actions.ToggleActionButton( 'togglePlotList', actionKwargs={'floatPane': True}, icon=[ icons.findImageFile('listHighlight24'), icons.findImageFile('list24') ], tooltip=tooltips.actions[histPanel, 'togglePlotList']) togOverlay = actions.ToggleActionButton( 'toggleHistogramOverlay', icon=[ icons.findImageFile('histogramOverlayHighlight24'), icons.findImageFile('histogramOverlay24') ]) mode = props.Widget('histType', labels=strings.choices[histPanel, 'histType'], tooltip=tooltips.properties[histPanel, 'histType']) togControl = props.buildGUI(self, histPanel, togControl) togList = props.buildGUI(self, histPanel, togList) togOverlay = props.buildGUI(self, histPanel, togOverlay) mode = props.buildGUI(self, histPanel, mode) lblMode = self.MakeLabelledTool( mode, strings.properties[histPanel, 'histType']) self.InsertTools([togControl, togList], 0) self.AddTool(togOverlay) self.AddTool(lblMode) nav = [togControl, togList] + \ self.getCommonNavOrder() + \ [togOverlay, mode] self.setNavOrder(nav)
def _initWidgetSpec_LabelOpts(threedee): return { 'lut' : props.Widget('lut', labels=lambda l: l.name), 'outline' : props.Widget('outline'), 'outlineWidth' : props.Widget('outlineWidth', showLimits=False), 'custom_volume' : _NiftiOpts_VolumeWidget, 'volume' : props.Widget( 'volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndim > 3, spinWidth=6), 'volumeDim' : props.Widget( 'volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndim > 4, spinWidth=2), }
def _initWidgetSpec_MIPOpts(threedee): return { 'custom_volume': _NiftiOpts_VolumeWidget, 'volume': props.Widget('volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndim > 3, spinWidth=6), 'volumeDim': props.Widget('volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndim > 4, spinWidth=2), 'interpolation': props.Widget('interpolation', labels=strings.choices['VolumeOpts.interpolation']), 'window': props.Widget('window', showLimits=False, slider=True), 'minimum': props.Widget('minimum'), 'absolute': props.Widget('absolute'), }
def _initWidgetSpec_MaskOpts(threedee): return { 'custom_volume': _NiftiOpts_VolumeWidget, 'volume': props.Widget('volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndims > 3, spinWidth=6), 'volumeDim': props.Widget('volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndims > 4, spinWidth=2), 'colour': props.Widget('colour'), 'invert': props.Widget('invert'), 'threshold': props.Widget('threshold', showLimits=False), }
def _initWidgetSpec_Display(threedee): return { 'name' : props.Widget('name'), 'overlayType' : props.Widget( 'overlayType', labels=strings.choices['Display.overlayType']), 'enabled' : props.Widget('enabled'), 'alpha' : props.Widget('alpha', showLimits=False), 'brightness' : props.Widget('brightness', showLimits=False), 'contrast' : props.Widget('contrast', showLimits=False), }
def _initWidgetSpec_VolumeOpts(threedee): def imageName(img): if img is None: return 'None' else: return img.name return { 'custom_volume': _NiftiOpts_VolumeWidget, 'custom_overrideDataRange': _VolumeOpts_OverrideDataRangeWidget, 'channel': props.Widget('channel'), 'volume': props.Widget('volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndim > 3, spinWidth=6), 'volumeDim': props.Widget('volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndim > 4, spinWidth=2), 'interpolation': props.Widget('interpolation', labels=strings.choices['VolumeOpts.interpolation']), 'clipImage': props.Widget('clipImage', labels=imageName), 'modulateImage': props.Widget('modulateImage', labels=imageName), 'enableOverrideDataRange': props.Widget('enableOverrideDataRange'), 'overrideDataRange': props.Widget('overrideDataRange', showLimits=False, spin=True, slider=False, dependencies=['enableOverrideDataRange'], enabledWhen=lambda vo, en: en), }
def _initWidgetSpec_MeshOpts(threedee): def imageName(img): if img is None: return 'None' else: return img.name def pathName(vdata): if vdata is None: return 'None' else: return op.basename(vdata) def colourEnabledWhen(opts, vdata, useLut): return (vdata is not None) and (not useLut) colourKwargs = { 'dependencies': ['vertexData', 'useLut'], 'enabledWhen': colourEnabledWhen } return { 'outline': props.Widget('outline', dependencies=['vertexData'], enabledWhen=lambda o, v: v is None), 'outlineWidth': props.Widget('outlineWidth', showLimits=False, dependencies=['outline', 'vertexData'], enabledWhen=lambda op, o, v: o or v is not None), 'refImage': props.Widget('refImage', labels=imageName), 'coordSpace': props.Widget('coordSpace', enabledWhen=lambda o, ri: ri != 'none', labels=strings.choices['MeshOpts.coordSpace'], dependencies=['refImage']), 'colour': props.Widget('colour'), 'custom_vertexData': _MeshOpts_vertexDataWidget, 'custom_vertexSet': _MeshOpts_vertexSetWidget, 'vertexSet': props.Widget('vertexSet', labels=pathName), 'vertexData': props.Widget('vertexData', labels=pathName), 'modulateData': props.Widget('modulateData', labels=pathName), 'vertexDataIndex': props.Widget('vertexDataIndex', showLimits=False, dependencies=['vertexData'], enabledWhen=lambda o, vd: vd is not None), 'useLut': props.Widget('useLut', dependencies=['vertexData'], enabledWhen=lambda o, vd: vd is not None), 'custom_lut': _MeshOpts_LutWidget, 'lut': props.Widget('lut', labels=lambda l: l.name, dependencies=['vertexData'], enabledWhen=lambda o, vd: vd is not None), # We override the ColourMapOpts definitions # for custom enabledWhen behaviour. 'cmap': props.Widget('cmap', labels=fslcm.getColourMapLabel, **colourKwargs), 'useNegativeCmap': props.Widget('useNegativeCmap', **colourKwargs), 'negativeCmap': props.Widget('negativeCmap', labels=fslcm.getColourMapLabel, **colourKwargs), 'cmapResolution': props.Widget('cmapResolution', slider=True, spin=True, showLimits=False, **colourKwargs), 'interpolateCmaps': props.Widget('interpolateCmaps', **colourKwargs), 'invert': props.Widget('invert', **colourKwargs), 'invertClipping': props.Widget('invertClipping', **colourKwargs), 'linkLowRanges': props.Widget('linkLowRanges', **colourKwargs), 'linkHighRanges': props.Widget('linkHighRanges', **colourKwargs), 'displayRange': props.Widget('displayRange', showLimits=False, slider=True, labels=[ strings.choices['ColourMapOpts.displayRange.min'], strings.choices['ColourMapOpts.displayRange.max'] ], **colourKwargs), 'clippingRange': props.Widget('clippingRange', showLimits=False, slider=True, labels=[ strings.choices['ColourMapOpts.displayRange.min'], strings.choices['ColourMapOpts.displayRange.max'] ], dependencies=['vertexData'], enabledWhen=lambda o, vd: vd is not None), 'discardClipped': props.Widget('discardClipped', **colourKwargs), }
def _initWidgetSpec_SHOpts(threedee): return { 'shResolution': props.Widget('shResolution', spin=False, showLimits=False), 'shOrder': props.Widget('shOrder'), 'orientFlip': props.Widget('orientFlip'), 'lighting': props.Widget('lighting'), 'normalise': props.Widget('normalise'), 'size': props.Widget('size', spin=False, showLimits=False), 'radiusThreshold': props.Widget('radiusThreshold', spin=False, showLimits=False), 'colourMode': props.Widget('colourMode', labels=strings.choices['SHOpts.colourMode'], dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'cmap': props.Widget( 'cmap', labels=fslcm.getColourMapLabel, dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is not None or cm == 'radius'), 'xColour': props.Widget( 'xColour', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'yColour': props.Widget( 'yColour', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'zColour': props.Widget( 'zColour', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'suppressX': props.Widget( 'suppressX', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'suppressY': props.Widget( 'suppressY', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'suppressZ': props.Widget( 'suppressZ', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), 'suppressMode': props.Widget( 'suppressMode', dependencies=['colourImage', 'colourMode'], enabledWhen=lambda o, ci, cm: ci is None and cm == 'direction'), }
def _initWidgetSpec_VectorOpts(threedee): def imageName(img): if img is None: return 'None' else: return img.name return { 'colourImage': props.Widget('colourImage', labels=imageName), 'modulateImage': props.Widget('modulateImage', labels=imageName, dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'clipImage': props.Widget('clipImage', labels=imageName), 'cmap': props.Widget('cmap', labels=fslcm.getColourMapLabel, dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is not None), 'clippingRange': props.Widget('clippingRange', showLimits=False, slider=True, labels=[ strings.choices['VectorOpts.clippingRange.min'], strings.choices['VectorOpts.clippingRange.max'] ], dependencies=['clipImage'], enabledWhen=lambda o, ci: ci is not None), 'modulateRange': props.Widget( 'modulateRange', showLimits=False, slider=True, labels=[ strings.choices['VectorOpts.modulateRange.min'], strings.choices['VectorOpts.modulateRange.max'] ], dependencies=['colourImage', 'modulateImage'], enabledWhen=lambda o, ci, mi: ci is None and mi is not None), 'xColour': props.Widget('xColour', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'yColour': props.Widget('yColour', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'zColour': props.Widget('zColour', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'suppressX': props.Widget('suppressX', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'suppressY': props.Widget('suppressY', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'suppressZ': props.Widget('suppressZ', dependencies=['colourImage'], enabledWhen=lambda o, ci: ci is None), 'suppressMode': props.Widget('suppressMode', dependencies=['colourImage'], labels=strings.choices['VectorOpts.suppressMode'], enabledWhen=lambda o, ci: ci is None), }
def __makeTools(self, *a): """Called by :meth:`__init__`, and whenever the :attr:`.ViewPanel.profile` property changes. Re-creates all tools shown on this ``OrthoToolBar``. """ ortho = self.orthoPanel orthoOpts = ortho.sceneOpts profile = ortho.getCurrentProfile() coronalIcon = 'coronalSlice24' coronalHighlightIcon = 'coronalSliceHighlight24' icons = { 'screenshot': fslicons.findImageFile('camera24'), 'resetDisplay': fslicons.findImageFile('resetZoom24'), 'showCursorAndLabels': [ fslicons.findImageFile('addHighlight24'), fslicons.findImageFile('add24') ], 'movieMode': [ fslicons.findImageFile('movieHighlight24'), fslicons.findImageFile('movie24') ], 'showXCanvas': [ fslicons.findImageFile('sagittalSliceHighlight24'), fslicons.findImageFile('sagittalSlice24') ], 'showYCanvas': [ fslicons.findImageFile(coronalHighlightIcon), fslicons.findImageFile(coronalIcon) ], 'showZCanvas': [ fslicons.findImageFile('axialSliceHighlight24'), fslicons.findImageFile('axialSlice24') ], 'toggleCanvasSettingsPanel': [ fslicons.findImageFile('spannerHighlight24'), fslicons.findImageFile('spanner24') ], 'layout': { 'horizontal': [ fslicons.findImageFile('horizontalLayoutHighlight24'), fslicons.findImageFile('horizontalLayout24') ], 'vertical': [ fslicons.findImageFile('verticalLayoutHighlight24'), fslicons.findImageFile('verticalLayout24') ], 'grid': [ fslicons.findImageFile('gridLayoutHighlight24'), fslicons.findImageFile('gridLayout24') ] } } tooltips = { 'screenshot': fsltooltips.actions[ortho, 'screenshot'], 'resetDisplay': fsltooltips.actions[profile, 'resetDisplay'], 'movieMode': fsltooltips.properties[ortho, 'movieMode'], 'showCursorAndLabels': fsltooltips.properties[self, 'showCursorAndLabels'], 'zoom': fsltooltips.properties[orthoOpts, 'zoom'], 'layout': fsltooltips.properties[orthoOpts, 'layout'], 'showXCanvas': fsltooltips.properties[orthoOpts, 'showXCanvas'], 'showYCanvas': fsltooltips.properties[orthoOpts, 'showYCanvas'], 'showZCanvas': fsltooltips.properties[orthoOpts, 'showZCanvas'], 'toggleCanvasSettingsPanel': fsltooltips.actions[ortho, 'toggleCanvasSettingsPanel'], } targets = { 'screenshot': ortho, 'movieMode': ortho, 'showCursorAndLabels': self, 'resetDisplay': profile, 'zoom': orthoOpts, 'layout': orthoOpts, 'showXCanvas': orthoOpts, 'showYCanvas': orthoOpts, 'showZCanvas': orthoOpts, 'toggleCanvasSettingsPanel': ortho } toolSpecs = [ actions.ToggleActionButton( 'toggleCanvasSettingsPanel', actionKwargs={'floatPane': True}, icon=icons['toggleCanvasSettingsPanel'], tooltip=tooltips['toggleCanvasSettingsPanel']), actions.ActionButton('screenshot', icon=icons['screenshot'], tooltip=tooltips['screenshot']), 'div', props.Widget('showXCanvas', icon=icons['showXCanvas'], tooltip=tooltips['showXCanvas']), props.Widget('showYCanvas', icon=icons['showYCanvas'], tooltip=tooltips['showYCanvas']), props.Widget('showZCanvas', icon=icons['showZCanvas'], tooltip=tooltips['showZCanvas']), 'div', props.Widget('layout', icons=icons['layout'], tooltip=tooltips['layout']), 'div', props.Widget('movieMode', icon=icons['movieMode'], tooltip=tooltips['movieMode']), props.Widget('showCursorAndLabels', icon=icons['showCursorAndLabels'], tooltip=tooltips['showCursorAndLabels']), actions.ActionButton('resetDisplay', icon=icons['resetDisplay'], tooltip=tooltips['resetDisplay']), props.Widget('zoom', spin=True, slider=True, showLimits=False, spinWidth=5, tooltip=tooltips['zoom']), ] tools = [] nav = [] for spec in toolSpecs: if spec == 'div': tools.append( fsltoolbar.ToolBarDivider(self, height=24, orient=wx.VERTICAL)) continue widget = props.buildGUI(self, targets[spec.key], spec) navWidget = widget if spec.key in ('zoom', ): widget = self.MakeLabelledTool( widget, strings.properties[targets[spec.key], spec.key]) tools.append(widget) nav.append(navWidget) self.SetTools(tools, destroy=True) self.setNavOrder(nav)
def _initWidgetSpec_ComplexOpts(threedee): return { 'component': props.Widget('component', labels=strings.choices['ComplexOpts.component']) }
def _initWidgetSpec_ColourMapOpts(threedee): return { 'custom_cmap': _ColourMapOpts_ColourMapWidget, 'cmap': props.Widget('cmap', labels=fslcm.getColourMapLabel), 'useNegativeCmap': props.Widget('useNegativeCmap'), 'negativeCmap': props.Widget('negativeCmap', labels=fslcm.getColourMapLabel, dependencies=['useNegativeCmap'], enabledWhen=lambda i, unc: unc), 'cmapResolution': props.Widget('cmapResolution', slider=True, spin=True, showLimits=False), 'interpolateCmaps': props.Widget('interpolateCmaps'), 'invert': props.Widget('invert'), 'invertClipping': props.Widget('invertClipping'), 'linkLowRanges': props.Widget('linkLowRanges'), 'linkHighRanges': props.Widget('linkHighRanges'), 'modulateAlpha': props.Widget('modulateAlpha'), 'gamma': props.Widget('gamma', showLimits=False, slider=True, spin=True), 'displayRange': props.Widget('displayRange', showLimits=False, slider=True, labels=[ strings.choices['ColourMapOpts.displayRange.min'], strings.choices['ColourMapOpts.displayRange.max'] ]), 'clippingRange': props.Widget('clippingRange', showLimits=False, slider=True, labels=[ strings.choices['ColourMapOpts.displayRange.min'], strings.choices['ColourMapOpts.displayRange.max'] ]), 'modulateRange': props.Widget('modulateRange', showLimits=False, slider=True, dependencies=['modulateAlpha'], enabledWhen=lambda i, ma: ma, labels=[ strings.choices['ColourMapOpts.displayRange.min'], strings.choices['ColourMapOpts.displayRange.max'] ]), }
def __makeTools(self): """Called by :meth:`__init__`. Creates the toolbar widgets. """ panel = self.panel opts = panel.sceneOpts profile = panel.getCurrentProfile() icons = { 'screenshot': fslicons.findImageFile('camera24'), 'resetDisplay': fslicons.findImageFile('resetZoom24'), 'showCursorAndLegend': [ fslicons.findImageFile('addHighlight24'), fslicons.findImageFile('add24') ], 'movieMode': [ fslicons.findImageFile('movieHighlight24'), fslicons.findImageFile('movie24') ], 'toggleCanvasSettingsPanel': [ fslicons.findImageFile('spannerHighlight24'), fslicons.findImageFile('spanner24') ], } tooltips = { 'screenshot': fsltooltips.actions[panel, 'screenshot'], 'resetDisplay': fsltooltips.actions[profile, 'resetDisplay'], 'movieMode': fsltooltips.properties[panel, 'movieMode'], 'showCursorAndLegend': fsltooltips.properties[self, 'showCursorAndLegend'], 'zoom': fsltooltips.properties[opts, 'zoom'], 'toggleCanvasSettingsPanel': fsltooltips.actions[panel, 'toggleCanvasSettingsPanel'], } targets = { 'screenshot': panel, 'resetDisplay': profile, 'movieMode': panel, 'showCursorAndLegend': self, 'zoom': opts, 'toggleCanvasSettingsPanel': panel, } toolSpecs = [ actions.ToggleActionButton( 'toggleCanvasSettingsPanel', actionKwargs={'floatPane': True}, icon=icons['toggleCanvasSettingsPanel'], tooltip=tooltips['toggleCanvasSettingsPanel']), actions.ActionButton('screenshot', icon=icons['screenshot'], tooltip=tooltips['screenshot']), 'div', props.Widget('movieMode', icon=icons['movieMode'], tooltip=tooltips['movieMode']), props.Widget('showCursorAndLegend', icon=icons['showCursorAndLegend'], tooltip=tooltips['showCursorAndLegend']), actions.ActionButton('resetDisplay', icon=icons['resetDisplay'], tooltip=tooltips['resetDisplay']), props.Widget('zoom', spin=True, slider=True, showLimits=False, spinWidth=5, tooltip=tooltips['zoom']), ] tools = [] nav = [] for spec in toolSpecs: if spec == 'div': tools.append( fsltoolbar.ToolBarDivider(self, height=24, orient=wx.VERTICAL)) continue widget = props.buildGUI(self, targets[spec.key], spec) navWidget = widget if spec.key in ('zoom', ): widget = self.MakeLabelledTool( widget, strings.properties[targets[spec.key], spec.key]) tools.append(widget) nav.append(navWidget) self.SetTools(tools, destroy=True) self.setNavOrder(nav)
'targetImage': fsltooltips.properties['OrthoEditProfile.targetImage'], } """This dictionary contains tooltips for some :class:`OrthoEditToolBar` controls. It is referenced in the :attr:`_TOOLBAR_SPECS` dictionary. """ def _targetImageName(image): if image is None: return 'None' else: return image.name _TOOLBAR_SPECS = [ props.Widget('drawMode', toggle=False, icon=_ICONS['drawMode'], tooltip=_TOOLTIPS['drawMode'], style=wx.HORIZONTAL), 'div', props.Widget('mode', icons=_ICONS['mode'], tooltip=_TOOLTIPS['mode'], fixChoices=['nav', 'sel', 'desel', 'fill', 'selint']), 'div', props.Widget('selectionIs3D', icon=_ICONS['selectionIs3D'], tooltip=_TOOLTIPS['selectionIs3D'], toggle=False, dependencies=['mode'], enabledWhen=lambda p, m: m != 'fill'), props.Widget('limitToRadius', icon=_ICONS['limitToRadius'], tooltip=_TOOLTIPS['limitToRadius'],
def _initWidgetSpec_VolumeRGBOpts(threedee): return { 'custom_volume': _NiftiOpts_VolumeWidget, 'volume': props.Widget('volume', showLimits=False, enabledWhen=lambda o: o.overlay.ndim > 3, spinWidth=6), 'volumeDim': props.Widget('volumeDim', showLimits=False, slider=False, enabledWhen=lambda o: o.overlay.ndim > 4, spinWidth=2), 'interpolation': props.Widget('interpolation', labels=strings.choices['VolumeOpts.interpolation']), 'rColour': props.Widget('rColour'), 'gColour': props.Widget('gColour'), 'bColour': props.Widget('bColour'), 'suppressR': props.Widget('suppressR'), 'suppressG': props.Widget('suppressG'), 'suppressB': props.Widget('suppressB'), 'suppressA': props.Widget('suppressA'), 'suppressMode': props.Widget('suppressMode'), }
def _init3DWidgetSpec_MeshOpts(): return { 'wireframe': props.Widget('wireframe'), }
'SHOpts.lighting': fsltooltips.properties['SHOpts.lighting'], 'SHOpts.size': fsltooltips.properties['SHOpts.size'], 'SHOpts.radiusThreshold': fsltooltips.properties['SHOpts.' 'radiusThreshold'], }) """This dictionary contains tooltips for :class:`.Display` and :class:`.DisplayOpts` properties. It is referenced in the :attr:`_TOOLBAR_PROPS` dictionary definition. """ _TOOLBAR_PROPS = td.TypeDict({ 'Display.name': props.Widget('name', tooltip=_TOOLTIPS['Display.name']), 'Display.overlayType': props.Widget('overlayType', tooltip=_TOOLTIPS['Display.overlayType'], labels=strings.choices['Display.overlayType']), 'Display.alpha': props.Widget('alpha', spin=False, showLimits=False, tooltip=_TOOLTIPS['Display.alpha']), 'Display.brightness': props.Widget('brightness', spin=False, showLimits=False, tooltip=_TOOLTIPS['Display.brightness']), 'Display.contrast':
def __init__(self, parent, overlayList, displayCtx, frame, lb): """Create a ``LightBoxToolBar``. :arg parent: The :mod:`wx` parent object. :arg overlayList: The :class:`.OverlayList` instance. :arg displayCtx: The :class:`.DisplayContext` instance. :arg frame: The :class:`.FSLeyesFrame` instance. :arg lb: The :class:`.LightBoxPanel` instance. """ fsltoolbar.FSLeyesToolBar.__init__(self, parent, overlayList, displayCtx, frame, height=24, kbFocus=True) self.lightBoxPanel = lb lbOpts = lb.sceneOpts if BUM_MODE: coronalIcon = 'coronalBumSlice24' else: coronalIcon = 'coronalSlice24' if BUM_MODE: coronalHighlightIcon = 'coronalBumSliceHighlight24' else: coronalHighlightIcon = 'coronalSliceHighlight24' icons = { 'screenshot': fslicons.findImageFile('camera24'), 'movieMode': [ fslicons.findImageFile('movieHighlight24'), fslicons.findImageFile('movie24') ], 'toggleCanvasSettingsPanel': [ fslicons.findImageFile('spannerHighlight24'), fslicons.findImageFile('spanner24') ], 'zax': { 0: [ fslicons.findImageFile('sagittalSliceHighlight24'), fslicons.findImageFile('sagittalSlice24') ], 1: [ fslicons.findImageFile(coronalHighlightIcon), fslicons.findImageFile(coronalIcon) ], 2: [ fslicons.findImageFile('axialSliceHighlight24'), fslicons.findImageFile('axialSlice24') ], } } tooltips = { 'screenshot': fsltooltips.actions[lb, 'screenshot'], 'movieMode': fsltooltips.properties[lb, 'movieMode'], 'zax': fsltooltips.properties[lbOpts, 'zax'], 'sliceSpacing': fsltooltips.properties[lbOpts, 'sliceSpacing'], 'zrange': fsltooltips.properties[lbOpts, 'zrange'], 'zoom': fsltooltips.properties[lbOpts, 'zoom'], 'toggleCanvasSettingsPanel': fsltooltips.actions[lb, 'toggleCanvasSettingsPanel'], } specs = { 'toggleCanvasSettingsPanel': actions.ToggleActionButton( 'toggleCanvasSettingsPanel', actionKwargs={'floatPane': True}, icon=icons['toggleCanvasSettingsPanel'], tooltip=tooltips['toggleCanvasSettingsPanel']), 'screenshot': actions.ActionButton('screenshot', icon=icons['screenshot'], tooltip=tooltips['screenshot']), 'movieMode': props.Widget('movieMode', icon=icons['movieMode'], tooltip=tooltips['movieMode']), 'zax': props.Widget('zax', icons=icons['zax'], tooltip=tooltips['zax']), 'sliceSpacing': props.Widget('sliceSpacing', spin=False, showLimits=False, tooltip=tooltips['sliceSpacing']), 'zrange': props.Widget('zrange', spin=False, showLimits=False, tooltip=tooltips['zrange'], labels=[ strings.choices[lbOpts, 'zrange', 'min'], strings.choices[lbOpts, 'zrange', 'max'] ]), 'zoom': props.Widget('zoom', spin=False, showLimits=False, tooltip=tooltips['zoom']), } # Slice spacing and zoom go on a single panel panel = wx.Panel(self) sizer = wx.FlexGridSizer(2, 2, 0, 0) panel.SetSizer(sizer) more = props.buildGUI(self, lb, specs['toggleCanvasSettingsPanel']) screenshot = props.buildGUI(self, lb, specs['screenshot']) movieMode = props.buildGUI(self, lb, specs['movieMode']) zax = props.buildGUI(self, lbOpts, specs['zax']) zrange = props.buildGUI(self, lbOpts, specs['zrange']) zoom = props.buildGUI(panel, lbOpts, specs['zoom']) spacing = props.buildGUI(panel, lbOpts, specs['sliceSpacing']) zoomLabel = wx.StaticText(panel) spacingLabel = wx.StaticText(panel) zoomLabel.SetLabel(strings.properties[lbOpts, 'zoom']) spacingLabel.SetLabel(strings.properties[lbOpts, 'sliceSpacing']) sizer.Add(zoomLabel) sizer.Add(zoom, flag=wx.EXPAND) sizer.Add(spacingLabel) sizer.Add(spacing, flag=wx.EXPAND) tools = [ more, screenshot, fsltoolbar.ToolBarDivider(self, height=24, orient=wx.VERTICAL), zax, fsltoolbar.ToolBarDivider(self, height=24, orient=wx.VERTICAL), movieMode, zrange, panel ] nav = [more, screenshot, zax, movieMode, zrange, zoom, spacing] self.SetTools(tools) self.setNavOrder(nav)
def generateCustomDataSeriesWidgets(self, hs, groupName): """Overrides :meth:`.PlotControlPanel.generateCustomDataSeriesWidgets`. Adds some widgets to control properties of the :class:`.HistogramSeries`. """ isimage = isinstance(hs, hseries.ImageHistogramSeries) widgetList = self.getWidgetList() allWidgets = [] autoBin = props.Widget('autoBin') nbins = props.Widget('nbins', enabledWhen=lambda i: not i.autoBin, showLimits=False) autoBin = props.buildGUI(widgetList, hs, autoBin) nbins = props.buildGUI(widgetList, hs, nbins) dataRange = props.makeWidget( widgetList, hs, 'dataRange', labels=[ strings.choices['HistogramPanel.dataRange.min'], strings.choices['HistogramPanel.dataRange.max'] ], showLimits=False) ignoreZeros = props.makeWidget(widgetList, hs, 'ignoreZeros') includeOutliers = props.makeWidget(widgetList, hs, 'includeOutliers') widgetList.AddWidget(ignoreZeros, groupName=groupName, displayName=strings.properties[hs, 'ignoreZeros'], tooltip=fsltooltips.properties[hs, 'ignoreZeros']) allWidgets.append(ignoreZeros) if isimage: showOverlay = props.makeWidget(widgetList, hs, 'showOverlay') widgetList.AddWidget(showOverlay, groupName=groupName, displayName=strings.properties[hs, 'showOverlay'], tooltip=fsltooltips.properties[hs, 'showOverlay']) allWidgets.append(showOverlay) widgetList.AddWidget(includeOutliers, groupName=groupName, displayName=strings.properties[hs, 'includeOutliers'], tooltip=fsltooltips.properties[hs, 'includeOutliers']) widgetList.AddWidget(autoBin, groupName=groupName, displayName=strings.properties[hs, 'autoBin'], tooltip=fsltooltips.properties[hs, 'autoBin']) widgetList.AddWidget(nbins, groupName=groupName, displayName=strings.properties[hs, 'nbins'], tooltip=fsltooltips.properties[hs, 'nbins']) widgetList.AddWidget(dataRange, groupName=groupName, displayName=strings.properties[hs, 'dataRange'], tooltip=fsltooltips.properties[hs, 'dataRange']) allWidgets.append(includeOutliers) allWidgets.append(autoBin) allWidgets.append(nbins) allWidgets.append(dataRange) if isinstance(hs, hseries.ComplexHistogramSeries): for propName in [ 'plotReal', 'plotImaginary', 'plotMagnitude', 'plotPhase' ]: widget = props.makeWidget(widgetList, hs, propName) widgetList.AddWidget(widget, groupName=groupName, displayName=strings.properties[hs, propName], tooltip=fsltooltips.properties[hs, propName]) allWidgets.append(widget) return allWidgets
def __makeTools(self): displayCtx = self.displayCtx canvasPanel = self.__canvasPanel widgets = self.getWidgetList() canvasPanelProps = collections.OrderedDict( (('syncOverlayOrder', props.Widget('syncOverlayOrder')), ('syncLocation', props.Widget('syncLocation')), ('syncOverlayDisplay', props.Widget('syncOverlayDisplay')), ('syncOverlayVolume', props.Widget('syncOverlayVolume')), ('movieMode', props.Widget('movieMode')), ('movieSyncRefresh', props.Widget('movieSyncRefresh')), ('movieAxis', props.Widget('movieAxis', labels=strings.choices[canvasPanel, 'movieAxis'])), ('movieRate', props.Widget('movieRate', spin=False, showLimits=False)))) sceneOptsProps = collections.OrderedDict( (('showCursor', props.Widget('showCursor')), ('bgColour', props.Widget('bgColour')), ('fgColour', props.Widget('fgColour')), ('cursorColour', props.Widget('cursorColour')), ('performance', props.Widget('performance', spin=False, showLimits=False, labels=strings.choices['SceneOpts.performance'])), ('highDpi', props.Widget('highDpi')), ('showColourBar', props.Widget('showColourBar')), ('colourBarLabelSide', props.Widget( 'colourBarLabelSide', labels=strings.choices['SceneOpts.colourBarLabelSide'], enabledWhen=lambda o: o.showColourBar)), ('colourBarLocation', props.Widget( 'colourBarLocation', labels=strings.choices['SceneOpts.colourBarLocation'], enabledWhen=lambda o: o.showColourBar)), ('colourBarSize', props.Widget('colourBarSize', showLimits=False, slider=True, spin=True)), ('labelSize', props.Widget('labelSize', spin=True, showLimits=False)))) # The highDpi setting is # only relevant on macOS if platform.system != 'Darwin': sceneOptsProps.pop('highDpi') def _displaySpaceOptionName(opt): if isinstance(opt, fslimage.Nifti): return opt.name else: return strings.choices['DisplayContext.displaySpace'][opt] displayCtxProps = collections.OrderedDict( (('displaySpace', props.Widget('displaySpace', labels=_displaySpaceOptionName, dependencies=[(canvasPanel, 'profile')], enabledWhen=lambda i, p: p == 'view')), ('radioOrientation', props.Widget('radioOrientation')))) orthoOptsProps = collections.OrderedDict( (('layout', props.Widget('layout', labels=strings.choices['OrthoOpts.layout'])), ('zoom', props.Widget('zoom', showLimits=False)), ('showLabels', props.Widget('showLabels')), ('cursorGap', props.Widget('cursorGap')), ('showXCanvas', props.Widget('showXCanvas')), ('showYCanvas', props.Widget('showYCanvas')), ('showZCanvas', props.Widget('showZCanvas')))) lightBoxOptsProps = collections.OrderedDict( (('zax', props.Widget('zax', labels=strings.choices['CanvasOpts.zax'])), ('zoom', props.Widget('zoom', showLimits=False, spin=False)), ('sliceSpacing', props.Widget('sliceSpacing', showLimits=False)), ('zrange', props.Widget('zrange', showLimits=False)), ('highlightSlice', props.Widget('highlightSlice')), ('showGridLines', props.Widget('showGridLines')))) scene3dOptsProps = collections.OrderedDict(( ('zoom', props.Widget('zoom', showLimits=False)), ('showLegend', props.Widget('showLegend')), ('light', props.Widget('light')), ('occlusion', props.Widget('occlusion')), )) import fsleyes.views.orthopanel as orthopanel import fsleyes.views.lightboxpanel as lightboxpanel import fsleyes.views.scene3dpanel as scene3dpanel if isinstance(canvasPanel, orthopanel.OrthoPanel): panelGroup = 'ortho' panelProps = orthoOptsProps elif isinstance(canvasPanel, lightboxpanel.LightBoxPanel): panelGroup = 'lightbox' panelProps = lightBoxOptsProps elif isinstance(canvasPanel, scene3dpanel.Scene3DPanel): panelGroup = '3d' panelProps = scene3dOptsProps # We hide some options in 3D sceneOptsProps.pop('performance') displayCtxProps.pop('displaySpace') displayCtxProps.pop('radioOrientation') widgets.AddGroup('scene', strings.labels[self, 'scene']) widgets.AddGroup(panelGroup, strings.labels[self, panelGroup]) allWidgets = [] for dispProp in canvasPanelProps.values(): widget = props.buildGUI(widgets, canvasPanel, dispProp, showUnlink=False) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[canvasPanel, dispProp.key], tooltip=fsltooltips.properties[canvasPanel, dispProp.key], groupName='scene') opts = canvasPanel.sceneOpts for dispProp in sceneOptsProps.values(): widget = props.buildGUI(widgets, opts, dispProp, showUnlink=False) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[opts, dispProp.key], tooltip=fsltooltips.properties[opts, dispProp.key], groupName='scene') for dispProp in displayCtxProps.values(): widget = props.buildGUI(widgets, displayCtx, dispProp, showUnlink=False) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[displayCtx, dispProp.key], tooltip=fsltooltips.properties[displayCtx, dispProp.key], groupName='scene') for dispProp in panelProps.values(): widget = props.buildGUI(widgets, opts, dispProp, showUnlink=False) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[opts, dispProp.key], tooltip=fsltooltips.properties[opts, dispProp.key], groupName=panelGroup) self.setNavOrder(allWidgets) widgets.Expand('scene') widgets.Expand(panelGroup)
def __makeTools(self): """Generates all of the tools and adds them to the :class:`.WidgetList` (see :class:`.FSLeyesSettingsPanel`), """ ortho = self.__ortho widgets = self.getWidgetList() profile = ortho.getCurrentProfile() if ortho.profile != 'edit': return generalProps = [ props.Widget('mode', labels=strings.choices[profile, 'mode'], fixChoices=['nav', 'sel', 'desel', 'selint']), props.Widget('drawMode'), props.Widget('selectionIs3D'), props.Widget('selectionSize', slider=False, spin=True, showLimits=False), props.Widget('fillValue', slider=False, spin=True), props.Widget('eraseValue', slider=False, spin=True), # 'showSelectionOutline', props.Widget('selectionCursorColour'), props.Widget('selectionOverlayColour'), props.Widget('locationFollowsMouse', dependencies=['drawMode'], enabledWhen=lambda p, m: not m), props.Widget('showSelection', dependencies=['drawMode'], enabledWhen=lambda p, m: not m) ] selintProps = [ props.Widget('localFill', dependencies=['mode'], enabledWhen=lambda p, m: m == 'selint'), props.Widget('limitToRadius', dependencies=['mode'], enabledWhen=lambda p, m: m == 'selint'), props.Widget('intensityThresLimit', spin=True, slider=False, showLimits=False, dependencies=['mode'], enabledWhen=lambda p, m: m == 'selint'), props.Widget('intensityThres', spin=True, slider=True, showLimits=False, dependencies=['mode'], enabledWhen=lambda p, m: m == 'selint'), props.Widget('searchRadius', spin=True, slider=True, showLimits=False, dependencies=['mode', 'limitToRadius'], enabledWhen=lambda p, m, r: m == 'selint' and r), ] widgets.AddGroup('general', strings.labels[self, 'general']) widgets.AddGroup('selint', strings.labels[self, 'selint']) allWidgets = [] for spec in generalProps: widget = props.buildGUI(widgets, profile, spec) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[profile, spec.key], tooltip=fsltooltips.properties[profile, spec.key], groupName='general') for spec in selintProps: widget = props.buildGUI(widgets, profile, spec) allWidgets.append(widget) widgets.AddWidget(widget, displayName=strings.properties[profile, spec.key], tooltip=fsltooltips.properties[profile, spec.key], groupName='selint') self.setNavOrder(allWidgets) widgets.Expand('general') widgets.Expand('selint')
def generateCustomDataSeriesWidgets(self, hs, groupName): """Overrides :meth:`.PlotControlPanel.generateCustomDataSeriesWidgets`. Adds some widgets to control properties of the :class:`.HistogramSeries`. """ isimage = isinstance(hs, hseries.ImageHistogramSeries) widgetList = self.getWidgetList() autoBin = props.Widget('autoBin') nbins = props.Widget('nbins', enabledWhen=lambda i: not i.autoBin, showLimits=False) autoBin = props.buildGUI(widgetList, hs, autoBin) nbins = props.buildGUI(widgetList, hs, nbins) dataRange = props.makeWidget( widgetList, hs, 'dataRange', labels=[ strings.choices['HistogramPanel.dataRange.min'], strings.choices['HistogramPanel.dataRange.max'] ], showLimits=False) ignoreZeros = props.makeWidget(widgetList, hs, 'ignoreZeros') includeOutliers = props.makeWidget(widgetList, hs, 'includeOutliers') if isimage: showOverlay = props.makeWidget(widgetList, hs, 'showOverlay') widgetList.AddWidget(ignoreZeros, groupName=groupName, displayName=strings.properties[hs, 'ignoreZeros'], tooltip=fsltooltips.properties[hs, 'ignoreZeros']) if isimage: widgetList.AddWidget(showOverlay, groupName=groupName, displayName=strings.properties[hs, 'showOverlay'], tooltip=fsltooltips.properties[hs, 'showOverlay']) widgetList.AddWidget(includeOutliers, groupName=groupName, displayName=strings.properties[hs, 'includeOutliers'], tooltip=fsltooltips.properties[hs, 'includeOutliers']) widgetList.AddWidget(autoBin, groupName=groupName, displayName=strings.properties[hs, 'autoBin'], tooltip=fsltooltips.properties[hs, 'autoBin']) widgetList.AddWidget(nbins, groupName=groupName, displayName=strings.properties[hs, 'nbins'], tooltip=fsltooltips.properties[hs, 'nbins']) widgetList.AddWidget(dataRange, groupName=groupName, displayName=strings.properties[hs, 'dataRange'], tooltip=fsltooltips.properties[hs, 'dataRange']) if isimage: return [ ignoreZeros, showOverlay, includeOutliers, autoBin, nbins, dataRange ] else: return [ignoreZeros, includeOutliers, autoBin, nbins, dataRange]
_TOOLBAR_SPECS = [ actions.ToggleActionButton( 'toggleEditPanel', actionKwargs={'floatPane' : True}, icon=_ICONS['toggleEditPanel'], tooltip=_TOOLTIPS['toggleEditPanel']), actions.ActionButton( 'createMask', icon=_ICONS['createMask'], tooltip=_TOOLTIPS['createMask']), 'div', props.Widget( 'locationFollowsMouse', icon=_ICONS['locationFollowsMouse'], tooltip=_TOOLTIPS['locationFollowsMouse']), 'div', actions.ActionButton( 'undo', icon=_ICONS['undo'], tooltip=_TOOLTIPS['undo']), actions.ActionButton( 'redo', icon=_ICONS['redo'], tooltip=_TOOLTIPS['redo']), 'div',