bool LandmarkFilterDialog::setupFetchRequest() { if (filterAllCheckBox->checkState() == Qt::Checked) { fetchRequest->setFilter(QLandmarkFilter()); fetchRequest->setSorting(QLandmarkNameSort()); } else { QLandmarkIntersectionFilter filter; QLandmarkSortOrder sortOrder = QLandmarkNameSort(); if (filterNameCheckBox->checkState() == Qt::Checked) { QLandmarkNameFilter nameFilter; nameFilter.setName(nameLineEdit->text()); if (startsWithRadioButton->isChecked()) nameFilter.setMatchFlags(QLandmarkFilter::MatchStartsWith); else nameFilter.setMatchFlags(QLandmarkFilter::MatchContains); filter.append(nameFilter); } if (filterCategoryCheckBox->checkState() == Qt::Checked) { QLandmarkCategoryFilter categoryFilter; if (categoryComboBox->count() > 0) { oldCategoryId = categoryComboBox->itemData(categoryComboBox->currentIndex()) .value<QLandmarkCategoryId>(); categoryFilter.setCategoryId(oldCategoryId); } filter.append(categoryFilter); } if (filterBoxCheckBox->checkState() == Qt::Checked) { if (!isValidLatitude(boxTopLeftLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Top left latitude is invalid. Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(boxTopLeftLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Top left longitude is invalid. Must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLatitude(boxBottomRightLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Bottom right latitude is invalid. (Must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(boxBottomRightLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Bottom right longitude is invalid. (Must be between -180 and 180 (inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } QGeoCoordinate topLeft; topLeft.setLatitude(boxTopLeftLatitudeLineEdit->text().toDouble()); topLeft.setLongitude(boxTopLeftLongitudeLineEdit->text().toDouble()); QGeoCoordinate bottomRight; bottomRight.setLatitude(boxBottomRightLatitudeLineEdit->text().toDouble()); bottomRight.setLongitude(boxBottomRightLongitudeLineEdit->text().toDouble()); QGeoBoundingBox box; box.setTopLeft(topLeft); box.setBottomRight(bottomRight); QLandmarkBoxFilter boxFilter; boxFilter.setBoundingBox(box); filter.append(boxFilter); } if (filterProximityCheckBox->checkState() == Qt::Checked) { if (!isValidLatitude(proximityLatitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Proximity latitude is invalid. It must be between -90 and 90 (not inclusive)", QMessageBox::Ok, QMessageBox::NoButton); return false; } else if (!isValidLongitude(proximityLongitudeLineEdit->text())) { QMessageBox::warning(this,"Warning", "Proximity longitude is invalid. It must be between -180 and 180 (inclusive) ", QMessageBox::Ok, QMessageBox::NoButton); return false; } bool ok; qreal radius = radiusLineEdit->text().toDouble(&ok); if (!ok) { QMessageBox::warning(this,"Warning", "Proximity radius is invalid. It must be a number", QMessageBox::Ok, QMessageBox::NoButton); return false; } QLandmarkProximityFilter proximityFilter; QGeoCoordinate center; center.setLatitude(proximityLatitudeLineEdit->text().toDouble()); center.setLongitude(proximityLongitudeLineEdit->text().toDouble()); proximityFilter.setCenter(center); proximityFilter.setRadius(radiusLineEdit->text().toDouble()); filter.append(proximityFilter); sortOrder = QLandmarkSortOrder(); } fetchRequest->setFilter(filter); fetchRequest->setSorting(sortOrder); } return true; }
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())); }