Skip to content

Commit 1096265

Browse files
authored
remove add/remove objects for view-range (#139)
* remove add/remove objects for view-range * move addItem for Scene into init of Qt-objects for annotations and events
1 parent 3a5b744 commit 1096265

File tree

1 file changed

+12
-82
lines changed

1 file changed

+12
-82
lines changed

mne_qt_browser/_pg_figure.py

Lines changed: 12 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1233,8 +1233,6 @@ def mouseDragEvent(self, event, axis=None):
12331233
description=description,
12341234
values=(self._drag_start,
12351235
drag_stop))
1236-
self.mne.plt.addItem(self._drag_region)
1237-
self.mne.plt.addItem(self._drag_region.label_item)
12381236
elif event.isFinish():
12391237
drag_stop = self.mapSceneToView(event.scenePos()).x()
12401238
self._drag_region.setRegion((self._drag_start, drag_stop))
@@ -1368,15 +1366,18 @@ def _q_font(point_size, bold=False):
13681366
class EventLine(InfiniteLine):
13691367
"""Displays Events inside Trace-Plot"""
13701368

1371-
def __init__(self, pos, label, color):
1369+
def __init__(self, mne, pos, label, color):
13721370
super().__init__(pos, pen=color, movable=False,
13731371
label=str(label), labelOpts={'position': 0.98,
13741372
'color': color,
13751373
'anchors': [(0, 0.5),
13761374
(0, 0.5)]})
1375+
self.mne = mne
13771376
self.label.setFont(_q_font(10, bold=True))
13781377
self.setZValue(0)
13791378

1379+
self.mne.plt.addItem(self)
1380+
13801381

13811382
class Crosshair(InfiniteLine):
13821383
"""Continously updating marker inside the Trace-Plot."""
@@ -1991,6 +1992,9 @@ def __init__(self, mne, description, values):
19911992

19921993
self.update_color()
19931994

1995+
self.mne.plt.addItem(self)
1996+
self.mne.plt.addItem(self.label_item)
1997+
19941998
def _region_changed(self):
19951999
self.regionChangeFinished.emit(self)
19962000
self.old_onset = self.getRegion()[0]
@@ -2869,11 +2873,8 @@ def _hidpi_mkPen(*args, **kwargs):
28692873
self.mne.event_nums):
28702874
color = self.mne.event_color_dict[ev_id]
28712875
label = self.mne.event_id_rev.get(ev_id, ev_id)
2872-
event_line = EventLine(ev_time, label, color)
2876+
event_line = EventLine(self.mne, ev_time, label, color)
28732877
self.mne.event_lines.append(event_line)
2874-
2875-
if 0 < ev_time < self.mne.duration:
2876-
self.mne.plt.addItem(event_line)
28772878
else:
28782879
self.mne.events_visible = False
28792880

@@ -3607,13 +3608,6 @@ def _xrange_changed(self, _, xrange):
36073608

36083609
self._redraw(update_data=True)
36093610

3610-
# Update annotations
3611-
if not self.mne.is_epochs:
3612-
self._update_annotations_xrange(xrange)
3613-
3614-
# Update Events
3615-
self._update_events_xrange(xrange)
3616-
36173611
# Update Time-Bar
36183612
self.mne.ax_hscroll.update_value(xrange[0])
36193613

@@ -3623,47 +3617,6 @@ def _xrange_changed(self, _, xrange):
36233617
# Update Scalebars
36243618
self._update_scalebar_x_positions()
36253619

