23 #include <QtCore/QFile>
24 #include <QtGui/QPixmap>
32 class KTimeZoneWidget::Private
46 ZoneRole = Qt::UserRole + 0xF3A3CB1
56 return QString::localeAwareCompare(a, b) < 0;
65 setRootIsDecorated(
false);
66 setHeaderLabels(
QStringList() <<
i18nc(
"Define an area in the time zone, like a town area",
"Area" ) <<
i18nc(
"Time zone",
"Region" ) <<
i18n(
"Comment" ) );
70 QHash<QString, KTimeZone> zonesByCity;
77 cities.append(utc.
name());
78 zonesByCity.insert(utc.
name(), utc);
82 for ( KTimeZones::ZoneMap::ConstIterator it = zones.begin(); it != zones.end(); ++it ) {
85 const int separator = continentCity.lastIndexOf(
'/');
89 const QString key = continentCity.mid(separator+1) +
'|'
90 + continentCity.left(separator) +
'|' + zone.
name();
92 zonesByCity.insert( key, zone );
96 foreach (
const QString &key, cities ) {
97 const KTimeZone zone = zonesByCity.value(key);
101 if ( !comment.isEmpty() )
102 comment =
i18n( comment.toUtf8() );
110 QTreeWidgetItem *listItem =
new QTreeWidgetItem(
this );
111 listItem->setText( Private::CityColumn, continentCity[ continentCity.count() - 1 ] );
113 if ( countryName.isEmpty() ) {
114 continentCity[ continentCity.count() - 1 ] = zone.
countryCode();
116 continentCity[ continentCity.count() - 1 ] = countryName;
119 listItem->setText( Private::RegionColumn, continentCity.join( QChar(
'/') ) );
120 listItem->setText( Private::CommentColumn, comment );
121 listItem->setData( Private::CityColumn, Private::ZoneRole, tzName );
125 if ( QFile::exists( flag ) )
126 listItem->setIcon( Private::RegionColumn, QPixmap( flag ) );
137 d->itemsCheckable = enable;
138 const int count = topLevelItemCount();
139 for (
int row = 0; row < count; ++row) {
140 QTreeWidgetItem* listItem = topLevelItem(row);
141 listItem->setCheckState(Private::CityColumn, Qt::Unchecked);
148 return d->itemsCheckable;
164 QTreeWidgetItemIterator it(const_cast<KTimeZoneWidget*>(
this), d->itemsCheckable ? QTreeWidgetItemIterator::Checked : QTreeWidgetItemIterator::Selected);
166 selection.append( (*it)->data( Private::CityColumn, Private::ZoneRole ).toString() );
180 if (!d->itemsCheckable) {
186 const int rowCount = model()->rowCount(QModelIndex());
187 for (
int row = 0; row < rowCount; ++row) {
188 const QModelIndex index = model()->index(row, Private::CityColumn);
189 const QString tzName = index.data(Private::ZoneRole).toString();
190 if (tzName == zone) {
192 if (d->singleSelection && selected) {
196 if (d->itemsCheckable) {
197 QTreeWidgetItem* listItem = itemFromIndex(index);
198 listItem->setCheckState(Private::CityColumn, selected ? Qt::Checked : Qt::Unchecked);
200 selectionModel()->select(index, selected ? (QItemSelectionModel::Select | QItemSelectionModel::Rows) : (
QItemSelectionModel::Deselect | QItemSelectionModel::Rows));
208 if (d->singleSelection && selected) {
215 kDebug() <<
"No such zone: " << zone;
220 if (d->itemsCheckable) {
222 const int rowCount = model()->rowCount(QModelIndex());
223 for (
int row = 0; row < rowCount; ++row) {
224 const QModelIndex index = model()->index(row, 0);
225 QTreeWidgetItem* listItem = itemFromIndex(index);
226 listItem->setCheckState(Private::CityColumn, Qt::Unchecked);
235 d->singleSelection = (mode == QAbstractItemView::SingleSelection);
236 if (!d->itemsCheckable) {
243 if (d->itemsCheckable) {
244 return d->singleSelection ? QTreeWidget::SingleSelection : QTreeWidget::MultiSelection;
250 #include "ktimezonewidget.moc"