Move QObject declaration to header

This commit is contained in:
Nyall Dawson 2019-11-08 10:15:25 +10:00
parent 986aa713ef
commit 9a2e015158
3 changed files with 71 additions and 56 deletions

View File

@ -17,6 +17,9 @@
#include <qgsrelationeditorwidget.h>
%End
class QgsRelationEditorWidget : QgsCollapsibleGroupBox
{

View File

@ -30,74 +30,55 @@
#include "qgslogger.h"
#include "qgsvectorlayerutils.h"
#include "qgsmapcanvas.h"
#include "qgsvectorlayerselectionmanager.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QMessageBox>
/// @cond PRIVATE
/**
* This class is used to filter the current vector layer selection to features matching the given request.
* Relation editor widget use it in order to get selected feature for the current relation.
*/
class QgsFilteredSelectionManager : public QgsVectorLayerSelectionManager
///
QgsFilteredSelectionManager::QgsFilteredSelectionManager( QgsVectorLayer *layer, const QgsFeatureRequest &request, QObject *parent )
: QgsVectorLayerSelectionManager( layer, parent )
, mRequest( request )
{
Q_OBJECT
for ( auto fid : layer->selectedFeatureIds() )
if ( mRequest.acceptFeature( layer->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
public:
QgsFilteredSelectionManager( QgsVectorLayer *layer, const QgsFeatureRequest &request, QObject *parent = nullptr )
: QgsVectorLayerSelectionManager( layer, parent )
, mRequest( request )
{
for ( auto fid : layer->selectedFeatureIds() )
if ( mRequest.acceptFeature( layer->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
connect( layer, &QgsVectorLayer::selectionChanged, this, &QgsFilteredSelectionManager::onSelectionChanged );
}
connect( layer, &QgsVectorLayer::selectionChanged, this, &QgsFilteredSelectionManager::onSelectionChanged );
}
const QgsFeatureIds &QgsFilteredSelectionManager::selectedFeatureIds() const
{
return mSelectedFeatureIds;
}
const QgsFeatureIds &selectedFeatureIds() const override
{
return mSelectedFeatureIds;
}
int QgsFilteredSelectionManager::selectedFeatureCount()
{
return mSelectedFeatureIds.count();
}
void QgsFilteredSelectionManager::onSelectionChanged( const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect )
{
QgsFeatureIds lselected = selected;
if ( clearAndSelect )
{
mSelectedFeatureIds.clear();
}
else
{
for ( auto fid : deselected )
mSelectedFeatureIds.remove( fid );
}
int selectedFeatureCount() override
{
return mSelectedFeatureIds.count();
}
for ( auto fid : selected )
if ( mRequest.acceptFeature( layer()->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
else
lselected.remove( fid );
private slots:
void onSelectionChanged( const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect ) override
{
QgsFeatureIds lselected = selected;
if ( clearAndSelect )
{
mSelectedFeatureIds.clear();
}
else
{
for ( auto fid : deselected )
mSelectedFeatureIds.remove( fid );
}
for ( auto fid : selected )
if ( mRequest.acceptFeature( layer()->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
else
lselected.remove( fid );
emit selectionChanged( lselected, deselected, clearAndSelect );
}
private:
QgsFeatureRequest mRequest;
QgsFeatureIds mSelectedFeatureIds;
};
emit selectionChanged( lselected, deselected, clearAndSelect );
}
/// @endcond

View File

@ -25,10 +25,10 @@
#include "qgscollapsiblegroupbox.h"
#include "qgsdualview.h"
#include "qgsrelation.h"
#include "qgsvectorlayerselectionmanager.h"
#include "qgis_gui.h"
class QgsFeature;
class QgsVectorLayerSelectionManager;
class QgsVectorLayer;
class QgsVectorLayerTools;
@ -41,6 +41,37 @@ class QgsVectorLayerTools;
% End
#endif
/// @cond PRIVATE
#ifndef SIP_RUN
/**
* This class is used to filter the current vector layer selection to features matching the given request.
* Relation editor widget use it in order to get selected feature for the current relation.
*/
class QgsFilteredSelectionManager : public QgsVectorLayerSelectionManager
{
Q_OBJECT
public:
QgsFilteredSelectionManager( QgsVectorLayer *layer, const QgsFeatureRequest &request, QObject *parent = nullptr );
const QgsFeatureIds &selectedFeatureIds() const override;
int selectedFeatureCount() override;
private slots:
void onSelectionChanged( const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect ) override;
private:
QgsFeatureRequest mRequest;
QgsFeatureIds mSelectedFeatureIds;
};
#endif
/// @endcond
/**
* \ingroup gui
* \class QgsRelationEditorWidget