def generateCustomDataSeriesWidgets(self, ps, groupName):
        """Overrides :meth:`.PlotControlPanel.generateDataSeriesWidgets`.
        Adds some widgets for controlling :class:`.PowerSpectrumSeries`
        instances.
        """

        widgetList = self.getWidgetList()
        allWidgets = []

        varNorm    = props.makeWidget(widgetList, ps, 'varNorm')

        widgetList.AddWidget(varNorm,
                             displayName=strings.properties[ps, 'varNorm'],
                             tooltip=strings.properties[ps, 'varNorm'],
                             groupName=groupName)
        allWidgets.append(varNorm)

        if isinstance(ps, powerspectrumseries.ComplexPowerSpectrumSeries):
            for propName in ['zeroOrderPhaseCorrection',
                             'firstOrderPhaseCorrection',
                             'plotReal', 'plotImaginary',
                             'plotMagnitude', 'plotPhase']:
                widg = props.makeWidget(widgetList, ps, propName)
                widgetList.AddWidget(
                    widg,
                    displayName=strings.properties[ps, propName],
                    tooltip=fsltooltips.properties[ps, propName],
                    groupName=groupName)
                allWidgets.append(widg)

        return allWidgets
Exemplo n.º 2
0
    def __init__(self, lutPanel, lut, label):
        """Create a ``LabelWidget``.

        :arg lutPanel: The :class:`LookupTablePanel` that is displaying this
                       ``LabelWidget``.

        :arg lut:      The :class:`.LookupTable` currently being displayed.

        :arg label:    The :class:`.LutLabel` that this ``LabelWidget`` is
                       associated with.
        """
        wx.Panel.__init__(self, lutPanel)

        self.__lutPanel = lutPanel
        self.__lut = lut
        self.__label = label

        self.__name = props.makeWidget(self, label, 'name')
        self.__enable = props.makeWidget(self, label, 'enabled')
        self.__colour = props.makeWidget(self, label, 'colour')

        self.__sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.SetSizer(self.__sizer)
        self.__sizer.Add(self.__enable, flag=wx.ALIGN_CENTRE)
        self.__sizer.Add(self.__colour, flag=wx.ALIGN_CENTRE)
        self.__sizer.Add(self.__name, flag=wx.EXPAND)
Exemplo n.º 3
0
def _test_widget_boolean(parent):

    trueicon = op.join(datadir, 'true.png')
    falseicon = op.join(datadir, 'false.png')

    obj = MyObj()

    # ch
    myboolcb = props.makeWidget(parent, obj, 'mybool')
    mybooltog = props.makeWidget(parent,
                                 obj,
                                 'mybool',
                                 icon=[trueicon, falseicon])
    myboolrad = props.makeWidget(parent,
                                 obj,
                                 'mybool',
                                 icon=[trueicon, falseicon],
                                 toggle=False)

    assert isinstance(myboolcb, wx.CheckBox)
    assert isinstance(mybooltog, bmptoggle.BitmapToggleButton)
    assert isinstance(myboolrad, bmpradio.BitmapRadioBox)

    addall(parent, (myboolcb, mybooltog, myboolrad))

    obj.mybool = False

    assert not myboolcb.GetValue()
    assert not mybooltog.GetValue()
    assert myboolrad.GetSelection() == 1
    obj.mybool = True

    assert myboolcb.GetValue()
    assert mybooltog.GetValue()
    assert myboolrad.GetSelection() == 0

    myboolcb.SetValue(False)
    wx.PostEvent(myboolcb, wx.CommandEvent(wx.EVT_CHECKBOX.evtType[0]))
    realYield()
    assert not obj.mybool
    assert not myboolcb.GetValue()
    assert not mybooltog.GetValue()
    assert myboolrad.GetSelection() == 1

    myboolcb.SetValue(True)
    wx.PostEvent(myboolcb, wx.CommandEvent(wx.EVT_CHECKBOX.evtType[0]))
    realYield()
    assert obj.mybool
    assert myboolcb.GetValue()
    assert mybooltog.GetValue()
    assert myboolrad.GetSelection() == 0
