class KeywordPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.keywordModel = KeywordModel("") self.min_std = PathChooser(self, "", "config/ensemble/gen_kw_min_std", True , must_be_set = False) self.modelWrap(self.min_std, "min_std") self.template = PathChooser(self, "", "config/ensemble/gen_kw_template", True) self.modelWrap(self.template, "template") self.enkf_outfile = PathChooser(self, "", "config/ensemble/gen_kw_enkf_outfile", True, must_be_set=False) self.modelWrap(self.enkf_outfile, "enkf_outfile") self.init_files = PathChooser(self, "", "config/ensemble/gen_kw_init_files", True, must_be_set=False) self.modelWrap(self.init_files, "init_files") self.parameter_file = PathChooser(self, "", "config/ensemble/gen_kw_parameter_file", True, must_be_set=False) self.modelWrap(self.parameter_file, "parameter_file") layout.addRow("Parameter file:" , self.parameter_file) layout.addRow("Include file:" , self.enkf_outfile) layout.addRow("Template:" , self.template) layout.addRow("Minimum std:" , self.min_std) layout.addRow("Init files:" , self.init_files) button = QtGui.QPushButton() button.setText("Reload") button.setMaximumWidth(70) self.connect(button, QtCore.SIGNAL('clicked()'), self._reload) layout.addRow("Reload files:", button) self.setLayout(layout) def _reload(self): self.keywordModel.emitUpdate() def setKeywordModel(self, keywordModel): self.keywordModel = keywordModel self.min_std.fetchContent() self.template.fetchContent() self.enkf_outfile.fetchContent() self.init_files.fetchContent() self.parameter_file.fetchContent() def modelWrap(self, widget, attribute): widget.initialize = ContentModel.emptyInitializer widget.setter = lambda model, value: self.keywordModel.set(attribute, value) widget.getter = lambda model: self.keywordModel[attribute]
class DataPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.dataModel = DataModel("") self.input = ComboChoice(self, enums.gen_data_file_format.INPUT_TYPES, "", "config/ensemble/gen_data_param_init") self.modelWrap(self.input, "input_format") self.output = ComboChoice(self, enums.gen_data_file_format.OUTPUT_TYPES, "", "config/ensemble/gen_data_param_output") self.modelWrap(self.output, "output_format") self.template_file = PathChooser(self, "", "config/ensemble/gen_data_template_file", True , must_be_set=False) self.modelWrap(self.template_file, "template_file") self.template_key = PathChooser(self, "", "config/ensemble/gen_data_template_key", True , must_be_set=False) self.modelWrap(self.template_key, "template_key") self.init_file_fmt = PathChooser(self, "", "config/ensemble/gen_data_init_file_fmt", True , must_be_set=False) self.modelWrap(self.init_file_fmt, "init_file_fmt") self.file_generated_by_enkf = PathChooser(self, "", "config/ensemble/gen_data_file_generated_by_enkf", True, must_be_set=False) self.modelWrap(self.file_generated_by_enkf, "enkf_outfile") self.file_loaded_by_enkf = PathChooser(self, "", "config/ensemble/gen_data_file_loaded_by_enkf", True, must_be_set=False) self.modelWrap(self.file_loaded_by_enkf, "enkf_infile") self.min_std = PathChooser(self, "", "config/ensemble/gen_data_min_std", True, must_be_set=False) self.modelWrap(self.min_std, "min_std") layout.addRow("Input:", self.input) layout.addRow("Output:", self.output) layout.addRow("Template file:", self.template_file) layout.addRow("Template key:", self.template_key) layout.addRow("Init files:", self.init_file_fmt) layout.addRow("Include file:", self.file_generated_by_enkf) layout.addRow("Min. std.:", self.min_std) layout.addRow("File loaded by EnKF:", self.file_loaded_by_enkf) button = QtGui.QPushButton() button.setText("Reload") button.setMaximumWidth(70) self.connect(button, QtCore.SIGNAL('clicked()'), self._reload) layout.addRow("Reload template:", button) self.setLayout(layout) def _reload(self): self.dataModel.emitUpdate() def modelWrap(self, widget, attribute): widget.initialize = ert_gui.widgets.helpedwidget.ContentModel.emptyInitializer widget.setter = lambda model, value: self.dataModel.set(attribute, value) widget.getter = lambda model: self.dataModel[attribute] def setDataModel(self, dataModel): self.dataModel = dataModel self.input.fetchContent() self.output.fetchContent() self.template_file.fetchContent() self.template_key.fetchContent() self.init_file_fmt.fetchContent() self.file_generated_by_enkf.fetchContent() self.file_loaded_by_enkf.fetchContent() self.min_std.fetchContent()
class FieldPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.fieldModel = FieldModel("") self.fieldType = ComboChoice(self, field_type.values(), "", "config/ensemble/field_type") self.fieldType.setter = lambda model, value: self.typeChanged(field_type[str(value)]) self.fieldType.getter = lambda model: str(self.fieldModel["type"]) self.fieldType.initialize = ContentModel.emptyInitializer self.min = DoubleBox(self, "", "config/ensemble/field_min") self.modelWrap(self.min, "min") self.max = DoubleBox(self, "", "config/ensemble/field_max") self.modelWrap(self.max, "max") self.init = ComboChoice(self, ["None", "EXP", "EXP0", "LOG", "LN","LN0", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_init") self.modelWrap(self.init, "init") self.output = ComboChoice(self, ["None", "EXP", "EXP0", "LOG", "LN","LN0", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_output") self.modelWrap(self.output, "output") self.init_files = PathChooser(self, "", "config/ensemble/field_init_files", True) self.modelWrap(self.init_files, "init_files") self.file_generated_by_enkf = PathChooser(self, "", "config/ensemble/field_file_generated_by_enkf", True) self.modelWrap(self.file_generated_by_enkf, "enkf_outfile") self.file_loaded_by_enkf = PathChooser(self, "", "config/ensemble/field_file_loaded_by_enkf", True) self.modelWrap(self.file_loaded_by_enkf, "enkf_infile") self.min_std = PathChooser(self, "", "config/ensemble/field_min_std", True, must_be_set=False) self.modelWrap(self.min_std, "min_std") layout.addRow("Field type:", self.fieldType) layout.addRow("Include file:", self.file_generated_by_enkf) # generated by ERT layout.addRow("Init files:", self.init_files) layout.addRow("Min:", self.min) layout.addRow("Max:", self.max) layout.addRow("Init transformation:", self.init) layout.addRow("Output transformation:", self.output) layout.addRow("Min. std.:", self.min_std) layout.addRow("File loaded by EnKF:", self.file_loaded_by_enkf) self.setLayout(layout) self.typeChanged(field_type.ECLIPSE_RESTART) def modelWrap(self, widget, attribute): widget.initialize = ContentModel.emptyInitializer widget.setter = lambda model, value: self.fieldModel.set(attribute, value) widget.getter = lambda model: self.fieldModel[attribute] def typeChanged(self, value): setattr(self.fieldModel, "type", value) self.min.setEnabled(True) self.max.setEnabled(True) self.init.setEnabled(True) self.output.setEnabled(True) self.init_files.setEnabled(True) self.file_generated_by_enkf.setEnabled(True) self.file_loaded_by_enkf.setEnabled(True) self.min_std.setEnabled(True) if value == field_type.ECLIPSE_RESTART: self.init.setEnabled(False) self.output.setEnabled(False) self.init_files.setEnabled(False) self.file_generated_by_enkf.setEnabled(False) self.file_loaded_by_enkf.setEnabled(False) self.min_std.setEnabled(False) elif value == field_type.ECLIPSE_PARAMETER: self.file_loaded_by_enkf.setEnabled(False) def setFieldModel(self, fieldModel): self.fieldModel = fieldModel self.fieldType.fetchContent() self.min.fetchContent() self.max.fetchContent() self.init.fetchContent() self.output.fetchContent() self.init_files.fetchContent() self.file_generated_by_enkf.fetchContent() self.file_loaded_by_enkf.fetchContent() self.min_std.fetchContent()
class JobsPanel(HelpedWidget): """ Widget for adding, removing and editing jobs. These additional ContentModel functions must be implemented: insert and remove. The panel expects remove to return True or False based on the success of the removal. """ def __init__(self, parent=None): HelpedWidget.__init__(self, parent, "", "config/systemenv/install_jobs") self.job = Job("undefined") self.createWidgets(parent) self.emptyPanel = ert_gui.widgets.util.createEmptyPanel() self.pagesWidget = QtGui.QStackedWidget() self.pagesWidget.addWidget(self.emptyPanel) self.pagesWidget.addWidget(self.jobPanel) self.addWidget(self.pagesWidget) def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=200, list_width=150, ignore_case=True) self.addWidget(self.searchableList) self.connect( self.searchableList, QtCore.SIGNAL( 'currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter) self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) self.jobPanel = ert_gui.widgets.util.createEmptyPanel() layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.jobpath = PathChooser(self, "", "config/systemenv/install_job_path", show_files=True, must_be_set=True) self.jobpath.initialize = ContentModel.emptyInitializer self.jobpath.setter = self.setPath self.jobpath.getter = lambda model: self.job.path layout.addRow("Job:", self.jobpath) layout.addRow(ert_gui.widgets.util.createSpace(20)) self.validationInfo = ValidationInfo(ValidationInfo.EXCLAMATION) self.validationInfo.setMessage( "Pressing edit will create a job that does not exist.") self.editButton = QtGui.QPushButton(self) self.editButton.setToolTip("Edit job") self.editButton.setIcon(ert_gui.widgets.util.resourceIcon("cog")) self.editButton.setText("Edit") self.connect(self.editButton, QtCore.SIGNAL('clicked()'), self.editJob) layout.addRow(ert_gui.widgets.util.centeredWidget(self.editButton)) layout.addRow(ert_gui.widgets.util.centeredWidget(self.validationInfo)) self.jobPanel.setLayout(layout) def setPath(self, model, path): self.job.set("path", path) self.updateContent(self.job) # if os.path.exists(path): # self.validationInfo.setMessage("") # else: # self.validationInfo.setMessage("The path must exist! Edit to create the job.") def editJob(self): if not os.path.exists(Job.path_prefix): os.mkdir(Job.path_prefix) ejd = EditJobDialog(self) ejd.setJob(self.job) ejd.exec_() self.jobpath.validatePath() def fetchContent(self): """Retrieves data from the model and inserts it into the widget""" jobs = self.getFromModel() for job in jobs: jobitem = QtGui.QListWidgetItem() jobitem.setText(job.name) jobitem.setData(QtCore.Qt.UserRole, job) jobitem.setToolTip(job.name) self.searchableList.list.addItem(jobitem) def setJob(self, job): self.job = job self.jobpath.fetchContent() def changeParameter(self, current, previous): """Switch between jobs. Selection from the list""" if current is None: self.pagesWidget.setCurrentWidget(self.emptyPanel) else: self.pagesWidget.setCurrentWidget(self.jobPanel) self.setJob(current.data(QtCore.Qt.UserRole).toPyObject()) def addToList(self, list, name): """Adds a new job to the list""" param = QtGui.QListWidgetItem() param.setText(name) new_job = Job(name) param.setData(QtCore.Qt.UserRole, new_job) list.addItem(param) list.setCurrentItem(param) return new_job def addItem(self, list): """Called by the add button to insert a new job""" uniqueNames = [] for index in range(list.count()): uniqueNames.append(str(list.item(index).text())) pd = ValidatedDialog(self, "New job", "Enter name of new job:", uniqueNames) if pd.exec_(): new_job = self.addToList(list, pd.getName()) self.updateContent(new_job, operation=self.INSERT) self.modelEmit('jobListChanged()') def removeItem(self, list): """Called by the remove button to remove a selected job""" currentRow = list.currentRow() if currentRow >= 0: title = "Delete job?" msg = "Are you sure you want to delete the job?" btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No doDelete = QtGui.QMessageBox.question(self, title, msg, btns) if doDelete == QtGui.QMessageBox.Yes: item = list.currentItem() job = item.data(QtCore.Qt.UserRole).toPyObject() success = self.updateContent(job, operation=self.REMOVE) if success: list.takeItem(currentRow) self.modelEmit('jobListChanged()')
class JobsPanel(HelpedWidget): """ Widget for adding, removing and editing jobs. These additional ContentModel functions must be implemented: insert and remove. The panel expects remove to return True or False based on the success of the removal. """ def __init__(self, parent=None): HelpedWidget.__init__(self, parent, "", "config/systemenv/install_jobs") self.job = Job("undefined") self.createWidgets(parent) self.emptyPanel = ert_gui.widgets.util.createEmptyPanel() self.pagesWidget = QtGui.QStackedWidget() self.pagesWidget.addWidget(self.emptyPanel) self.pagesWidget.addWidget(self.jobPanel) self.addWidget(self.pagesWidget) def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=200, list_width=150, ignore_case=True) self.addWidget(self.searchableList) self.connect( self.searchableList, QtCore.SIGNAL("currentItemChanged(QListWidgetItem, QListWidgetItem)"), self.changeParameter, ) self.connect(self.searchableList, QtCore.SIGNAL("addItem(list)"), self.addItem) self.connect(self.searchableList, QtCore.SIGNAL("removeItem(list)"), self.removeItem) self.jobPanel = ert_gui.widgets.util.createEmptyPanel() layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.jobpath = PathChooser(self, "", "config/systemenv/install_job_path", show_files=True, must_be_set=True) self.jobpath.initialize = ContentModel.emptyInitializer self.jobpath.setter = self.setPath self.jobpath.getter = lambda model: self.job.path layout.addRow("Job:", self.jobpath) layout.addRow(ert_gui.widgets.util.createSpace(20)) self.validationInfo = ValidationInfo(ValidationInfo.EXCLAMATION) self.validationInfo.setMessage("Pressing edit will create a job that does not exist.") self.editButton = QtGui.QPushButton(self) self.editButton.setToolTip("Edit job") self.editButton.setIcon(ert_gui.widgets.util.resourceIcon("cog")) self.editButton.setText("Edit") self.connect(self.editButton, QtCore.SIGNAL("clicked()"), self.editJob) layout.addRow(ert_gui.widgets.util.centeredWidget(self.editButton)) layout.addRow(ert_gui.widgets.util.centeredWidget(self.validationInfo)) self.jobPanel.setLayout(layout) def setPath(self, model, path): self.job.set("path", path) self.updateContent(self.job) # if os.path.exists(path): # self.validationInfo.setMessage("") # else: # self.validationInfo.setMessage("The path must exist! Edit to create the job.") def editJob(self): if not os.path.exists(Job.path_prefix): os.mkdir(Job.path_prefix) ejd = EditJobDialog(self) ejd.setJob(self.job) ejd.exec_() self.jobpath.validatePath() def fetchContent(self): """Retrieves data from the model and inserts it into the widget""" jobs = self.getFromModel() for job in jobs: jobitem = QtGui.QListWidgetItem() jobitem.setText(job.name) jobitem.setData(QtCore.Qt.UserRole, job) jobitem.setToolTip(job.name) self.searchableList.list.addItem(jobitem) def setJob(self, job): self.job = job self.jobpath.fetchContent() def changeParameter(self, current, previous): """Switch between jobs. Selection from the list""" if current is None: self.pagesWidget.setCurrentWidget(self.emptyPanel) else: self.pagesWidget.setCurrentWidget(self.jobPanel) self.setJob(current.data(QtCore.Qt.UserRole).toPyObject()) def addToList(self, list, name): """Adds a new job to the list""" param = QtGui.QListWidgetItem() param.setText(name) new_job = Job(name) param.setData(QtCore.Qt.UserRole, new_job) list.addItem(param) list.setCurrentItem(param) return new_job def addItem(self, list): """Called by the add button to insert a new job""" uniqueNames = [] for index in range(list.count()): uniqueNames.append(str(list.item(index).text())) pd = ValidatedDialog(self, "New job", "Enter name of new job:", uniqueNames) if pd.exec_(): new_job = self.addToList(list, pd.getName()) self.updateContent(new_job, operation=self.INSERT) self.modelEmit("jobListChanged()") def removeItem(self, list): """Called by the remove button to remove a selected job""" currentRow = list.currentRow() if currentRow >= 0: title = "Delete job?" msg = "Are you sure you want to delete the job?" btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No doDelete = QtGui.QMessageBox.question(self, title, msg, btns) if doDelete == QtGui.QMessageBox.Yes: item = list.currentItem() job = item.data(QtCore.Qt.UserRole).toPyObject() success = self.updateContent(job, operation=self.REMOVE) if success: list.takeItem(currentRow) self.modelEmit("jobListChanged()")
class RunTemplatePanel(HelpedWidget): """ Widget for adding, removing and editing run templates. """ def __init__(self, parent=None): HelpedWidget.__init__(self, parent, "", "config/simulation/run_template") self.run_template = RunTemplate("undefined", "", "", "") self.createWidgets(parent) self.emptyPanel = ert_gui.widgets.util.createEmptyPanel() self.pagesWidget = QtGui.QStackedWidget() self.pagesWidget.addWidget(self.emptyPanel) self.pagesWidget.addWidget(self.run_template_panel) self.addWidget(self.pagesWidget) self.addHelpButton() def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=150, list_width=150, ignore_case=True) self.addWidget(self.searchableList) self.connect( self.searchableList, QtCore.SIGNAL( 'currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter) self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) self.run_template_panel = ert_gui.widgets.util.createEmptyPanel() layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.run_template_file = PathChooser( self, "", "config/simulation/run_template_file", show_files=True) self.run_template_file.initialize = ContentModel.emptyInitializer self.run_template_file.setter = self.setTemplateFile self.run_template_file.getter = lambda model: self.run_template.template_file self.run_template_target = PathChooser( self, "", "config/simulation/run_template_target", show_files=True) self.run_template_target.initialize = ContentModel.emptyInitializer self.run_template_target.setter = self.setTargetFile self.run_template_target.getter = lambda model: self.run_template.target_file self.run_template_args = StringBox( self, "", "config/simulation/run_template_arguments") self.run_template_args.initialize = ContentModel.emptyInitializer self.run_template_args.setter = self.setArguments self.run_template_args.getter = lambda model: self.run_template.arguments layout.addRow("Template file:", self.run_template_file) layout.addRow("Target file:", self.run_template_target) layout.addRow("Arguments:", self.run_template_args) layout.addRow(ert_gui.widgets.util.createSpace(20)) self.run_template_panel.setLayout(layout) def setArguments(self, model, arguments): self.run_template.setArguments(arguments) self.runTemplateChanged() def setTemplateFile(self, model, template_file): self.run_template.setTemplateFile(template_file) self.runTemplateChanged() def setTargetFile(self, model, target_file): self.run_template.setTargetFile(target_file) self.runTemplateChanged() def fetchContent(self): """ Retrieves data from the model and inserts it into the widget. List of tuples: (name, template_file, target_file, arguments) """ data = self.getFromModel() self.searchableList.list.clear() for item in data: jobitem = QtGui.QListWidgetItem() jobitem.setText(item[0]) run_template = RunTemplate(item[0], item[1], item[2], item[3]) jobitem.setData(QtCore.Qt.UserRole, run_template) jobitem.setToolTip(item[0]) self.searchableList.list.addItem(jobitem) def setRunTemplate(self, run_template): """Set the current visible run template""" self.run_template = run_template self.run_template_args.fetchContent() self.run_template_file.fetchContent() self.run_template_target.fetchContent() def changeParameter(self, current, previous): """Switch between run templates. Selection from the list""" if current is None: self.pagesWidget.setCurrentWidget(self.emptyPanel) else: self.pagesWidget.setCurrentWidget(self.run_template_panel) self.setRunTemplate(current.data(QtCore.Qt.UserRole).toPyObject()) def runTemplateChanged(self): """ Called whenever the run template is changed. (adding, removing) The data submitted to the updateContent() (from ContentModel) is a list of tuples (name, template_file, target_file, arguments) """ items = self.searchableList.getItems() currentRow = self.searchableList.list.currentRow() run_templates = [] for item in items: r_t = item.data(QtCore.Qt.UserRole).toPyObject() run_template_tuple = (r_t.name, r_t.template_file, r_t.target_file, r_t.arguments) run_templates.append(run_template_tuple) self.updateContent(run_templates) self.fetchContent() self.searchableList.list.setCurrentRow(currentRow) def addToList(self, list, name): """Adds a new run template to the list""" param = QtGui.QListWidgetItem() param.setText(name) new_job = RunTemplate(name) param.setData(QtCore.Qt.UserRole, new_job) list.addItem(param) list.setCurrentItem(param) return param def addItem(self, list): """Called by the add button to insert a new run template""" uniqueNames = [] for index in range(list.count()): uniqueNames.append(str(list.item(index).text())) pd = ValidatedDialog(self, "New run template", "Enter name of new run template:", uniqueNames) if pd.exec_(): self.addToList(list, pd.getName()) self.runTemplateChanged() def removeItem(self, list): """Called by the remove button to remove a selected job""" currentRow = list.currentRow() if currentRow >= 0: title = "Delete run template?" msg = "Are you sure you want to delete the run template?" btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No doDelete = QtGui.QMessageBox.question(self, title, msg, btns) if doDelete == QtGui.QMessageBox.Yes: list.takeItem(currentRow) self.runTemplateChanged()
class RunTemplatePanel(HelpedWidget): """ Widget for adding, removing and editing run templates. """ def __init__(self, parent=None): HelpedWidget.__init__(self, parent, "", "config/simulation/run_template") self.run_template = RunTemplate("undefined", "", "", "") self.createWidgets(parent) self.emptyPanel = ert_gui.widgets.util.createEmptyPanel() self.pagesWidget = QtGui.QStackedWidget() self.pagesWidget.addWidget(self.emptyPanel) self.pagesWidget.addWidget(self.run_template_panel) self.addWidget(self.pagesWidget) self.addHelpButton() def createWidgets(self, parent): self.searchableList = SearchableList(parent, list_height=150, list_width=150, ignore_case=True) self.addWidget(self.searchableList) self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter) self.connect(self.searchableList, QtCore.SIGNAL('addItem(list)'), self.addItem) self.connect(self.searchableList, QtCore.SIGNAL('removeItem(list)'), self.removeItem) self.run_template_panel = ert_gui.widgets.util.createEmptyPanel() layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.run_template_file = PathChooser(self, "", "config/simulation/run_template_file", show_files=True) self.run_template_file.initialize = ContentModel.emptyInitializer self.run_template_file.setter = self.setTemplateFile self.run_template_file.getter = lambda model: self.run_template.template_file self.run_template_target = PathChooser(self, "", "config/simulation/run_template_target", show_files=True) self.run_template_target.initialize = ContentModel.emptyInitializer self.run_template_target.setter = self.setTargetFile self.run_template_target.getter = lambda model: self.run_template.target_file self.run_template_args = StringBox(self, "", "config/simulation/run_template_arguments") self.run_template_args.initialize = ContentModel.emptyInitializer self.run_template_args.setter = self.setArguments self.run_template_args.getter = lambda model: self.run_template.arguments layout.addRow("Template file:", self.run_template_file) layout.addRow("Target file:", self.run_template_target) layout.addRow("Arguments:", self.run_template_args) layout.addRow(ert_gui.widgets.util.createSpace(20)) self.run_template_panel.setLayout(layout) def setArguments(self, model, arguments): self.run_template.setArguments(arguments) self.runTemplateChanged() def setTemplateFile(self, model, template_file): self.run_template.setTemplateFile(template_file) self.runTemplateChanged() def setTargetFile(self, model, target_file): self.run_template.setTargetFile(target_file) self.runTemplateChanged() def fetchContent(self): """ Retrieves data from the model and inserts it into the widget. List of tuples: (name, template_file, target_file, arguments) """ data = self.getFromModel() self.searchableList.list.clear() for item in data: jobitem = QtGui.QListWidgetItem() jobitem.setText(item[0]) run_template = RunTemplate(item[0], item[1], item[2], item[3]) jobitem.setData(QtCore.Qt.UserRole, run_template) jobitem.setToolTip(item[0]) self.searchableList.list.addItem(jobitem) def setRunTemplate(self, run_template): """Set the current visible run template""" self.run_template = run_template self.run_template_args.fetchContent() self.run_template_file.fetchContent() self.run_template_target.fetchContent() def changeParameter(self, current, previous): """Switch between run templates. Selection from the list""" if current is None: self.pagesWidget.setCurrentWidget(self.emptyPanel) else: self.pagesWidget.setCurrentWidget(self.run_template_panel) self.setRunTemplate(current.data(QtCore.Qt.UserRole).toPyObject()) def runTemplateChanged(self): """ Called whenever the run template is changed. (adding, removing) The data submitted to the updateContent() (from ContentModel) is a list of tuples (name, template_file, target_file, arguments) """ items = self.searchableList.getItems() currentRow = self.searchableList.list.currentRow() run_templates = [] for item in items: r_t = item.data(QtCore.Qt.UserRole).toPyObject() run_template_tuple = (r_t.name, r_t.template_file, r_t.target_file, r_t.arguments) run_templates.append(run_template_tuple) self.updateContent(run_templates) self.fetchContent() self.searchableList.list.setCurrentRow(currentRow) def addToList(self, list, name): """Adds a new run template to the list""" param = QtGui.QListWidgetItem() param.setText(name) new_job = RunTemplate(name) param.setData(QtCore.Qt.UserRole, new_job) list.addItem(param) list.setCurrentItem(param) return param def addItem(self, list): """Called by the add button to insert a new run template""" uniqueNames = [] for index in range(list.count()): uniqueNames.append(str(list.item(index).text())) pd = ValidatedDialog(self, "New run template", "Enter name of new run template:", uniqueNames) if pd.exec_(): self.addToList(list, pd.getName()) self.runTemplateChanged() def removeItem(self, list): """Called by the remove button to remove a selected job""" currentRow = list.currentRow() if currentRow >= 0: title = "Delete run template?" msg = "Are you sure you want to delete the run template?" btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No doDelete = QtGui.QMessageBox.question(self, title, msg, btns) if doDelete == QtGui.QMessageBox.Yes: list.takeItem(currentRow) self.runTemplateChanged()
class JobConfigPanel(ConfigPanel): def __init__(self, parent=None): ConfigPanel.__init__(self, parent) self.initialized = False layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) def jid(ert): """Returns the pointer to the current job (self.job)""" jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) return ert.job_queue.ext_joblist_get_job(jl, self.job.name) self.stdin = PathChooser(self, "", "config/systemenv/install_job_stdin", show_files=True, must_be_set=False, must_exist=True) self.stdin.setter = lambda ert, value: ert.job_queue.ext_job_set_stdin_file( jid(ert), value) self.stdin.getter = lambda ert: ert.job_queue.ext_job_get_stdin_file( jid(ert)) self.stdout = PathChooser(self, "", "config/systemenv/install_job_stdout", show_files=True, must_be_set=True, must_exist=False) self.stdout.setter = lambda ert, value: ert.job_queue.ext_job_set_stdout_file( jid(ert), value) self.stdout.getter = lambda ert: ert.job_queue.ext_job_get_stdout_file( jid(ert)) self.stderr = PathChooser(self, "", "config/systemenv/install_job_stderr", show_files=True, must_be_set=True, must_exist=False) self.stderr.setter = lambda ert, value: ert.job_queue.ext_job_set_stderr_file( jid(ert), value) self.stderr.getter = lambda ert: ert.job_queue.ext_job_get_stderr_file( jid(ert)) self.target_file = PathChooser( self, "", "config/systemenv/install_job_target_file", show_files=True, must_be_set=False, must_exist=False) self.target_file.setter = lambda ert, value: ert.job_queue.ext_job_set_target_file( jid(ert), value) self.target_file.getter = lambda ert: ert.job_queue.ext_job_get_target_file( jid(ert)) self.executable = PathChooser( self, "", "config/systemenv/install_job_executable", show_files=True, must_be_set=True, must_exist=True, is_executable_file=True) self.executable.setter = lambda ert, value: ert.job_queue.ext_job_set_executable( jid(ert), value) self.executable.getter = lambda ert: ert.job_queue.ext_job_get_executable( jid(ert)) def setEnv(ert, value): job = jid(ert) ert.job_queue.ext_job_clear_environment(job) for env in value: ert.job_queue.ext_job_add_environment(job, env[0], env[1]) self.env = KeywordTable(self, "", "config/systemenv/install_job_env", colHead1="Variable", colHead2="Value") self.env.setter = setEnv self.env.getter = lambda ert: ert.getHash( ert.job_queue.ext_job_get_environment(jid(ert))) self.arglist = StringBox(self, "", "config/systemenv/install_job_arglist") self.arglist.setter = lambda ert, value: ert.job_queue.ext_job_set_private_args_from_string( jid(ert), value) self.arglist.getter = lambda ert: ert.job_queue.ext_job_get_private_args_as_string( jid(ert)) self.max_running = IntegerSpinner( self, "", "config/systemenv/install_job_max_running", 0, 10000) self.max_running.setter = lambda ert, value: ert.job_queue.ext_job_set_max_running( jid(ert), value) self.max_running.getter = lambda ert: ert.job_queue.ext_job_get_max_running( jid(ert)) self.max_running_minutes = IntegerSpinner( self, "", "config/systemenv/install_job_max_running_minutes", 0, 10000) self.max_running_minutes.setter = lambda ert, value: ert.job_queue.ext_job_set_max_running_minutes( jid(ert), value) self.max_running_minutes.getter = lambda ert: ert.job_queue.ext_job_get_max_running_minutes( jid(ert)) self.startPage("Standard") self.add("Executable.:", self.executable) self.add("Stdout:", self.stdout) self.add("Stderr:", self.stderr) self.add("Target file:", self.target_file) self.add("Arglist.:", self.arglist) self.endPage() self.startPage("Advanced") self.add("Stdin:", self.stdin) self.add("Max running:", self.max_running) self.max_running.setInfo("(0=unlimited)") self.add("Max running minutes:", self.max_running_minutes) self.max_running_minutes.setInfo("(0=unlimited)") self.add("Env.:", self.env) self.endPage() def add(self, label, widget): self.addRow(widget, label) def setJob(self, job): self.job = job self.initialize(self.stdin.getModel()) self.cmproxy = ContentModelProxy( ) #Since only the last change matters and no insert and remove is done self.cmproxy.proxify(self.stdin, self.stdout, self.stderr, self.target_file, self.executable, self.env, self.arglist, self.max_running, self.max_running_minutes) self.stdin.fetchContent() self.stdout.fetchContent() self.stderr.fetchContent() self.target_file.fetchContent() self.executable.fetchContent() self.env.fetchContent() self.arglist.fetchContent() self.max_running.fetchContent() self.max_running_minutes.fetchContent() def saveJob(self): if self.executable.isValid() and self.stderr.isValid( ) and self.stdout.isValid(): self.cmproxy.apply() ert = self.stdin.getModel() jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) jid = ert.job_queue.ext_joblist_get_job(jl, self.job.name) ert.job_queue.ext_job_save(jid) return None else: return "These fields are required: executable, stdout and stderr!"
class KeywordPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.keywordModel = KeywordModel("") self.min_std = PathChooser(self, "", "config/ensemble/gen_kw_min_std", True, must_be_set=False) self.modelWrap(self.min_std, "min_std") self.template = PathChooser(self, "", "config/ensemble/gen_kw_template", True) self.modelWrap(self.template, "template") self.enkf_outfile = PathChooser(self, "", "config/ensemble/gen_kw_enkf_outfile", True, must_be_set=False) self.modelWrap(self.enkf_outfile, "enkf_outfile") self.init_files = PathChooser(self, "", "config/ensemble/gen_kw_init_files", True, must_be_set=False) self.modelWrap(self.init_files, "init_files") self.parameter_file = PathChooser( self, "", "config/ensemble/gen_kw_parameter_file", True, must_be_set=False) self.modelWrap(self.parameter_file, "parameter_file") layout.addRow("Parameter file:", self.parameter_file) layout.addRow("Include file:", self.enkf_outfile) layout.addRow("Template:", self.template) layout.addRow("Minimum std:", self.min_std) layout.addRow("Init files:", self.init_files) button = QtGui.QPushButton() button.setText("Reload") button.setMaximumWidth(70) self.connect(button, QtCore.SIGNAL('clicked()'), self._reload) layout.addRow("Reload files:", button) self.setLayout(layout) def _reload(self): self.keywordModel.emitUpdate() def setKeywordModel(self, keywordModel): self.keywordModel = keywordModel self.min_std.fetchContent() self.template.fetchContent() self.enkf_outfile.fetchContent() self.init_files.fetchContent() self.parameter_file.fetchContent() def modelWrap(self, widget, attribute): widget.initialize = ContentModel.emptyInitializer widget.setter = lambda model, value: self.keywordModel.set( attribute, value) widget.getter = lambda model: self.keywordModel[attribute]
class JobConfigPanel(ConfigPanel): def __init__(self, parent=None): ConfigPanel.__init__(self, parent) self.initialized = False layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) def jid(ert): """Returns the pointer to the current job (self.job)""" jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) return ert.job_queue.ext_joblist_get_job(jl, self.job.name) self.stdin = PathChooser( self, "", "config/systemenv/install_job_stdin", show_files=True, must_be_set=False, must_exist=True ) self.stdin.setter = lambda ert, value: ert.job_queue.ext_job_set_stdin_file(jid(ert), value) self.stdin.getter = lambda ert: ert.job_queue.ext_job_get_stdin_file(jid(ert)) self.stdout = PathChooser( self, "", "config/systemenv/install_job_stdout", show_files=True, must_be_set=True, must_exist=False ) self.stdout.setter = lambda ert, value: ert.job_queue.ext_job_set_stdout_file(jid(ert), value) self.stdout.getter = lambda ert: ert.job_queue.ext_job_get_stdout_file(jid(ert)) self.stderr = PathChooser( self, "", "config/systemenv/install_job_stderr", show_files=True, must_be_set=True, must_exist=False ) self.stderr.setter = lambda ert, value: ert.job_queue.ext_job_set_stderr_file(jid(ert), value) self.stderr.getter = lambda ert: ert.job_queue.ext_job_get_stderr_file(jid(ert)) self.target_file = PathChooser( self, "", "config/systemenv/install_job_target_file", show_files=True, must_be_set=False, must_exist=False ) self.target_file.setter = lambda ert, value: ert.job_queue.ext_job_set_target_file(jid(ert), value) self.target_file.getter = lambda ert: ert.job_queue.ext_job_get_target_file(jid(ert)) self.executable = PathChooser( self, "", "config/systemenv/install_job_executable", show_files=True, must_be_set=True, must_exist=True, is_executable_file=True, ) self.executable.setter = lambda ert, value: ert.job_queue.ext_job_set_executable(jid(ert), value) self.executable.getter = lambda ert: ert.job_queue.ext_job_get_executable(jid(ert)) def setEnv(ert, value): job = jid(ert) ert.job_queue.ext_job_clear_environment(job) for env in value: ert.job_queue.ext_job_add_environment(job, env[0], env[1]) self.env = KeywordTable(self, "", "config/systemenv/install_job_env", colHead1="Variable", colHead2="Value") self.env.setter = setEnv self.env.getter = lambda ert: ert.getHash(ert.job_queue.ext_job_get_environment(jid(ert))) self.arglist = StringBox(self, "", "config/systemenv/install_job_arglist") self.arglist.setter = lambda ert, value: ert.job_queue.ext_job_set_private_args_from_string(jid(ert), value) self.arglist.getter = lambda ert: ert.job_queue.ext_job_get_private_args_as_string(jid(ert)) self.max_running = IntegerSpinner(self, "", "config/systemenv/install_job_max_running", 0, 10000) self.max_running.setter = lambda ert, value: ert.job_queue.ext_job_set_max_running(jid(ert), value) self.max_running.getter = lambda ert: ert.job_queue.ext_job_get_max_running(jid(ert)) self.max_running_minutes = IntegerSpinner( self, "", "config/systemenv/install_job_max_running_minutes", 0, 10000 ) self.max_running_minutes.setter = lambda ert, value: ert.job_queue.ext_job_set_max_running_minutes( jid(ert), value ) self.max_running_minutes.getter = lambda ert: ert.job_queue.ext_job_get_max_running_minutes(jid(ert)) self.startPage("Standard") self.add("Executable.:", self.executable) self.add("Stdout:", self.stdout) self.add("Stderr:", self.stderr) self.add("Target file:", self.target_file) self.add("Arglist.:", self.arglist) self.endPage() self.startPage("Advanced") self.add("Stdin:", self.stdin) self.add("Max running:", self.max_running) self.max_running.setInfo("(0=unlimited)") self.add("Max running minutes:", self.max_running_minutes) self.max_running_minutes.setInfo("(0=unlimited)") self.add("Env.:", self.env) self.endPage() def add(self, label, widget): self.addRow(widget, label) def initialize(self, ert): if not self.initialized: ert.prototype("long site_config_get_installed_jobs(long)") ert.prototype("char* ext_job_get_stdin_file(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_stdin_file(long, char*)", lib=ert.job_queue) ert.prototype("char* ext_job_get_stdout_file(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_stdout_file(long, char*)", lib=ert.job_queue) ert.prototype("char* ext_job_get_stderr_file(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_stderr_file(long, char*)", lib=ert.job_queue) ert.prototype("char* ext_job_get_target_file(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_target_file(long, char*)", lib=ert.job_queue) ert.prototype("char* ext_job_get_executable(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_executable(long, char*)", lib=ert.job_queue) ert.prototype("char* ext_job_get_private_args_as_string(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_private_args_from_string(long, char*)", lib=ert.job_queue) ert.prototype("int ext_job_get_max_running(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_max_running(long, int)", lib=ert.job_queue) ert.prototype("int ext_job_get_max_running_minutes(long)", lib=ert.job_queue) ert.prototype("void ext_job_set_max_running_minutes(long, int)", lib=ert.job_queue) ert.prototype("long ext_job_get_environment(long)", lib=ert.job_queue) ert.prototype("void ext_job_add_environment(long, char*, char*)", lib=ert.job_queue) ert.prototype("void ext_job_clear_environment(long)", lib=ert.job_queue) ert.prototype("void ext_job_save(long)", lib=ert.job_queue) ert.prototype("long ext_joblist_get_job(long, char*)", lib=ert.job_queue) self.initialized = True def setJob(self, job): self.job = job self.initialize(self.stdin.getModel()) self.cmproxy = ContentModelProxy() # Since only the last change matters and no insert and remove is done self.cmproxy.proxify( self.stdin, self.stdout, self.stderr, self.target_file, self.executable, self.env, self.arglist, self.max_running, self.max_running_minutes, ) self.stdin.fetchContent() self.stdout.fetchContent() self.stderr.fetchContent() self.target_file.fetchContent() self.executable.fetchContent() self.env.fetchContent() self.arglist.fetchContent() self.max_running.fetchContent() self.max_running_minutes.fetchContent() def saveJob(self): if self.executable.isValid() and self.stderr.isValid() and self.stdout.isValid(): self.cmproxy.apply() ert = self.stdin.getModel() jl = ert.enkf.site_config_get_installed_jobs(ert.site_config) jid = ert.job_queue.ext_joblist_get_job(jl, self.job.name) ert.job_queue.ext_job_save(jid) return None else: return "These fields are required: executable, stdout and stderr!"
class DataPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.dataModel = DataModel("") self.input = ComboChoice(self, enums.gen_data_file_format.INPUT_TYPES, "", "config/ensemble/gen_data_param_init") self.modelWrap(self.input, "input_format") self.output = ComboChoice(self, enums.gen_data_file_format.OUTPUT_TYPES, "", "config/ensemble/gen_data_param_output") self.modelWrap(self.output, "output_format") self.template_file = PathChooser(self, "", "config/ensemble/gen_data_template_file", True , must_be_set=False) self.modelWrap(self.template_file, "template_file") self.template_key = PathChooser(self, "", "config/ensemble/gen_data_template_key", True , must_be_set=False) self.modelWrap(self.template_key, "template_key") self.init_file_fmt = PathChooser(self, "", "config/ensemble/gen_data_init_file_fmt", True , must_be_set=False) self.modelWrap(self.init_file_fmt, "init_file_fmt") self.file_generated_by_enkf = PathChooser(self, "", "config/ensemble/gen_data_file_generated_by_enkf", True, must_be_set=False) self.modelWrap(self.file_generated_by_enkf, "enkf_outfile") self.file_loaded_by_enkf = PathChooser(self, "", "config/ensemble/gen_data_file_loaded_by_enkf", True, must_be_set=False) self.modelWrap(self.file_loaded_by_enkf, "enkf_infile") self.min_std = PathChooser(self, "", "config/ensemble/gen_data_min_std", True, must_be_set=False) self.modelWrap(self.min_std, "min_std") layout.addRow("Input:", self.input) layout.addRow("Output:", self.output) layout.addRow("Template file:", self.template_file) layout.addRow("Template key:", self.template_key) layout.addRow("Init files:", self.init_file_fmt) layout.addRow("Include file:", self.file_generated_by_enkf) layout.addRow("Min. std.:", self.min_std) layout.addRow("File loaded by EnKF:", self.file_loaded_by_enkf) button = QtGui.QPushButton() button.setText("Reload") button.setMaximumWidth(70) self.connect(button, QtCore.SIGNAL('clicked()'), self._reload) layout.addRow("Reload template:", button) self.setLayout(layout) def _reload(self): self.dataModel.emitUpdate() def modelWrap(self, widget, attribute): widget.initialize = ert_gui.widgets.helpedwidget.ContentModel.emptyInitializer widget.setter = lambda model, value: self.dataModel.set(attribute, value) widget.getter = lambda model: self.dataModel[attribute] def setDataModel(self, dataModel): self.dataModel = dataModel self.input.fetchContent() self.output.fetchContent() self.template_file.fetchContent() self.template_key.fetchContent() self.init_file_fmt.fetchContent() self.file_generated_by_enkf.fetchContent() self.file_loaded_by_enkf.fetchContent() self.min_std.fetchContent()
class FieldPanel(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setFrameShape(QtGui.QFrame.StyledPanel) self.setFrameShadow(QtGui.QFrame.Plain) self.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) layout = QtGui.QFormLayout() layout.setLabelAlignment(QtCore.Qt.AlignRight) self.fieldModel = FieldModel("") self.fieldType = ComboChoice(self, field_type.values(), "", "config/ensemble/field_type") self.fieldType.setter = lambda model, value: self.typeChanged(field_type[str(value)]) self.fieldType.getter = lambda model: str(self.fieldModel["type"]) self.fieldType.initialize = ContentModel.emptyInitializer self.min = DoubleBox(self, "", "config/ensemble/field_min") self.modelWrap(self.min, "min") self.max = DoubleBox(self, "", "config/ensemble/field_max") self.modelWrap(self.max, "max") self.init = ComboChoice(self, ["None", "EXP", "LOG", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_init") self.modelWrap(self.init, "init") self.output = ComboChoice(self, ["None", "EXP", "LOG", "POW10", "ADD", "MUL", "RANDINT", "RANDFLOAT"], "", "config/ensemble/field_output") self.modelWrap(self.output, "output") self.init_files = PathChooser(self, "", "config/ensemble/field_init_files", True) self.modelWrap(self.init_files, "init_files") self.file_generated_by_enkf = PathChooser(self, "", "config/ensemble/field_file_generated_by_enkf", True) self.modelWrap(self.file_generated_by_enkf, "enkf_outfile") self.file_loaded_by_enkf = PathChooser(self, "", "config/ensemble/field_file_loaded_by_enkf", True) self.modelWrap(self.file_loaded_by_enkf, "enkf_infile") self.min_std = PathChooser(self, "", "config/ensemble/field_min_std", True, must_be_set=False) self.modelWrap(self.min_std, "min_std") layout.addRow("Field type:", self.fieldType) layout.addRow("Include file:", self.file_generated_by_enkf) # generated by ERT layout.addRow("Init files:", self.init_files) layout.addRow("Min:", self.min) layout.addRow("Max:", self.max) layout.addRow("Init transformation:", self.init) layout.addRow("Output transformation:", self.output) layout.addRow("Min. std.:", self.min_std) layout.addRow("File loaded by EnKF:", self.file_loaded_by_enkf) self.setLayout(layout) self.typeChanged(field_type.ECLIPSE_RESTART) def modelWrap(self, widget, attribute): widget.initialize = ContentModel.emptyInitializer widget.setter = lambda model, value: self.fieldModel.set(attribute, value) widget.getter = lambda model: self.fieldModel[attribute] def typeChanged(self, value): setattr(self.fieldModel, "type", value) self.min.setEnabled(True) self.max.setEnabled(True) self.init.setEnabled(True) self.output.setEnabled(True) self.init_files.setEnabled(True) self.file_generated_by_enkf.setEnabled(True) self.file_loaded_by_enkf.setEnabled(True) self.min_std.setEnabled(True) if value == field_type.ECLIPSE_RESTART: self.init.setEnabled(False) self.output.setEnabled(False) self.init_files.setEnabled(False) self.file_generated_by_enkf.setEnabled(False) self.file_loaded_by_enkf.setEnabled(False) self.min_std.setEnabled(False) elif value == field_type.ECLIPSE_PARAMETER: self.file_loaded_by_enkf.setEnabled(False) def setFieldModel(self, fieldModel): self.fieldModel = fieldModel self.fieldType.fetchContent() self.min.fetchContent() self.max.fetchContent() self.init.fetchContent() self.output.fetchContent() self.init_files.fetchContent() self.file_generated_by_enkf.fetchContent() self.file_loaded_by_enkf.fetchContent() self.min_std.fetchContent()