diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") ki18n_install(po) endif () +add_definitions(-DQT_NO_FOREACH) add_subdirectory (src) add_subdirectory (pixmaps) if (ENABLE_EXAMPLES) diff --git a/examples/contactlistwidgets.cpp b/examples/contactlistwidgets.cpp --- a/examples/contactlistwidgets.cpp +++ b/examples/contactlistwidgets.cpp @@ -135,9 +135,9 @@ void ContactListApp::onMergeClicked() { - QModelIndexList indexes = m_view->selectionModel()->selectedIndexes(); + const QModelIndexList indexes = m_view->selectionModel()->selectedIndexes(); QStringList ids; - Q_FOREACH (const QModelIndex &index, indexes) { + for (const QModelIndex &index : indexes) { ids << index.data(PersonsModel::PersonUriRole).toString(); } diff --git a/examples/duplicates.cpp b/examples/duplicates.cpp --- a/examples/duplicates.cpp +++ b/examples/duplicates.cpp @@ -47,7 +47,7 @@ AbstractContact::Ptr aB = it->indexB.data(PersonsModel::PersonVCardRole).value(); Q_ASSERT(!it->reasons.isEmpty()); - Q_FOREACH (Match::MatchReason i, it->reasons) { + for (Match::MatchReason i : qAsConst(it->reasons)) { rA += it->matchValue(i, aA); rB += it->matchValue(i, aB); } diff --git a/src/duplicatesfinder.cpp b/src/duplicatesfinder.cpp --- a/src/duplicatesfinder.cpp +++ b/src/duplicatesfinder.cpp @@ -65,7 +65,7 @@ //we check if it matches int j = 0; - Q_FOREACH (const AbstractContact::Ptr &valueToCompare, collectedValues) { + for (const AbstractContact::Ptr &valueToCompare : qAsConst(collectedValues)) { QList matchedRoles = Match::matchAt(values, valueToCompare); if (!matchedRoles.isEmpty()) { diff --git a/src/matchessolver.cpp b/src/matchessolver.cpp --- a/src/matchessolver.cpp +++ b/src/matchessolver.cpp @@ -44,7 +44,7 @@ QHash > jobsData; // has a relation of each person, to know where it is QHash destinationResolver; - Q_FOREACH (const Match &m, m_matches) { + for (const Match &m : qAsConst(m_matches)) { QString urlA = m.indexA.data(PersonsModel::PersonUriRole).toString(); QString urlB = m.indexB.data(PersonsModel::PersonUriRole).toString(); Q_ASSERT(urlA != urlB); @@ -59,8 +59,8 @@ //we've put all items pointed to by urlA, to the B set //now we re-assign anything pointing to B as pointing to A //because they are the same - QList keys = destinationResolver.keys(urlB); - foreach (const QString &key, keys) { + const QList keys = destinationResolver.keys(urlB); + for (const QString &key : keys) { destinationResolver[key] = urlA; } } else { @@ -84,7 +84,7 @@ } } - Q_FOREACH (const QSet &uris, jobsData) { + for (const QSet &uris : qAsConst(jobsData)) { if (PersonManager::instance()->mergeContacts(uris.toList()).isEmpty()) { qCWarning(KPEOPLE_LOG) << "error: failing to merge contacts: " << uris; } diff --git a/src/metacontact.cpp b/src/metacontact.cpp --- a/src/metacontact.cpp +++ b/src/metacontact.cpp @@ -48,7 +48,7 @@ { if (key.startsWith(QLatin1String("all-"))) { QVariantList ret; - Q_FOREACH (const AbstractContact::Ptr &contact, m_contacts) { + for (const AbstractContact::Ptr &contact : qAsConst(m_contacts)) { QVariant val = contact->customProperty(key); Q_ASSERT(val.canConvert() || val.isNull()); @@ -58,7 +58,7 @@ } return ret; } else { - Q_FOREACH (const AbstractContact::Ptr &contact, m_contacts) { + for (const AbstractContact::Ptr &contact : qAsConst(m_contacts)) { QVariant val = contact->customProperty(key); if (val.isValid()) { return val; diff --git a/src/persondata.cpp b/src/persondata.cpp --- a/src/persondata.cpp +++ b/src/persondata.cpp @@ -67,7 +67,7 @@ } QMap contacts; - Q_FOREACH (const QString &contactUri, d->contactUris) { + for (const QString &contactUri : qAsConst(d->contactUris)) { //load the correct data source for this contact ID const QString sourceId = contactUri.left(contactUri.indexOf(QStringLiteral("://"))); Q_ASSERT(!sourceId.isEmpty()); @@ -185,9 +185,9 @@ { // We might want to cache it eventually? - QVariantList groups = contactCustomProperty(AbstractContact::GroupsProperty).toList(); + const QVariantList groups = contactCustomProperty(AbstractContact::GroupsProperty).toList(); QStringList ret; - Q_FOREACH (const QVariant &g, groups) { + for (const QVariant &g : groups) { Q_ASSERT(g.canConvert()); ret += g.toString(); } @@ -197,9 +197,9 @@ QStringList PersonData::allEmails() const { - QVariantList emails = contactCustomProperty(AbstractContact::AllEmailsProperty).toList(); + const QVariantList emails = contactCustomProperty(AbstractContact::AllEmailsProperty).toList(); QStringList ret; - Q_FOREACH (const QVariant &e, emails) { + for (const QVariant &e : emails) { Q_ASSERT(e.canConvert()); ret += e.toString(); } diff --git a/src/personmanager.cpp b/src/personmanager.cpp --- a/src/personmanager.cpp +++ b/src/personmanager.cpp @@ -142,7 +142,7 @@ QList pendingMessages; // separate the passed ids to metacontacts and simple contacts - Q_FOREACH (const QString &id, ids) { + for (const QString &id : ids) { if (id.startsWith(QLatin1String("kpeople://"))) { metacontacts << id; } else { @@ -175,14 +175,14 @@ if (metacontacts.count() > 1) { // collect all the contacts from other persons QStringList personContacts; - Q_FOREACH (const QString &id, metacontacts) { + for (const QString &id : qAsConst(metacontacts)) { if (id != personUriString) { personContacts << contactsForPersonUri(id); } } // iterate over all of the contacts and change their personID to the new personUriString - Q_FOREACH (const QString &id, personContacts) { + for (const QString &id : qAsConst(personContacts)) { QSqlQuery updateQuery(m_db); updateQuery.prepare(QStringLiteral("UPDATE persons SET personID = ? WHERE contactID = ?")); updateQuery.bindValue(0, personUriString.mid(strlen("kpeople://"))); @@ -210,7 +210,7 @@ // process passed contacts if (!contacts.isEmpty()) { - Q_FOREACH (const QString &id, contacts) { + for (const QString &id : qAsConst(contacts)) { QSqlQuery insertQuery(m_db); insertQuery.prepare(QStringLiteral("INSERT INTO persons VALUES (?, ?)")); insertQuery.bindValue(0, id); @@ -232,7 +232,7 @@ //if success send all messages to other clients //otherwise roll back our database changes and return an empty string if (rc) { - Q_FOREACH (const QDBusMessage &message, pendingMessages) { + for (const QDBusMessage &message : qAsConst(pendingMessages)) { QDBusConnection::sessionBus().send(message); } } else { @@ -254,7 +254,7 @@ query.bindValue(0, id.mid(strlen("kpeople://"))); query.exec(); - Q_FOREACH (const QString &contactUri, contactUris) { + for (const QString &contactUri : contactUris) { //FUTURE OPTIMIZATION - this would be best as one signal, but arguments become complex QDBusMessage message = QDBusMessage::createSignal(QStringLiteral("/KPeople"), QStringLiteral("org.kde.KPeople"), diff --git a/src/personpluginmanager.cpp b/src/personpluginmanager.cpp --- a/src/personpluginmanager.cpp +++ b/src/personpluginmanager.cpp @@ -61,8 +61,8 @@ void PersonPluginManagerPrivate::loadDataSourcePlugins() { - QVector pluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/datasource")); - Q_FOREACH (const KPluginMetaData &service, pluginList) { + const QVector pluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/datasource")); + for (const KPluginMetaData &service : pluginList) { KPluginLoader loader(service.fileName()); KPluginFactory *factory = loader.factory(); BasePersonsDataSource *dataSource = factory->create(); @@ -80,8 +80,8 @@ } //TODO: Remove as soon as KTp sources are released with the new plugin system - KService::List servicesList = KServiceTypeTrader::self()->query(QStringLiteral("KPeople/DataSource")); - Q_FOREACH (const KService::Ptr &service, servicesList) { + const KService::List servicesList = KServiceTypeTrader::self()->query(QStringLiteral("KPeople/DataSource")); + for (const KService::Ptr &service : servicesList) { BasePersonsDataSource *dataSource = service->createInstance(nullptr); diff --git a/src/personsmodel.cpp b/src/personsmodel.cpp --- a/src/personsmodel.cpp +++ b/src/personsmodel.cpp @@ -96,8 +96,8 @@ d_ptr(new PersonsModelPrivate(this)) { Q_D(PersonsModel); - - Q_FOREACH (BasePersonsDataSource *dataSource, PersonPluginManager::dataSourcePlugins()) { + const auto listPlugins = PersonPluginManager::dataSourcePlugins(); + for (BasePersonsDataSource *dataSource : listPlugins) { const AllContactsMonitorPtr monitor = dataSource->allContactsMonitor(); if (monitor->isInitialFetchComplete()) { QMetaObject::invokeMethod(d, "onMonitorInitialFetchComplete", Qt::QueuedConnection, Q_ARG(bool, monitor->initialFetchSuccess())); @@ -261,16 +261,16 @@ QMap addresseeMap; //fetch all already loaded contacts from plugins - Q_FOREACH (const AllContactsMonitorPtr &contactWatcher, m_sourceMonitors) { + for (const AllContactsMonitorPtr &contactWatcher : qAsConst(m_sourceMonitors)) { addresseeMap.unite(contactWatcher->contacts()); } //add metacontacts const QMultiHash contactMapping = PersonManager::instance()->allPersons(); - Q_FOREACH (const QString &key, contactMapping.uniqueKeys()) { + for (const QString &key : contactMapping.uniqueKeys()) { QMap contacts; - Q_FOREACH (const QString &contact, contactMapping.values(key)) { + for (const QString &contact : contactMapping.values(key)) { contactToPersons[contact] = key; AbstractContact::Ptr ptr = addresseeMap.take(contact); if (ptr) { @@ -288,7 +288,7 @@ addPerson(MetaContact(i.key(), i.value())); } - Q_FOREACH (const AllContactsMonitorPtr monitor, m_sourceMonitors) { + for (const AllContactsMonitorPtr monitor : qAsConst(m_sourceMonitors)) { connect(monitor.data(), &AllContactsMonitor::contactAdded, this, &PersonsModelPrivate::onContactAdded); connect(monitor.data(), &AllContactsMonitor::contactChanged, this, &PersonsModelPrivate::onContactChanged); connect(monitor.data(), &AllContactsMonitor::contactRemoved, this, &PersonsModelPrivate::onContactRemoved); diff --git a/src/personssortfilterproxymodel.cpp b/src/personssortfilterproxymodel.cpp --- a/src/personssortfilterproxymodel.cpp +++ b/src/personssortfilterproxymodel.cpp @@ -67,7 +67,7 @@ return true; } - foreach(const QString &key, d->m_keys) { + for(const QString &key : qAsConst(d->m_keys)) { if (!contact->customProperty(key).isNull()) { return true; } diff --git a/src/widgets/actions.cpp b/src/widgets/actions.cpp --- a/src/widgets/actions.cpp +++ b/src/widgets/actions.cpp @@ -32,8 +32,8 @@ static QList actionsPlugins() { QList actionPlugins; - QVector personPluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/actions")); - Q_FOREACH (const KPluginMetaData &service, personPluginList) { + const QVector personPluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/actions")); + for (const KPluginMetaData &service : personPluginList) { KPluginLoader loader(service.fileName()); KPluginFactory *factory = loader.factory(); if (!factory) { @@ -48,8 +48,8 @@ } //TODO: Remove as soon as KTp sources are released with the new plugin system - KService::List personServicesList = KServiceTypeTrader::self()->query(QStringLiteral("KPeople/Plugin")); - Q_FOREACH (const KService::Ptr &service, personServicesList) { + const KService::List personServicesList = KServiceTypeTrader::self()->query(QStringLiteral("KPeople/Plugin")); + for (const KService::Ptr &service : personServicesList) { AbstractPersonAction *plugin = service->createInstance(nullptr); @@ -67,7 +67,8 @@ PersonData person(contactUri); QList actions; - Q_FOREACH (KPeople::AbstractPersonAction *plugin, actionsPlugins()) { + const auto lst = actionsPlugins(); + for (KPeople::AbstractPersonAction *plugin : lst) { actions << plugin->actionsForPerson(person, parent); } diff --git a/src/widgets/mergedialog.cpp b/src/widgets/mergedialog.cpp --- a/src/widgets/mergedialog.cpp +++ b/src/widgets/mergedialog.cpp @@ -159,7 +159,7 @@ QHash > compareTable; QHash doneIndexes; - Q_FOREACH (const Match &match, matches) { + for (const Match &match : matches) { QPersistentModelIndex destination = doneIndexes.value(match.indexA, match.indexA); QHash >::iterator currentValue = compareTable.find(destination); @@ -179,7 +179,7 @@ QStandardItem *parent = itemMergeContactFromMatch(true, i->first()); rootItem->appendRow(parent); - Q_FOREACH (const Match &matchChild, *i) { + for (const Match &matchChild : qAsConst(*i)) { parent->appendRow(itemMergeContactFromMatch(false, matchChild)); } } diff --git a/src/widgets/persondetailsview.cpp b/src/widgets/persondetailsview.cpp --- a/src/widgets/persondetailsview.cpp +++ b/src/widgets/persondetailsview.cpp @@ -122,17 +122,17 @@ #ifdef __GNUC__ #warning figure out a way to list properties #endif - QStringList fields { QStringLiteral("name"), QStringLiteral("all-email") }; - Q_FOREACH (const QString &field, fields) { + const QStringList fields { QStringLiteral("name"), QStringLiteral("all-email") }; + for (const QString &field : fields) { d->m_plugins << new CoreFieldsPlugin(field); } d->m_plugins << new EmailFieldsPlugin(); // load every KPeopleWidgets Plugin - QVector personPluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/widgets")); + const QVector personPluginList = KPluginLoader::findPlugins(QStringLiteral("kpeople/widgets")); - Q_FOREACH (const KPluginMetaData &service, personPluginList) { + for (const KPluginMetaData &service : personPluginList) { KPluginLoader loader(service.fileName()); KPluginFactory *factory = loader.factory(); AbstractFieldWidgetFactory *f = qobject_cast(factory->create()); @@ -145,9 +145,9 @@ //TODO: Remove as soon as KTp sources are released with the new plugin system KService::List pluginList = KServiceTypeTrader::self()->query(QStringLiteral("KPeopleWidgets/Plugin")); - QList plugins = KPluginInfo::fromServices(pluginList); + const QList plugins = KPluginInfo::fromServices(pluginList); - Q_FOREACH (const KPluginInfo &p, plugins) { + for (const KPluginInfo &p : plugins) { QString error; AbstractFieldWidgetFactory *f = p.service()->createInstance(this, QVariantList(), &error); if (f) { @@ -206,7 +206,7 @@ d->m_personDetailsPresentation->presencePixmapLabel->setPixmap(QIcon::fromTheme(d->m_person->presenceIconName()).pixmap(32, 32)); //FIXME d->m_personDetailsPresentation->nameLabel->setText(d->m_person->name()); - Q_FOREACH (AbstractFieldWidgetFactory *widgetFactory, d->m_plugins) { + for (AbstractFieldWidgetFactory *widgetFactory : qAsConst(d->m_plugins)) { const QString label = widgetFactory->label() + QLatin1Char(':'); QWidget *widget = widgetFactory->createDetailsWidget(d->m_person->personUri(), this); diff --git a/src/widgets/plugins/emaildetailswidget.cpp b/src/widgets/plugins/emaildetailswidget.cpp --- a/src/widgets/plugins/emaildetailswidget.cpp +++ b/src/widgets/plugins/emaildetailswidget.cpp @@ -38,7 +38,8 @@ QWidget *widget = new QWidget(parent); QVBoxLayout *layout = new QVBoxLayout(widget); layout->setContentsMargins(0, 0, 0, 0); - Q_FOREACH (const QString &email, person.allEmails()) { + const auto lstEmails = person.allEmails(); + for (const QString &email : lstEmails) { layout->addWidget(new QLabel(email)); } widget->setLayout(layout); diff --git a/src/widgets/plugins/mergecontactswidget.cpp b/src/widgets/plugins/mergecontactswidget.cpp --- a/src/widgets/plugins/mergecontactswidget.cpp +++ b/src/widgets/plugins/mergecontactswidget.cpp @@ -115,10 +115,10 @@ QList MergeContactsWidget::duplicateBusterFromPerson(const QUrl &uri) const { Q_ASSERT(m_duplicatesBuster); - QList wrongFormatResults = m_duplicatesBuster->results(); + const QList wrongFormatResults = m_duplicatesBuster->results(); QList duplicateMatching; - Q_FOREACH (const Match &match, wrongFormatResults) { + for (const Match &match : wrongFormatResults) { // pick up only the couple with match with our parameter index QUrl uriA = match.indexA.data(PersonsModel::UriRole).toUrl(); @@ -169,7 +169,8 @@ urisToMerge << m_person->uri(); // do the merge - Q_FOREACH (const QPersistentModelIndex &pIndex, getContactsCheckedToMerge()) { + const auto lst = getContactsCheckedToMerge(); + for (const QPersistentModelIndex &pIndex : lst) { urisToMerge << pIndex.data(PersonsModel::UriRole).toUrl(); } m_model->createPersonFromUris(urisToMerge); @@ -181,8 +182,7 @@ QList indexesToMerge; // retrieve all the widget where the box is checked - QPair mergeContact ; - Q_FOREACH (mergeContact, m_listMergeContacts) { + for (QPair mergeContact : qAsConst(m_listMergeContacts)) { if (mergeContact.second->isContactSelected()) { indexesToMerge.append(mergeContact.first); } diff --git a/src/widgets/plugins/phonedetailswidget.cpp b/src/widgets/plugins/phonedetailswidget.cpp --- a/src/widgets/plugins/phonedetailswidget.cpp +++ b/src/widgets/plugins/phonedetailswidget.cpp @@ -55,7 +55,8 @@ delete child; } - Q_FOREACH (const QString &phone, person->phones()) { + const auto lst = person->phones(); + for (const QString &phone : lst) { QLabel *phoneLabel = new QLabel(phone, this); phoneLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); layout()->addWidget(phoneLabel);