Exemplo n.º 4
0
def _test_widget_point(parent):

    sim = wx.UIActionSimulator()
    obj = MyObj()

    obj.mypointi.setLimits(0, 0, 100)
    obj.mypointi.setLimits(1, 0, 100)
    obj.mypointf.setLimits(0, 0, 100)
    obj.mypointf.setLimits(1, 0, 100)

    obj.mypointi.x = 25
    obj.mypointi.y = 75
    obj.mypointf.x = 20
    obj.mypointf.y = 80

    mypointi = props.makeWidget(parent, obj, 'mypointi', showLimits=False)
    mypointf = props.makeWidget(parent, obj, 'mypointf', showLimits=False)

    xi, yi = mypointi.GetChildren()
    xf, yf = mypointf.GetChildren()

    for s in [xi, yi, xf, yf]:
        assert isinstance(s, floatslider.SliderSpinPanel)

    assert xi.GetValue() == 25
    assert yi.GetValue() == 75
    assert xf.GetValue() == 20
    assert yf.GetValue() == 80

    addall(parent, [mypointi, mypointf])

    tests = [
        (xi, 'mypointi', 'x'),
        (yi, 'mypointi', 'y'),
        (xf, 'mypointf', 'x'),
        (yf, 'mypointf', 'y')]


    for widget, prop, att in tests:
        val = np.random.randint(0, 100)
        setattr(getattr(obj, prop), att, val)
        realYield(2)
        assert np.isclose(widget.GetValue(), val)

        val = np.random.randint(0, 100)

        simclick(sim, widget.slider, pos=(val / 100.0, 0.5))

        assert abs(getattr(getattr(obj, prop), att) - val) < 10
def _test_widget_boolean(parent):

    trueicon = op.join(datadir, 'true.png')
    falseicon = op.join(datadir, 'false.png')

    sim = wx.UIActionSimulator()
    obj = MyObj()

    # ch
    myboolcb = props.makeWidget(parent, obj, 'mybool')
    mybooltog = props.makeWidget(parent,
                                 obj,
                                 'mybool',
                                 icon=[trueicon, falseicon])
    myboolrad = props.makeWidget(parent,
                                 obj,
                                 'mybool',
                                 icon=[trueicon, falseicon],
                                 toggle=False)

    assert isinstance(myboolcb, wx.CheckBox)
    assert isinstance(mybooltog, bmptoggle.BitmapToggleButton)
    assert isinstance(myboolrad, bmpradio.BitmapRadioBox)

    addall(parent, (myboolcb, mybooltog, myboolrad))

    obj.mybool = False

    assert not myboolcb.GetValue()
    assert not mybooltog.GetValue()
    assert myboolrad.GetSelection() == 1
    obj.mybool = True

    assert myboolcb.GetValue()
    assert mybooltog.GetValue()
    assert myboolrad.GetSelection() == 0

    simclick(sim, myboolcb)
    assert not obj.mybool
    assert not myboolcb.GetValue()
    assert not mybooltog.GetValue()
    assert myboolrad.GetSelection() == 1

    simclick(sim, mybooltog)
    assert obj.mybool
    assert myboolcb.GetValue()
    assert mybooltog.GetValue()
    assert myboolrad.GetSelection() == 0
Exemplo n.º 6
0
    def generateDataSeriesWidgets(self, ds, groupName):
        """Adds a collection of widgets to the given :class:`.WidgetList`,
        allowing the properties of the given :class:`.DataSeries` instance
        to be changed. This method may be overridden by sub-classes which
        need to customise the list of widgets.

        :arg ds: The :class:`.DataSeries` instance.
        :arg groupName: The :class:`.WidgetList` group name.

        :returns: A list of the widgets that were created, and should be
                  included in keyboard navigation (see
                  :meth:`.FSLeyesPanel.setNavOrder`).
        """

        widgetList = self.getWidgetList()

        colour    = props.makeWidget(widgetList, ds, 'colour')
        alpha     = props.makeWidget(widgetList, ds, 'alpha',
                                     showLimits=False, spin=False)
        lineWidth = props.makeWidget(widgetList, ds, 'lineWidth')
        lineStyle = props.makeWidget(
            widgetList,
            ds,
            'lineStyle',
            labels=strings.choices[ds, 'lineStyle'])

        widgetList.AddWidget(
            colour,
            displayName=strings.properties[ds, 'colour'],
            tooltip=fsltooltips.properties[ds, 'colour'],
            groupName=groupName)
        widgetList.AddWidget(
            alpha,
            displayName=strings.properties[ds, 'alpha'],
            tooltip=fsltooltips.properties[ds, 'alpha'],
            groupName=groupName)
        widgetList.AddWidget(
            lineWidth,
            displayName=strings.properties[ds, 'lineWidth'],
            tooltip=fsltooltips.properties[ds, 'lineWidth'],
            groupName=groupName)
        widgetList.AddWidget(
            lineStyle,
            displayName=strings.properties[ds, 'lineStyle'],
            tooltip=fsltooltips.properties[ds, 'lineStyle'],
            groupName=groupName)

        return [colour, alpha, lineWidth, lineStyle]
