diff options
Diffstat (limited to 'tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py')
-rw-r--r-- | tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py new file mode 100644 index 0000000000..54c1285e74 --- /dev/null +++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py @@ -0,0 +1,156 @@ +# Copyright (C) 2020 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +import importlib +import sys +import PySide2 +from PySide2.QtCore import Signal +from PySide2.QtWidgets import QVBoxLayout, QRadioButton, QGroupBox, QWidget, QApplication, QPlainTextEdit, QHBoxLayout + +import generate_testcase +from helpers import insert_testcases_into_file +from option_management import (Option, OptionManager, testcase_describing_options, function_describing_options, + skip_function_description, disabled_testcase_describing_options, + skip_testcase_description) + + +class MyRadioButton(QRadioButton): + def __init__(self, value): + super(MyRadioButton, self).__init__(text=str(value)) + self.value = value + + self.toggled.connect(lambda x: x and self.activated.emit(self.value)) + + activated = Signal(object) + + +class OptionSelector(QGroupBox): + def __init__(self, parent: QWidget, option: Option): + super(OptionSelector, self).__init__(title=option.name, parent=parent) + self.layout = QVBoxLayout() + self.setLayout(self.layout) + + self.radiobuttons = [] + for val in option.possible_options: + rb = MyRadioButton(val) + self.layout.addWidget(rb) + rb.activated.connect(lambda value: self.valueSelected.emit(option.name, value)) + self.radiobuttons.append(rb) + + self.radiobuttons[0].setChecked(True) + + valueSelected = Signal(str, object) + + +class OptionsSelector(QGroupBox): + def __init__(self, parent: QWidget, option_manager: OptionManager): + super(OptionsSelector, self).__init__(title=option_manager.name, parent=parent) + self.vlayout = QVBoxLayout() + self.setLayout(self.vlayout) + self.layout1 = QHBoxLayout() + self.layout2 = QHBoxLayout() + self.layout3 = QHBoxLayout() + self.vlayout.addLayout(self.layout1) + self.vlayout.addLayout(self.layout2) + self.vlayout.addLayout(self.layout3) + self.disabledOptions = [] + + self.selectors = {} + for option in option_manager.options.values(): + os = OptionSelector(parent=self, option=option) + if "type" in option.name: + self.layout2.addWidget(os) + elif "passing" in option.name: + self.layout3.addWidget(os) + else: + self.layout1.addWidget(os) + os.valueSelected.connect(self._handle_slection) + self.selectors[option.name] = os + + self.selectedOptionsDict = {option.name: option.possible_options[0] for option in + option_manager.options.values()} + + def get_current_option_set(self): + return {k: v for k, v in self.selectedOptionsDict.items() if k not in self.disabledOptions} + + def _handle_slection(self, name: str, value: object): + self.selectedOptionsDict[name] = value + self.optionsSelected.emit(self.get_current_option_set()) + + def set_disabled_options(self, options): + self.disabledOptions = options + for name, selector in self.selectors.items(): + if name in self.disabledOptions: + selector.setEnabled(False) + else: + selector.setEnabled(True) + + optionsSelected = Signal(dict) + + +class MainWindow(QWidget): + def __init__(self): + super(MainWindow, self).__init__() + self.layout = QVBoxLayout() + self.setLayout(self.layout) + + self.functionSelector = OptionsSelector(parent=self, option_manager=function_describing_options()) + self.layout.addWidget(self.functionSelector) + self.testcaseSelector = OptionsSelector(parent=self, option_manager=testcase_describing_options()) + self.layout.addWidget(self.testcaseSelector) + + self.plainTextEdit = QPlainTextEdit() + self.plainTextEdit.setReadOnly(True) + self.layout.addWidget(self.plainTextEdit) + self.plainTextEdit.setFont(PySide2.QtGui.QFont("Fira Code", 8)) + + # temp + self.functionSelector.optionsSelected.connect(lambda o: self._handle_function_change()) + self.testcaseSelector.optionsSelected.connect(lambda o: self._handle_testcase_change()) + + self._handle_function_change() + + def _handle_function_change(self): + options = self.functionSelector.get_current_option_set() + if m := skip_function_description(options): + self.plainTextEdit.setPlainText(m) + return + + options_to_disable = disabled_testcase_describing_options(options) + self.testcaseSelector.set_disabled_options(options_to_disable) + + options.update(self.testcaseSelector.get_current_option_set()) + if m := skip_testcase_description(options): + self.plainTextEdit.setPlainText(m) + return + + self._generate_new_testcase() + + def _handle_testcase_change(self): + options = self.functionSelector.get_current_option_set() + options.update(self.testcaseSelector.get_current_option_set()) + if m := skip_testcase_description(options): + self.plainTextEdit.setPlainText(m) + return + + self._generate_new_testcase() + + def _generate_new_testcase(self): + foptions = self.functionSelector.get_current_option_set() + toptions = self.testcaseSelector.get_current_option_set() + importlib.reload(generate_testcase) + testcase = generate_testcase.generate_testcase(foptions, toptions) + self.plainTextEdit.setPlainText(testcase[1]) + filename = "../tst_qtconcurrentfiltermapgenerated.cpp" + insert_testcases_into_file(filename, [testcase]) + filename = "../tst_qtconcurrentfiltermapgenerated.h" + insert_testcases_into_file(filename, [testcase]) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + + m = MainWindow() + m.show() + + app.exec_() |