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"