Exemplo n.º 7
0
    def generateCustomPlotPanelWidgets(self, groupName):
        """Overrides :meth:`.PlotControlPanel.generateCustomPlotPanelWidgets`.

        Adds some widgets for controlling some properties of the
        :class:`.TimeSeriesPanel`.
        """

        widgetList = self.getWidgetList()
        allWidgets = []
        tsPanel = self.getPlotPanel()
        tsProps = ['plotMode', 'usePixdim', 'plotMelodicICs']

        for prop in tsProps:
            kwargs = {}
            if prop == 'plotMode':
                kwargs['labels'] = strings.choices[tsPanel, 'plotMode']

            widget = props.makeWidget(widgetList, tsPanel, prop, **kwargs)
            allWidgets.append(widget)
            widgetList.AddWidget(widget,
                                 displayName=strings.properties[tsPanel, prop],
                                 tooltip=fsltooltips.properties[tsPanel, prop],
                                 groupName=groupName)

        return allWidgets
Exemplo n.º 8
0
    def generateCustomPlotPanelWidgets(self, groupName):
        """Overrides :meth:`.PlotControlPanel.generateCustomPlotPanelWidgets`.
        Adds some widgets to control properties of the
        :class:`.HistogramPanel`.
        """

        hsPanel = self.getPlotPanel()
        widgetList = self.getWidgetList()
        allWidgets = []
        histProps = ['histType', 'plotType']

        for prop in histProps:

            kwargs = {}

            kwargs['labels'] = strings.choices[hsPanel, prop]

            widget = props.makeWidget(widgetList, hsPanel, prop, **kwargs)
            allWidgets.append(widget)
            widgetList.AddWidget(widget,
                                 displayName=strings.properties[hsPanel, prop],
                                 tooltip=fsltooltips.properties[hsPanel, prop],
                                 groupName=groupName)

        return allWidgets
    def generateCustomPlotPanelWidgets(self, groupName):
        """Overrides :meth:`.PlotControlPanel.generateCustomPlotPanelWidgets`.

        Adds some widgets for controlling the :class:`.PowerSpectrumPanel`.
        """

        psPanel    = self.getPlotPanel()
        widgetList = self.getWidgetList()
        allWidgets = []
        psProps    = ['plotFrequencies',
                      'plotMelodicICs']

        for prop in psProps:

            kwargs = {}

            widget = props.makeWidget(widgetList, psPanel, prop, **kwargs)
            allWidgets.append(widget)
            widgetList.AddWidget(
                widget,
                displayName=strings.properties[psPanel, prop],
                tooltip=fsltooltips.properties[psPanel, prop],
                groupName=groupName)

        return allWidgets
Exemplo n.º 10
0
def _test_widget_number(parent):

    obj = MyObj()

    myinto  = props.makeWidget(parent, obj, 'myinto')
    myrealo = props.makeWidget(parent, obj, 'myrealo')
    myintc  = props.makeWidget(parent, obj, 'myintc')
    myrealc = props.makeWidget(parent, obj, 'myrealc', slider=True, spin=False)

    assert isinstance(myinto,  floatspin.FloatSpinCtrl)
    assert isinstance(myrealo, floatspin.FloatSpinCtrl)
    assert isinstance(myintc,  floatslider.SliderSpinPanel)
    assert isinstance(myrealc, floatslider.FloatSlider)

    addall(parent, [myinto, myrealo, myintc, myrealc])

    obj.myinto  = 50
    obj.myrealo = 10
    obj.myintc  = 25
    obj.myrealc = 0.5

    assert myinto .GetValue() == 50
    assert myrealo.GetValue() == 10
    assert myintc .GetValue() == 25
    assert np.isclose(myrealc.GetValue(), 0.5)

    # I used to use wx.UIActionSimulator, but
    # it is too flaky. So am now simulating
    # user events by directly calling value
    # setters/event handlers
    myinto          .textCtrl.SetValue('10')
    myinto._FloatSpinCtrl__onText(None)
    myrealo         .textCtrl.SetValue('243.56')
    myrealo._FloatSpinCtrl__onText(None)
    myintc .spinCtrl.textCtrl.SetValue('99')
    myintc .spinCtrl._FloatSpinCtrl__onText(None)

    ev = MockMouseEvent(myrealc, (0.75, 0.5))
    myrealc._FloatSlider__onMouseDown(ev)
    myrealc._FloatSlider__onMouseUp(  ev)
    realYield()

    assert obj.myinto == 10
    assert np.isclose(obj.myrealo, 243.56)
    assert obj.myintc == 99
    assert abs(obj.myrealc - 0.75) <= 0.05
