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]
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()
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
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)
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]
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()
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)