Skip to content

Commit d711b14

Browse files
Refactor
1 parent bdcece5 commit d711b14

File tree

4 files changed

+63
-73
lines changed

4 files changed

+63
-73
lines changed

mne/viz/_brain/_brain.py

+48-67
Original file line numberDiff line numberDiff line change
@@ -2989,6 +2989,50 @@ def _save_movie(self, filename, time_dilation=4., tmin=None, tmax=None,
29892989
kwargs['bitrate'] = bitrate
29902990
imageio.mimwrite(filename, images, **kwargs)
29912991

2992+
def _save_movie_tv(self, filename, time_dilation=4., tmin=None, tmax=None,
2993+
framerate=24, interpolation=None, codec=None,
2994+
bitrate=None, callback=None, time_viewer=False,
2995+
**kwargs):
2996+
def frame_callback(frame, n_frames):
2997+
if frame == n_frames:
2998+
# On the ImageIO step
2999+
self.status_msg.set_value(
3000+
"Saving with ImageIO: %s"
3001+
% filename
3002+
)
3003+
self.status_msg.show()
3004+
self.status_progress.hide()
3005+
self._renderer._status_bar_update()
3006+
else:
3007+
self.status_msg.set_value(
3008+
"Rendering images (frame %d / %d) ..."
3009+
% (frame + 1, n_frames)
3010+
)
3011+
self.status_msg.show()
3012+
self.status_progress.show()
3013+
self.status_progress.set_range([0, n_frames - 1])
3014+
self.status_progress.set_value(frame)
3015+
self.status_progress.update()
3016+
self.status_msg.update()
3017+
self._renderer._status_bar_update()
3018+
3019+
# set cursor to busy
3020+
default_cursor = self._renderer._window_get_cursor()
3021+
self._renderer._window_set_cursor(
3022+
self._renderer._window_new_cursor("WaitCursor"))
3023+
3024+
try:
3025+
self._save_movie(
3026+
filename=filename,
3027+
time_dilation=(1. / self.playback_speed),
3028+
callback=frame_callback,
3029+
**kwargs
3030+
)
3031+
except (Exception, KeyboardInterrupt):
3032+
warn('Movie saving aborted:\n' + traceback.format_exc())
3033+
finally:
3034+
self._renderer._window_set_cursor(default_cursor)
3035+
29923036
@fill_doc
29933037
def save_movie(self, filename, time_dilation=4., tmin=None, tmax=None,
29943038
framerate=24, interpolation=None, codec=None,
@@ -3042,73 +3086,10 @@ def save_movie(self, filename, time_dilation=4., tmin=None, tmax=None,
30423086
dialog : object
30433087
The opened dialog is returned for testing purpose only.
30443088
"""
3045-
if self.time_viewer:
3046-
if filename is None:
3047-
try:
3048-
from pyvista.plotting.qt_plotting import FileDialog
3049-
except ImportError:
3050-
from pyvistaqt.plotting import FileDialog
3051-
self.status_msg.set_value("Choose movie path ...")
3052-
self.status_msg.show()
3053-
self.status_progress.set_value(0)
3054-
3055-
def _post_setup(unused):
3056-
del unused
3057-
self.status_msg.hide()
3058-
self.status_progress.hide()
3059-
3060-
dialog = FileDialog(
3061-
self.plotter.app_window,
3062-
callback=partial(self._save_movie, **kwargs)
3063-
)
3064-
dialog.setDirectory(os.getcwd())
3065-
dialog.finished.connect(_post_setup)
3066-
return dialog
3067-
else:
3068-
def frame_callback(frame, n_frames):
3069-
if frame == n_frames:
3070-
# On the ImageIO step
3071-
self.status_msg.set_value(
3072-
"Saving with ImageIO: %s"
3073-
% filename
3074-
)
3075-
self.status_msg.show()
3076-
self.status_progress.hide()
3077-
self._renderer._status_bar_update()
3078-
else:
3079-
self.status_msg.set_value(
3080-
"Rendering images (frame %d / %d) ..."
3081-
% (frame + 1, n_frames)
3082-
)
3083-
self.status_msg.show()
3084-
self.status_progress.show()
3085-
self.status_progress.forward(
3086-
"setRange", 0, n_frames - 1)
3087-
self.status_progress.set_value(frame)
3088-
self.status_progress.update()
3089-
self.status_msg.update()
3090-
self._renderer._status_bar_update()
3091-
3092-
# set cursor to busy
3093-
default_cursor = self._renderer._window_get_cursor()
3094-
self._renderer._window_set_cursor(
3095-
self._renderer._window_new_cursor("WaitCursor"))
3096-
3097-
try:
3098-
self._save_movie(
3099-
filename=filename,
3100-
time_dilation=(1. / self.playback_speed),
3101-
callback=frame_callback,
3102-
**kwargs
3103-
)
3104-
except (Exception, KeyboardInterrupt):
3105-
warn('Movie saving aborted:\n' + traceback.format_exc())
3106-
finally:
3107-
self._renderer._window_set_cursor(default_cursor)
3108-
else:
3109-
self._save_movie(filename, time_dilation, tmin, tmax,
3110-
framerate, interpolation, codec,
3111-
bitrate, callback, time_viewer, **kwargs)
3089+
func = self._save_movie_tv if self.time_viewer else self._save_movie
3090+
func(filename, time_dilation, tmin, tmax,
3091+
framerate, interpolation, codec,
3092+
bitrate, callback, time_viewer, **kwargs)
31123093

31133094
def _make_movie_frames(self, time_dilation, tmin, tmax, framerate,
31143095
interpolation, callback, time_viewer):

mne/viz/backends/_abstract.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,10 @@ def set_value(self, value):
603603
def get_value(self):
604604
pass
605605

606+
@abstractmethod
607+
def set_range(self, rng):
608+
pass
609+
606610
@abstractmethod
607611
def show(self):
608612
pass
@@ -615,10 +619,6 @@ def hide(self):
615619
def update(self, repaint=True):
616620
pass
617621

618-
def forward(self, name, *args, **kwargs):
619-
if hasattr(self._widget, name):
620-
getattr(self._widget, name)(*args, **kwargs)
621-
622622

623623
class _AbstractMplInterface(ABC):
624624
@abstractmethod

mne/viz/backends/_notebook.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from contextlib import contextmanager
88
from IPython.display import display
99
from ipywidgets import (Button, Dropdown, FloatSlider, FloatText, HBox,
10-
IntSlider, IntText, Text, VBox)
10+
IntSlider, IntText, Text, VBox, IntProgress)
1111

1212
from ..utils import _generate_default_filename
1313
from ...fixes import nullcontext
@@ -218,7 +218,9 @@ def _status_bar_add_label(self, value, stretch=0):
218218
return _IpyWidget(widget)
219219

220220
def _status_bar_add_progress_bar(self, stretch=0):
221-
pass
221+
widget = IntProgress()
222+
self._layout_add_widget(self._status_bar_layout, widget)
223+
return _IpyWidget(widget)
222224

223225
def _status_bar_update(self):
224226
pass
@@ -300,6 +302,10 @@ def set_value(self, value):
300302
def get_value(self):
301303
return self._widget.value
302304

305+
def set_range(self, rng):
306+
self._widget.min = rng[0]
307+
self._widget.max = rng[1]
308+
303309
def show(self):
304310
self._widget.layout.visibility = "visible"
305311

mne/viz/backends/_qt.py

+3
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,9 @@ def get_value(self):
482482
elif hasattr(self._widget, "text"):
483483
return self._widget.text()
484484

485+
def set_range(self, rng):
486+
self._widget.setRange(rng[0], rng[1])
487+
485488
def show(self):
486489
self._widget.show()
487490

0 commit comments

Comments
 (0)