void QLandmarkManagerEngineSqlite::disconnectNotify(const char *signal) { if (QLatin1String(signal) == SIGNAL(landmarksAdded(QList<QLandmarkId>)) || QLatin1String(signal) == SIGNAL(landmarksChanged(QList<QLandmarkId>)) || QLatin1String(signal) == SIGNAL(landmarksRemoved(QList<QLandmarkId>)) || QLatin1String(signal) == SIGNAL(categoriesAdded(QList<QLandmarkCategoryId>)) || QLatin1String(signal) == SIGNAL(categoriesChanged(QList<QLandmarkCategoryId>)) || QLatin1String(signal) == SIGNAL(categoriesRemoved(QList<QLandmarkCategoryId>))) { if (receivers(SIGNAL(landmarksAdded(QList<QLandmarkId>))) == 0 && receivers(SIGNAL(landmarksChanged(QList<QLandmarkId>))) == 0 && receivers(SIGNAL(landmarksRemoved(QList<QLandmarkId>))) == 0 && receivers(SIGNAL(categoriesAdded(QList<QLandmarkCategoryId>))) == 0 && receivers(SIGNAL(categoriesChanged(QList<QLandmarkCategoryId>))) == 0 && receivers(SIGNAL(categoriesRemoved(QList<QLandmarkCategoryId>))) == 0 ) setChangeNotificationsEnabled(false); } QObject::disconnectNotify(signal); }
void QDeclarativeLandmarkAbstractModel::connectManager() { if (!m_manager) return; connect(m_manager, SIGNAL(categoriesAdded(QList<QLandmarkCategoryId>)), this, SLOT(categoriesChanged(QList<QLandmarkCategoryId>))); connect(m_manager, SIGNAL(categoriesChanged(QList<QLandmarkCategoryId>)), this, SLOT(categoriesChanged(QList<QLandmarkCategoryId>))); connect(m_manager, SIGNAL(categoriesRemoved(QList<QLandmarkCategoryId>)), this, SLOT(categoriesChanged(QList<QLandmarkCategoryId>))); connect(m_manager, SIGNAL(landmarksAdded(QList<QLandmarkId>)), this, SLOT(landmarksChanged(QList<QLandmarkId>))); connect(m_manager, SIGNAL(landmarksChanged(QList<QLandmarkId>)), this, SLOT(landmarksChanged(QList<QLandmarkId>))); connect(m_manager, SIGNAL(landmarksRemoved(QList<QLandmarkId>)), this, SLOT(landmarksChanged(QList<QLandmarkId>))); connect(m_manager, SIGNAL(dataChanged()), this, SLOT(dataChanged())); }
void QLandmarkManagerEngineSymbian::handleLandmarkEvent(LandmarkEventObserver::lmEvent event, QList<QLandmarkId> landmarkIds, QList<QLandmarkCategoryId> categoryIds) { switch (event) { case LandmarkEventObserver::landmarkAdded: { emit landmarksAdded(landmarkIds); break; } case LandmarkEventObserver::landmarkUpdated: { emit landmarksChanged(landmarkIds); break; } case LandmarkEventObserver::landmarkRemoved: { emit landmarksRemoved(landmarkIds); break; } case LandmarkEventObserver::categoryAdded: { emit categoriesAdded(categoryIds); break; } case LandmarkEventObserver::categoryUpdated: { emit categoriesChanged(categoryIds); break; } case LandmarkEventObserver::categoryRemoved: { emit categoriesRemoved(categoryIds); break; } case LandmarkEventObserver::unknownChanges: { emit dataChanged(); break; } } // switch closure }
void QLandmarkManagerEngineSqlite::databaseChanged() { QSqlDatabase db = QSqlDatabase::database(m_dbConnectionName); QSqlQuery query(db); if (!query.prepare("SELECT landmarkId,action, timestamp FROM landmark_notification WHERE timestamp >= ?")) { #ifdef QT_LANDMARK_SQLITE_ENGINE_DEBUG qWarning() << "Could not prepare statement: " << query.lastQuery() << " \nReason:" << query.lastError().text(); #endif return; } query.addBindValue(m_latestLandmarkTimestamp); if (!query.exec()) { #ifdef QT_LANDMARK_SQLITE_ENGINE_DEBUG qWarning() << "Could not execute statement:" << query.lastQuery() << " \nReason:" << query.lastError().text(); #endif return; } QList<QLandmarkId> addedLandmarkIds; QList<QLandmarkId> changedLandmarkIds; QList<QLandmarkId> removedLandmarkIds; QString action; QLandmarkId landmarkId; landmarkId.setManagerUri(managerUri()); bool ok; qint64 timestamp; bool landmarkTimestampWasModified = true; while(query.next()) { timestamp = query.value(2).toLongLong(&ok); if (!ok) //this should never happen continue; if (timestamp > m_latestLandmarkTimestamp) { m_latestLandmarkTimestamp = timestamp; landmarkTimestampWasModified = true; } action = query.value(1).toString(); landmarkId.setLocalId((query.value(0).toString())); if (action == "ADD") { if (!addedLandmarkIds.contains(landmarkId)) addedLandmarkIds << landmarkId; } else if (action == "CHANGE") { if (!changedLandmarkIds.contains(landmarkId)) changedLandmarkIds << landmarkId; } else if (action == "REMOVE") { if (!removedLandmarkIds.contains(landmarkId)) removedLandmarkIds << landmarkId; } } //now check for added/modified/removed categories if (!query.prepare("SELECT categoryId,action, timestamp FROM category_notification WHERE timestamp >= ?")) { #ifdef QT_LANDMARK_SQLITE_ENGINE_DEBUG qWarning() << "Could not prepare statement: " << query.lastQuery() << " \nReason:" << query.lastError().text(); #endif return; } query.addBindValue(m_latestCategoryTimestamp); if (!query.exec()) { #ifdef QT_LANDMARK_SQLITE_ENGINE_DEBUG qWarning() << "Could not execute statement:" << query.lastQuery() << " \nReason:" << query.lastError().text(); #endif return; } QList<QLandmarkCategoryId> addedCategoryIds; QList<QLandmarkCategoryId> changedCategoryIds; QList<QLandmarkCategoryId> removedCategoryIds; QLandmarkCategoryId categoryId; categoryId.setManagerUri(managerUri()); bool categoryTimestampWasModified = false; while(query.next()) { timestamp = query.value(2).toLongLong(&ok); if (!ok) //this should never happen continue; if (timestamp > m_latestCategoryTimestamp) { categoryTimestampWasModified = true; m_latestCategoryTimestamp = timestamp; } action = query.value(1).toString(); categoryId.setLocalId(query.value(0).toString()); if (action == "ADD") { if (!addedCategoryIds.contains(categoryId)) addedCategoryIds << categoryId; } else if (action == "CHANGE") { if (!changedCategoryIds.contains(categoryId)) changedCategoryIds << categoryId; } else if (action == "REMOVE") { if (!removedCategoryIds.contains(categoryId)) removedCategoryIds << categoryId; } } if(landmarkTimestampWasModified) m_latestLandmarkTimestamp +=1; if (categoryTimestampWasModified) m_latestCategoryTimestamp +=1; int totalChangeCount = addedCategoryIds.count() + changedCategoryIds.count() + removedCategoryIds.count() + addedLandmarkIds.count() + changedLandmarkIds.count() + removedLandmarkIds.count(); if (totalChangeCount > 50 ) { emit dataChanged(); } else { if (addedCategoryIds.count() > 0) emit categoriesAdded(addedCategoryIds); if (changedCategoryIds.count() > 0) emit categoriesChanged(changedCategoryIds); if (removedCategoryIds.count() > 0) { emit categoriesRemoved(removedCategoryIds); } if (addedLandmarkIds.count() > 0) emit landmarksAdded(addedLandmarkIds); if (changedLandmarkIds.count() > 0) emit landmarksChanged(changedLandmarkIds); if (removedLandmarkIds.count() > 0) emit landmarksRemoved(removedLandmarkIds); } }
QTM_USE_NAMESPACE LandmarkBrowser::LandmarkBrowser(QWidget *parent, Qt::WindowFlags flags) :currentLandmarkOffset(0), currentCategoryOffset(0), limit(20), filterDialog(0), landmarkFetch(0), landmarkImport(0), landmarkExport(0), landmarkRemove(0), landmarkSave(0), categoryFetch(0), categoryRemove(0),progress(0), manager(0) { setupUi(this); categoryTable->removeColumn(2); categoryTable->hideColumn(1); categoryTable->setHorizontalHeaderItem(0, new QTableWidgetItem("Name")); manager = new QLandmarkManager(this); if (manager->error() == QLandmarkManager::InvalidManagerError) { QMessageBox::warning(this,"Warning", "Manager is invalid closing application, please view any warnings " "on the the console", QMessageBox::Ok, QMessageBox::NoButton); QTimer::singleShot(0, this,SLOT(close())); return; } landmarkFetch = new QLandmarkFetchRequest(manager, this); QObject::connect(landmarkFetch, SIGNAL(stateChanged(QLandmarkAbstractRequest::State)), this,SLOT(fetchHandler(QLandmarkAbstractRequest::State))); landmarkImport = new QLandmarkImportRequest(manager, this); connect(landmarkImport, SIGNAL(stateChanged(QLandmarkAbstractRequest::State)), this,SLOT(fetchHandler(QLandmarkAbstractRequest::State))); landmarkExport = new QLandmarkExportRequest(manager, this); QObject::connect(landmarkExport, SIGNAL(stateChanged(QLandmarkAbstractRequest::State)), this,SLOT(fetchHandler(QLandmarkAbstractRequest::State))); landmarkRemove = new QLandmarkRemoveRequest(manager, this); landmarkSave = new QLandmarkSaveRequest(manager, this); categoryRemove = new QLandmarkCategoryRemoveRequest(manager, this); categoryFetch = new QLandmarkCategoryFetchRequest(manager, this); QObject::connect(categoryFetch, SIGNAL(stateChanged(QLandmarkAbstractRequest::State)), this,SLOT(fetchHandler(QLandmarkAbstractRequest::State))); table->setSelectionBehavior(QAbstractItemView::SelectRows); categoryTable->setSelectionBehavior(QAbstractItemView::SelectRows); table->setHorizontalHeaderItem(0, new QTableWidgetItem("Lat")); table->setHorizontalHeaderItem(1, new QTableWidgetItem("Long")); table->setHorizontalHeaderItem(2, new QTableWidgetItem("Name")); prevLandmarkButton->setEnabled(false); filterDialog = new LandmarkFilterDialog(landmarkFetch, manager, this); connect(filterDialog,SIGNAL(doFetchAll()), this, SLOT(doFetchAll())); progress = new QProgressDialog (tr("Please wait..."),tr("Cancel"),0,0, this); progress->setWindowTitle(tr("Loading Landmarks")); QObject::connect(progress,SIGNAL(canceled()), this, SLOT(cancel())); landmarkFetch->setLimit(limit); landmarkFetch->setOffset(currentLandmarkOffset); landmarkFetch->setSorting(QLandmarkNameSort()); if (!landmarkFetch->start() && landmarkFetch->error() == QLandmarkManager::InvalidManagerError) { QMessageBox::warning(this,"Warning", "Manager is invalid closing application", QMessageBox::Ok, QMessageBox::NoButton); QTimer::singleShot(0, this,SLOT(close())); return; } categoryFetch->setLimit(limit); categoryFetch->setOffset(currentCategoryOffset); categoryFetch->start(); progress->show(); #ifdef Q_OS_SYMBIAN gpxRadioButton->setEnabled(false); gpxRadioButton->setVisible(false); #endif connect(manager, SIGNAL(landmarksAdded(QList<QLandmarkId>)),this,SLOT(landmarksAdded(QList<QLandmarkId>))); connect(manager,SIGNAL(landmarksChanged(QList<QLandmarkId>)), this, SLOT(landmarksChanged())); connect(manager, SIGNAL(landmarksRemoved(QList<QLandmarkId>)),this,SLOT(landmarksRemoved())); connect(manager, SIGNAL(categoriesAdded(QList<QLandmarkCategoryId>)), this, SLOT(categoriesAdded())); connect(manager, SIGNAL(categoriesChanged(QList<QLandmarkCategoryId>)), this,SLOT(categoriesChanged())); connect(manager, SIGNAL(categoriesRemoved(QList<QLandmarkCategoryId>)), this,SLOT(categoriesRemoved())); connect(manager, SIGNAL(dataChanged()),this, SLOT(dataChanged())); }