QVariant TimezoneModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) return QVariant(); if (role == Qt::DisplayRole) { const QTimeZone tz(m_ids.at(index.row())); switch (index.column()) { case TimezoneModelColumns::IanaIdColumn: return tz.id(); case TimezoneModelColumns::CountryColumn: return QLocale::countryToString(tz.country()); case TimezoneModelColumns::StandardDisplayNameColumn: return tz.displayName(QTimeZone::StandardTime); case TimezoneModelColumns::DSTColumn: return tz.hasDaylightTime(); case TimezoneModelColumns::WindowsIdColumn: return QTimeZone::ianaIdToWindowsId(tz.id()); } } else if (role == Qt::ToolTipRole && index.column() == 0) { const QTimeZone tz(m_ids.at(index.row())); return tz.comment(); } else if (role == TimezoneModelRoles::LocalZoneRole && index.column() == 0) { if (m_ids.at(index.row()) == QTimeZone::systemTimeZoneId()) return true; return QVariant(); } return QVariant(); }
void TimeDateModule::updateFields() { if ( m_timeDate->canNtp() ) ui->isNtpEnabledCheckBox->setChecked( m_timeDate->isNtpEnabled() ); else { ui->isNtpEnabledCheckBox->setChecked( false ); ui->isNtpEnabledCheckBox->setEnabled( false ); } ui->isRtcLocalCheckBox->setChecked( m_timeDate->isRtcInLocalTimeZone() ); QTimeZone timeZone = QTimeZone( m_timeZone.toLatin1() ); if ( timeZone.isValid() ) { ui->timeZoneLabel_2->setText( m_timeZone ); ui->countryLabel_2->setText( QLocale::countryToString( timeZone.country() ) ); QIcon yesIcon = QIcon(); yesIcon.addFile( ":/images/yes.svg", QSize( 16, 16 ) ); QIcon noIcon = QIcon(); noIcon.addFile( ":/images/no.svg", QSize( 16, 16 ) ); if ( timeZone.hasDaylightTime() ) ui->hasDaylightTimeIcon->setPixmap( yesIcon.pixmap( QSize( 16, 16 ) ) ); else ui->hasDaylightTimeIcon->setPixmap( noIcon.pixmap( QSize( 16, 16 ) ) ); if ( timeZone.isDaylightTime( QDateTime::currentDateTime() ) ) ui->isDaylightTimeIcon->setPixmap( yesIcon.pixmap( QSize( 16, 16 ) ) ); else ui->isDaylightTimeIcon->setPixmap( noIcon.pixmap( QSize( 16, 16 ) ) ); if ( timeZone.hasTransitions() ) ui->hasTransitionsIcon->setPixmap( yesIcon.pixmap( QSize( 16, 16 ) ) ); else ui->hasTransitionsIcon->setPixmap( noIcon.pixmap( QSize( 16, 16 ) ) ); QTimeZone::OffsetData offset = timeZone.nextTransition( QDateTime::currentDateTime() ); if ( offset.atUtc != QDateTime() ) { ui->nextTransitionLabel->setEnabled( true ); ui->nextTransitionTimeLabel->setEnabled( true ); ui->nextTransitionTimeLabel->setText( offset.atUtc.toString( "dddd yyyy-MM-dd HH:mm:ss" ) ); } else { ui->nextTransitionLabel->setEnabled( false ); ui->nextTransitionTimeLabel->setEnabled( false ); ui->nextTransitionTimeLabel->setText( tr( "none" ) ); } } }
QString TimeZone::TimeZone::readAllCities() { // get translation list QString lines = cityTranslations(); QSettings settings; int sortOrder = settings.value("sortorder_completeList", "").toInt(); QList<QByteArray> ids = QTimeZone::availableTimeZoneIds(); QString output; QString sign; QString timeoffset; QMultiMap<int, QString> map; QMultiMap<QString, QString> sorted_map; // QMultiMap is sorted by key by default // We use QMultiMap (not QMap) so we can have duplicates int dummy_counter_for_sort = 0; // to inverse reverted sorting foreach (QByteArray id, ids) { QTimeZone zone = QTimeZone(id); QDateTime zoneTime = QDateTime(QDate::currentDate(), QTime::currentTime(), zone).toLocalTime(); int offset = zone.offsetFromUtc(QDateTime::currentDateTime()); QString countryName = QLocale::countryToString(zone.country()); QString countryNameOrg = countryName; // insert space where appropriate. Can't be done in one regex replace? QRegularExpression rx("([a-z])([A-Z])"); QRegularExpressionMatch match = rx.match(countryName); for (int i = 1; i <= 6; i++) { match = rx.match(countryName); if (match.hasMatch()) { QString lowerChar1 = match.captured(1); QString upperChar1 = match.captured(2); countryName.replace(lowerChar1+upperChar1,lowerChar1 + " " + upperChar1); } } int index = lines.indexOf('\n'+countryName+';', 0, Qt::CaseInsensitive); if (index != -1) { index++; // Replace countryName with translation countryName = lines.mid(index+countryName.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } if ( countryName == "Default") { // UTC name countryName = ""; } else { countryName = " [" + countryName + "]"; } if (offset < 0) sign = "-"; else sign = "+"; if((offset % 3600)==0) // offset equals to whole hour timeoffset = QString("UTC %3").arg(sign+QString::number(abs(offset)/3600)); else { int minutes = offset/60 %60; timeoffset = QString("UTC %3:%4").arg(sign+QString::number(abs(offset)/3600)).arg(abs(minutes)); } const int delimiter = id.lastIndexOf('/'); int nbrSlashes = id.count("/"); QString cityNameTr = id.mid(delimiter + 1).replace("_"," "); QString continentTr = id.mid(0, delimiter); QString stateTr = ""; if ( nbrSlashes == 2) { // eg (America/North Dakota/Beulah) continentTr = id.mid(0, id.indexOf('/')); //first part stateTr = id.mid(id.indexOf('/')+1, delimiter - continentTr.length() - 1 ); //second part } if (!lines.isEmpty()) { int index = lines.indexOf(cityNameTr+';', 0, Qt::CaseInsensitive); if (index != -1) { cityNameTr = lines.mid(index+cityNameTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } index = lines.indexOf(continentTr+';', 0, Qt::CaseInsensitive); if (index != -1) { continentTr = lines.mid(index+continentTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } if (!stateTr.isEmpty()) { index = lines.indexOf(stateTr+';', 0, Qt::CaseInsensitive); if (index != -1) { stateTr = lines.mid(index+stateTr.length()+1, lines.indexOf('\n',index) - lines.indexOf(';',index)-1); } continentTr = continentTr + "/" + stateTr; } } if (sortOrder == 1) { dummy_counter_for_sort ++; map.insert(offset + dummy_counter_for_sort,timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else if (sortOrder == 2) { sorted_map.insert(cityNameTr, timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else if (sortOrder == 3) { sorted_map.insert(countryName, timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + ";" + countryNameOrg); } else { output += timeoffset + " (" + continentTr + "/" + cityNameTr + ")" + countryName + ";" + id + + ";" + countryNameOrg + "\n"; } }