66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
# coding:utf-8
|
|
from PySide6.QtCore import Signal
|
|
from PySide6.QtWidgets import QLabel, QPushButton, QDialog
|
|
|
|
from ...common.auto_wrap import TextWrap
|
|
from ...common.style_sheet import FluentStyleSheet
|
|
from .mask_dialog_base import MaskDialogBase
|
|
|
|
|
|
class MessageDialog(MaskDialogBase):
|
|
""" Win10 style message dialog box with a mask """
|
|
|
|
yesSignal = Signal()
|
|
cancelSignal = Signal()
|
|
|
|
def __init__(self, title: str, content: str, parent):
|
|
super().__init__(parent=parent)
|
|
self.content = content
|
|
self.titleLabel = QLabel(title, self.widget)
|
|
self.contentLabel = QLabel(content, self.widget)
|
|
self.yesButton = QPushButton(self.tr('OK'), self.widget)
|
|
self.cancelButton = QPushButton(self.tr('Cancel'), self.widget)
|
|
self.__initWidget()
|
|
|
|
def __initWidget(self):
|
|
""" initialize widgets """
|
|
self.windowMask.resize(self.size())
|
|
self.widget.setMaximumWidth(540)
|
|
self.titleLabel.move(24, 24)
|
|
self.contentLabel.move(24, 56)
|
|
self.contentLabel.setText(TextWrap.wrap(self.content, 71)[0])
|
|
|
|
self.__setQss()
|
|
self.__initLayout()
|
|
|
|
# connect signal to slot
|
|
self.yesButton.clicked.connect(self.__onYesButtonClicked)
|
|
self.cancelButton.clicked.connect(self.__onCancelButtonClicked)
|
|
|
|
def __initLayout(self):
|
|
""" initialize layout """
|
|
self.contentLabel.adjustSize()
|
|
self.widget.setFixedSize(48+self.contentLabel.width(),
|
|
self.contentLabel.y() + self.contentLabel.height()+92)
|
|
self.yesButton.resize((self.widget.width() - 54) // 2, 32)
|
|
self.cancelButton.resize(self.yesButton.width(), 32)
|
|
self.yesButton.move(24, self.widget.height()-56)
|
|
self.cancelButton.move(
|
|
self.widget.width()-24-self.cancelButton.width(), self.widget.height()-56)
|
|
|
|
def __onCancelButtonClicked(self):
|
|
self.cancelSignal.emit()
|
|
self.reject()
|
|
|
|
def __onYesButtonClicked(self):
|
|
self.setEnabled(False)
|
|
self.yesSignal.emit()
|
|
self.accept()
|
|
|
|
def __setQss(self):
|
|
""" set style sheet """
|
|
self.windowMask.setObjectName('windowMask')
|
|
self.titleLabel.setObjectName('titleLabel')
|
|
self.contentLabel.setObjectName('contentLabel')
|
|
FluentStyleSheet.MESSAGE_DIALOG.apply(self)
|