예제 #1
0
파일: parameterpanel.py 프로젝트: rolk/ert
    def __init__(self, parent=None, label="", help=""):
        """Construct a ParameterPanel."""
        HelpedWidget.__init__(self, parent, label, help)

        self.searchableList = SearchableList(
            converter=lambda item: item.getName(), list_width=175)
        self.addWidget(self.searchableList)

        self.pagesWidget = QtGui.QStackedWidget()

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.fieldPanel = FieldPanel(self)
        self.dataPanel = DataPanel(self)
        self.keywordPanel = KeywordPanel(self)

        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.fieldPanel)
        self.pagesWidget.addWidget(self.dataPanel)
        self.pagesWidget.addWidget(self.keywordPanel)

        self.addWidget(self.pagesWidget)

        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)
예제 #2
0
    def createWidgets(self, parent):
        self.searchableList = SearchableList(parent, list_height=150, list_width=150, ignore_case=True, order_editable=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.connect(self.searchableList, QtCore.SIGNAL('orderChanged(list)'), self.forwardModelChanged)


        self.forward_model_panel = ert_gui.widgets.util.createEmptyPanel()

        layout = QtGui.QFormLayout()
        layout.setLabelAlignment(QtCore.Qt.AlignRight)


        self.forward_model_args = StringBox(self, "", "config/simulation/forward_model_arguments")
        self.forward_model_args.initialize = ContentModel.emptyInitializer
        self.forward_model_args.setter = self.setArguments
        self.forward_model_args.getter = lambda model: self.forward_model_job.arguments

        layout.addRow("Arguments:", self.forward_model_args)

        layout.addRow(ert_gui.widgets.util.createSpace(20))

        self.help_text = QtGui.QLabel()
        self.help_text.setText("")

        layout.addRow(ert_gui.widgets.util.centeredWidget(self.help_text))

        self.forward_model_panel.setLayout(layout)
        self.modelConnect('jobListChanged()', self.fetchContent)
예제 #3
0
    def __init__(self, parent=None, label="", help=""):
        """Construct a ParameterPanel."""
        HelpedWidget.__init__(self, parent, label, help)

        self.searchableList = SearchableList(converter=lambda item : item.getName(), list_width=175)
        self.addWidget(self.searchableList)


        self.pagesWidget = QtGui.QStackedWidget()

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.fieldPanel = FieldPanel(self)
        self.dataPanel = DataPanel(self)
        self.keywordPanel = KeywordPanel(self)

        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.fieldPanel)
        self.pagesWidget.addWidget(self.dataPanel)
        self.pagesWidget.addWidget(self.keywordPanel)

        self.addWidget(self.pagesWidget)

        self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter)
        self.connect(self.searchableList, QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem)
        self.connect(self.searchableList, QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem)
예제 #4
0
    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)
예제 #5
0
    def createWidgets(self, parent):
        self.searchableList = SearchableList(parent,
                                             list_height=150,
                                             list_width=150,
                                             ignore_case=True,
                                             order_editable=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.connect(self.searchableList, QtCore.SIGNAL('orderChanged(list)'),
                     self.forwardModelChanged)

        self.forward_model_panel = ert_gui.widgets.util.createEmptyPanel()

        layout = QtGui.QFormLayout()
        layout.setLabelAlignment(QtCore.Qt.AlignRight)

        self.forward_model_args = StringBox(
            self, "", "config/simulation/forward_model_arguments")
        self.forward_model_args.initialize = ContentModel.emptyInitializer
        self.forward_model_args.setter = self.setArguments
        self.forward_model_args.getter = lambda model: self.forward_model_job.arguments

        layout.addRow("Arguments:", self.forward_model_args)

        layout.addRow(ert_gui.widgets.util.createSpace(20))

        self.help_text = QtGui.QLabel()
        self.help_text.setText("")

        layout.addRow(ert_gui.widgets.util.centeredWidget(self.help_text))

        self.forward_model_panel.setLayout(layout)
        self.modelConnect('jobListChanged()', self.fetchContent)
예제 #6
0
파일: jobspanel.py 프로젝트: rolk/ert
    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)
예제 #7
0
    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)
