1 /***************************************************************************
2                         qgsnominatimlocatorfilters.cpp
3                         ----------------------------
4    begin                : May 2017
5    copyright            : (C) 2017 by Nyall Dawson
6    email                : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18 #include "qgsnominatimlocatorfilter.h"
19 #include "qgssettings.h"
20 #include "qgsmessagebaritem.h"
21 #include "qgsmessagebar.h"
22 #include "qgisapp.h"
23 
24 #include <QDesktopServices>
25 #include <QPushButton>
26 
27 
QgsNominatimLocatorFilter(QgsGeocoderInterface * geocoder,QgsMapCanvas * canvas)28 QgsNominatimLocatorFilter::QgsNominatimLocatorFilter( QgsGeocoderInterface *geocoder, QgsMapCanvas *canvas )
29   : QgsGeocoderLocatorFilter( QStringLiteral( "nominatimgeocoder" ), tr( "Nominatim Geocoder" ), QStringLiteral( ">" ), geocoder, canvas )
30 {
31   setFetchResultsDelay( 1000 );
32   setUseWithoutPrefix( false );
33 }
34 
triggerResult(const QgsLocatorResult & result)35 void QgsNominatimLocatorFilter::triggerResult( const QgsLocatorResult &result )
36 {
37 
38   QgsSettings settings;
39   if ( !settings.value( "locator_filters/nominatim_geocoder/attribution_shown", false, QgsSettings::App ).toBool() )
40   {
41     settings.setValue( "locator_filters/nominatim_geocoder/attribution_shown", true, QgsSettings::App );
42 
43     QgsMessageBarItem *messageWidget = QgisApp::instance()->messageBar()->createMessage( tr( "The Nominatim geocoder data is made available by OpenStreetMap Foundation and contributors." ) );
44     QPushButton *learnMoreButton = new QPushButton( tr( "Learn more" ) );
45     connect( learnMoreButton, &QPushButton::clicked, learnMoreButton, [ = ]
46     {
47       QDesktopServices::openUrl( QStringLiteral( "https://nominatim.org/" ) );
48     } );
49     messageWidget->layout()->addWidget( learnMoreButton );
50     QgisApp::instance()->messageBar()->pushWidget( messageWidget, Qgis::MessageLevel::Info );
51   }
52   QgsGeocoderLocatorFilter::triggerResult( result );
53 }
54