[FEATURE][needs-docs] Update vector layer selection from relation

editor widget
This commit is contained in:
Julien Cabieces 2019-09-05 18:10:11 +02:00
parent d7059d0dfd
commit 485db34e56
2 changed files with 16 additions and 9 deletions

View File

@ -30,6 +30,7 @@
#include "qgslogger.h" #include "qgslogger.h"
#include "qgsvectorlayerutils.h" #include "qgsvectorlayerutils.h"
#include "qgsmapcanvas.h" #include "qgsmapcanvas.h"
#include "qgsvectorlayerselectionmanager.h"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
@ -135,8 +136,6 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent )
mDualView = new QgsDualView( this ); mDualView = new QgsDualView( this );
mDualView->setView( mViewMode ); mDualView->setView( mViewMode );
mFeatureSelectionMgr = new QgsGenericFeatureSelectionManager( mDualView );
mDualView->setFeatureSelectionManager( mFeatureSelectionMgr );
mRelationLayout->addWidget( mDualView ); mRelationLayout->addWidget( mDualView );
@ -151,7 +150,6 @@ QgsRelationEditorWidget::QgsRelationEditorWidget( QWidget *parent )
connect( mLinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::linkFeature ); connect( mLinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::linkFeature );
connect( mUnlinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::unlinkSelectedFeatures ); connect( mUnlinkFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::unlinkSelectedFeatures );
connect( mZoomToFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::zoomToSelectedFeatures ); connect( mZoomToFeatureButton, &QAbstractButton::clicked, this, &QgsRelationEditorWidget::zoomToSelectedFeatures );
connect( mFeatureSelectionMgr, &QgsIFeatureSelectionManager::selectionChanged, this, &QgsRelationEditorWidget::updateButtons );
connect( mDualView, &QgsDualView::showContextMenuExternally, this, &QgsRelationEditorWidget::showContextMenu ); connect( mDualView, &QgsDualView::showContextMenuExternally, this, &QgsRelationEditorWidget::showContextMenu );
@ -198,10 +196,18 @@ void QgsRelationEditorWidget::setRelationFeature( const QgsRelation &relation, c
if ( mVisible ) if ( mVisible )
{ {
QgsFeatureRequest myRequest = mRelation.getRelatedFeaturesRequest( mFeature ); QgsFeatureRequest myRequest = mRelation.getRelatedFeaturesRequest( mFeature );
mDualView->init( mRelation.referencingLayer(), nullptr, myRequest, mEditorContext ); initDualView( mRelation.referencingLayer(), myRequest );
} }
} }
void QgsRelationEditorWidget::initDualView( QgsVectorLayer *layer, const QgsFeatureRequest &request )
{
mDualView->init( layer, nullptr, request, mEditorContext );
mFeatureSelectionMgr = new QgsVectorLayerSelectionManager( layer, mDualView );
mDualView->setFeatureSelectionManager( mFeatureSelectionMgr );
connect( mFeatureSelectionMgr, &QgsIFeatureSelectionManager::selectionChanged, this, &QgsRelationEditorWidget::updateButtons );
}
void QgsRelationEditorWidget::setRelations( const QgsRelation &relation, const QgsRelation &nmrelation ) void QgsRelationEditorWidget::setRelations( const QgsRelation &relation, const QgsRelation &nmrelation )
{ {
if ( mRelation.isValid() ) if ( mRelation.isValid() )
@ -295,7 +301,7 @@ void QgsRelationEditorWidget::updateButtons()
{ {
bool editable = false; bool editable = false;
bool linkable = false; bool linkable = false;
bool selectionNotEmpty = mFeatureSelectionMgr->selectedFeatureCount(); bool selectionNotEmpty = mFeatureSelectionMgr ? mFeatureSelectionMgr->selectedFeatureCount() : false;
if ( mRelation.isValid() ) if ( mRelation.isValid() )
{ {
@ -730,11 +736,11 @@ void QgsRelationEditorWidget::updateUi()
nmRequest.setFilterExpression( filters.join( QStringLiteral( " OR " ) ) ); nmRequest.setFilterExpression( filters.join( QStringLiteral( " OR " ) ) );
mDualView->init( mNmRelation.referencedLayer(), nullptr, nmRequest, mEditorContext ); initDualView( mNmRelation.referencedLayer(), nmRequest );
} }
else else
{ {
mDualView->init( mRelation.referencingLayer(), nullptr, myRequest, mEditorContext ); initDualView( mRelation.referencingLayer(), myRequest );
} }
} }
} }

View File

@ -28,7 +28,7 @@
#include "qgis_gui.h" #include "qgis_gui.h"
class QgsFeature; class QgsFeature;
class QgsGenericFeatureSelectionManager; class QgsVectorLayerSelectionManager;
class QgsVectorLayer; class QgsVectorLayer;
class QgsVectorLayerTools; class QgsVectorLayerTools;
@ -160,10 +160,11 @@ class GUI_EXPORT QgsRelationEditorWidget : public QgsCollapsibleGroupBox
private: private:
void updateUi(); void updateUi();
void initDualView( QgsVectorLayer *layer, const QgsFeatureRequest &request );
QgsDualView *mDualView = nullptr; QgsDualView *mDualView = nullptr;
QgsDualView::ViewMode mViewMode = QgsDualView::AttributeEditor; QgsDualView::ViewMode mViewMode = QgsDualView::AttributeEditor;
QgsGenericFeatureSelectionManager *mFeatureSelectionMgr = nullptr; QgsVectorLayerSelectionManager *mFeatureSelectionMgr = nullptr;
QgsAttributeEditorContext mEditorContext; QgsAttributeEditorContext mEditorContext;
QgsRelation mRelation; QgsRelation mRelation;
QgsRelation mNmRelation; QgsRelation mNmRelation;