Skip to content

Commit

Permalink
save current extent and CRS in locator core
Browse files Browse the repository at this point in the history
remove remaining bits of interface
  • Loading branch information
3nids committed Nov 6, 2018
1 parent 8e34e37 commit f652e8d
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 22 deletions.
15 changes: 10 additions & 5 deletions python/core/auto_generated/locator/qgslocatorwidgetcore.sip.in
Expand Up @@ -28,11 +28,6 @@ to be used in a locator widget.
explicit QgsLocatorWidgetCore( QObject *parent = 0 ); explicit QgsLocatorWidgetCore( QObject *parent = 0 );
%Docstring %Docstring
Constructor of QgsLocatorWidgetCore Constructor of QgsLocatorWidgetCore
%End

void setMapCanvasInterface( QgsMapCanvasInterface *canvasInterface );
%Docstring
Set the map canvas interface
%End %End


void performSearch( const QString &text ); void performSearch( const QString &text );
Expand Down Expand Up @@ -80,6 +75,16 @@ Emitted when the results are cleared
void invalidateResults(); void invalidateResults();
%Docstring %Docstring
This will invalidate current search results This will invalidate current search results
%End

void updateCanvasExtent( const QgsRectangle &extent );
%Docstring
Update the canvas extent used to create search context
%End

void updateCanvasCrs( const QgsCoordinateReferenceSystem &crs );
%Docstring
Update the canvas CRS used to create search context
%End %End


}; };
Expand Down
23 changes: 12 additions & 11 deletions src/core/locator/qgslocatorwidgetcore.cpp
Expand Up @@ -18,7 +18,6 @@
#include "qgslocatorwidgetcore.h" #include "qgslocatorwidgetcore.h"
#include "qgslocator.h" #include "qgslocator.h"
#include "qgslocatormodel.h" #include "qgslocatormodel.h"
#include "qgsmapcanvasinterface.h"
#include "qgsmapsettings.h" #include "qgsmapsettings.h"


QgsLocatorWidgetCore::QgsLocatorWidgetCore( QObject *parent ) QgsLocatorWidgetCore::QgsLocatorWidgetCore( QObject *parent )
Expand All @@ -33,11 +32,6 @@ QgsLocatorWidgetCore::QgsLocatorWidgetCore( QObject *parent )
connect( mLocator, &QgsLocator::finished, this, &QgsLocatorWidgetCore::searchFinished ); connect( mLocator, &QgsLocator::finished, this, &QgsLocatorWidgetCore::searchFinished );
} }


void QgsLocatorWidgetCore::setMapCanvasInterface( QgsMapCanvasInterface *canvasInterface )
{
mCanvasInterface = canvasInterface;
}

bool QgsLocatorWidgetCore::isRunning() const bool QgsLocatorWidgetCore::isRunning() const
{ {
return mIsRunning; return mIsRunning;
Expand All @@ -58,6 +52,16 @@ void QgsLocatorWidgetCore::invalidateResults()
mLocatorModel->clear(); mLocatorModel->clear();
} }


void QgsLocatorWidgetCore::updateCanvasExtent( const QgsRectangle &extent )
{
mCanvasExtent = extent;
}

void QgsLocatorWidgetCore::updateCanvasCrs( const QgsCoordinateReferenceSystem &crs )
{
mCanvasCrs = crs;
}

