void SearchRunnerManager::findPlacemarks( const QString &searchTerm, const GeoDataLatLonBox &preferred ) { if ( searchTerm == d->m_lastSearchTerm && preferred == d->m_lastPreferredBox ) { emit searchResultChanged( &d->m_model ); emit searchResultChanged( d->m_placemarkContainer ); emit searchFinished( searchTerm ); emit placemarkSearchFinished(); return; } d->m_lastSearchTerm = searchTerm; d->m_lastPreferredBox = preferred; d->m_searchTasks.clear(); d->m_modelMutex.lock(); d->m_model.removePlacemarks( "PlacemarkRunnerManager", 0, d->m_placemarkContainer.size() ); qDeleteAll( d->m_placemarkContainer ); d->m_placemarkContainer.clear(); d->m_modelMutex.unlock(); emit searchResultChanged( &d->m_model ); if ( searchTerm.trimmed().isEmpty() ) { emit searchFinished( searchTerm ); emit placemarkSearchFinished(); return; } QList<const SearchRunnerPlugin *> plugins = d->plugins( d->m_pluginManager->searchRunnerPlugins() ); foreach( const SearchRunnerPlugin *plugin, plugins ) { SearchTask *task = new SearchTask( plugin->newRunner(), this, d->m_marbleModel, searchTerm, preferred ); connect( task, SIGNAL(finished(SearchTask*)), this, SLOT(cleanupSearchTask(SearchTask*)) ); d->m_searchTasks << task; mDebug() << "search task " << plugin->nameId() << " " << (quintptr)task; }
void SearchWidget::setMarbleWidget( MarbleWidget* widget ) { if ( d->m_widget ) { return; } d->m_widget = widget; d->m_searchField->setCompletionModel( widget->model()->placemarkModel() ); connect( d->m_searchField, SIGNAL(centerOn(GeoDataCoordinates)), widget, SLOT(centerOn(GeoDataCoordinates)) ); d->m_runnerManager = new MarbleRunnerManager( widget->model()->pluginManager(), this ); d->m_runnerManager->setModel( widget->model() ); connect( d->m_runnerManager, SIGNAL(searchResultChanged(QVector<GeoDataPlacemark*>)), this, SLOT(setSearchResult(QVector<GeoDataPlacemark*>)) ); connect( d->m_runnerManager, SIGNAL(searchFinished(QString)), d->m_searchField, SLOT(disableSearchAnimation())); GeoDataTreeModel* treeModel = d->m_widget->model()->treeModel(); treeModel->addDocument( d->m_document ); d->m_branchfilter.setSourceModel( treeModel ); d->m_branchfilter.setBranchIndex( treeModel, treeModel->index( d->m_document ) ); d->m_searchResultView->setRootIndex( d->m_sortproxy.mapFromSource( d->m_branchfilter.mapFromSource( treeModel->index( d->m_document ) ) ) ); }