Warning, file /utilities/kronometer/src/gui/timedisplay.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2014 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "timedisplay.h"
0008 #include "digitdisplay.h"
0009 
0010 #include <KLocalizedString>
0011 
0012 #include <QGroupBox>
0013 
0014 TimeDisplay::TimeDisplay(QWidget *parent) : QWidget(parent)
0015 {
0016     setupUi(this);
0017 
0018     m_hourDisplay->setDigits(DigitDisplay::Digits::Two);
0019     m_minDisplay->setDigits(DigitDisplay::Digits::Two);
0020     m_secDisplay->setDigits(DigitDisplay::Digits::Two);
0021 
0022     m_hourDisplay->showDigits(m_currentFormat.formatHours(m_displayTime));
0023     m_minDisplay->showDigits(m_currentFormat.formatMinutes(m_displayTime));
0024     m_secDisplay->showDigits(m_currentFormat.formatSeconds(m_displayTime));
0025     m_fracDisplay->showDigits(m_currentFormat.formatFractions(m_displayTime));
0026 }
0027 
0028 void TimeDisplay::setTimeFormat(const TimeFormat& format)
0029 {
0030     m_defaultFormat = format;
0031     m_currentFormat = format;
0032     updateTimeFormat();
0033 }
0034 
0035 void TimeDisplay::setHoursFont(const QFont& font)
0036 {
0037     m_hourDisplay->setFont(font);
0038     updateWidth();
0039 }
0040 
0041 void TimeDisplay::setMinutesFont(const QFont& font)
0042 {
0043     m_minDisplay->setFont(font);
0044     updateWidth();
0045 }
0046 
0047 void TimeDisplay::setSecondsFont(const QFont& font)
0048 {
0049     m_secDisplay->setFont(font);
0050     updateWidth();
0051 }
0052 
0053 void TimeDisplay::setFractionsFont(const QFont& font)
0054 {
0055     m_fracDisplay->setFont(font);
0056     updateWidth();
0057 }
0058 
0059 void TimeDisplay::setBackgroundColor(const QColor& color)
0060 {
0061     setGroupboxColor(m_hourGroup, m_hourGroup->backgroundRole(), color);
0062     setGroupboxColor(m_minGroup, m_minGroup->backgroundRole(), color);
0063     setGroupboxColor(m_secGroup, m_secGroup->backgroundRole(), color);
0064     setGroupboxColor(m_fracGroup, m_fracGroup->backgroundRole(), color);
0065     update();
0066 }
0067 
0068 void TimeDisplay::setTextColor(const QColor& color)
0069 {
0070     setGroupboxColor(m_hourGroup, m_hourGroup->foregroundRole(), color);
0071     setGroupboxColor(m_minGroup, m_minGroup->foregroundRole(), color);
0072     setGroupboxColor(m_secGroup, m_secGroup->foregroundRole(), color);
0073     setGroupboxColor(m_fracGroup, m_fracGroup->foregroundRole(), color);
0074     update();
0075 }
0076 
0077 QString TimeDisplay::currentTime()
0078 {
0079     m_currentFormat.showDividers(true);
0080     const auto currentTime = m_currentFormat.format(m_displayTime);
0081     m_currentFormat.showDividers(false);
0082 
0083     return currentTime;
0084 }
0085 
0086 void TimeDisplay::setTime(int time)
0087 {
0088     m_displayTime.setHMS(time / MSECS_PER_HOUR,
0089                         (time % MSECS_PER_HOUR) / MSECS_PER_MIN,
0090                         (time / MSECS_PER_SEC) % 60,
0091                         time % MSECS_PER_SEC);
0092 
0093     updateTimer();
0094 }
0095 
0096 void TimeDisplay::reset()
0097 {
0098     if (m_currentFormat == m_defaultFormat)
0099         return;
0100 
0101     setTimeFormat(m_defaultFormat);
0102 }
0103 
0104 void TimeDisplay::updateTimer()
0105 {
0106     if (m_currentFormat.hasHours()) {
0107         m_hourDisplay->showDigits(m_currentFormat.formatHours(m_displayTime));
0108     }
0109     else if (m_displayTime.hour() >= 1) {
0110         m_currentFormat.overrideHours();
0111         updateTimeFormat();
0112     }
0113 
0114     if (m_currentFormat.hasMinutes()) {
0115         m_minDisplay->showDigits(m_currentFormat.formatMinutes(m_displayTime));
0116     }
0117     else if (m_displayTime.minute() >= 1) {
0118         m_currentFormat.overrideMinutes();
0119         updateTimeFormat();
0120     }
0121 
0122     m_secDisplay->showDigits(m_currentFormat.formatSeconds(m_displayTime));
0123 
0124     if (m_currentFormat.hasFractions()) {
0125         m_fracDisplay->showDigits(m_currentFormat.formatFractions(m_displayTime));
0126     }
0127 }
0128 
0129 void TimeDisplay::updateWidth()
0130 {
0131     auto width = qMax(qMax(m_hourDisplay->minimumSizeHint().width(),
0132                           m_minDisplay->minimumSizeHint().width()),
0133                      qMax(m_secDisplay->minimumSizeHint().width(),
0134                           m_fracDisplay->minimumSizeHint().width()));
0135 
0136     width = width + (width * 40 / 100); // 40% as padding, i.e. 20% as right padding and 20% as left padding
0137 
0138     m_hourGroup->setMinimumWidth(width);
0139     m_minGroup->setMinimumWidth(width);
0140     m_secGroup->setMinimumWidth(width);
0141     m_fracGroup->setMinimumWidth(width);
0142 }
0143 
0144 void TimeDisplay::updateTimeFormat()
0145 {
0146     m_hourGroup->setVisible(m_currentFormat.hasHours());
0147     m_minGroup->setVisible(m_currentFormat.hasMinutes());
0148     m_fracGroup->setVisible(m_currentFormat.hasFractions());
0149 
0150     if (m_currentFormat.hasFractions()) {
0151         switch (m_currentFormat.secondFractions()) {
0152         case TimeFormat::UpToTenths:
0153             m_fracGroup->setTitle(i18nc("@title:column", "Tenths"));
0154             m_fracDisplay->setDigits(DigitDisplay::Digits::One);
0155             break;
0156         case TimeFormat::UpToHundredths:
0157             m_fracGroup->setTitle(i18nc("@title:column", "Hundredths"));
0158             m_fracDisplay->setDigits(DigitDisplay::Digits::Two);
0159             break;
0160         case TimeFormat::UpToMilliseconds:
0161             m_fracGroup->setTitle(i18nc("@title:column", "Milliseconds"));
0162             m_fracDisplay->setDigits(DigitDisplay::Digits::Three);
0163             break;
0164         default:
0165             break;
0166         }
0167     }
0168 
0169     updateTimer();
0170 }
0171 
0172 void TimeDisplay::setGroupboxColor(QGroupBox *groupBox, QPalette::ColorRole role, const QColor& color)
0173 {
0174     if (!groupBox) {
0175         return;
0176     }
0177 
0178     auto palette = QPalette {groupBox->palette()};
0179     palette.setColor(role, color);
0180     groupBox->setPalette(palette);
0181 }
0182 
0183 
0184 #include "moc_timedisplay.cpp"