From 2c111b2eb4cd7ad9e865628b71e594b09fd1491e Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 27 Apr 2021 19:40:26 +0200 Subject: [PATCH] implemented basic of button with options --- igniter/install_dialog.py | 59 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/igniter/install_dialog.py b/igniter/install_dialog.py index a35f30dc90..397f6d7a0b 100644 --- a/igniter/install_dialog.py +++ b/igniter/install_dialog.py @@ -16,6 +16,65 @@ from .user_settings import OpenPypeSecureRegistry from .version import __version__ +class ButtonWithOptions(QtWidgets.QFrame): + option_clicked = QtCore.Signal(str) + + def __init__(self, options, default=None, parent=None): + super(ButtonWithOptions, self).__init__(parent) + + self.setObjectName("ButtonWithOptions") + + if default: + if default not in options: + default = None + + if default is None: + default = options[0] + + main_btn = QtWidgets.QPushButton(default, self) + main_btn.setFlat(True) + + options_btn = QtWidgets.QToolButton(self) + options_btn.setArrowType(QtCore.Qt.DownArrow) + options_btn.setFixedWidth(10) + + options_menu = QtWidgets.QMenu(self) + for option in options: + action = QtWidgets.QAction(option, options_menu) + action.setData(option) + options_menu.addAction(action) + + main_btn.setStyleSheet("border: none;") + # options_btn.setStyleSheet("border: none;") + self.setStyleSheet("border: 1px solid white;border-radius: 0.4em;") + + main_layout = QtWidgets.QHBoxLayout(self) + main_layout.setContentsMargins(5, 0, 5, 0) + main_layout.setSpacing(5) + + main_layout.addWidget(main_btn, 1) + main_layout.addWidget(options_btn, 0) + + main_btn.clicked.connect(self._on_main_button) + options_btn.clicked.connect(self._on_options_click) + options_menu.triggered.connect(self._on_trigger) + + self.options_btn = options_btn + self.options_menu = options_menu + + self._default_value = default + + def _on_options_click(self): + point = self.mapToGlobal(self.rect().bottomLeft()) + self.options_menu.popup(point) + + def _on_trigger(self, action): + self.option_clicked.emit(action.data()) + + def _on_main_button(self): + self.option_clicked.emit(self._default_value) + + class FocusHandlingLineEdit(QtWidgets.QLineEdit): """Handling focus in/out on QLineEdit.""" focusIn = QtCore.Signal()