Exemplo n.º 11
0
def _test_widget_number(parent):

    sim = wx.UIActionSimulator()

    obj = MyObj()

    myinto  = props.makeWidget(parent, obj, 'myinto')
    myrealo = props.makeWidget(parent, obj, 'myrealo')
    myintc  = props.makeWidget(parent, obj, 'myintc')
    myrealc = props.makeWidget(parent, obj, 'myrealc', slider=True, spin=False)

    assert isinstance(myinto,  floatspin.FloatSpinCtrl)
    assert isinstance(myrealo, floatspin.FloatSpinCtrl)
    assert isinstance(myintc,  floatslider.SliderSpinPanel)
    assert isinstance(myrealc, floatslider.FloatSlider)

    addall(parent, [myinto, myrealo, myintc, myrealc])

    obj.myinto  = 50
    obj.myrealo = 10
    obj.myintc  = 25
    obj.myrealc = 0.5

    assert myinto .GetValue() == 50
    assert myrealo.GetValue() == 10
    assert myintc .GetValue() == 25
    assert np.isclose(myrealc.GetValue(), 0.5)

    simtext( sim, myinto .textCtrl,          '10')
    simtext( sim, myrealo.textCtrl,          '243.56')
    simtext( sim, myintc.spinCtrl.textCtrl,  '99')
    simclick(sim, myrealc,                   pos=(0.75, 0.5))

    assert obj.myinto == 10
    assert np.isclose(obj.myrealo, 243.56)
    assert obj.myintc == 99
    assert abs(obj.myrealc - 0.75) <= 0.05
Exemplo n.º 12
0
    def __init__(self, parent, dataSeries):
        """Create a ``DataSeriesWidget``.

        :arg parent:     The :mod:`wx` parent object.

        :arg dataSeries: The :class:`.DataSeries` instance.
        """

        wx.Panel.__init__(self, parent)

        self.__enabled = props.makeWidget(self, dataSeries, 'enabled')
        self.__colour = props.makeWidget(self, dataSeries, 'colour')
        self.__lineWidth = props.makeWidget(self, dataSeries, 'lineWidth')
        self.__lineStyle = props.makeWidget(
            self,
            dataSeries,
            'lineStyle',
            labels=strings.choices['DataSeries.lineStyle'])

        self.__enabled.SetToolTip(
            wx.ToolTip(fsltooltips.properties[dataSeries, 'enabled']))
        self.__colour.SetToolTip(
            wx.ToolTip(fsltooltips.properties[dataSeries, 'colour']))
        self.__lineWidth.SetToolTip(
            wx.ToolTip(fsltooltips.properties[dataSeries, 'lineWidth']))
        self.__lineStyle.SetToolTip(
            wx.ToolTip(fsltooltips.properties[dataSeries, 'lineStyle']))

        self.__sizer = wx.BoxSizer(wx.HORIZONTAL)
        self.SetSizer(self.__sizer)

        self.__sizer.Add(self.__enabled)
        self.__sizer.Add(self.__colour)
        self.__sizer.Add(self.__lineWidth)
        self.__sizer.Add(self.__lineStyle)

        self.Layout()
