def testAcceptAllPanel(self):
        """ test accepting all panels """
        s = QgsPanelWidgetStack()
        # call on empty stack
        s.acceptAllPanels()

        mp = QgsPanelWidget()
        s.setMainPanel(mp)
        # call on main panel - should be no effect
        s.acceptAllPanels()
        self.assertEqual(s.mainPanel(), mp)
        self.assertEqual(s.currentPanel(), mp)

        # add panels
        p1 = QgsPanelWidget()
        s.showPanel(p1)
        p1_accept_spy = QSignalSpy(p1.panelAccepted)
        p2 = QgsPanelWidget()
        s.showPanel(p2)
        p2_accept_spy = QSignalSpy(p2.panelAccepted)
        p3 = QgsPanelWidget()
        s.showPanel(p3)
        p3_accept_spy = QSignalSpy(p3.panelAccepted)

        # accept all
        s.acceptAllPanels()
        self.assertEqual(s.currentPanel(), mp)
        self.assertEqual(len(p1_accept_spy), 1)
        self.assertEqual(len(p2_accept_spy), 1)
        self.assertEqual(len(p3_accept_spy), 1)
    def testAddingPanels(self):
        """ test adding panels to stack """

        s = QgsPanelWidgetStack()
        mp = QgsPanelWidget()
        s.setMainPanel(mp)

        p1 = QgsPanelWidget()
        s.showPanel(p1)
        self.assertEqual(s.currentPanel(), p1)

        p2 = QgsPanelWidget()
        s.showPanel(p2)
        self.assertEqual(s.currentPanel(), p2)
    def testMainPanel(self):
        """ test mainPanel methods """

        s = QgsPanelWidgetStack()

        # no main panel
        self.assertFalse(s.mainPanel())
        self.assertFalse(s.takeMainPanel())

        # set main panel
        p1 = QgsPanelWidget()
        s.setMainPanel(p1)
        self.assertEqual(s.mainPanel(), p1)

        # takeMainPanel()
        self.assertEqual(s.takeMainPanel(), p1)
        self.assertFalse(s.mainPanel())
        self.assertFalse(s.takeMainPanel())
    def testTakeMainAcceptsAll(self):
        """ test that taking the main panel accepts all open child panels"""
        s = QgsPanelWidgetStack()
        mp = QgsPanelWidget()
        s.setMainPanel(mp)
        p1 = QgsPanelWidget()
        s.showPanel(p1)
        p1_accept_spy = QSignalSpy(p1.panelAccepted)
        p2 = QgsPanelWidget()
        s.showPanel(p2)
        p2_accept_spy = QSignalSpy(p2.panelAccepted)
        p3 = QgsPanelWidget()
        s.showPanel(p3)
        p3_accept_spy = QSignalSpy(p3.panelAccepted)

        # take main
        s.takeMainPanel()
        self.assertEqual(len(p1_accept_spy), 1)
        self.assertEqual(len(p2_accept_spy), 1)
        self.assertEqual(len(p3_accept_spy), 1)
    def testClear(self):
        """ test clearing stack """
        s = QgsPanelWidgetStack()
        # call on empty stack
        s.clear()

        # add panels
        mp = QgsPanelWidget()
        s.setMainPanel(mp)
        p1 = QgsPanelWidget()
        s.showPanel(p1)
        p2 = QgsPanelWidget()
        s.showPanel(p2)
        p3 = QgsPanelWidget()
        s.showPanel(p3)

        # clear
        s.clear()
        self.assertFalse(s.currentPanel())
        self.assertFalse(s.mainPanel())
    def testTakeMainAcceptsAll(self):
        """ test that taking the main panel accepts all open child panels"""
        s = QgsPanelWidgetStack()
        mp = QgsPanelWidget()
        s.setMainPanel(mp)
        p1 = QgsPanelWidget()
        s.showPanel(p1)
        p1_accept_spy = QSignalSpy(p1.panelAccepted)
        p2 = QgsPanelWidget()
        s.showPanel(p2)
        p2_accept_spy = QSignalSpy(p2.panelAccepted)
        p3 = QgsPanelWidget()
        s.showPanel(p3)
        p3_accept_spy = QSignalSpy(p3.panelAccepted)

        # take main
        s.takeMainPanel()
        self.assertEqual(len(p1_accept_spy), 1)
        self.assertEqual(len(p2_accept_spy), 1)
        self.assertEqual(len(p3_accept_spy), 1)
    def testClear(self):
        """ test clearing stack """
        s = QgsPanelWidgetStack()
        # call on empty stack
        s.clear()

        # add panels
        mp = QgsPanelWidget()
        s.setMainPanel(mp)
        p1 = QgsPanelWidget()
        s.showPanel(p1)
        p2 = QgsPanelWidget()
        s.showPanel(p2)
        p3 = QgsPanelWidget()
        s.showPanel(p3)

        # clear
        s.clear()
        self.assertFalse(s.currentPanel())
        self.assertFalse(s.mainPanel())
