Skip to content

Commit 44769ce

Browse files
committed
Create EverestControlsPlotOptions
Similar to MisfitsOptions, also improved imports
1 parent f5b4d86 commit 44769ce

4 files changed

Lines changed: 83 additions & 27 deletions

File tree

src/ert/gui/plotting/plot_window.py

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,10 @@
1212
from PyQt6.QtCore import pyqtSlot as Slot
1313
from PyQt6.QtWidgets import (
1414
QApplication,
15-
QButtonGroup,
1615
QDialog,
1716
QHBoxLayout,
1817
QLabel,
1918
QMainWindow,
20-
QRadioButton,
2119
QSplitter,
2220
QStyle,
2321
QTabWidget,
@@ -59,7 +57,7 @@
5957
from .utils.qt_creator import create_group_box, create_group_layout, create_side_panel
6058
from .widgets.data_type_keys_widget import DataTypeKeysWidget
6159
from .widgets.everest_control_selection_widget import EverestControlSelectionWidget
62-
from .widgets.plot_controls.misfits_options import MisfitsOptions
60+
from .widgets.plot_controls import EverestControlsPlotOptions, MisfitsOptions
6361
from .widgets.plot_ensemble_selection_widget import EnsembleSelectionWidget
6462
from .widgets.plot_widget import Plotter, PlotWidget
6563

@@ -321,26 +319,8 @@ def __init__(
321319
create_group_layout([self._ensemble_selection_widget]),
322320
)
323321

324-
self._display_over_batches_radio = QRadioButton("batches")
325-
self._display_over_batches_radio.setObjectName("display_over_batches_radio")
326-
self._display_over_batches_radio.setChecked(True)
327-
self._display_over_controls_radio = QRadioButton("controls")
328-
self._display_over_controls_radio.setObjectName(
329-
"display_over_controls_radio"
330-
)
331-
self._display_over_button_group = QButtonGroup(self)
332-
self._display_over_button_group.addButton(self._display_over_batches_radio)
333-
self._display_over_button_group.addButton(self._display_over_controls_radio)
334-
self._display_over_button_group.buttonClicked.connect(self.updatePlot)
335-
336-
self._display_over_group = create_group_box(
337-
"X-axis:",
338-
create_group_layout(
339-
[
340-
self._display_over_batches_radio,
341-
self._display_over_controls_radio,
342-
]
343-
),
322+
self._everest_controls_plot_options = EverestControlsPlotOptions(
323+
self.updatePlot
344324
)
345325

346326
self._misfits_options = MisfitsOptions(self.updatePlot)
@@ -349,15 +329,15 @@ def __init__(
349329
right_layout = create_group_layout(
350330
[
351331
self._ensemble_group,
352-
self._display_over_group,
332+
self._everest_controls_plot_options.get_widget(),
353333
self._everest_controls_group,
354334
self._misfits_options.get_widget(),
355335
]
356336
)
357337
right_container.setLayout(right_layout)
358338

359339
self._everest_controls_group.setVisible(False)
360-
self._display_over_group.setVisible(False)
340+
self._everest_controls_plot_options.get_widget().setVisible(False)
361341
self._misfits_options.get_widget().setVisible(False)
362342
self._data_type_keys_widget.selectDefault()
363343

@@ -435,7 +415,7 @@ def updatePlot(self, layer: int | None = None) -> None:
435415

436416
is_everest_ensemble = plot_widget.name == ENSEMBLE and self.is_everest
437417
self._everest_controls_group.setVisible(is_gradient_plot or is_controls_plot)
438-
self._display_over_group.setVisible(is_controls_plot)
418+
self._everest_controls_plot_options.get_widget().setVisible(is_controls_plot)
439419
self._ensemble_selection_widget.apply_ensemble_filtering(
440420
require_func_eval=is_objective_plot
441421
or is_everest_ensemble
@@ -575,7 +555,9 @@ def fetch_data(
575555
key,
576556
layer,
577557
)
578-
plot_context.by_batch = self._display_over_batches_radio.isChecked()
558+
plot_context.by_batch = (
559+
self._everest_controls_plot_options.is_batches_selected()
560+
)
579561

580562
plot_context.scatter_plot = self._misfits_options.scatter_checkbox_state
581563
plot_context.box_plot = self._misfits_options.box_checkbox_state
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from .everest_controls_plot_options import EverestControlsPlotOptions
2+
from .misfits_options import MisfitsOptions
3+
4+
__all__ = [
5+
"EverestControlsPlotOptions",
6+
"MisfitsOptions",
7+
]
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from PyQt6.QtWidgets import (
2+
QButtonGroup,
3+
QGroupBox,
4+
QRadioButton,
5+
)
6+
7+
from ert.gui.plotting.utils.qt_creator import create_group_box, create_group_layout
8+
9+
10+
class EverestControlsPlotOptions:
11+
def __init__(self, connection_point) -> None:
12+
13+
self._display_over_batches_radio = QRadioButton("batches")
14+
self._display_over_batches_radio.setObjectName("display_over_batches_radio")
15+
self._display_over_batches_radio.setChecked(True)
16+
self._display_over_controls_radio = QRadioButton("controls")
17+
self._display_over_controls_radio.setObjectName("display_over_controls_radio")
18+
self._display_over_button_group = QButtonGroup()
19+
self._display_over_button_group.addButton(self._display_over_batches_radio)
20+
self._display_over_button_group.addButton(self._display_over_controls_radio)
21+
self._display_over_button_group.buttonClicked.connect(connection_point)
22+
23+
self._display_over_group = create_group_box(
24+
"X-axis:",
25+
create_group_layout(
26+
[
27+
self._display_over_batches_radio,
28+
self._display_over_controls_radio,
29+
]
30+
),
31+
)
32+
33+
def get_widget(self) -> QGroupBox:
34+
return self._display_over_group
35+
36+
def is_batches_selected(self) -> bool:
37+
return self._display_over_batches_radio.isChecked()
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
from unittest.mock import Mock
2+
3+
from PyQt6.QtCore import Qt
4+
5+
from ert.gui.plotting.widgets.plot_controls.everest_controls_plot_options import (
6+
EverestControlsPlotOptions,
7+
)
8+
9+
10+
def test_that_everest_controls_plot_options_initializes_with_expected_default_state(
11+
qtbot,
12+
):
13+
options = EverestControlsPlotOptions(Mock())
14+
qtbot.addWidget(options.get_widget())
15+
16+
assert options.is_batches_selected() is True
17+
18+
19+
def test_that_toggling_everest_controls_plot_options_invokes_the_connection_point(
20+
qtbot,
21+
):
22+
connection_point = Mock()
23+
options = EverestControlsPlotOptions(connection_point)
24+
widget = options.get_widget()
25+
qtbot.addWidget(widget)
26+
widget.show()
27+
28+
qtbot.mouseClick(options._display_over_controls_radio, Qt.MouseButton.LeftButton)
29+
30+
connection_point.assert_called()

0 commit comments

Comments
 (0)