Exemplo n.º 13
0
    def generateDataSeriesWidgets(self, ps, groupName):
        """Overrides :meth:`.PlotControlPanel.generateDataSeriesWidgets`.
        Adds some widgets for controlling :class:`.PowerSpectrumSeries`
        instances.
        """
        allWidgets = plotcontrol.PlotControlPanel.generateDataSeriesWidgets(
            self, ps, groupName)

        if not isinstance(ps, powerspectrumseries.PowerSpectrumSeries):
            return

        widgetList = self.getWidgetList()
        varNorm = props.makeWidget(widgetList, ps, 'varNorm')

        widgetList.AddWidget(varNorm,
                             displayName=strings.properties[ps, 'varNorm'],
                             tooltip=strings.properties[ps, 'varNorm'],
                             groupName=groupName)

        return allWidgets + [varNorm]
Exemplo n.º 14
0
    def __generateComplexWidgets(self, ts, groupName):
        """Called by :meth:`generateCustomDataSeriesWidgets`. Generates
        widgets for :class:`.ComplexTimeSeries` options, and adds them
        to the widget list.
        """
        widgetList = self.getWidgetList()
        allWidgets = []

        if isinstance(ts, timeseries.ComplexTimeSeries):
            for propName in [
                    'plotReal', 'plotImaginary', 'plotMagnitude', 'plotPhase'
            ]:
                widg = props.makeWidget(widgetList, ts, propName)
                widgetList.AddWidget(widg,
                                     displayName=strings.properties[ts,
                                                                    propName],
                                     tooltip=fsltooltips.properties[ts,
                                                                    propName],
                                     groupName=groupName)
                allWidgets.append(widg)

        return allWidgets
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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]
Exemplo n.º 17
0
    def __generateFeatWidgets(self, ts, groupName):
        """Called by :meth:`generateCustomDataSeriesWidgets`. Generates
        widgets for :class:`.FEATTimeSeries` options, and adds them
        to the widget list.
        """

        overlay = ts.overlay
        widgetList = self.getWidgetList()
        allWidgets = []

        full = props.makeWidget(widgetList, ts, 'plotFullModelFit')
        res = props.makeWidget(widgetList, ts, 'plotResiduals')
        evs = props.makeListWidgets(widgetList, ts, 'plotEVs')
        pes = props.makeListWidgets(widgetList, ts, 'plotPEFits')
        copes = props.makeListWidgets(widgetList, ts, 'plotCOPEFits')
        partial = props.makeWidget(widgetList, ts, 'plotPartial')
        data = props.makeWidget(widgetList, ts, 'plotData')

        allWidgets.append(full)
        allWidgets.append(res)
        allWidgets.extend(evs)
        allWidgets.extend(pes)
        allWidgets.extend(copes)
        allWidgets.append(partial)
        allWidgets.append(data)

        widgetList.AddWidget(data,
                             displayName=strings.properties[ts, 'plotData'],
                             tooltip=fsltooltips.properties[ts, 'plotData'],
                             groupName=groupName)
        widgetList.AddWidget(
            full,
            displayName=strings.properties[ts, 'plotFullModelFit'],
            tooltip=fsltooltips.properties[ts, 'plotFullModelFit'],
            groupName=groupName)

        widgetList.AddWidget(res,
                             displayName=strings.properties[ts,
                                                            'plotResiduals'],
                             tooltip=fsltooltips.properties[ts,
                                                            'plotResiduals'],
                             groupName=groupName)

        widgetList.AddWidget(partial,
                             displayName=strings.properties[ts, 'plotPartial'],
                             tooltip=fsltooltips.properties[ts, 'plotPartial'],
                             groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        for i, ev in enumerate(evs):

            evName = overlay.evNames()[i]
            widgetList.AddWidget(
                ev,
                displayName=strings.properties[ts, 'plotEVs'].format(
                    i + 1, evName),
                tooltip=fsltooltips.properties[ts, 'plotEVs'],
                groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        for i, pe in enumerate(pes):
            evName = overlay.evNames()[i]
            widgetList.AddWidget(
                pe,
                displayName=strings.properties[ts, 'plotPEFits'].format(
                    i + 1, evName),
                tooltip=fsltooltips.properties[ts, 'plotPEFits'],
                groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        copeNames = overlay.contrastNames()
        for i, (cope, name) in enumerate(zip(copes, copeNames)):
            widgetList.AddWidget(
                cope,
                displayName=strings.properties[ts, 'plotCOPEFits'].format(
                    i + 1, name),
                tooltip=fsltooltips.properties[ts, 'plotCOPEFits'],
                groupName=groupName)

        return allWidgets
Exemplo n.º 18
0
    def __init__(self, parent, overlayList, displayCtx, frame, ortho):
        """Create a ``CropImagePanel``.

        :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 ortho:       The :class:`.OrthoPanel` instance.
        """
        ctrlpanel.ControlPanel.__init__(
            self, parent, overlayList, displayCtx, frame)

        profile = ortho.getCurrentProfile()

        self.__ortho   = ortho
        self.__profile = profile
        self.__overlay = None

        self.__cropBoxWidget = props.makeWidget(
            self,
            profile,
            'cropBox',
            showLimits=False,
            labels=['xmin', 'xmax', 'ymin', 'ymax', 'zmin', 'zmax'])

        self.__volumeWidget = rslider.RangeSliderSpinPanel(
            self,
            minValue=0,
            maxValue=1,
            minDistance=1,
            lowLabel='tmin',
            highLabel='tmax',
            style=rslider.RSSP_INTEGER)

        self.__dsWarning = dswarning.DisplaySpaceWarning(
            self,
            overlayList,
            displayCtx,
            frame,
            strings.messages[self, 'dsWarning'],
            'not like overlay',
            'overlay')

        self.__cropLabel       = wx.StaticText(self)
        self.__sizeLabel       = wx.StaticText(self)
        self.__cropButton      = wx.Button(    self, id=wx.ID_OK)
        self.__robustFovButton = wx.Button(    self)
        self.__loadButton      = wx.Button(    self)
        self.__saveButton      = wx.Button(    self)
        self.__cancelButton    = wx.Button(    self, id=wx.ID_CANCEL)

        self.__cropButton     .SetLabel(strings.labels[self, 'crop'])
        self.__robustFovButton.SetLabel(strings.labels[self, 'robustFov'])
        self.__loadButton     .SetLabel(strings.labels[self, 'load'])
        self.__saveButton     .SetLabel(strings.labels[self, 'save'])
        self.__cancelButton   .SetLabel(strings.labels[self, 'cancel'])

        self.__sizer    = wx.BoxSizer(wx.VERTICAL)
        self.__btnSizer = wx.BoxSizer(wx.HORIZONTAL)

        self.__sizer.Add((1, 10))
        self.__sizer.Add(self.__cropLabel,     flag=wx.CENTRE)
        self.__sizer.Add((1, 10))
        self.__sizer.Add(self.__dsWarning,     flag=wx.CENTRE)
        self.__sizer.Add((1, 10), proportion=1)
        self.__sizer.Add(self.__cropBoxWidget, flag=wx.EXPAND)
        self.__sizer.Add(self.__volumeWidget,  flag=wx.EXPAND)
        self.__sizer.Add((1, 10))
        self.__sizer.Add(self.__sizeLabel,     flag=wx.CENTRE, proportion=1)
        self.__sizer.Add((1, 10))
        self.__sizer.Add(self.__btnSizer,      flag=wx.CENTRE)
        self.__sizer.Add((1, 10))

        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND,
                            proportion=1)
        self.__btnSizer.Add(self.__cropButton,      flag=wx.EXPAND)
        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND)
        self.__btnSizer.Add(self.__robustFovButton, flag=wx.EXPAND)
        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND)
        self.__btnSizer.Add(self.__loadButton,      flag=wx.EXPAND)
        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND)
        self.__btnSizer.Add(self.__saveButton,      flag=wx.EXPAND)
        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND)
        self.__btnSizer.Add(self.__cancelButton,    flag=wx.EXPAND)
        self.__btnSizer.Add((10, 1),                flag=wx.EXPAND,
                            proportion=1)

        self.SetSizer(self.__sizer)
        self.SetMinSize(self.__sizer.GetMinSize())
        self.__cropButton.SetDefault()

        self.__cropButton  .Bind(wx.EVT_BUTTON,          self.__onCrop)
        self.__loadButton  .Bind(wx.EVT_BUTTON,          self.__onLoad)
        self.__saveButton  .Bind(wx.EVT_BUTTON,          self.__onSave)
        self.__cancelButton.Bind(wx.EVT_BUTTON,          self.__onCancel)
        self.__volumeWidget.Bind(rslider.EVT_RANGE,      self.__onVolume)
        self.__volumeWidget.Bind(rslider.EVT_LOW_RANGE,  self.__onVolume)
        self.__volumeWidget.Bind(rslider.EVT_HIGH_RANGE, self.__onVolume)

        profile.robustfov.bindToWidget(self,
                                       wx.EVT_BUTTON,
                                       self.__robustFovButton)

        displayCtx .addListener('selectedOverlay',
                                self.name,
                                self.__selectedOverlayChanged)
        overlayList.addListener('overlays',
                                self.name,
                                self.__selectedOverlayChanged)
        profile    .addListener('cropBox',
                                self.name,
                                self.__cropBoxChanged)

        self.__selectedOverlayChanged()
        self.__cropBoxChanged()
