KTimezoneCombo::KTimezoneCombo(QWidget *parent, const char *name, KstTimezones *db) : KComboBox(parent, name), d(new Private) { bool userDb = db != 0L; if (!userDb) { db = new KstTimezones; } if (listBox()) { listBox()->setVScrollBarMode(QScrollView::AlwaysOn); listBox()->setColumnMode(QListBox::FixedNumber); listBox()->setRowMode(QListBox::Variable); } insertItem("UTC"); const KstTimezones::ZoneMap zones = db->allZones(); d->_offsets.resize(zones.count()+1); d->_offsets[0] = 0; d->_names += "UTC"; int i = 0; for (KstTimezones::ZoneMap::ConstIterator it = zones.begin(); it != zones.end(); ++it) { int offset = (*it)->offset(); d->_offsets[++i] = offset; int hours = offset / 3600; int minutes = 100 * offset / 3600 % 100; bool negative = false; if (hours < 0) { hours *= -1; negative = true; } if (minutes < 0) { minutes *= -1; } QString offnum; if (hours < 10) { offnum += '0'; } offnum += QString::number(hours); if (minutes < 10) { offnum += '0'; } offnum += QString::number(minutes); if ((*it)->name() != "UTC") { insertItem(i18n("%3 (UTC%1%2)").arg(negative ? '-' : '+').arg(offnum).arg((*it)->name())); d->_names += (*it)->name(); } } if (!userDb) { delete db; } }
int KstSettingsDlgI::utcOffset(const QString& timezone) { int seconds = 0; if (timezone.startsWith("UTC")) { bool ok; int hours = timezone.mid(3).toInt(&ok); if (ok) { seconds = int( ( double(hours) / 100.0 ) * 3600.0); } else { seconds = 0; } } else { KstTimezones db; const KstTimezones::ZoneMap zones = db.allZones(); for (KstTimezones::ZoneMap::ConstIterator it = zones.begin(); it != zones.end(); ++it) { if ((*it)->name() == timezone) { seconds = (*it)->offset(); } } } return seconds; }