Exemple #1
0
 def createLCD(self, mode):
     lcd = QLCDNumber(self)
     lcd.setMode(mode)
     lcd.setMinimumHeight(50)
     lcd.setMinimumWidth(160)
     lcd.setDigitCount(8)
     if mode == QLCDNumber.Bin:
         lcd.display("00000000")
     else:
         lcd.display(0)
     lcd.setSegmentStyle(QLCDNumber.Flat)
     lcd.setAutoFillBackground(True)
     palette = lcd.palette()
     palette.setColor(QPalette.Normal, QPalette.Foreground, Qt.blue)
     palette.setColor(QPalette.Normal, QPalette.Background, Qt.lightGray)
     lcd.setPalette(palette)
     return lcd
Exemple #2
0
class MyTimer(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle(u"Цифровые часы")

        timer = QTimer(self)

        self.connect(timer, SIGNAL("timeout()"), self.updtTime)
        self.myTimeDisplay = QLCDNumber(self)
        self.myTimeDisplay.setSegmentStyle(QLCDNumber.Filled)
        self.myTimeDisplay.setDigitCount(8)
        self.myTimeDisplay.resize(500, 150)

        timer.start(1000)

    def updtTime(self):
        currentTime = QDateTime.currentDateTime().toString("hh:mm:ss")
        self.myTimeDisplay.display(currentTime)
Exemple #3
0
class MyTimer(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle(u'Цифровые часы')

        timer = QTimer(self)

        self.connect(timer, SIGNAL("timeout()"), self.updtTime)
        self.myTimeDisplay = QLCDNumber(self)
        self.myTimeDisplay.setSegmentStyle(QLCDNumber.Filled)
        self.myTimeDisplay.setDigitCount(8)
        self.myTimeDisplay.resize(500, 150)

        timer.start(1000)

    def updtTime(self):
        currentTime = QDateTime.currentDateTime().toString('hh:mm:ss')
        self.myTimeDisplay.display(currentTime)
class LayoutTemperature(QHBoxLayout):
    def __init__(self, parent):
        super(LayoutTemperature, self).__init__()
        self.settings(parent)

    def settings(self, parent):
        # CRIANDO O GRUPOBOXTEMPS PARA POR OS LABELS E LCD'S
        self.groupBoxTemps = QGroupBox(parent)

        # CRIANDO O LABEL PARA INFORMAR O QUE O LCD ESTÁ MOSTRANDO
        self.lbTemp1 = QLabel(self.groupBoxTemps)
        self.lbTemp1.setGeometry(QRect(70, 10, 127, 10))
        self.lbTemp1.setMaximumSize(QSize(16777215, 10))
        self.lbTemp1.setText("Termometro 1")
        self.lbTemp1.setAlignment(Qt.AlignCenter)

        # CRIANDO O LABEL PARA INFORMAR O QUE O LCD ESTÁ MOSTRANDO
        self.lbTemp2 = QLabel(self.groupBoxTemps)
        self.lbTemp2.setGeometry(QRect(330, 10, 130, 10))
        self.lbTemp2.setMaximumSize(QSize(16777215, 10))
        self.lbTemp2.setText("Termometro 2")
        self.lbTemp2.setAlignment(Qt.AlignCenter)

        # CRIANDO O LCD PARA INFORMAR A TEMPERATURA DO TERMOMETRO 1
        self.lcdTemp1 = QLCDNumber(self.groupBoxTemps)
        self.lcdTemp1.setGeometry(QRect(30, 30, 211, 71))
        self.lcdTemp1.display("00.00")
        self.lcdTemp1.setDigitCount(6)

        # CRIANDO O LCD PARA INFORMAR A TEMPERATURA DO TERMOMETRO 2
        self.lcdTemp2 = QLCDNumber(self.groupBoxTemps)
        self.lcdTemp2.setGeometry(QRect(290, 30, 211, 71))
        self.lcdTemp2.display("00.00")
        self.lcdTemp2.setDigitCount(6)

        # COLOCANDO LAYOUT NO GRUPOBOXTEMPS
        self.addWidget(self.groupBoxTemps)
Exemple #5
0
class LayoutTemperature(QHBoxLayout):
    def __init__(self, parent):
        super(LayoutTemperature, self).__init__()
        self.settings(parent)

    def settings(self, parent):
        # CRIANDO O GRUPOBOXTEMPS PARA POR OS LABELS E LCD'S
        self.groupBoxTemps = QGroupBox(parent)

        # CRIANDO O LABEL PARA INFORMAR O QUE O LCD ESTÁ MOSTRANDO
        self.lbTemp1 = QLabel(self.groupBoxTemps)
        self.lbTemp1.setGeometry(QRect(70, 10, 127, 10))
        self.lbTemp1.setMaximumSize(QSize(16777215, 10))
        self.lbTemp1.setText("Termometro 1")
        self.lbTemp1.setAlignment(Qt.AlignCenter)

        # CRIANDO O LABEL PARA INFORMAR O QUE O LCD ESTÁ MOSTRANDO
        self.lbTemp2 = QLabel(self.groupBoxTemps)
        self.lbTemp2.setGeometry(QRect(330, 10, 130, 10))
        self.lbTemp2.setMaximumSize(QSize(16777215, 10))
        self.lbTemp2.setText("Termometro 2")
        self.lbTemp2.setAlignment(Qt.AlignCenter)

        # CRIANDO O LCD PARA INFORMAR A TEMPERATURA DO TERMOMETRO 1
        self.lcdTemp1 = QLCDNumber(self.groupBoxTemps)
        self.lcdTemp1.setGeometry(QRect(30, 30, 211, 71))
        self.lcdTemp1.display("00.00")
        self.lcdTemp1.setDigitCount(6)

        # CRIANDO O LCD PARA INFORMAR A TEMPERATURA DO TERMOMETRO 2
        self.lcdTemp2 = QLCDNumber(self.groupBoxTemps)
        self.lcdTemp2.setGeometry(QRect(290, 30, 211, 71))
        self.lcdTemp2.display("00.00")
        self.lcdTemp2.setDigitCount(6)

        # COLOCANDO LAYOUT NO GRUPOBOXTEMPS
        self.addWidget(self.groupBoxTemps)
Exemple #6
0
class LayoutTimeCurrent(QVBoxLayout):
    def __init__(self, parent):
        super(LayoutTimeCurrent, self).__init__()
        self.settings(parent)

    def settings(self, parent):
        # CRIANDO O GRUPOBOXTIMECURRENTE PARA COLOCAR  O LABEL E O LCD
        # PARA CONTROLAR O TEMPO
        self.groupBoxTimeCurrent = QGroupBox(parent)

        # CRIANDO O LABEL DE INFORMAR O QUE É O LCD ESTÁ MOSTRANDO
        self.lbTimeCurrent = QLabel(self.groupBoxTimeCurrent)
        self.lbTimeCurrent.setGeometry(QRect(230, 0, 91, 20))
        self.lbTimeCurrent.setMaximumSize(QSize(16777215, 20))
        self.lbTimeCurrent.setText("Tempo percorrido")

        # CRIANDO O LCD PARA MOSTRAR O TEMPO PERCORRIDO
        self.lcdTimeCurrent = QLCDNumber(self.groupBoxTimeCurrent)
        self.lcdTimeCurrent.setGeometry(QRect(140, 20, 251, 81))
        self.lcdTimeCurrent.setDigitCount(8)
        self.lcdTimeCurrent.display("00:00:00")

        # COLOCANDO LAYOUT NO GRUPOBOXTIMECURRENT
        self.addWidget(self.groupBoxTimeCurrent)
class LayoutTimeCurrent(QVBoxLayout):
    def __init__(self, parent):
        super(LayoutTimeCurrent, self).__init__()
        self.settings(parent)

    def settings(self, parent):
        # CRIANDO O GRUPOBOXTIMECURRENTE PARA COLOCAR  O LABEL E O LCD
        # PARA CONTROLAR O TEMPO
        self.groupBoxTimeCurrent = QGroupBox(parent)

        # CRIANDO O LABEL DE INFORMAR O QUE É O LCD ESTÁ MOSTRANDO
        self.lbTimeCurrent = QLabel(self.groupBoxTimeCurrent)
        self.lbTimeCurrent.setGeometry(QRect(230, 0, 91, 20))
        self.lbTimeCurrent.setMaximumSize(QSize(16777215, 20))
        self.lbTimeCurrent.setText("Tempo percorrido")

        # CRIANDO O LCD PARA MOSTRAR O TEMPO PERCORRIDO
        self.lcdTimeCurrent = QLCDNumber(self.groupBoxTimeCurrent)
        self.lcdTimeCurrent.setGeometry(QRect(140, 20, 251, 81))
        self.lcdTimeCurrent.setDigitCount(8)
        self.lcdTimeCurrent.display("00:00:00")

        # COLOCANDO LAYOUT NO GRUPOBOXTIMECURRENT
        self.addWidget(self.groupBoxTimeCurrent)
Exemple #8
0
class MainWindow(QWidget):
    # set up signals
    resetClicked = pyqtSignal()
    inputChanged = pyqtSignal()
    input_one = None

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        # --------------------------------------------------------

        # main window
        self.setObjectName("Multiply")
        self.resize(400, 300)

        # label
        self.label = QLabel(self)
        self.label.setGeometry(QRect(20, 10, 250, 50))
        self.label.setText("Multiply two numbers!")
        # self.label.show()

        # input frame
        self.input_frame = QFrame(self)
        self.input_frame.setGeometry(QRect(20, 60, 350, 130))
        self.input_frame.setFrameShape(QFrame.StyledPanel)
        self.input_frame.setFrameShadow(QFrame.Raised)

        # set the layout of the frame
        self.verticalLayout = QVBoxLayout(self.input_frame)
        self.verticalLayout.setObjectName("verticalLayout")

        # first input
        self.input_one = QDoubleSpinBox(self.input_frame)
        self.input_one.setObjectName("input_one")
        self.input_one.setDecimals(4)
        self.input_one.setSingleStep(0.01)

        self.verticalLayout.addWidget(self.input_one)

        # second input
        self.input_two = QDoubleSpinBox(self.input_frame)
        self.input_two.setObjectName("input_two")
        self.input_two.setDecimals(4)
        self.input_two.setSingleStep(0.01)

        self.verticalLayout.addWidget(self.input_two)

        # LCD result
        self.result_lcd = QLCDNumber(self)
        self.result_lcd.setObjectName("result_lcd")
        self.result_lcd.setGeometry(QRect(20, 200, 350, 80))
        self.result_lcd.setDigitCount(10)
        self.result_lcd.setSmallDecimalPoint(True)

        # Reset Button
        self.reset_button = QPushButton(self)
        self.reset_button.setGeometry(QRect(270, 10, 100, 30))
        self.reset_button.setObjectName("reset_button")
        self.reset_button.setText("Reset")

        # --------------------------------------------------------

        # connect slots

        self.reset_button.clicked.connect(self.onResetClick)
        self.input_one.valueChanged.connect(self.onInputChanged)
        self.input_two.valueChanged.connect(self.onInputChanged)

        # define slots

    def onResetClick(self):
        self.resetClicked.emit()

    def onInputChanged(self):
        self.inputChanged.emit()

    def setResult(self, value):
        self.result_lcd.display(value)
class Ui_MainWindow(QMainWindow):
    def __init__(self):
        super(Ui_MainWindow, self).__init__(None)
        self.setupUi()
        self.serial = ComunicacaoArduino.start_communication()
        self.controle = ControlInterface()
        self.dadosTempo = []
        self.dados = []

    def startThreadTime(self):
        self.controle.starThreadTime(self)

    def startThreadMonitora(self):
        self.buttonStart.setDisabled(True)
        self.buttonStop.setDisabled(False)
        self.controle.starThreadMonitora(self.serial, self)

    def stopThreadMonitora(self):
        self.controle.stopThreadMonitora()
        self.controle.starThreadGravadora(self.LEditArqDes.text(), self.dados)

    def stopThreadTime(self):
        self.controle.stopThreadTime()

    def startThreads(self):
        if self.LEditArqDes.text() != '':
            self.startThreadMonitora()
            self.startThreadTime()
        else:
            reply = QMessageBox.critical(self, 'Aviso', "Selecione onde quer salvar o arquivo!", QMessageBox.Ok)

    def stopThreads(self):
        self.stopThreadMonitora()
        self.stopThreadTime()

    def setTemps(self, temps):
        self.lcdTemp1.display(temps[0])
        self.lcdTemp2.display(temps[1])
        temps.append(self.dadosTempo[len(self.dadosTempo)-1])
        self.dados.append(temps)

    def setTime(self, time):
        if time not in self.dadosTempo:
            self.lcdTime.display(time)
            self.dadosTempo.append(time)

    def setupUi(self):
        self.setMaximumSize(580, 460)
        self.setMinimumSize(580, 460)

        self.centralWidget = QWidget(self)
        self.setCentralWidget(self.centralWidget)

        self.gridLayout = QGridLayout(self.centralWidget)
        self.gridLayout.setMargin(11)
        self.gridLayout.setSpacing(6)

        self.cboxSetupAndActions()
        self.cboxTemps()
        self.currentTime()

    def cboxSetupAndActions(self):
        self.HLayoutSetupAndActions = QHBoxLayout()
        self.HLayoutSetupAndActions.setMargin(11)
        self.HLayoutSetupAndActions.setSpacing(6)

        self.groupBoxSetupAndActions = QGroupBox(self.centralWidget)
        self.groupBoxSetupAndActions.setTitle("Configurações e Ações")

        self.buttonStart = QPushButton(self.groupBoxSetupAndActions)
        self.buttonStart.setGeometry(QRect(270, 80, 121, 23))
        self.buttonStart.setText("Start")
        self.buttonStart.clicked.connect(self.startThreads)
        icon = QIcon()
        icon.addPixmap(QPixmap("View\\Imagens\\start_icon.png"), QIcon.Normal, QIcon.Off)
        self.buttonStart.setIcon(icon)

        self.buttonStop = QPushButton(self.groupBoxSetupAndActions)
        self.buttonStop.setGeometry(QRect(400, 80, 121, 23))
        self.buttonStop.setText("Stop")
        self.buttonStop.clicked.connect(self.stopThreads)
        self.buttonStop.setDisabled(True)

        self.LbArqDes = QLabel("Selecione onde quer salvar o novo arquivo:", self.groupBoxSetupAndActions)
        self.LbArqDes.setGeometry(QRect(20, 20, 220, 16))

        self.LEditArqDes = QLineEdit(self.groupBoxSetupAndActions)
        self.LEditArqDes.setReadOnly(True)
        self.LEditArqDes.setGeometry(QRect(20, 40, 350, 21))

        self.BtnBrowser2 = QPushButton("Browser...", self.groupBoxSetupAndActions)
        self.BtnBrowser2.clicked.connect(self.pegaArqDestino)
        self.BtnBrowser2.setGeometry(QRect(370, 39, 80, 23))
        icon = QIcon()
        icon.addPixmap(QPixmap(("View\\Imagens\\pasta.png")), QIcon.Normal, QIcon.Off)
        self.BtnBrowser2.setIcon(icon)

        self.HLayoutSetupAndActions.addWidget(self.groupBoxSetupAndActions)

        self.gridLayout.addLayout(self.HLayoutSetupAndActions, 2, 0, 1, 1)

    def cboxTemps(self):
        self.hlLcdsTemp = QHBoxLayout()
        self.hlLcdsTemp.setMargin(11)
        self.hlLcdsTemp.setSpacing(6)

        self.groupBoxLcdsTemp = QGroupBox(self.centralWidget)

        self.lbTemp1 = QLabel(self.groupBoxLcdsTemp)
        self.lbTemp1.setGeometry(QRect(70, 10, 127, 10))
        self.lbTemp1.setText('Termômetro 1')
        self.lbTemp1.setAlignment(Qt.AlignCenter)

        self.lbTemp2 = QLabel(self.groupBoxLcdsTemp)
        self.lbTemp2.setGeometry(QRect(330, 10, 130, 10))
        self.lbTemp2.setText('Termômetro 2')
        self.lbTemp2.setAlignment(Qt.AlignCenter)

        self.lcdTemp1 = QLCDNumber(self.groupBoxLcdsTemp)
        self.lcdTemp1.setGeometry(QRect(30, 30, 211, 71))
        self.lcdTemp1.display("00.00")

        self.lcdTemp2 = QLCDNumber(self.groupBoxLcdsTemp)
        self.lcdTemp2.setGeometry(QRect(290, 30, 211, 71))
        self.lcdTemp2.display("00.00")

        self.hlLcdsTemp.addWidget(self.groupBoxLcdsTemp)

        self.gridLayout.addLayout(self.hlLcdsTemp, 0, 0, 1, 1)

    def currentTime(self):
        self.verticalLayout_3 = QVBoxLayout()
        self.verticalLayout_3.setMargin(11)
        self.verticalLayout_3.setSpacing(6)

        self.groupBox_2 = QGroupBox(self.centralWidget)
        self.groupBox_2.setTitle("")

        self.lbCurrentTime = QLabel(self.groupBox_2)
        self.lbCurrentTime.setGeometry(QRect(230, 0, 91, 20))
        self.lbCurrentTime.setText("Tempo percorrido")

        self.lcdTime = QLCDNumber(self.groupBox_2)
        self.lcdTime.setGeometry(QRect(140, 20, 251, 81))
        self.lcdTime.setDigitCount(8)
        self.lcdTime.display("00:00:00")

        self.verticalLayout_3.addWidget(self.groupBox_2)

        self.gridLayout.addLayout(self.verticalLayout_3, 1, 0, 1, 1)

    def pegaArqDestino(self):
        reply = QMessageBox.information(self, 'Aviso', "Selecione a pasta para salvar o arquivo",
                                              QMessageBox.Ok)
        self.nome_arquivoDestino = QFileDialog.getSaveFileName(self, "Selecionar o local para salvar o arquivo",
                                                                     filter="All(*.csv)")  ##Abre um arquivo
        self.LEditArqDes.setText(self.nome_arquivoDestino)
Exemple #10
0
class WCounters(QWidget, Logger.ClassLogger):
    """
    Widget to display some counters
    """
    def __init__(self, parent=None):
        """
        Constructs WCounter widget 

        @param parent: 
        @type parent:
        """
        QWidget.__init__(self, parent)
        self.parent = parent
        self.name = self.tr("Counters")
        self.tests_stats = {}
        self.createWidgets()
        self.createConnections()
        self.createActions()
        self.deactivate()

    def createWidgets(self):
        """
        QtWidgets creation
        """
        self.setContextMenuPolicy(Qt.CustomContextMenu)

        mainLayout = QVBoxLayout()

        gridLayout = QGridLayout()

        font = QFont(FONT_NAME, FONT_SIZE)
        font.setBold(True)

        self.passLabel = QLabel("PASS")
        self.passLabel.setFont(font)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.passLabel.setPalette(passPalette)
        self.passLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        self.failLabel = QLabel("FAILED")
        self.failLabel.setFont(font)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.failLabel.setPalette(failPalette)
        self.failLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        self.undefLabel = QLabel("UNDEFINED")
        font2 = QFont(FONT_NAME, FONT_SIZE2)
        font2.setBold(False)
        self.undefLabel.setFont(font2)
        self.undefLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        self.totalLabel = QLabel()
        self.totalLabel.setStyleSheet("""background-color: #EAEAEA;
                                        background-image: url(:/main_logo.png);
                                        background-position: center;
                                        background-repeat: no-repeat;
                                        background-attachment: fixed;""")
        self.totalLabel.setAlignment(Qt.AlignHCenter)

        self.logoLabel = QLabel()

        # testglobal
        self.counterTgPass = QLCDNumber(self)
        try:  # this function does not exist on linux centos 6.3
            self.counterTgPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTgPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTgPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTgPass.setPalette(passPalette)

        self.counterTgFail = QLCDNumber(self)
        try:
            self.counterTgFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTgFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTgFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTgFail.setPalette(failPalette)

        self.counterTgUndef = QLCDNumber(self)
        try:
            self.counterTgUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTgUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTgUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTgUndef.setPalette(underPalette)

        self.counterTgTotal = QLCDNumber(self)
        self.counterTgTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTgTotal.setFrameShape(QFrame.NoFrame)

        # testplan
        self.counterTpPass = QLCDNumber(self)
        try:
            self.counterTpPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTpPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTpPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTpPass.setPalette(passPalette)

        self.counterTpFail = QLCDNumber(self)
        try:
            self.counterTpFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTpFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTpFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTpFail.setPalette(failPalette)

        self.counterTpUndef = QLCDNumber(self)
        try:
            self.counterTpUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTpUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTpUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTpUndef.setPalette(underPalette)

        self.counterTpTotal = QLCDNumber(self)
        self.counterTpTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTpTotal.setFrameShape(QFrame.NoFrame)

        # testsuites
        self.counterTsPass = QLCDNumber(self)
        try:
            self.counterTsPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTsPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTsPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTsPass.setPalette(passPalette)

        self.counterTsFail = QLCDNumber(self)
        try:
            self.counterTsFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTsFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTsFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTsFail.setPalette(failPalette)

        self.counterTsUndef = QLCDNumber(self)
        try:
            self.counterTsUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTsUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTsUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTsUndef.setPalette(underPalette)

        self.counterTsTotal = QLCDNumber(self)
        self.counterTsTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTsTotal.setFrameShape(QFrame.NoFrame)

        # testunit
        self.counterTuPass = QLCDNumber(self)
        try:
            self.counterTuPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTuPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTuPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTuPass.setPalette(passPalette)

        self.counterTuFail = QLCDNumber(self)
        try:
            self.counterTuFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTuFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTuFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTuFail.setPalette(failPalette)

        self.counterTuUndef = QLCDNumber(self)
        try:
            self.counterTuUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTuUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTuUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTuUndef.setPalette(underPalette)

        self.counterTuTotal = QLCDNumber(self)
        self.counterTuTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTuTotal.setFrameShape(QFrame.NoFrame)

        # testabstracts
        self.counterTaPass = QLCDNumber(self)
        try:
            self.counterTaPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTaPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTaPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTaPass.setPalette(passPalette)

        self.counterTaFail = QLCDNumber(self)
        try:
            self.counterTaFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTaFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTaFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTaFail.setPalette(failPalette)

        self.counterTaUndef = QLCDNumber(self)
        try:
            self.counterTaUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTaUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTaUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTaUndef.setPalette(underPalette)

        self.counterTaTotal = QLCDNumber(self)
        self.counterTaTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTaTotal.setFrameShape(QFrame.NoFrame)

        # testcases
        self.counterTcPass = QLCDNumber(self)
        try:
            self.counterTcPass.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTcPass.setSegmentStyle(QLCDNumber.Flat)
        self.counterTcPass.setFrameShape(QFrame.NoFrame)
        passPalette = QPalette()
        passPalette.setColor(QPalette.WindowText, Qt.darkGreen)
        self.counterTcPass.setPalette(passPalette)

        self.counterTcFail = QLCDNumber(self)
        try:
            self.counterTcFail.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTcFail.setSegmentStyle(QLCDNumber.Flat)
        self.counterTcFail.setFrameShape(QFrame.NoFrame)
        failPalette = QPalette()
        failPalette.setColor(QPalette.WindowText, Qt.red)
        self.counterTcFail.setPalette(failPalette)

        self.counterTcUndef = QLCDNumber(self)
        try:
            self.counterTcUndef.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTcUndef.setSegmentStyle(QLCDNumber.Flat)
        self.counterTcUndef.setFrameShape(QFrame.NoFrame)
        underPalette = QPalette()
        underPalette.setColor(QPalette.WindowText, Qt.darkBlue)
        self.counterTcUndef.setPalette(underPalette)

        self.counterTcTotal = QLCDNumber(self)
        try:
            self.counterTcTotal.setDigitCount(NB_LCD_DIGITS)
        except AttributeError:
            pass
        self.counterTcTotal.setSegmentStyle(QLCDNumber.Flat)
        self.counterTcTotal.setFrameShape(QFrame.NoFrame)

        font2 = QFont(FONT_NAME, FONT_SIZE2)
        font2.setBold(True)
        self.tgLabel = QLabel("Tests\nGlobal")
        self.tgLabel.setFont(font2)
        self.tgLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.tpLabel = QLabel("Tests\nPlan")
        self.tpLabel.setFont(font2)
        self.tpLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.tsLabel = QLabel("Tests\nSuite")
        self.tsLabel.setFont(font2)
        self.tsLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.tuLabel = QLabel("Tests\nUnit")
        self.tuLabel.setFont(font2)
        self.tuLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.taLabel = QLabel("Tests\nAbstract")
        self.taLabel.setFont(font2)
        self.taLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.tcLabel = QLabel("Tests\nCase")
        self.tcLabel.setFont(font2)
        self.tcLabel.setAlignment(Qt.AlignRight | Qt.AlignVCenter)

        self.totLabel = QLabel("TOTAL")
        self.totLabel.setFont(font2)
        self.totLabel.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        font3 = QFont(FONT_NAME, FONT_SIZE3)
        font3.setItalic(True)
        self.totPassValue = QLabel("0<br />0%")
        self.totPassValue.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.totPassValue.setFont(font3)
        self.totFailedValue = QLabel("0<br />0%")
        self.totFailedValue.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.totFailedValue.setFont(font3)
        self.totUndefValue = QLabel("0<br />0%")
        self.totUndefValue.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.totUndefValue.setFont(font3)
        self.totValue = QLabel("0<br />0%")
        self.totValue.setFont(font3)

        self.totValue.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        #gridLayout.addWidget(self.totalLabel, 0, 0)

        gridLayout.addWidget(self.tgLabel, 0, 1)
        gridLayout.addWidget(self.tpLabel, 0, 2)
        gridLayout.addWidget(self.tsLabel, 0, 3)
        gridLayout.addWidget(self.tuLabel, 0, 4)
        gridLayout.addWidget(self.taLabel, 0, 5)
        gridLayout.addWidget(self.tcLabel, 0, 6)

        gridLayout.addWidget(self.passLabel, 1, 0)
        gridLayout.addWidget(self.counterTgPass, 1, 1)
        gridLayout.addWidget(self.counterTpPass, 1, 2)
        gridLayout.addWidget(self.counterTsPass, 1, 3)
        gridLayout.addWidget(self.counterTuPass, 1, 4)
        gridLayout.addWidget(self.counterTaPass, 1, 5)
        gridLayout.addWidget(self.counterTcPass, 1, 6)

        gridLayout.addWidget(self.failLabel, 2, 0)
        gridLayout.addWidget(self.counterTgFail, 2, 1)
        gridLayout.addWidget(self.counterTpFail, 2, 2)
        gridLayout.addWidget(self.counterTsFail, 2, 3)
        gridLayout.addWidget(self.counterTuFail, 2, 4)
        gridLayout.addWidget(self.counterTaFail, 2, 5)
        gridLayout.addWidget(self.counterTcFail, 2, 6)

        gridLayout.addWidget(self.undefLabel, 3, 0)
        gridLayout.addWidget(self.counterTgUndef, 3, 1)
        gridLayout.addWidget(self.counterTpUndef, 3, 2)
        gridLayout.addWidget(self.counterTsUndef, 3, 3)
        gridLayout.addWidget(self.counterTuUndef, 3, 4)
        gridLayout.addWidget(self.counterTaUndef, 3, 5)
        gridLayout.addWidget(self.counterTcUndef, 3, 6)

        gridLayout.addWidget(self.counterTgTotal, 4, 1)
        gridLayout.addWidget(self.counterTpTotal, 4, 2)
        gridLayout.addWidget(self.counterTsTotal, 4, 3)
        gridLayout.addWidget(self.counterTuTotal, 4, 4)
        gridLayout.addWidget(self.counterTaTotal, 4, 5)
        gridLayout.addWidget(self.counterTcTotal, 4, 6)

        gridLayout.addWidget(self.totLabel, 0, 7)
        gridLayout.addWidget(self.totPassValue, 1, 7)
        gridLayout.addWidget(self.totFailedValue, 2, 7)
        gridLayout.addWidget(self.totUndefValue, 3, 7)
        gridLayout.addWidget(self.totValue, 4, 7)

        mainLayout.addLayout(gridLayout)

        self.setLayout(mainLayout)

    def createConnections(self):
        """
        Create connections
        """
        self.customContextMenuRequested.connect(self.onPopupMenu)

    def createActions(self):
        """
        Create qt actions
        """
        self.resetAction = QtHelper.createAction(
            self,
            "&Reset Statistics",
            self.resetStats,
            tip='Reset all statistics',
            icon=QIcon(":/reset-counter.png"))

    def onPopupMenu(self, pos):
        """
        On popup menu
        """
        self.menu = QMenu()
        self.menu.addAction(self.resetAction)
        self.menu.addSeparator()
        self.menu.popup(self.mapToGlobal(pos))

    def resetStats(self):
        """
        Reset statistic manually
        """
        reply = QMessageBox.question(self, "Reset statistics",
                                     "Are you sure ?",
                                     QMessageBox.Yes | QMessageBox.No)
        if reply == QMessageBox.Yes:
            RCI.instance().resetTestsMetrics()

    def active(self):
        """
        Enables
        """
        self.resetAction.setEnabled(True)

    def deactivate(self):
        """
        Clears QTreeWidget and disables it
        """
        self.resetAction.setEnabled(False)

    def resetCounters(self):
        """
        Reset counters
        """
        counters = {
            'testglobals': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            },
            'testplans': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            },
            'testsuites': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            },
            'testunits': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            },
            'testabstracts': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            },
            'testcases': {
                'nb-pass': 0,
                'nb-fail': 0,
                'nb-undef': 0
            }
        }
        self.loadData(counters=counters)

    def loadData(self, counters):
        """
        Load value of each counters

        @param parent: 
        @type parent:
        """
        self.tests_stats = counters

        self.counterTgPass.display(counters['testglobals']['nb-pass'])
        self.counterTgFail.display(counters['testglobals']['nb-fail'])
        self.counterTgUndef.display(counters['testglobals']['nb-undef'])
        self.counterTgTotal.display(counters['testglobals']['nb-pass'] +
                                    counters['testglobals']['nb-fail'] +
                                    counters['testglobals']['nb-undef'])

        self.counterTpPass.display(counters['testplans']['nb-pass'])
        self.counterTpFail.display(counters['testplans']['nb-fail'])
        self.counterTpUndef.display(counters['testplans']['nb-undef'])
        self.counterTpTotal.display(counters['testplans']['nb-pass'] +
                                    counters['testplans']['nb-fail'] +
                                    counters['testplans']['nb-undef'])

        self.counterTsPass.display(counters['testsuites']['nb-pass'])
        self.counterTsFail.display(counters['testsuites']['nb-fail'])
        self.counterTsUndef.display(counters['testsuites']['nb-undef'])
        self.counterTsTotal.display(counters['testsuites']['nb-pass'] +
                                    counters['testsuites']['nb-fail'] +
                                    counters['testsuites']['nb-undef'])

        self.counterTuPass.display(counters['testunits']['nb-pass'])
        self.counterTuFail.display(counters['testunits']['nb-fail'])
        self.counterTuUndef.display(counters['testunits']['nb-undef'])
        self.counterTuTotal.display(counters['testunits']['nb-pass'] +
                                    counters['testunits']['nb-fail'] +
                                    counters['testunits']['nb-undef'])

        self.counterTaPass.display(counters['testabstracts']['nb-pass'])
        self.counterTaFail.display(counters['testabstracts']['nb-fail'])
        self.counterTaUndef.display(counters['testabstracts']['nb-undef'])
        self.counterTaTotal.display(counters['testabstracts']['nb-pass'] +
                                    counters['testabstracts']['nb-fail'] +
                                    counters['testabstracts']['nb-undef'])

        self.counterTcPass.display(counters['testcases']['nb-pass'])
        self.counterTcFail.display(counters['testcases']['nb-fail'])
        self.counterTcUndef.display(counters['testcases']['nb-undef'])
        self.counterTcTotal.display(counters['testcases']['nb-pass'] +
                                    counters['testcases']['nb-fail'] +
                                    counters['testcases']['nb-undef'])

        nbPass =  counters['testglobals']['nb-pass']+counters['testplans']['nb-pass']+counters['testsuites']['nb-pass']+counters['testunits']['nb-pass'] \
                    + counters['testabstracts']['nb-pass']+counters['testcases']['nb-pass']
        nbUndef = counters['testglobals']['nb-undef']+counters['testplans']['nb-undef']+counters['testsuites']['nb-undef']+counters['testunits']['nb-undef'] \
                    + counters['testabstracts']['nb-undef'] + counters['testcases']['nb-undef']
        nbFailed = counters['testglobals']['nb-fail']+counters['testplans']['nb-fail']+counters['testsuites']['nb-fail']+counters['testunits']['nb-fail'] \
                    + counters['testabstracts']['nb-fail'] + counters['testcases']['nb-fail']
        nbTot = nbPass + nbUndef + nbFailed
        if nbTot:
            self.totPassValue.setText(
                "%s<br />(%s%%)" %
                (nbPass, round((nbPass * 100) / float(nbTot), 1)))
            self.totFailedValue.setText(
                "%s<br />(%s%%)" %
                (nbFailed, round((nbFailed * 100) / float(nbTot), 1)))
            self.totUndefValue.setText(
                "%s<br />(%s%%)" %
                (nbUndef, round((nbUndef * 100) / float(nbTot), 1)))
        else:
            self.totPassValue.setText("0<br />(0%)")
            self.totFailedValue.setText("0<br />(0%)")
            self.totUndefValue.setText("0<br />(0%)")

        self.totValue.setText("%s" % nbTot)

    def refreshData(self, data, action):
        """
        Refresh counters

        @param parent: 
        @type parent:

        @param parent: 
        @type parent:
        """
        self.loadData(counters=data)