Example #1
0
def _test_Bounce_auto_start_stop():

    dlg = progress.Bounce('Title', 'Message', delay=100)

    dlg.StartBounce()
    val = dlg.GetValue()
    realYield(15)
    assert dlg.GetValue() != val
    val = dlg.GetValue()
    realYield(15)
    assert dlg.GetValue() != val
    val = dlg.GetValue()
    dlg.StopBounce()

    realYield(15)
    assert dlg.GetValue() == val
    realYield(15)
    assert dlg.GetValue() == val

    dlg.StartBounce()
    val = dlg.GetValue()
    realYield(15)
    assert dlg.GetValue() != val
    val = dlg.GetValue()
    realYield(15)
    assert dlg.GetValue() != val
    val = dlg.GetValue()
    dlg.StopBounce()
    dlg.Destroy()
def _test_runWithBounce_cancel():

    finished = [False]
    completed = [True]
    cancelledcalls = [0]

    def func():
        for i in range(10):
            time.sleep(1)

        finished[0] = True

    def callback(comp):
        completed[0] = comp

    def WasCancelled(s):
        if cancelledcalls[0] > 10:
            return True
        else:
            cancelledcalls[0] += 1
            return False

    dlg = progress.Bounce('Title', 'message', style=wx.PD_CAN_ABORT)

    with mock.patch('wx.ProgressDialog.WasCancelled', WasCancelled):
        progress.runWithBounce(func, dlg=dlg, callback=callback)
        realYield(200)

    dlg.Destroy()

    assert not finished[0] and not completed[0]
Example #3
0
def _test_runWithBounce_cancel():
    def func():
        for i in range(10):
            time.sleep(1)

    dlg = progress.Bounce('Title', 'message', style=wx.PD_CAN_ABORT)

    with mock.patch('wx.ProgressDialog.WasCancelled', return_value=True):
        assert not progress.Bounce.runWithBounce(func, dlg=dlg)

    dlg.Destroy()
Example #4
0
    def __openNotebooks(self, nbfile=None):
        """Called when this ``NotebookAction`` is invoked. Starts the
        server and kernel if necessary.

        If the server/kernel have not yet been started and ``nbfile`` is
        provided, the server will be started with ``nbfile`` opened.
        """

        # If the kernel and server are both
        # ok, open the notebook homepage
        if self.__kernel is not None and \
           self.__server is not None and \
           self.__kernel.is_alive()  and \
           self.__server.is_alive():
            webbrowser.open(self.__server.url)
            return

        # have the kernel or server threads crashed?
        if self.__kernel is not None and not self.__kernel.is_alive():
            self.__kernel = None
        if self.__server is not None and not self.__server.is_alive():
            self.__server = None

        # show a progress dialog if we need
        # to initialise the kernel or server
        if self.__kernel is None or self.__server is None:
            title = strings.titles[self, 'init']
            progdlg = progress.Bounce(title)
        else:
            progdlg = None

        try:
            # start the kernel/server, and show
            # an error if something goes wrong
            errt = strings.titles[self, 'init.error']
            errm = strings.messages[self, 'init.error']
            with status.reportIfError(errt, errm):
                if self.__kernel is None:
                    self.__kernel = self.__startKernel(progdlg)
                if self.__server is None:
                    self.__server = self.__startServer(progdlg, nbfile)

        finally:
            if progdlg is not None:
                progdlg.Destroy()
                progdlg = None
Example #5
0
    def __doMakeGif(self):
        """Prompts the user to select a file to save the movie to, and then
        generates the movie via :func:`makeGif`.
        """

        lastDirSetting = 'fsleyes.actions.screenshot.lastDir'
        filename       = 'movie.gif'
        fromDir        = fslsettings.read(lastDirSetting, os.getcwd())

        dlg = wx.FileDialog(self.__panel,
                            message=strings.messages[self, 'movieGif'],
                            defaultDir=fromDir,
                            defaultFile=filename,
                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

        if dlg.ShowModal() != wx.ID_OK:
            return

        filename = dlg.GetPath()
        self.__progdlg  = progress.Bounce(
            'Generating GIF',
            'Generating GIF',
            style=wx.PD_APP_MODAL | wx.PD_CAN_ABORT,
            parent=self.__panel)

        def update(frame):
            if self.__progdlg is not None and isalive(self.__progdlg):
                self.__progdlg.DoBounce('Saved frame {}...'.format(frame))
                return not self.__progdlg.WasCancelled()
            else:
                return False

        def finish():
            if isalive(self.__progdlg):
                self.__progdlg.Hide()
                self.__progdlg.Close()
            self.__progdlg = None

        # TODO prompt user to select axis/delay/limits?
        self.__progdlg.Show()
        makeGif(self.__overlayList,
                self.__displayCtx,
                self.__panel,
                filename,
                progfunc=update,
                onfinish=finish)
Example #6
0
def _test_Bounce():

    endfuncs = ['Close', 'EndModal', 'Destroy']
    delay = 200  # msecs
    centis = delay / 10
    values = list(np.arange(50))
    passed = [True]

    for endfunc in endfuncs:

        dlg = progress.Bounce('Title', 'Message', delay=delay, values=values)

        dlg.StartBounce()

        def eval():
            value = dlg.GetValue()

            for i in range(10):

                realYield(centis + 0.5 * centis)
                newval = dlg.GetValue()

                passed[0] = passed[0] and (newval != value)
                value = newval

            value = dlg.GetValue()
            dlg.StopBounce()
            getattr(dlg, endfunc)()

            realYield((delay * 2) / 10)

            if isalive(dlg):
                passed[0] = passed[0] and (dlg.GetValue() == value)

        if endfunc == 'EndModal':
            wx.CallAfter(eval)
            dlg.ShowModal()
        else:
            dlg.Show()
            eval()
        if endfunc is not 'Destroy':
            dlg.Destroy()
        dlg = None
        assert passed[0]
Example #7
0
def _test_Bounce_manual():

    dlg = progress.Bounce('Title', 'Message', delay=150)

    # make sure it's not bouncing
    val = dlg.GetValue()
    realYield(20)
    assert dlg.GetValue() == val

    # Make sure a bounce changes the value
    dlg.DoBounce()
    assert dlg.GetValue() != val

    # Make sure we can change the message
    val = dlg.GetValue()
    dlg.DoBounce('New message')
    assert dlg.GetValue() != val
    assert dlg.GetMessage() == 'New message'

    dlg.Destroy()
Example #8
0
    def __openNotebooks(self):
        """Called when this ``NotebookAction`` is invoked. Starts the
        server and kernel if necessary, then opens a new notebook in a
        web browser.
        """

        # have the kernel or server threads crashed?
        if self.__kernel is not None and not self.__kernel.is_alive():
            self.__kernel = None
        if self.__server is not None and not self.__server.is_alive():
            self.__server = None

        # show a progress dialog if we need
        # to initialise the kernel or server
        if self.__kernel is None or self.__server is None:
            title   = strings.titles[self, 'init']
            progdlg = progress.Bounce(title)
        else:
            progdlg = None

        try:
            # start the kernel/server, and show
            # an error if something goes wrong
            errt = strings.titles[  self, 'init.error']
            errm = strings.messages[self, 'init.error']
            with status.reportIfError(errt, errm):
                if self.__kernel is None:
                    self.__kernel = self.__startKernel(progdlg)
                if self.__server is None:
                    self.__server = self.__startServer(progdlg)

        finally:
            if progdlg is not None:
                progdlg.Destroy()
                progdlg = None

        # if all is well, open the
        # notebook server homepage
        webbrowser.open(self.__server.url)