mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-04 00:04:03 -04:00
Add country codes config to Nominatim Geocoder Locator filter
This commit is contained in:
parent
d1e91d5482
commit
f7461942ab
@ -17,14 +17,19 @@
|
||||
|
||||
#include "qgsnominatimlocatorfilter.h"
|
||||
#include "moc_qgsnominatimlocatorfilter.cpp"
|
||||
#include "qgsgeocoder.h"
|
||||
#include "qgslocatorfilter.h"
|
||||
#include "qgsnominatimgeocoder.h"
|
||||
#include "qgssettings.h"
|
||||
#include "qgsmessagebaritem.h"
|
||||
#include "qgsmessagebar.h"
|
||||
#include "qgisapp.h"
|
||||
#include "qgssettingsentryimpl.h"
|
||||
|
||||
#include <QDesktopServices>
|
||||
#include <QPushButton>
|
||||
|
||||
const QgsSettingsEntryString *QgsNominatimLocatorFilter::settingCountryCodes = new QgsSettingsEntryString( QStringLiteral( "country-codes" ), sTreeAppLocatorFilters, QString(), QStringLiteral( "Country codes" ) );
|
||||
|
||||
QgsNominatimLocatorFilter::QgsNominatimLocatorFilter( QgsGeocoderInterface *geocoder, QgsMapCanvas *canvas )
|
||||
: QgsGeocoderLocatorFilter( QStringLiteral( "nominatimgeocoder" ), tr( "Nominatim Geocoder" ), QStringLiteral( ">" ), geocoder, canvas )
|
||||
@ -40,6 +45,16 @@ QgsNominatimLocatorFilter *QgsNominatimLocatorFilter::clone() const
|
||||
return filter.release();
|
||||
}
|
||||
|
||||
void QgsNominatimLocatorFilter::fetchResults( const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback )
|
||||
{
|
||||
QString countryCodes = settingCountryCodes->value( this->name() );
|
||||
|
||||
QgsNominatimGeocoder *nominatimGeocoder = dynamic_cast<QgsNominatimGeocoder *>( geocoder() );
|
||||
nominatimGeocoder->setCountryCodes( countryCodes );
|
||||
|
||||
QgsAbstractGeocoderLocatorFilter::fetchResults( string, context, feedback );
|
||||
}
|
||||
|
||||
void QgsNominatimLocatorFilter::triggerResult( const QgsLocatorResult &result )
|
||||
{
|
||||
QgsSettings settings;
|
||||
@ -57,3 +72,32 @@ void QgsNominatimLocatorFilter::triggerResult( const QgsLocatorResult &result )
|
||||
}
|
||||
QgsGeocoderLocatorFilter::triggerResult( result );
|
||||
}
|
||||
|
||||
void QgsNominatimLocatorFilter::openConfigWidget( QWidget *parent )
|
||||
{
|
||||
auto dlg = std::make_unique<QDialog>( parent );
|
||||
dlg->setWindowTitle( "Nominatim Geocoder Country Codes" );
|
||||
|
||||
QGridLayout *layout = new QGridLayout;
|
||||
layout->setSizeConstraint( QLayout::SetFixedSize );
|
||||
QLabel *label = new QLabel( tr( "Two letter Country Codes (comma-separated)" ) );
|
||||
QLineEdit *countryCodesEdit = new QLineEdit( dlg.get() );
|
||||
|
||||
// Load existing settings
|
||||
countryCodesEdit->setText( settingCountryCodes->value( this->name() ) );
|
||||
|
||||
layout->addWidget( label );
|
||||
layout->addWidget( countryCodesEdit );
|
||||
QDialogButtonBox *buttonbBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, dlg.get() );
|
||||
layout->addWidget( buttonbBox );
|
||||
dlg->setLayout( layout );
|
||||
|
||||
// Save settings when dialog accepted
|
||||
connect( buttonbBox, &QDialogButtonBox::accepted, dlg.get(), [&]() {
|
||||
settingCountryCodes->setValue( countryCodesEdit->text().trimmed(), this->name() );
|
||||
dlg->accept();
|
||||
} );
|
||||
|
||||
connect( buttonbBox, &QDialogButtonBox::rejected, dlg.get(), &QDialog::reject );
|
||||
dlg->exec();
|
||||
}
|
||||
|
@ -27,10 +27,15 @@ class APP_EXPORT QgsNominatimLocatorFilter : public QgsGeocoderLocatorFilter
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static const QgsSettingsEntryString *settingCountryCodes;
|
||||
|
||||
QgsNominatimLocatorFilter( QgsGeocoderInterface *geocoder, QgsMapCanvas *canvas );
|
||||
QgsNominatimLocatorFilter *clone() const override SIP_FACTORY;
|
||||
|
||||
void fetchResults( const QString &string, const QgsLocatorContext &context, QgsFeedback *feedback ) override;
|
||||
void triggerResult( const QgsLocatorResult &result ) override;
|
||||
bool hasConfigWidget() const override { return true; }
|
||||
void openConfigWidget( QWidget *parent ) override;
|
||||
};
|
||||
|
||||
#endif // QGSNOMINATIMLOCATORFILTERS_H
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "qgis_core.h"
|
||||
#include "qgslocatorcontext.h"
|
||||
#include "qgslogger.h"
|
||||
#include "qgssettingstree.h"
|
||||
|
||||
class QgsFeedback;
|
||||
class QgsLocatorFilter;
|
||||
@ -178,6 +179,9 @@ class CORE_EXPORT QgsLocatorFilter : public QObject
|
||||
|
||||
public:
|
||||
|
||||
#ifndef SIP_RUN
|
||||
static inline QgsSettingsTreeNamedListNode *sTreeAppLocatorFilters = QgsSettingsTree::sTreeApp->createNamedListNode( QStringLiteral( "locator-filters" ) );
|
||||
#endif
|
||||
//! Filter priority. Controls the order of results in the locator.
|
||||
enum Priority
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user