void QgsLocatorWidgetCore::addResult( const QgsLocatorResult &result ) void QgsLocatorWidgetCore::addResult( const QgsLocatorResult &result )
{ {
mLocatorModel->addResult( result ); mLocatorModel->addResult( result );
Expand Down Expand Up @@ -121,10 +125,7 @@ bool QgsLocatorWidgetCore::hasQueueRequested() const
QgsLocatorContext QgsLocatorWidgetCore::createContext() QgsLocatorContext QgsLocatorWidgetCore::createContext()
{ {
QgsLocatorContext context; QgsLocatorContext context;
if ( mCanvasInterface ) context.targetExtent = mCanvasExtent;
{ context.targetExtentCrs = mCanvasCrs;
context.targetExtent = mCanvasInterface->mapSettings().visibleExtent();
context.targetExtentCrs = mCanvasInterface->mapSettings().destinationCrs();
}
return context; return context;
} }
20 changes: 15 additions & 5 deletions src/core/locator/qgslocatorwidgetcore.h
Expand Up @@ -21,13 +21,14 @@
#include <QObject> #include <QObject>


#include "qgis_core.h" #include "qgis_core.h"
#include "qgscoordinatereferencesystem.h"
#include "qgsrectangle.h"


class QgsLocatorResult; class QgsLocatorResult;
class QgsLocator; class QgsLocator;
class QgsLocatorContext; class QgsLocatorContext;
class QgsLocatorModel; class QgsLocatorModel;
class QgsLocatorProxyModel; class QgsLocatorProxyModel;
class QgsMapCanvasInterface;




/** /**
Expand All @@ -44,9 +45,6 @@ class CORE_EXPORT QgsLocatorWidgetCore : public QObject
//! Constructor of QgsLocatorWidgetCore //! Constructor of QgsLocatorWidgetCore
explicit QgsLocatorWidgetCore( QObject *parent = nullptr ); explicit QgsLocatorWidgetCore( QObject *parent = nullptr );


//! Set the map canvas interface
void setMapCanvasInterface( QgsMapCanvasInterface *canvasInterface );

//! Perform a search //! Perform a search
Q_INVOKABLE void performSearch( const QString &text ); Q_INVOKABLE void performSearch( const QString &text );


Expand Down Expand Up @@ -76,6 +74,12 @@ class CORE_EXPORT QgsLocatorWidgetCore : public QObject
//! This will invalidate current search results //! This will invalidate current search results
void invalidateResults(); void invalidateResults();


//! Update the canvas extent used to create search context
void updateCanvasExtent( const QgsRectangle &extent );

//! Update the canvas CRS used to create search context
void updateCanvasCrs( const QgsCoordinateReferenceSystem &crs );

private slots: private slots:
void searchFinished(); void searchFinished();
void addResult( const QgsLocatorResult &result ); void addResult( const QgsLocatorResult &result );
Expand All @@ -87,11 +91,17 @@ class CORE_EXPORT QgsLocatorWidgetCore : public QObject
QgsLocator *mLocator = nullptr; QgsLocator *mLocator = nullptr;
QgsLocatorModel *mLocatorModel = nullptr; QgsLocatorModel *mLocatorModel = nullptr;
QgsLocatorProxyModel *mProxyModel = nullptr; QgsLocatorProxyModel *mProxyModel = nullptr;
QgsMapCanvasInterface *mCanvasInterface = nullptr;


QString mNextRequestedString; QString mNextRequestedString;
bool mHasQueuedRequest = false; bool mHasQueuedRequest = false;
bool mIsRunning = false; bool mIsRunning = false;

// keep track of map canvas extent and CRS
// if much if needed, it would be possible to add
// a QgsMapCanvasController in core to achieve this
// see discussion in https://github.com/qgis/QGIS/pull/8404
QgsRectangle mCanvasExtent;
QgsCoordinateReferenceSystem mCanvasCrs;
}; };


#endif // QGSLOCATORWIDGETCORE_H #endif // QGSLOCATORWIDGETCORE_H
17 changes: 16 additions & 1 deletion src/gui/locator/qgslocatorwidget.cpp
Expand Up @@ -116,7 +116,22 @@ QgsLocator *QgsLocatorWidget::locator()


void QgsLocatorWidget::setMapCanvas( QgsMapCanvas *canvas ) void QgsLocatorWidget::setMapCanvas( QgsMapCanvas *canvas )
{ {
mWidgetCore->setMapCanvasInterface( canvas ); if ( mMapCanvas == canvas )
return;

for ( const QMetaObject::Connection &conn : qgis::as_const( mCanvasConnections ) )
{
disconnect( conn );
}
mCanvasConnections.clear();

mMapCanvas = canvas;
if ( mMapCanvas )
{
mCanvasConnections
<< connect( mMapCanvas, &QgsMapCanvas::extentsChanged, this, [ = ]() {mWidgetCore->updateCanvasExtent( mMapCanvas->extent() );} )
<< connect( mMapCanvas, &QgsMapCanvas::destinationCrsChanged, this, [ = ]() {mWidgetCore->updateCanvasCrs( mMapCanvas->mapSettings().destinationCrs() );} ) ;
}
} }


void QgsLocatorWidget::search( const QString &string ) void QgsLocatorWidget::search( const QString &string )
Expand Down
1 change: 1 addition & 0 deletions src/gui/locator/qgslocatorwidget.h
Expand Up @@ -101,6 +101,7 @@ class GUI_EXPORT QgsLocatorWidget : public QWidget
QgsFloatingWidget *mResultsContainer = nullptr; QgsFloatingWidget *mResultsContainer = nullptr;
QgsLocatorResultsView *mResultsView = nullptr; QgsLocatorResultsView *mResultsView = nullptr;
QgsMapCanvas *mMapCanvas = nullptr; QgsMapCanvas *mMapCanvas = nullptr;
QList<QMetaObject::Connection> mCanvasConnections;
QMenu *mMenu = nullptr; QMenu *mMenu = nullptr;


QTimer mFocusTimer; QTimer mFocusTimer;
Expand Down

0 comments on commit f652e8d

Please sign in to comment.