Skip to content

Commit 7e5b85a

Browse files
committed
Create EverestControlsPlotOptions
Similar to MisfitsOptions, also improved imports
1 parent dae9a33 commit 7e5b85a

4 files changed

Lines changed: 88 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
@@ -13,12 +13,10 @@
1313
from PyQt6.QtCore import pyqtSlot as Slot
1414
from PyQt6.QtWidgets import (
1515
QApplication,
16-
QButtonGroup,
1716
QDialog,
1817
QHBoxLayout,
1918
QLabel,
2019
QMainWindow,
21-
QRadioButton,
2220
QSplitter,
2321
QStyle,
2422
QTabWidget,
@@ -60,7 +58,7 @@
6058
from .utils.qt_creator import create_group_box, create_group_layout, create_side_panel
6159
from .widgets.data_type_keys_widget import DataTypeKeysWidget
6260
from .widgets.everest_control_selection_widget import EverestControlSelectionWidget
63-
from .widgets.plot_controls.misfits_options import MisfitsOptions
61+
from .widgets.plot_controls import EverestControlsPlotOptions, MisfitsOptions
6462
from .widgets.plot_ensemble_selection_widget import EnsembleSelectionWidget
6563
from .widgets.plot_widget import Plotter, PlotWidget
6664

@@ -322,26 +320,8 @@ def __init__(
322320
create_group_layout([self._ensemble_selection_widget]),
323321
)
324322

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

347327
self._misfits_options = MisfitsOptions(self.updatePlot)
@@ -350,15 +330,15 @@ def __init__(
350330
right_layout = create_group_layout(
351331
[
352332
self._ensemble_group,
353-
self._display_over_group,
333+
self._everest_controls_plot_options.get_widget(),
354334
self._everest_controls_group,
355335
self._misfits_options.get_widget(),
356336
]
357337
)
358338
right_container.setLayout(right_layout)
359339

360340
self._everest_controls_group.setVisible(False)
361-
self._display_over_group.setVisible(False)
341+
self._everest_controls_plot_options.get_widget().setVisible(False)
362342
self._misfits_options.get_widget().setVisible(False)
363343
self._data_type_keys_widget.selectDefault()
364344

@@ -436,7 +416,7 @@ def updatePlot(self, layer: int | None = None) -> None:
436416

437417
is_everest_ensemble = plot_widget.name == ENSEMBLE and self.is_everest
438418
self._everest_controls_group.setVisible(is_gradient_plot or is_controls_plot)
439-
self._display_over_group.setVisible(is_controls_plot)
419+
self._everest_controls_plot_options.get_widget().setVisible(is_controls_plot)
440420
self._ensemble_selection_widget.apply_ensemble_filtering(
441421
require_func_eval=is_objective_plot
442422
or is_everest_ensemble
@@ -576,7 +556,9 @@ def fetch_data(
576556
key,
577557
layer,
578558
)
579-
plot_context.by_batch = self._display_over_batches_radio.isChecked()
559+
plot_context.by_batch = (
560+
self._everest_controls_plot_options.is_batches_selected()
561+
)
580562

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

0 commit comments

Comments
 (0)