Exemplo n.º 19
0
    def generatePlotPanelWidgets(self, groupName):
        """Adds a collection of widgets to the given :class:`.WidgetList`,
        allowing the properties of the given :class:`.PlotPanel` instance
        to be changed.

        This method may be overridden by sub-classes to change/add to the
        list of properties that are added by default.

        :arg groupName: The :class:`.WidgetList` group name.

        :returns: A list of the widgets that were created, and should be
                  included in keyboard navigation (see
                  :meth:`.FSLeyesPanel.setNavOrder`).
        """

        widgetList = self.getWidgetList()
        plotPanel = self.__plotPanel
        allWidgets = []

        plotProps = [
            'smooth', 'legend', 'ticks', 'grid', 'gridColour', 'bgColour'
        ]

        for prop in plotProps:
            widget = props.makeWidget(widgetList, plotPanel, prop)
            allWidgets.append(widget)
            widgetList.AddWidget(widget,
                                 displayName=strings.properties[plotPanel,
                                                                prop],
                                 tooltip=fsltooltips.properties[plotPanel,
                                                                prop],
                                 groupName=groupName)

        limits = props.makeListWidgets(widgetList, plotPanel, 'limits')
        xlogscale = props.makeWidget(widgetList, plotPanel, 'xLogScale')
        ylogscale = props.makeWidget(widgetList, plotPanel, 'yLogScale')
        xinvert = props.makeWidget(widgetList, plotPanel, 'invertX')
        yinvert = props.makeWidget(widgetList, plotPanel, 'invertY')
        xscale = props.makeWidget(widgetList, plotPanel, 'xScale')
        yscale = props.makeWidget(widgetList, plotPanel, 'yScale')
        xoffset = props.makeWidget(widgetList, plotPanel, 'xOffset')
        yoffset = props.makeWidget(widgetList, plotPanel, 'yOffset')
        xautoscale = props.makeWidget(widgetList, plotPanel, 'xAutoScale')
        yautoscale = props.makeWidget(widgetList, plotPanel, 'yAutoScale')
        xlabel = props.makeWidget(widgetList, plotPanel, 'xlabel')
        ylabel = props.makeWidget(widgetList, plotPanel, 'ylabel')

        allWidgets.extend(limits)
        allWidgets.extend([
            xlogscale, ylogscale, xinvert, yinvert, xautoscale, yautoscale,
            xscale, yscale, xoffset, yoffset, xlabel, ylabel
        ])

        pairs = [('logscale', xlogscale, ylogscale),
                 ('invert', xinvert, yinvert),
                 ('autoscale', xautoscale, yautoscale),
                 ('scale', xscale, yscale), ('offset', xoffset, yoffset),
                 ('labels', xlabel, ylabel)]

        for key, xwidget, ywidget in pairs:

            sizer = wx.BoxSizer(wx.HORIZONTAL)

            sizer.Add(
                wx.StaticText(widgetList, label=strings.labels[self,
                                                               'xlabel']))
            sizer.Add(xwidget, flag=wx.EXPAND, proportion=1)
            sizer.Add(
                wx.StaticText(widgetList, label=strings.labels[self,
                                                               'ylabel']))
            sizer.Add(ywidget, flag=wx.EXPAND, proportion=1)

            widgetList.AddWidget(sizer,
                                 displayName=strings.labels[self, key],
                                 tooltip=fsltooltips.misc[self, key],
                                 groupName=groupName)

        # Store refs to the limit widgets
        # so they can be enabled/disabled
        # when xAutoScale/yAutoScale
        # changes.
        self.__xLimitWidgets = [limits[0], limits[1]]
        self.__yLimitWidgets = [limits[2], limits[3]]

        xlims = wx.BoxSizer(wx.HORIZONTAL)
        ylims = wx.BoxSizer(wx.HORIZONTAL)

        xlims.Add(limits[0], flag=wx.EXPAND, proportion=1)
        xlims.Add(limits[1], flag=wx.EXPAND, proportion=1)
        ylims.Add(limits[2], flag=wx.EXPAND, proportion=1)
        ylims.Add(limits[3], flag=wx.EXPAND, proportion=1)

        widgetList.AddWidget(xlims,
                             displayName=strings.labels[self, 'xlim'],
                             tooltip=fsltooltips.misc[self, 'xlim'],
                             groupName=groupName)
        widgetList.AddWidget(ylims,
                             displayName=strings.labels[self, 'ylim'],
                             tooltip=fsltooltips.misc[self, 'ylim'],
                             groupName=groupName)

        return allWidgets