示例#8
0
class ModelerParametersWidget(QWidget):

    def __init__(self, alg, model, algName=None, configuration=None, dialog=None, context=None):
        super().__init__()
        self._alg = alg  # The algorithm to define in this dialog. It is an instance of QgsProcessingAlgorithm
        self.model = model  # The model this algorithm is going to be added to. It is an instance of QgsProcessingModelAlgorithm
        self.childId = algName  # The name of the algorithm in the model, in case we are editing it and not defining it for the first time
        self.configuration = configuration
        self.context = context
        self.dialog = dialog

        self.widget = ModelerParametersPanelWidget(alg, model, algName, configuration, dialog, context)

        class ContextGenerator(QgsProcessingContextGenerator):

            def __init__(self, context):
                super().__init__()
                self.processing_context = context

            def processingContext(self):
                return self.processing_context

        self.context_generator = ContextGenerator(self.context)

        self.setupUi()
        self.params = None

    def algorithm(self):
        return self._alg

    def switchToCommentTab(self):
        self.tab.setCurrentIndex(1)
        self.commentEdit.setFocus()
        self.commentEdit.selectAll()

    def setupUi(self):
        self.mainLayout = QVBoxLayout()
        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.tab = QTabWidget()
        self.mainLayout.addWidget(self.tab)

        self.param_widget = QgsPanelWidgetStack()
        self.widget.setDockMode(True)
        self.param_widget.setMainPanel(self.widget)

        self.tab.addTab(self.param_widget, self.tr('Properties'))

        self.commentLayout = QVBoxLayout()
        self.commentEdit = QTextEdit()
        self.commentEdit.setAcceptRichText(False)
        self.commentLayout.addWidget(self.commentEdit, 1)

        hl = QHBoxLayout()
        hl.setContentsMargins(0, 0, 0, 0)
        hl.addWidget(QLabel(self.tr('Color')))
        self.comment_color_button = QgsColorButton()
        self.comment_color_button.setAllowOpacity(True)
        self.comment_color_button.setWindowTitle(self.tr('Comment Color'))
        self.comment_color_button.setShowNull(True, self.tr('Default'))
        hl.addWidget(self.comment_color_button)
        self.commentLayout.addLayout(hl)

        w2 = QWidget()
        w2.setLayout(self.commentLayout)
        self.tab.addTab(w2, self.tr('Comments'))

        self.setLayout(self.mainLayout)

    def setComments(self, text):
        self.commentEdit.setPlainText(text)

    def comments(self):
        return self.commentEdit.toPlainText()

    def setCommentColor(self, color):
        if color.isValid():
            self.comment_color_button.setColor(color)
        else:
            self.comment_color_button.setToNull()

    def commentColor(self):
        return self.comment_color_button.color() if not self.comment_color_button.isNull() else QColor()

    def getAvailableDependencies(self):
        return self.widget.getAvailableDependencies()

    def getDependenciesPanel(self):
        return self.widget.getDependenciesPanel()

    def getAvailableValuesOfType(self, paramType, outTypes=[], dataTypes=[]):
        return self.widget.getAvailableValuesOfType(paramType, outTypes, dataTypes)

    def resolveValueDescription(self, value):
        return self.widget.resolveValueDescription(value)

    def setPreviousValues(self):
        self.widget.setPreviousValues()

    def createAlgorithm(self):
        alg = self.widget.createAlgorithm()
        if alg:
            alg.comment().setDescription(self.comments())
            alg.comment().setColor(self.commentColor())
        return alg