1
1
from __future__ import annotations
2
2
3
+ import datetime
3
4
import functools
4
5
import webbrowser
5
6
from typing import TYPE_CHECKING , Dict , Optional
6
7
7
- from qtpy .QtCore import QSize , Qt , Signal
8
+ from qtpy .QtCore import QSize , Qt , Signal , Slot
8
9
from qtpy .QtGui import QCloseEvent , QCursor , QIcon
9
10
from qtpy .QtWidgets import (
10
11
QAction ,
22
23
from ert .gui .ertnotifier import ErtNotifier
23
24
from ert .gui .find_ert_info import find_ert_info
24
25
from ert .gui .simulation import ExperimentPanel
26
+ from ert .gui .simulation .run_dialog import RunDialog
25
27
from ert .gui .tools .event_viewer import EventViewerTool , GUILogHandler
26
28
from ert .gui .tools .export import ExportTool
27
29
from ert .gui .tools .load_results import LoadResultsTool
@@ -80,8 +82,8 @@ def __init__(
80
82
self .log_handler = log_handler
81
83
82
84
self .setWindowTitle (f"ERT - { config_file } - { find_ert_info ()} " )
85
+ self .dialog_panels = []
83
86
self .central_panels = []
84
- self .central_panels_index = 0
85
87
86
88
self .plugin_manager = plugin_manager
87
89
self .central_widget = QFrame (self )
@@ -105,8 +107,16 @@ def __init__(
105
107
self .notifier ,
106
108
self .ert_config .model_config .num_realizations ,
107
109
)
110
+
108
111
self ._create_sidebar_button (self ._manage_experiments_tool )
109
112
113
+ self .results_button = self ._create_sidebar_button ()
114
+ self .results_button .setIcon (QIcon ("img:in_progress.svg" ))
115
+ self .results_button .setToolTip ("Show Results" )
116
+ self .results_button .setEnabled (False )
117
+ menu = QMenu ()
118
+ self .results_button .setMenu (menu )
119
+
110
120
self .vbox_layout .addStretch ()
111
121
self .central_layout .addWidget (self .side_frame )
112
122
@@ -117,6 +127,43 @@ def __init__(
117
127
self .__add_tools_menu ()
118
128
self .__add_help_menu ()
119
129
130
+ @Slot (object )
131
+ def slot_add_widget (self , run_dialog : RunDialog ):
132
+ print ("hello!" )
133
+ for widget in self .central_panels :
134
+ widget .setVisible (False )
135
+
136
+ self .dialog_panels .append (run_dialog )
137
+
138
+ run_dialog .setParent (self )
139
+ self .central_layout .addWidget (run_dialog )
140
+ self .results_button .setEnabled (True )
141
+ date_time = datetime .datetime .utcnow ().strftime ("%Y-%d-%m %H:%M:%S" )
142
+ act = self .results_button .menu ().addAction (date_time )
143
+ act .setProperty ("index" , len (self .dialog_panels ) - 1 )
144
+ act .triggered .connect (self .select_dialog_panel )
145
+
146
+ def select_dialog_panel (self ):
147
+ actor = self .sender ()
148
+ index = int (actor .property ("index" ))
149
+
150
+ for w in self .central_panels :
151
+ w .hide ()
152
+
153
+ for i in range (len (self .dialog_panels )):
154
+ should_be_visible = i == index
155
+ self .dialog_panels [i ].setVisible (should_be_visible )
156
+
157
+ def select_widget (self ) -> None :
158
+ index = 0
159
+
160
+ for w in self .dialog_panels :
161
+ w .hide ()
162
+
163
+ for i in range (len (self .central_panels )):
164
+ should_be_visible = i == index
165
+ self .central_panels [i ].setVisible (should_be_visible )
166
+
120
167
def post_init (self ):
121
168
experiment_panel = ExperimentPanel (
122
169
self .ert_config ,
@@ -127,6 +174,8 @@ def post_init(self):
127
174
self .central_layout .addWidget (experiment_panel )
128
175
self .central_panels .append (experiment_panel )
129
176
177
+ experiment_panel .experiment_started .connect (self .slot_add_widget )
178
+
130
179
plugin_handler = PluginHandler (
131
180
self .notifier ,
132
181
[wfj for wfj in self .ert_config .workflow_jobs .values () if wfj .is_plugin ()],
@@ -150,23 +199,27 @@ def _create_sidebar_button(self, tool: Optional[Tool] = None) -> QPushButton:
150
199
button .setToolTip (tool .getName ())
151
200
button .clicked .connect (tool .trigger )
152
201
self .vbox_layout .addWidget (button )
153
- button .setProperty ("INDEX" , self .central_panels_index )
154
- self .central_panels_index += 1
202
+ button .setProperty ("index" , len (self .central_panels ) - 1 )
155
203
return button
156
204
157
205
def add_experiment_button (self ) -> None :
158
206
button = self ._create_sidebar_button ()
159
207
button .setIcon (QIcon ("img:play_circle_outlined.svg" ))
160
208
button .setToolTip ("Start Simulation" )
161
- button .clicked .connect (self .toggle_visibility )
209
+ button .clicked .connect (self .select_widget )
162
210
163
211
menu = QMenu ()
164
- menu .addAction ("Single Test Run" )
165
- menu .addAction ("Ensemble Experiment" )
166
- menu .addAction ("Manual Update" )
167
- menu .addAction ("ES MDA" )
168
- menu .addAction ("Ensemble Smoother" )
169
212
menu .setStyleSheet (MENU_ITEM_STYLE_SHEET )
213
+
214
+ for sim_mode in [
215
+ "Single test run" ,
216
+ "Ensemble Experiment" ,
217
+ "Manual Update" ,
218
+ "ES MDA" ,
219
+ "Ensemble Smoother" ,
220
+ ]:
221
+ act = menu .addAction (sim_mode )
222
+ act .triggered .connect (self .select_widget )
170
223
button .setMenu (menu )
171
224
172
225
def toggle_visibility (self ) -> None :
0 commit comments