def __init__(self): RowPanel.__init__(self, "Simulation") self.addLabeledSeparator("Simulation settings") case_model = CaseSelectorModel() case_selector = ComboChoice(case_model, "Current case", "init/current_case_selection") self.addRow(case_selector) # Give a warning if the case is not initialized! IsCaseInitializedModel().observable().attach(IsCaseInitializedModel.TEXT_VALUE_CHANGED_EVENT, self.updateSimulationStatus) runpath_model = RunPathModel() self.addRow(PathFormatChooser(runpath_model, "Runpath", "config/simulation/runpath")) ensemble_size_model = EnsembleSizeModel() self.addRow(IntegerSpinner(ensemble_size_model, "Number of realizations", "config/ensemble/num_realizations")) simulation_mode_model = SimulationModeModel() self.addRow(ComboChoice(simulation_mode_model, "Simulation mode", "run/simulation_mode")) self.addSpace(10) self.run = FunctionButtonModel("Run", self.runSimulation) self.run.setEnabled(SimulationModeModel().getCurrentChoice().buttonIsEnabled()) self.run_button = Button(self.run, label="Start simulation", help_link="run/run") self.run_button.addStretch() self.config_and_run = FunctionButtonModel("Configure and Run", self.configureAndRunSimulation) self.config_and_run.setEnabled(SimulationModeModel().getCurrentChoice().buttonIsEnabled()) self.run_button.addOption(self.config_and_run) self.run_button.addOption(OneMoreIteration()) self.addRow(self.run_button) self.addSpace(10) self.warning_panel = WarningPanel() self.addRow(self.warning_panel) simulation_mode_model.observable().attach(SimulationModeModel.CURRENT_CHOICE_CHANGED_EVENT, self.toggleSimulationMode) self.updateSimulationStatus()
class SimulationPanel(RowPanel): def __init__(self): RowPanel.__init__(self, "Simulation") self.addLabeledSeparator("Simulation settings") case_model = CaseSelectorModel() case_selector = ComboChoice(case_model, "Current case", "init/current_case_selection") self.addRow(case_selector) # Give a warning if the case is not initialized! IsCaseInitializedModel().observable().attach(IsCaseInitializedModel.TEXT_VALUE_CHANGED_EVENT, self.updateSimulationStatus) runpath_model = RunPathModel() self.addRow(PathFormatChooser(runpath_model, "Runpath", "config/simulation/runpath")) ensemble_size_model = EnsembleSizeModel() self.addRow(IntegerSpinner(ensemble_size_model, "Number of realizations", "config/ensemble/num_realizations")) simulation_mode_model = SimulationModeModel() self.addRow(ComboChoice(simulation_mode_model, "Simulation mode", "run/simulation_mode")) self.addSpace(10) self.run = FunctionButtonModel("Run", self.runSimulation) self.run.setEnabled(SimulationModeModel().getCurrentChoice().buttonIsEnabled()) self.run_button = Button(self.run, label="Start simulation", help_link="run/run") self.run_button.addStretch() self.config_and_run = FunctionButtonModel("Configure and Run", self.configureAndRunSimulation) self.config_and_run.setEnabled(SimulationModeModel().getCurrentChoice().buttonIsEnabled()) self.run_button.addOption(self.config_and_run) self.run_button.addOption(OneMoreIteration()) self.addRow(self.run_button) self.addSpace(10) self.warning_panel = WarningPanel() self.addRow(self.warning_panel) simulation_mode_model.observable().attach(SimulationModeModel.CURRENT_CHOICE_CHANGED_EVENT, self.toggleSimulationMode) self.updateSimulationStatus() def updateSimulationStatus(self): MessageCenter().setWarning(IsCaseInitializedModel.__name__, IsCaseInitializedModel().getText()) #todo move this binding to the model? def runSimulation(self): simulation_model = SimulationModeModel().getCurrentChoice() simulation_runner = SimulationRunner(simulation_model) dialog = RunDialog(simulation_runner) simulation_runner.start() dialog.exec_() self.updateSimulationStatus() def configureAndRunSimulation(self): simulation_model = SimulationModeModel().getCurrentChoice() print("Configure!!!") simulation_model.buttonTriggered() def toggleSimulationMode(self): model = SimulationModeModel().getCurrentChoice() self.run.setEnabled(model.buttonIsEnabled()) self.config_and_run.setEnabled(model.buttonIsEnabled())