예제 #8
0
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()
예제 #9
0
class ForwardModelPanel(HelpedWidget):
    """
    Widget for adding, removing and editing forward models.
    Only uses the setter and getter hooks.
    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, "Forward Model", "config/simulation/forward_model")

        self.forward_model_job = ForwardModelJob("undefined")

        self.createWidgets(parent)

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.pagesWidget = QtGui.QStackedWidget()
        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.forward_model_panel)
        self.addWidget(self.pagesWidget)

        self.addHelpButton()

    def createWidgets(self, parent):
        self.searchableList = SearchableList(parent, list_height=150, list_width=150, ignore_case=True, order_editable=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.connect(self.searchableList, QtCore.SIGNAL('orderChanged(list)'), self.forwardModelChanged)


        self.forward_model_panel = ert_gui.widgets.util.createEmptyPanel()

        layout = QtGui.QFormLayout()
        layout.setLabelAlignment(QtCore.Qt.AlignRight)


        self.forward_model_args = StringBox(self, "", "config/simulation/forward_model_arguments")
        self.forward_model_args.initialize = ContentModel.emptyInitializer
        self.forward_model_args.setter = self.setArguments
        self.forward_model_args.getter = lambda model: self.forward_model_job.arguments

        layout.addRow("Arguments:", self.forward_model_args)

        layout.addRow(ert_gui.widgets.util.createSpace(20))

        self.help_text = QtGui.QLabel()
        self.help_text.setText("")

        layout.addRow(ert_gui.widgets.util.centeredWidget(self.help_text))

        self.forward_model_panel.setLayout(layout)
        self.modelConnect('jobListChanged()', self.fetchContent)

    def setArguments(self, model, arguments):
        """Set the arguments of the current forward model job."""
        self.forward_model_job.setArguments(arguments)
        self.forwardModelChanged()

    def fetchContent(self):
        """
        Retrieves data from the model and inserts it into the widget.
        Expects a hash containing these two keys: available_jobs and forward_model.
        available_jobs=list of names
        forward_model)list of tuples containing(name, arguments, help_text)
        """
        data = self.getFromModel()

        self.available_jobs = data['available_jobs']

        forward_model = data['forward_model']
        self.searchableList.list.clear()
        for job in forward_model:
            jobitem = QtGui.QListWidgetItem()
            jobitem.setText(job[0])
            forward_model_job = ForwardModelJob(job[0])
            forward_model_job.setArguments(job[1])
            forward_model_job.setHelpText(job[2])

            jobitem.setData(QtCore.Qt.UserRole, forward_model_job)
            jobitem.setToolTip(job[0])
            self.searchableList.list.addItem(jobitem)

    def setForwardModelJob(self, forward_model_job):
        """Set the current visible forward model job"""
        self.forward_model_job = forward_model_job
        self.help_text.setText(forward_model_job.help_text)
        self.forward_model_args.fetchContent()

    def changeParameter(self, current, previous):
        """Switch between forward models. Selection from the list"""
        if current is None:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)
        else:
            self.pagesWidget.setCurrentWidget(self.forward_model_panel)
            self.setForwardModelJob(current.data(QtCore.Qt.UserRole).toPyObject())

    def forwardModelChanged(self):
        """
        Called whenever the forward model is changed. (reordering, adding, removing)
        The data submitted to the updateContent() (from ContentModel) is a list of tuples (name, arguments)
        """
        items = self.searchableList.getItems()
        currentRow = self.searchableList.list.currentRow()
        forward_model = []
        for item in items:
            forward_model_job = item.data(QtCore.Qt.UserRole).toPyObject()
            forward_model.append((forward_model_job.name, forward_model_job.arguments))

        self.updateContent(forward_model)
        self.fetchContent()
        self.searchableList.list.setCurrentRow(currentRow)

    def addToList(self, list, name):
        """Adds a new job to the list"""
        param = QtGui.QListWidgetItem()
        param.setText(name)

        new_job = ForwardModelJob(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 job"""

        pd = ValidatedDialog(self, "New forward model job", "Select a job:", self.available_jobs, True)
        if pd.exec_():
            self.addToList(list, pd.getName())
            self.forwardModelChanged()

    def removeItem(self, list):
        """Called by the remove button to remove a selected job"""
        currentRow = list.currentRow()

        if currentRow >= 0:
            title = "Delete forward model job?"
            msg = "Are you sure you want to delete the job from the forward model?"
            btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
            doDelete = QtGui.QMessageBox.question(self, title, msg, btns)

            if doDelete == QtGui.QMessageBox.Yes:
                list.takeItem(currentRow)
                self.forwardModelChanged()
