Example #1
0
class ErrorLabel(QWidget):
    WARNING, ERROR = range(2)

    def __init__(self, parent):
        QWidget.__init__(self, parent)
        self.ticks = 5
        self.elapsedTicks = 0
        self.lastSeverity = None
        self.icon_label = QLabel()
        self.icon_label.setGeometry(0, 0, 48, 48)
        self.message_edit = QTextEdit()
        self.message_edit.setReadOnly(True)
        self.message_edit.setFrameStyle(QFrame.NoFrame)
        palette = self.message_edit.palette()
        palette.setBrush(QPalette.Base, QBrush())
        self.message_edit.setPalette(palette)
        self.time_bar = QProgressBar()
        self.time_bar.setOrientation(Qt.Vertical)
        self.time_bar.setMaximum(self.ticks)
        self.time_bar.setTextVisible(False)
        self.pauseButton = QPushButton(QIcon(QPixmap(":/icons/images/pause.png")), "")
        self.pauseButton.setFixedSize(32, 32)
        self.connect(self.pauseButton, SIGNAL('clicked()'), self.stopTimer)
        self.stopButton = QPushButton(QIcon(QPixmap(":/icons/images/stop.png")), "")
        self.stopButton.setFixedSize(32, 32)
        self.connect(self.stopButton, SIGNAL('clicked()'), self.closeWidget)
        self.layout = QGridLayout(self)
        self.layout.addWidget(self.time_bar, 0, 0, 2, 1)
        self.layout.addWidget(self.icon_label, 0, 1, 2, 1)
        self.layout.addWidget(self.message_edit, 0, 2, 2, 1)
        self.layout.addWidget(self.pauseButton, 0, 3)
        self.layout.addWidget(self.stopButton, 1, 3)
        self.layout.setColumnStretch(2, 1)
        self.setAutoFillBackground(True)
        self.timer = QTimer()
        self.connect(self.timer, SIGNAL("timeout()"), self.decrementTime)

    def stopTimer(self):
        self.timer.stop()
        self.pauseButton.setEnabled(False)

    def closeWidget(self):
        self.timer.stop()
        QWidget.hide(self)

    @pyqtSlot()
    def decrementTime(self):
        if self.elapsedTicks == self.ticks:
            self.hide()
            self.timer.stop()
        else:
            self.elapsedTicks += 1
            self.time_bar.setValue(self.ticks - self.elapsedTicks)

    def updatePosition(self):
        self.setGeometry(0, self.parent().height() - self.height(), self.width(), self.height())

    def setSize(self, w, h):
        self.setGeometry(0, self.parent().height() - h, w, h)

    def setErrorMessage(self, msg):
        self.lastSeverity = self.ERROR
        self.icon_label.setPixmap(QApplication.style().standardIcon(QStyle.SP_MessageBoxCritical).pixmap(48, 48))
        self._setMessage(msg)

    def setWarningMessage(self, msg):
        self.lastSeverity = self.WARNING
        self.icon_label.setPixmap(QApplication.style().standardIcon(QStyle.SP_MessageBoxWarning).pixmap(48, 48))
        self._setMessage(msg)

    def _setMessage(self, msg):
        self.message_edit.setText(msg)
        self.updatePosition()
        self.elapsedTicks = 0
        self.time_bar.setValue(self.ticks)
        self.timer.start(1000)
        self.pauseButton.setEnabled(True)
        self.show()