File indexing completed on 2025-04-27 03:58:22

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2015-05-29
0007  * Description : a combobox with time zones.
0008  *
0009  * SPDX-FileCopyrightText: 2015      by Maik Qualmann <metzpinguin at gmail dot com>
0010  * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  *
0012  * SPDX-License-Identifier: GPL-2.0-or-later
0013  *
0014  * ============================================================ */
0015 
0016 #include "timezonecombobox.h"
0017 
0018 namespace Digikam
0019 {
0020 
0021 TimeZoneComboBox::TimeZoneComboBox(QWidget* const parent)
0022     : QComboBox(parent)
0023 {
0024     QStringList timeZones;
0025     timeZones << QLatin1String("")       << QLatin1String("-12:00")
0026               << QLatin1String("-11:00") << QLatin1String("-10:00")
0027               << QLatin1String("-09:30") << QLatin1String("-09:00")
0028               << QLatin1String("-08:00") << QLatin1String("-07:00")
0029               << QLatin1String("-06:00") << QLatin1String("-05:00")
0030               << QLatin1String("-04:30") << QLatin1String("-04:00")
0031               << QLatin1String("-03:30") << QLatin1String("-03:00")
0032               << QLatin1String("-02:00") << QLatin1String("-01:00")
0033               << QLatin1String("+00:00") << QLatin1String("+01:00")
0034               << QLatin1String("+02:00") << QLatin1String("+03:00")
0035               << QLatin1String("+03:30") << QLatin1String("+04:00")
0036               << QLatin1String("+04:30") << QLatin1String("+05:00")
0037               << QLatin1String("+05:30") << QLatin1String("+05:45")
0038               << QLatin1String("+06:00") << QLatin1String("+06:30")
0039               << QLatin1String("+07:00") << QLatin1String("+08:00")
0040               << QLatin1String("+09:00") << QLatin1String("+09:30")
0041               << QLatin1String("+10:00") << QLatin1String("+10:30")
0042               << QLatin1String("+11:00") << QLatin1String("+11:30")
0043               << QLatin1String("+12:00") << QLatin1String("+12:45")
0044               << QLatin1String("+13:00") << QLatin1String("+13:45")
0045               << QLatin1String("+14:00");
0046 
0047     addItems(timeZones);
0048 }
0049 
0050 TimeZoneComboBox::~TimeZoneComboBox()
0051 {
0052 }
0053 
0054 void TimeZoneComboBox::setToUTC()
0055 {
0056     setCurrentIndex(findText(QLatin1String("+00:00")));
0057 }
0058 
0059 void TimeZoneComboBox::setTimeZone(const QString& timeStr)
0060 {
0061     if (timeStr.length() < 6)
0062     {
0063         setCurrentIndex(0);
0064         return;
0065     }
0066 
0067     QString timeZone = timeStr.right(6);
0068 
0069     if (timeZone.endsWith(QLatin1Char('Z')))
0070     {
0071         setToUTC();
0072     }
0073     else if ((timeZone.startsWith(QLatin1Char('+'))  ||
0074               timeZone.startsWith(QLatin1Char('-'))) &&
0075               (timeZone.mid(3, 1) == QLatin1String(":")))
0076     {
0077         setCurrentIndex(findText(timeZone));
0078     }
0079     else
0080     {
0081         setCurrentIndex(0);
0082     }
0083 }
0084 
0085 QString TimeZoneComboBox::getTimeZone() const
0086 {
0087     return currentText();
0088 }
0089 
0090 int TimeZoneComboBox::timeZoneOffset() const
0091 {
0092     QString tz = currentText();
0093 
0094     if (tz.isEmpty())
0095     {
0096         return 0;
0097     }
0098 
0099     int hh     = QString(QString(tz[1]) + QString(tz[2])).toInt();
0100     int mm     = QString(QString(tz[4]) + QString(tz[5])).toInt();
0101 
0102     int offset = hh*3600 + mm*60;
0103 
0104     if (tz[0] == QLatin1Char('-'))
0105     {
0106         offset = (-1) * offset;
0107     }
0108 
0109     return offset;
0110 }
0111 
0112 } // namespace Digikam
0113 
0114 #include "moc_timezonecombobox.cpp"