예제 #10
0
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()
예제 #11
0
class ParameterPanel(HelpedWidget):
    """Shows a widget for parameters. The data structure expected and sent to the getter and setter is an array of Parameters."""

    def __init__(self, parent=None, label="", help=""):
        """Construct a ParameterPanel."""
        HelpedWidget.__init__(self, parent, label, help)

        self.searchableList = SearchableList(converter=lambda item : item.getName(), list_width=175)
        self.addWidget(self.searchableList)


        self.pagesWidget = QtGui.QStackedWidget()

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.fieldPanel = FieldPanel(self)
        self.dataPanel = DataPanel(self)
        self.keywordPanel = KeywordPanel(self)

        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.fieldPanel)
        self.pagesWidget.addWidget(self.dataPanel)
        self.pagesWidget.addWidget(self.keywordPanel)

        self.addWidget(self.pagesWidget)

        self.connect(self.searchableList, QtCore.SIGNAL('currentItemChanged(QListWidgetItem, QListWidgetItem)'), self.changeParameter)
        self.connect(self.searchableList, QtCore.SIGNAL('addItem(QListWidgetItem)'), self.addItem)
        self.connect(self.searchableList, QtCore.SIGNAL('removeItem(QListWidgetItem)'), self.removeItem)

        #self.addHelpButton()


    def changeParameter(self, current, previous):
        if not current:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)
        elif FieldModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.fieldPanel)
            self.fieldPanel.setFieldModel(current.getUserData())
        elif DataModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.dataPanel)
            self.dataPanel.setDataModel(current.getUserData())
        elif KeywordModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.keywordPanel)
            self.keywordPanel.setKeywordModel(current.getUserData())
        else:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)


    def createParameter(self, type_name, name):
        """Adds a new parameter to the list"""

        if type_name == FieldModel.TYPE.name:
            type = FieldModel.TYPE
            data = FieldModel(name)
        elif type_name == DataModel.TYPE.name:
            type = DataModel.TYPE
            data = DataModel(name)
        elif type_name == KeywordModel.TYPE.name:
            type = KeywordModel.TYPE
            data = KeywordModel(name)
        elif type_name == SummaryModel.TYPE.name:
            type = SummaryModel.TYPE
            data = SummaryModel(name)
        else:
            raise AssertionError("Type name unknown: %s" % (type_name))

        param = Parameter(name, type)
        param.setUserData(data)
        param.setValid(False)
        return param


    def addToList(self, list, parameter):
        list.addItem(parameter)
        list.setCurrentItem(parameter)

        user_data = parameter.getUserData()
        ##self.connect(user_data, SIGNAL('modelChanged(Model)'), self.modelChanged)

    def modelChanged(self, parameter_model):
        """Called whenever the content of a model changes"""
        self.updateContent(parameter_model)


    def addItem(self, list):
        """Called by the add button to insert a new parameter. A Parameter object is sent to the ContentModel inserter"""
        uniqueNames = []
        for index in range(list.count()):
            uniqueNames.append(str(list.item(index).text()))

        pd = ParameterDialog(self, Parameter.get_typeIcons() , uniqueNames)
        if pd.exec_():
            parameter = self.createParameter(pd.getTypeName(), pd.getName())
            ok = self.updateContent(parameter, operation=ContentModel.INSERT)
            if ok:
                self.addToList(list, parameter)

        # todo: emit when a new field is added also make initandcopy listen -> self.modelEmit("casesUpdated()")


    def removeItem(self, list):
        """Called by the remove button to remove a selected parameter. The key is forwarded to the ContentModel remover"""
        currentRow = list.currentRow()

        if currentRow >= 0:
            doDelete = QtGui.QMessageBox.question(self, "Delete parameter?", "Are you sure you want to delete the parameter?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)

            if doDelete == QtGui.QMessageBox.Yes:
                item = list.item(currentRow)
                user_data = item.getUserData()
                self.disconnect(user_data, SIGNAL('modelChanged(Model)'), self.modelChanged)
                self.updateContent(item.getName(), operation=ContentModel.REMOVE)
                list.takeItem(currentRow)
        #todo: emit change

    def fetchContent(self):
        """Retrieves data from the model and inserts it into the list"""
        parameters = self.getFromModel()

        for parameter in parameters:
            if parameter is None:
                sys.stderr.write("Unknown type name!\n")
                break
                #raise AssertionError("Unknown type name!")

            param = Parameter(parameter.name, parameter.TYPE)
            param.setUserData(parameter)
            param.setValid(parameter.isValid())

            self.addToList(self.searchableList.getList(), param)

        if self.searchableList.getList().count > 0:
            self.searchableList.getList().setCurrentRow(0)
예제 #12
0
class ForwardModelPanel(HelpedWidget):
    """
    Widget for adding, removing and editing forward models.
    Only uses the setter and getter hooks.
    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, "Forward Model",
                              "config/simulation/forward_model")

        self.forward_model_job = ForwardModelJob("undefined")

        self.createWidgets(parent)

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.pagesWidget = QtGui.QStackedWidget()
        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.forward_model_panel)
        self.addWidget(self.pagesWidget)

        self.addHelpButton()

    def createWidgets(self, parent):
        self.searchableList = SearchableList(parent,
                                             list_height=150,
                                             list_width=150,
                                             ignore_case=True,
                                             order_editable=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.connect(self.searchableList, QtCore.SIGNAL('orderChanged(list)'),
                     self.forwardModelChanged)

        self.forward_model_panel = ert_gui.widgets.util.createEmptyPanel()

        layout = QtGui.QFormLayout()
        layout.setLabelAlignment(QtCore.Qt.AlignRight)

        self.forward_model_args = StringBox(
            self, "", "config/simulation/forward_model_arguments")
        self.forward_model_args.initialize = ContentModel.emptyInitializer
        self.forward_model_args.setter = self.setArguments
        self.forward_model_args.getter = lambda model: self.forward_model_job.arguments

        layout.addRow("Arguments:", self.forward_model_args)

        layout.addRow(ert_gui.widgets.util.createSpace(20))

        self.help_text = QtGui.QLabel()
        self.help_text.setText("")

        layout.addRow(ert_gui.widgets.util.centeredWidget(self.help_text))

        self.forward_model_panel.setLayout(layout)
        self.modelConnect('jobListChanged()', self.fetchContent)

    def setArguments(self, model, arguments):
        """Set the arguments of the current forward model job."""
        self.forward_model_job.setArguments(arguments)
        self.forwardModelChanged()

    def fetchContent(self):
        """
        Retrieves data from the model and inserts it into the widget.
        Expects a hash containing these two keys: available_jobs and forward_model.
        available_jobs=list of names
        forward_model)list of tuples containing(name, arguments, help_text)
        """
        data = self.getFromModel()

        self.available_jobs = data['available_jobs']

        forward_model = data['forward_model']
        self.searchableList.list.clear()
        for job in forward_model:
            jobitem = QtGui.QListWidgetItem()
            jobitem.setText(job[0])
            forward_model_job = ForwardModelJob(job[0])
            forward_model_job.setArguments(job[1])
            forward_model_job.setHelpText(job[2])

            jobitem.setData(QtCore.Qt.UserRole, forward_model_job)
            jobitem.setToolTip(job[0])
            self.searchableList.list.addItem(jobitem)

    def setForwardModelJob(self, forward_model_job):
        """Set the current visible forward model job"""
        self.forward_model_job = forward_model_job
        self.help_text.setText(forward_model_job.help_text)
        self.forward_model_args.fetchContent()

    def changeParameter(self, current, previous):
        """Switch between forward models. Selection from the list"""
        if current is None:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)
        else:
            self.pagesWidget.setCurrentWidget(self.forward_model_panel)
            self.setForwardModelJob(
                current.data(QtCore.Qt.UserRole).toPyObject())

    def forwardModelChanged(self):
        """
        Called whenever the forward model is changed. (reordering, adding, removing)
        The data submitted to the updateContent() (from ContentModel) is a list of tuples (name, arguments)
        """
        items = self.searchableList.getItems()
        currentRow = self.searchableList.list.currentRow()
        forward_model = []
        for item in items:
            forward_model_job = item.data(QtCore.Qt.UserRole).toPyObject()
            forward_model.append(
                (forward_model_job.name, forward_model_job.arguments))

        self.updateContent(forward_model)
        self.fetchContent()
        self.searchableList.list.setCurrentRow(currentRow)

    def addToList(self, list, name):
        """Adds a new job to the list"""
        param = QtGui.QListWidgetItem()
        param.setText(name)

        new_job = ForwardModelJob(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 job"""

        pd = ValidatedDialog(self, "New forward model job", "Select a job:",
                             self.available_jobs, True)
        if pd.exec_():
            self.addToList(list, pd.getName())
            self.forwardModelChanged()

    def removeItem(self, list):
        """Called by the remove button to remove a selected job"""
        currentRow = list.currentRow()

        if currentRow >= 0:
            title = "Delete forward model job?"
            msg = "Are you sure you want to delete the job from the forward model?"
            btns = QtGui.QMessageBox.Yes | QtGui.QMessageBox.No
            doDelete = QtGui.QMessageBox.question(self, title, msg, btns)

            if doDelete == QtGui.QMessageBox.Yes:
                list.takeItem(currentRow)
                self.forwardModelChanged()
예제 #13
0
파일: parameterpanel.py 프로젝트: rolk/ert
class ParameterPanel(HelpedWidget):
    """Shows a widget for parameters. The data structure expected and sent to the getter and setter is an array of Parameters."""
    def __init__(self, parent=None, label="", help=""):
        """Construct a ParameterPanel."""
        HelpedWidget.__init__(self, parent, label, help)

        self.searchableList = SearchableList(
            converter=lambda item: item.getName(), list_width=175)
        self.addWidget(self.searchableList)

        self.pagesWidget = QtGui.QStackedWidget()

        self.emptyPanel = ert_gui.widgets.util.createEmptyPanel()

        self.fieldPanel = FieldPanel(self)
        self.dataPanel = DataPanel(self)
        self.keywordPanel = KeywordPanel(self)

        self.pagesWidget.addWidget(self.emptyPanel)
        self.pagesWidget.addWidget(self.fieldPanel)
        self.pagesWidget.addWidget(self.dataPanel)
        self.pagesWidget.addWidget(self.keywordPanel)

        self.addWidget(self.pagesWidget)

        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.addHelpButton()

    def changeParameter(self, current, previous):
        if not current:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)
        elif FieldModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.fieldPanel)
            self.fieldPanel.setFieldModel(current.getUserData())
        elif DataModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.dataPanel)
            self.dataPanel.setDataModel(current.getUserData())
        elif KeywordModel.TYPE == current.getType():
            self.pagesWidget.setCurrentWidget(self.keywordPanel)
            self.keywordPanel.setKeywordModel(current.getUserData())
        else:
            self.pagesWidget.setCurrentWidget(self.emptyPanel)

    def createParameter(self, type_name, name):
        """Adds a new parameter to the list"""

        if type_name == FieldModel.TYPE.name:
            type = FieldModel.TYPE
            data = FieldModel(name)
        elif type_name == DataModel.TYPE.name:
            type = DataModel.TYPE
            data = DataModel(name)
        elif type_name == KeywordModel.TYPE.name:
            type = KeywordModel.TYPE
            data = KeywordModel(name)
        elif type_name == SummaryModel.TYPE.name:
            type = SummaryModel.TYPE
            data = SummaryModel(name)
        else:
            raise AssertionError("Type name unknown: %s" % (type_name))

        param = Parameter(name, type)
        param.setUserData(data)
        param.setValid(False)
        return param

    def addToList(self, list, parameter):
        list.addItem(parameter)
        list.setCurrentItem(parameter)

        user_data = parameter.getUserData()
        self.connect(user_data, SIGNAL('modelChanged(Model)'),
                     self.modelChanged)

    def modelChanged(self, parameter_model):
        """Called whenever the content of a model changes"""
        self.updateContent(parameter_model)

    def addItem(self, list):
        """Called by the add button to insert a new parameter. A Parameter object is sent to the ContentModel inserter"""
        uniqueNames = []
        for index in range(list.count()):
            uniqueNames.append(str(list.item(index).text()))

        pd = ParameterDialog(self, Parameter.typeIcons, uniqueNames)
        if pd.exec_():
            parameter = self.createParameter(pd.getTypeName(), pd.getName())
            ok = self.updateContent(parameter, operation=ContentModel.INSERT)
            if ok:
                self.addToList(list, parameter)

        # todo: emit when a new field is added also make initandcopy listen -> self.modelEmit("casesUpdated()")

    def removeItem(self, list):
        """Called by the remove button to remove a selected parameter. The key is forwarded to the ContentModel remover"""
        currentRow = list.currentRow()

        if currentRow >= 0:
            doDelete = QtGui.QMessageBox.question(
                self, "Delete parameter?",
                "Are you sure you want to delete the parameter?",
                QtGui.QMessageBox.Yes | QtGui.QMessageBox.No)

            if doDelete == QtGui.QMessageBox.Yes:
                item = list.item(currentRow)
                user_data = item.getUserData()
                self.disconnect(user_data, SIGNAL('modelChanged(Model)'),
                                self.modelChanged)
                self.updateContent(item.getName(),
                                   operation=ContentModel.REMOVE)
                list.takeItem(currentRow)
        #todo: emit change

    def fetchContent(self):
        """Retrieves data from the model and inserts it into the list"""
        parameters = self.getFromModel()

        for parameter in parameters:
            if parameter is None:
                raise AssertionError("Unknown type name!")

            param = Parameter(parameter.name, parameter.TYPE)
            param.setUserData(parameter)
            param.setValid(parameter.isValid())

            self.addToList(self.searchableList.getList(), param)

        if self.searchableList.getList().count > 0:
            self.searchableList.getList().setCurrentRow(0)