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 Copyright (C) 2014 by Elvis Angelaccio <elvis.angelaccio@kde.org> 0003 0004 This file is part of Kronometer. 0005 0006 Kronometer is free software: you can redistribute it and/or modify 0007 it under the terms of the GNU General Public License as published by 0008 the Free Software Foundation, either version 2 of the License, or 0009 (at your option) any later version. 0010 0011 Kronometer is distributed in the hope that it will be useful, 0012 but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 GNU General Public License for more details. 0015 0016 You should have received a copy of the GNU General Public License 0017 along with Kronometer. If not, see <http://www.gnu.org/licenses/>. 0018 */ 0019 0020 #include "timedisplay.h" 0021 #include "digitdisplay.h" 0022 0023 #include <KLocalizedString> 0024 0025 #include <QBoxLayout> 0026 #include <QGroupBox> 0027 0028 TimeDisplay::TimeDisplay(QWidget *parent) : QWidget(parent) 0029 { 0030 setupUi(this); 0031 0032 m_hourDisplay->setDigits(DigitDisplay::Digits::Two); 0033 m_minDisplay->setDigits(DigitDisplay::Digits::Two); 0034 m_secDisplay->setDigits(DigitDisplay::Digits::Two); 0035 0036 m_hourDisplay->showDigits(m_currentFormat.formatHours(m_displayTime)); 0037 m_minDisplay->showDigits(m_currentFormat.formatMinutes(m_displayTime)); 0038 m_secDisplay->showDigits(m_currentFormat.formatSeconds(m_displayTime)); 0039 m_fracDisplay->showDigits(m_currentFormat.formatFractions(m_displayTime)); 0040 } 0041 0042 void TimeDisplay::setTimeFormat(const TimeFormat& format) 0043 { 0044 m_defaultFormat = format; 0045 m_currentFormat = format; 0046 updateTimeFormat(); 0047 } 0048 0049 void TimeDisplay::setHoursFont(const QFont& font) 0050 { 0051 m_hourDisplay->setFont(font); 0052 updateWidth(); 0053 } 0054 0055 void TimeDisplay::setMinutesFont(const QFont& font) 0056 { 0057 m_minDisplay->setFont(font); 0058 updateWidth(); 0059 } 0060 0061 void TimeDisplay::setSecondsFont(const QFont& font) 0062 { 0063 m_secDisplay->setFont(font); 0064 updateWidth(); 0065 } 0066 0067 void TimeDisplay::setFractionsFont(const QFont& font) 0068 { 0069 m_fracDisplay->setFont(font); 0070 updateWidth(); 0071 } 0072 0073 void TimeDisplay::setBackgroundColor(const QColor& color) 0074 { 0075 setGroupboxColor(m_hourGroup, m_hourGroup->backgroundRole(), color); 0076 setGroupboxColor(m_minGroup, m_minGroup->backgroundRole(), color); 0077 setGroupboxColor(m_secGroup, m_secGroup->backgroundRole(), color); 0078 setGroupboxColor(m_fracGroup, m_fracGroup->backgroundRole(), color); 0079 update(); 0080 } 0081 0082 void TimeDisplay::setTextColor(const QColor& color) 0083 { 0084 setGroupboxColor(m_hourGroup, m_hourGroup->foregroundRole(), color); 0085 setGroupboxColor(m_minGroup, m_minGroup->foregroundRole(), color); 0086 setGroupboxColor(m_secGroup, m_secGroup->foregroundRole(), color); 0087 setGroupboxColor(m_fracGroup, m_fracGroup->foregroundRole(), color); 0088 update(); 0089 } 0090 0091 QString TimeDisplay::currentTime() 0092 { 0093 m_currentFormat.showDividers(true); 0094 const auto currentTime = m_currentFormat.format(m_displayTime); 0095 m_currentFormat.showDividers(false); 0096 0097 return currentTime; 0098 } 0099 0100 void TimeDisplay::setTime(int time) 0101 { 0102 m_displayTime.setHMS(time / MSECS_PER_HOUR, 0103 (time % MSECS_PER_HOUR) / MSECS_PER_MIN, 0104 (time / MSECS_PER_SEC) % 60, 0105 time % MSECS_PER_SEC); 0106 0107 updateTimer(); 0108 } 0109 0110 void TimeDisplay::reset() 0111 { 0112 if (m_currentFormat == m_defaultFormat) 0113 return; 0114 0115 setTimeFormat(m_defaultFormat); 0116 } 0117 0118 void TimeDisplay::updateTimer() 0119 { 0120 if (m_currentFormat.hasHours()) { 0121 m_hourDisplay->showDigits(m_currentFormat.formatHours(m_displayTime)); 0122 } 0123 else if (m_displayTime.hour() >= 1) { 0124 m_currentFormat.overrideHours(); 0125 updateTimeFormat(); 0126 } 0127 0128 if (m_currentFormat.hasMinutes()) { 0129 m_minDisplay->showDigits(m_currentFormat.formatMinutes(m_displayTime)); 0130 } 0131 else if (m_displayTime.minute() >= 1) { 0132 m_currentFormat.overrideMinutes(); 0133 updateTimeFormat(); 0134 } 0135 0136 m_secDisplay->showDigits(m_currentFormat.formatSeconds(m_displayTime)); 0137 0138 if (m_currentFormat.hasFractions()) { 0139 m_fracDisplay->showDigits(m_currentFormat.formatFractions(m_displayTime)); 0140 } 0141 } 0142 0143 void TimeDisplay::updateWidth() 0144 { 0145 auto width = qMax(qMax(m_hourDisplay->minimumSizeHint().width(), 0146 m_minDisplay->minimumSizeHint().width()), 0147 qMax(m_secDisplay->minimumSizeHint().width(), 0148 m_fracDisplay->minimumSizeHint().width())); 0149 0150 width = width + (width * 20 / 100); // 20% as padding, i.e. 10% as right padding and 10% as left padding 0151 0152 m_hourGroup->setMinimumWidth(width); 0153 m_minGroup->setMinimumWidth(width); 0154 m_secGroup->setMinimumWidth(width); 0155 m_fracGroup->setMinimumWidth(width); 0156 } 0157 0158 void TimeDisplay::updateTimeFormat() 0159 { 0160 m_hourGroup->setVisible(m_currentFormat.hasHours()); 0161 m_minGroup->setVisible(m_currentFormat.hasMinutes()); 0162 m_fracGroup->setVisible(m_currentFormat.hasFractions()); 0163 0164 if (m_currentFormat.hasFractions()) { 0165 switch (m_currentFormat.secondFractions()) { 0166 case TimeFormat::UpToTenths: 0167 m_fracGroup->setTitle(i18nc("@title:column", "Tenths")); 0168 m_fracDisplay->setDigits(DigitDisplay::Digits::One); 0169 break; 0170 case TimeFormat::UpToHundredths: 0171 m_fracGroup->setTitle(i18nc("@title:column", "Hundredths")); 0172 m_fracDisplay->setDigits(DigitDisplay::Digits::Two); 0173 break; 0174 case TimeFormat::UpToMilliseconds: 0175 m_fracGroup->setTitle(i18nc("@title:column", "Milliseconds")); 0176 m_fracDisplay->setDigits(DigitDisplay::Digits::Three); 0177 break; 0178 default: 0179 break; 0180 } 0181 } 0182 0183 updateTimer(); 0184 } 0185 0186 void TimeDisplay::setGroupboxColor(QGroupBox *groupBox, QPalette::ColorRole role, const QColor& color) 0187 { 0188 if (not groupBox) { 0189 return; 0190 } 0191 0192 auto palette = QPalette {groupBox->palette()}; 0193 palette.setColor(role, color); 0194 groupBox->setPalette(palette); 0195 } 0196