3626-
def _update_events_xrange(self, xrange):
3627-
"""Add or remove event-lines depending on view-range.
3628-
3629-
This has proven to be more performant (and scalable)
3630-
than adding all event-lines to plt(the Scene)
3631-
and letting pyqtgraph/Qt handle it.
3632-
"""
3633-
if self.mne.events_visible:
3634-
for ev_line in self.mne.event_lines:
3635-
if xrange[0] < ev_line.pos().x() < xrange[1]:
3636-
if ev_line not in self.mne.plt.items:
3637-
self.mne.plt.addItem(ev_line)
3638-
else:
3639-
if ev_line in self.mne.plt.items:
3640-
self.mne.plt.removeItem(ev_line)
3641-
3642-
def _update_annotations_xrange(self, xrange):
3643-
"""Add or remove annotation-regions depending on view-range.
3644-
3645-
This has proven to be more performant (and scalable)
3646-
than adding all annotations to plt(the Scene)
3647-
and letting pyqtgraph/Qt handle it.
3648-
"""
3649-
if self.mne.annotations_visible:
3650-
for region in self.mne.regions:
3651-
if self.mne.visible_annotations[region.description]:
3652-
rmin, rmax = region.getRegion()
3653-
xmin, xmax = xrange
3654-
comparisons = [rmin < xmin,
3655-
rmin < xmax,
3656-
rmax < xmin,
3657-
rmax < xmax]
3658-
if all(comparisons) or not any(comparisons):
3659-
if region in self.mne.plt.items:
3660-
self.mne.plt.removeItem(region)
3661-
self.mne.plt.removeItem(region.label_item)
3662-
else:
3663-
if region not in self.mne.plt.items:
3664-
self.mne.plt.addItem(region)
3665-
self.mne.plt.addItem(region.label_item)
3666-
36673620
def _yrange_changed(self, _, yrange):
36683621
if not self.mne.butterfly:
36693622
if not self.mne.fig_selection:
@@ -3973,17 +3926,14 @@ def _add_region(self, plot_onset, duration, description, region=None):
39733926
if not region:
39743927
region = AnnotRegion(self.mne, description=description,
39753928
values=(plot_onset, plot_onset + duration))
3976-
if (any([self.mne.t_start < v < self.mne.t_start + self.mne.duration
3977-
for v in [plot_onset, plot_onset + duration]]) and
3978-
region not in self.mne.plt.items):
3979-
self.mne.plt.addItem(region)
3980-
self.mne.plt.addItem(region.label_item)
3929+
# Add region to list and plot
3930+
self.mne.regions.append(region)
3931+
3932+
# Connect signals of region
39813933
region.regionChangeFinished.connect(self._region_changed)
39823934
region.gotSelected.connect(self._region_selected)
39833935
region.removeRequested.connect(self._remove_region)
39843936
self.mne.viewbox.sigYRangeChanged.connect(region.update_label_pos)
3985-
self.mne.regions.append(region)
3986-
39873937
region.update_label_pos()
39883938

39893939
def _remove_region(self, region, from_annot=True):
@@ -4108,17 +4058,6 @@ def _set_annotations_visible(self, visible):
41084058
self.mne.visible_annotations[descr] = visible
41094059
self._update_regions_visible()
41104060

4111-
# Update Plot
4112-
if visible:
4113-
self._update_annotations_xrange((self.mne.t_start,
4114-
self.mne.t_start +
4115-
self.mne.duration))
4116-
else:
4117-
for region in [r for r in self.mne.regions
4118-
if r in self.mne.plt.items]:
4119-
self.mne.plt.removeItem(region)
4120-
self.mne.plt.removeItem(region.label_item)
4121-
41224061
def _toggle_annotations(self):
41234062
self.mne.annotations_visible = not self.mne.annotations_visible
41244063
self._set_annotations_visible(self.mne.annotations_visible)
@@ -4231,15 +4170,6 @@ def _set_events_visible(self, visible):
42314170
for event_line in self.mne.event_lines:
42324171
event_line.setVisible(visible)
42334172

4234-
# Update Plot
4235-
if visible:
4236-
self._update_events_xrange((self.mne.t_start,
4237-
self.mne.t_start +
4238-
self.mne.duration))
4239-
else:
4240-
for event_line in [evl for evl in self.mne.event_lines
4241-
if evl in self.mne.plt.items]:
4242-
self.mne.plt.removeItem(event_line)
42434173
self.mne.overview_bar.update_events()
42444174

42454175
def _toggle_events(self):

0 commit comments

Comments
 (0)