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

View File

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