Exemplo n.º 20
0
    def generateCustomDataSeriesWidgets(self, ts, groupName):
        """Overrides :meth:`.PlotControlPanel.generateCustomDataSeriesWidgets`.

        If the given :class:`.TimeSeries` is a :class:`.FEATTimeSeries`
        instance, this method adds some widgets for controlling the
        FEAT-related settings of the instance.
        """

        overlay = ts.overlay
        widgetList = self.getWidgetList()
        allWidgets = []

        if not (isinstance(overlay, fslfeatimage.FEATImage) and isinstance(
                ts, timeseries.FEATTimeSeries) and overlay.hasStats()):
            return allWidgets

        full = props.makeWidget(widgetList, ts, 'plotFullModelFit')
        res = props.makeWidget(widgetList, ts, 'plotResiduals')
        evs = props.makeListWidgets(widgetList, ts, 'plotEVs')
        pes = props.makeListWidgets(widgetList, ts, 'plotPEFits')
        copes = props.makeListWidgets(widgetList, ts, 'plotCOPEFits')
        partial = props.makeWidget(widgetList, ts, 'plotPartial')
        data = props.makeWidget(widgetList, ts, 'plotData')

        allWidgets.append(full)
        allWidgets.append(res)
        allWidgets.extend(evs)
        allWidgets.extend(pes)
        allWidgets.extend(copes)
        allWidgets.append(partial)
        allWidgets.append(data)

        widgetList.AddWidget(data,
                             displayName=strings.properties[ts, 'plotData'],
                             tooltip=fsltooltips.properties[ts, 'plotData'],
                             groupName=groupName)
        widgetList.AddWidget(
            full,
            displayName=strings.properties[ts, 'plotFullModelFit'],
            tooltip=fsltooltips.properties[ts, 'plotFullModelFit'],
            groupName=groupName)

        widgetList.AddWidget(res,
                             displayName=strings.properties[ts,
                                                            'plotResiduals'],
                             tooltip=fsltooltips.properties[ts,
                                                            'plotResiduals'],
                             groupName=groupName)

        widgetList.AddWidget(partial,
                             displayName=strings.properties[ts, 'plotPartial'],
                             tooltip=fsltooltips.properties[ts, 'plotPartial'],
                             groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        for i, ev in enumerate(evs):

            evName = overlay.evNames()[i]
            widgetList.AddWidget(
                ev,
                displayName=strings.properties[ts, 'plotEVs'].format(
                    i + 1, evName),
                tooltip=fsltooltips.properties[ts, 'plotEVs'],
                groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        for i, pe in enumerate(pes):
            evName = overlay.evNames()[i]
            widgetList.AddWidget(
                pe,
                displayName=strings.properties[ts, 'plotPEFits'].format(
                    i + 1, evName),
                tooltip=fsltooltips.properties[ts, 'plotPEFits'],
                groupName=groupName)

        widgetList.AddSpace(groupName=groupName)

        copeNames = overlay.contrastNames()
        for i, (cope, name) in enumerate(zip(copes, copeNames)):
            widgetList.AddWidget(
                cope,
                displayName=strings.properties[ts, 'plotCOPEFits'].format(
                    i + 1, name),
                tooltip=fsltooltips.properties[ts, 'plotCOPEFits'],
                groupName=groupName)

        return allWidgets