1 /*
2     SPDX-FileCopyrightText: 2008 Danilo Balzaque <danilo.balzaque@ltia.fc.unesp.br>
3     SPDX-FileCopyrightText: 2008 Tadeu Araujo <tadeu.araujo@ltia.fc.unesp.br>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #include "StatisticsBarWidget.h"
9 
10 /* these includes are needed for Qt support */
11 #include <QApplication>
12 #include <QGridLayout>
13 #include <QLabel>
14 #include <QProgressBar>
15 
16 #ifdef DEBUG
17 #include <QDebug>
18 #endif
19 
20 #include "settingsclass.h"
21 
22 /* constructor */
StatisticsBarWidget(QWidget * parent)23 StatisticsBarWidget::StatisticsBarWidget(QWidget * parent) :
24     QWidget(parent)
25 {
26 #ifdef DEBUG
27     qDebug() << QStringLiteral("constructor StatisticsBarWidget()");
28 #endif
29     m_correct = 0;
30     m_skipped = 0;
31     m_total = 0;
32 
33     defaultFont = SettingsClass::taskFont();
34     defaultFont.setBold(true);
35     defaultFont.setPointSize(10);
36 
37     QGridLayout * barLayout = new QGridLayout();
38 
39     m_correctBar = new QProgressBar(this);
40     m_correctBar->setTextVisible(false);
41     QPalette progressPalette;
42     progressPalette.setColor(QPalette::Window, QColor(192, 234, 194));
43     progressPalette.setColor(QPalette::Highlight, Qt::green);
44     m_correctBar->setPalette(progressPalette);
45     m_correctBar->setMinimumSize(QSize(210, 14));
46     m_correctBar->setRange(0, 100);
47     m_correctBar->setValue(0);
48 
49     m_incorrectBar = new QProgressBar(this);
50     m_incorrectBar->setTextVisible(false);
51     progressPalette.setColor(QPalette::Window, QColor(234, 192, 192));
52     progressPalette.setColor(QPalette::Highlight, Qt::red);
53     m_incorrectBar->setPalette(progressPalette);
54     m_incorrectBar->setMinimumSize(QSize(210, 14));
55     m_incorrectBar->setRange(0, 100);
56     m_incorrectBar->setValue(0);
57 
58     m_skippedBar = new QProgressBar(this);
59     m_skippedBar->setTextVisible(false);
60     progressPalette.setColor(QPalette::Window, QColor(233, 234, 192));
61     progressPalette.setColor(QPalette::Highlight, Qt::yellow);
62     m_skippedBar->setPalette(progressPalette);
63     m_skippedBar->setMinimumSize(QSize(210, 14));
64     m_skippedBar->setRange(0, 100);
65     m_skippedBar->setValue(0);
66 
67     m_correctLabel = new QLabel(QStringLiteral("0%"), this);
68     m_correctLabel->setFont(defaultFont);
69     m_correctLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
70     m_incorrectLabel = new QLabel(QStringLiteral("0%"), this);
71     m_incorrectLabel->setFont(defaultFont);
72     m_incorrectLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
73     m_skippedLabel = new QLabel(QStringLiteral("0%"), this);
74     m_skippedLabel->setFont(defaultFont);
75     m_skippedLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
76 
77     barLayout->addWidget(m_correctBar, 0, 0, Qt::AlignVCenter | Qt::AlignLeft);
78     barLayout->addWidget(m_incorrectBar, 1, 0, Qt::AlignVCenter | Qt::AlignLeft);
79     barLayout->addWidget(m_skippedBar, 2, 0, Qt::AlignVCenter | Qt::AlignLeft);
80 
81     barLayout->addWidget(m_correctLabel, 0, 1);
82     barLayout->addWidget(m_incorrectLabel, 1, 1);
83     barLayout->addWidget(m_skippedLabel, 2, 1);
84 
85     setLayout(barLayout);
86 }
87 
88 /* destructor */
~StatisticsBarWidget()89 StatisticsBarWidget::~StatisticsBarWidget()
90 {
91 #ifdef DEBUG
92     qDebug() << QStringLiteral("destructor StatisticsBarWidget()");
93 #endif
94 }
95 
updateBar(int correct,int skipped,int total)96 void StatisticsBarWidget::updateBar(int correct, int skipped, int total)
97 {
98 #ifdef DEBUG
99     qDebug() << QStringLiteral("StatisticsBarWidget::updateBar()");
100 #endif
101     m_correct = correct;
102     m_skipped = skipped;
103     m_total = total;
104 
105     m_correctBar->setRange(0, m_total);
106     m_correctBar->setValue(correct);
107 
108     m_incorrectBar->setRange(0, m_total);
109     m_incorrectBar->setValue(m_total - m_correct - m_skipped);
110 
111     m_skippedBar->setRange(0, m_total);
112     m_skippedBar->setValue(m_skipped);
113 
114     m_incorrectLabel->setText(m_incorrectBar->text());
115     m_skippedLabel->setText(m_skippedBar->text());
116     m_correctLabel->setText(m_correctBar->text());
117 
118     update();
119 }
120