From 58c5fc846a848af0ee70c7db7b3157ca066b0280 Mon Sep 17 00:00:00 2001 From: Alex Pyrgiotis Date: Tue, 4 Jul 2023 18:51:55 +0300 Subject: [PATCH] gui: Add Update Dialog Add a dialog that we will show for update-related tasks. This dialog has a different layout than the Alert class: it has a message, followed by a widget that the user chooses (can be a text box or collapsible element), and then one last message. --- dangerzone/gui/logic.py | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/dangerzone/gui/logic.py b/dangerzone/gui/logic.py index 89f48fd..7dcbfe3 100644 --- a/dangerzone/gui/logic.py +++ b/dangerzone/gui/logic.py @@ -218,6 +218,49 @@ class Alert(Dialog): return message_layout +class UpdateDialog(Dialog): + def __init__( # type: ignore [no-untyped-def] + self, + *args, + intro_msg: Optional[str] = None, + middle_widget: Optional[QtWidgets.QWidget] = None, + epilogue_msg: Optional[str] = None, + **kwargs, + ) -> None: + self.intro_msg = intro_msg + self.middle_widget = middle_widget + self.epilogue_msg = epilogue_msg + super().__init__(*args, **kwargs) + + def create_layout(self) -> QtWidgets.QBoxLayout: + self.setMinimumWidth(500) + message_layout = QtWidgets.QVBoxLayout() + + if self.intro_msg is not None: + intro = QtWidgets.QLabel() + intro.setText(self.intro_msg) + intro.setWordWrap(True) + intro.setAlignment(QtCore.Qt.AlignCenter) + intro.setOpenExternalLinks(True) + message_layout.addWidget(intro) + message_layout.addSpacing(10) + + if self.middle_widget is not None: + self.middle_widget.setParent(self) + message_layout.addWidget(self.middle_widget) + message_layout.addSpacing(10) + + if self.epilogue_msg is not None: + epilogue = QtWidgets.QLabel() + epilogue.setText(self.epilogue_msg) + epilogue.setWordWrap(True) + epilogue.setOpenExternalLinks(True) + message_layout.addWidget(epilogue) + message_layout.addSpacing(10) + + return message_layout + + class CollapsibleBox(QtWidgets.QWidget): """Create a widget that can show/hide its contents when you click on it.