File indexing completed on 2024-04-28 04:20:57
0001 /* SPDX-FileCopyrightText: 2003-2010 Jesper K. Pedersen <blackie@kde.org> 0002 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "ViewHandler.h" 0007 0008 #include <KLocalizedString> 0009 #include <QLocale> 0010 #include <math.h> 0011 0012 using namespace DateBar; 0013 0014 /** 0015 * \class DateBar::ViewHandler 0016 * \brief Base class for classes handling logic regarding individual bars in the datebar. 0017 * 0018 * A major part of the date bar is figuring out which date interval a given bar represent, this class is taking care of this. 0019 */ 0020 0021 /** 0022 * Indicate that the first unit in the bar represent the date given as parameter 0023 */ 0024 void ViewHandler::init(const Utilities::FastDateTime &startDate) 0025 { 0026 m_startDate = startDate; 0027 } 0028 0029 /** 0030 * Returns whether this unit is a major unit (like January in year view, or Monday in week view) 0031 * This information is used to draw a longer line in the date bar for the given unit. 0032 */ 0033 bool DateBar::ViewHandler::isMajorUnit(int) 0034 { 0035 // included for documentation 0036 return true; 0037 } 0038 0039 /** 0040 * Returns whether this is a mid unit (like 30 minute in hour view) 0041 * This information is used to draw a slightly longer line in the date bar for the given unit. 0042 */ 0043 bool ViewHandler::isMidUnit(int /*unit*/) 0044 { 0045 return false; 0046 } 0047 0048 /** 0049 * Returns the text to be shown for the given unit. This method will only be call for major units. 0050 */ 0051 QString DateBar::ViewHandler::text(int) 0052 { 0053 // Included for documentation. 0054 return QString(); 0055 } 0056 0057 /** 0058 * Returns the length of one unit (to be shown at the right of the date bar) 0059 */ 0060 QString DateBar::ViewHandler::unitText() const 0061 { 0062 // Included for documentation. 0063 return QString(); 0064 } 0065 0066 /** 0067 * Return the date for the beginning of the unit given as the first argument. If the second optional argument is 0068 * given, then this is used as the date for the first unit, otherwise the date given to \ref init will be used as offset. 0069 */ 0070 Utilities::FastDateTime DateBar::ViewHandler::date(int, Utilities::FastDateTime) 0071 { 0072 // Included for documentation. 0073 return Utilities::FastDateTime(); 0074 } 0075 0076 void DecadeViewHandler::init(const Utilities::FastDateTime &startDate) 0077 { 0078 Utilities::FastDateTime date = Utilities::FastDateTime(QDate(startDate.date().year(), 1, 1), QTime(0, 0, 0)); 0079 ViewHandler::init(date); 0080 } 0081 0082 bool DecadeViewHandler::isMajorUnit(int unit) 0083 { 0084 return date(unit).date().year() % 10 == 0; 0085 } 0086 0087 bool DecadeViewHandler::isMidUnit(int unit) 0088 { 0089 return date(unit).date().year() % 5 == 0; 0090 } 0091 0092 QString DecadeViewHandler::text(int unit) 0093 { 0094 return QString::number(date(unit).date().year()); 0095 } 0096 0097 Utilities::FastDateTime DecadeViewHandler::date(int unit, Utilities::FastDateTime reference) 0098 { 0099 if (reference.isNull()) 0100 reference = m_startDate; 0101 return reference.addMonths(12 * unit); 0102 } 0103 0104 QString DecadeViewHandler::unitText() const 0105 { 0106 return i18n("1 Year"); 0107 } 0108 0109 void YearViewHandler::init(const Utilities::FastDateTime &startDate) 0110 { 0111 Utilities::FastDateTime date = Utilities::FastDateTime(QDate(startDate.date().year(), startDate.date().month(), 1), QTime(0, 0, 0)); 0112 ViewHandler::init(date); 0113 } 0114 0115 bool YearViewHandler::isMajorUnit(int unit) 0116 { 0117 return date(unit).date().month() == 1; 0118 } 0119 0120 bool YearViewHandler::isMidUnit(int unit) 0121 { 0122 return date(unit).date().month() == 7; 0123 } 0124 0125 QString YearViewHandler::text(int unit) 0126 { 0127 return QString::number(date(unit).date().year()); 0128 } 0129 0130 Utilities::FastDateTime YearViewHandler::date(int unit, Utilities::FastDateTime reference) 0131 { 0132 if (reference.isNull()) 0133 reference = m_startDate; 0134 return reference.addMonths(unit); 0135 } 0136 0137 QString YearViewHandler::unitText() const 0138 { 0139 return i18n("1 Month"); 0140 } 0141 0142 void MonthViewHandler::init(const Utilities::FastDateTime &startDate) 0143 { 0144 QDate date = startDate.date().addDays(-startDate.date().dayOfWeek() + 1); // Wind to monday 0145 ViewHandler::init(Utilities::FastDateTime(date, QTime(0, 0, 0))); 0146 } 0147 0148 bool MonthViewHandler::isMajorUnit(int unit) 0149 { 0150 return date(unit).date().day() <= 7; 0151 } 0152 0153 QString MonthViewHandler::text(int unit) 0154 { 0155 static int lastunit = 99999; 0156 static int printedLast = false; 0157 if (unit < lastunit) 0158 printedLast = true; 0159 QString str; 0160 if (!printedLast) 0161 str = QLocale().toString(date(unit).date(), QLocale::ShortFormat); 0162 printedLast = !printedLast; 0163 lastunit = unit; 0164 return str; 0165 } 0166 0167 Utilities::FastDateTime MonthViewHandler::date(int unit, Utilities::FastDateTime reference) 0168 { 0169 if (reference.isNull()) 0170 reference = m_startDate; 0171 return reference.addDays(7 * unit); 0172 } 0173 0174 QString MonthViewHandler::unitText() const 0175 { 0176 return i18n("1 Week"); 0177 } 0178 0179 void WeekViewHandler::init(const Utilities::FastDateTime &startDate) 0180 { 0181 ViewHandler::init(Utilities::FastDateTime(startDate.date(), QTime(0, 0, 0))); 0182 } 0183 0184 bool WeekViewHandler::isMajorUnit(int unit) 0185 { 0186 return date(unit).date().dayOfWeek() == 1; 0187 } 0188 0189 QString WeekViewHandler::text(int unit) 0190 { 0191 return QLocale().toString(date(unit).date(), QLocale::ShortFormat); 0192 } 0193 0194 Utilities::FastDateTime WeekViewHandler::date(int unit, Utilities::FastDateTime reference) 0195 { 0196 if (reference.isNull()) 0197 reference = m_startDate; 0198 return reference.addDays(unit); 0199 } 0200 0201 QString WeekViewHandler::unitText() const 0202 { 0203 return i18n("1 Day"); 0204 } 0205 0206 void DayViewHandler::init(const Utilities::FastDateTime &startDate) 0207 { 0208 Utilities::FastDateTime date = startDate; 0209 if (date.time().hour() % 2) 0210 date = date.addSecs(60 * 60); 0211 0212 ViewHandler::init(Utilities::FastDateTime(date.date(), QTime(date.time().hour(), 0, 0))); 0213 } 0214 0215 bool DayViewHandler::isMajorUnit(int unit) 0216 { 0217 int h = date(unit).time().hour(); 0218 return h == 0 || h == 12; 0219 } 0220 0221 bool DayViewHandler::isMidUnit(int unit) 0222 { 0223 int h = date(unit).time().hour(); 0224 return h == 6 || h == 18; 0225 } 0226 0227 QString DayViewHandler::text(int unit) 0228 { 0229 if (date(unit).time().hour() == 0) 0230 return QLocale().toString(date(unit).date(), QLocale::ShortFormat); 0231 else 0232 return date(unit).toString(QString::fromLatin1("h:00")); 0233 } 0234 0235 Utilities::FastDateTime DayViewHandler::date(int unit, Utilities::FastDateTime reference) 0236 { 0237 if (reference.isNull()) 0238 reference = m_startDate; 0239 return reference.addSecs(2 * 60 * 60 * unit); 0240 } 0241 0242 QString DayViewHandler::unitText() const 0243 { 0244 return i18n("2 Hours"); 0245 } 0246 0247 void HourViewHandler::init(const Utilities::FastDateTime &startDate) 0248 { 0249 ViewHandler::init(Utilities::FastDateTime(startDate.date(), 0250 QTime(startDate.time().hour(), 10 * (int)floor(startDate.time().minute() / 10.0), 0))); 0251 } 0252 0253 bool HourViewHandler::isMajorUnit(int unit) 0254 { 0255 return date(unit).time().minute() == 0; 0256 } 0257 0258 bool HourViewHandler::isMidUnit(int unit) 0259 { 0260 int min = date(unit).time().minute(); 0261 return min == 30; 0262 } 0263 0264 QString HourViewHandler::text(int unit) 0265 { 0266 return date(unit).toString(QString::fromLatin1("h:00")); 0267 } 0268 0269 Utilities::FastDateTime HourViewHandler::date(int unit, Utilities::FastDateTime reference) 0270 { 0271 if (reference.isNull()) 0272 reference = m_startDate; 0273 return reference.addSecs(60 * 10 * unit); 0274 } 0275 0276 QString HourViewHandler::unitText() const 0277 { 0278 return i18n("10 Minutes"); 0279 } 0280 0281 void TenMinuteViewHandler::init(const Utilities::FastDateTime &startDate) 0282 { 0283 ViewHandler::init(Utilities::FastDateTime(startDate.date(), 0284 QTime(startDate.time().hour(), 10 * (int)floor(startDate.time().minute() / 10.0), 0))); 0285 } 0286 0287 bool TenMinuteViewHandler::isMajorUnit(int unit) 0288 { 0289 return (date(unit).time().minute() % 10) == 0; 0290 } 0291 0292 bool TenMinuteViewHandler::isMidUnit(int unit) 0293 { 0294 int min = date(unit).time().minute(); 0295 return (min % 10) == 5; 0296 } 0297 0298 QString TenMinuteViewHandler::text(int unit) 0299 { 0300 return date(unit).toString(QString::fromLatin1("h:mm")); 0301 } 0302 0303 Utilities::FastDateTime TenMinuteViewHandler::date(int unit, Utilities::FastDateTime reference) 0304 { 0305 if (reference.isNull()) 0306 reference = m_startDate; 0307 return reference.addSecs(60 * unit); 0308 } 0309 0310 QString TenMinuteViewHandler::unitText() const 0311 { 0312 return i18n("1 Minute"); 0313 } 0314 0315 void MinuteViewHandler::init(const Utilities::FastDateTime &startDate) 0316 { 0317 ViewHandler::init(Utilities::FastDateTime(startDate.date(), 0318 QTime(startDate.time().hour(), 0319 startDate.time().minute(), 0))); 0320 } 0321 0322 bool MinuteViewHandler::isMajorUnit(int unit) 0323 { 0324 return date(unit).time().second() == 0; 0325 } 0326 0327 bool MinuteViewHandler::isMidUnit(int unit) 0328 { 0329 int sec = date(unit).time().second(); 0330 return sec == 30; 0331 } 0332 0333 QString MinuteViewHandler::text(int unit) 0334 { 0335 return date(unit).toString(QString::fromLatin1("h:mm")); 0336 } 0337 0338 Utilities::FastDateTime MinuteViewHandler::date(int unit, Utilities::FastDateTime reference) 0339 { 0340 if (reference.isNull()) 0341 reference = m_startDate; 0342 return reference.addSecs(10 * unit); 0343 } 0344 0345 QString MinuteViewHandler::unitText() const 0346 { 0347 return i18n("10 Seconds"); 0348 } 0349 0350 // vi:expandtab:tabstop=4 shiftwidth=4: