Skip to content

Commit

Permalink
Move QObject declaration to header
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Nov 20, 2019
1 parent 986aa71 commit 9a2e015
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 56 deletions.
3 changes: 3 additions & 0 deletions python/gui/auto_generated/qgsrelationeditorwidget.sip.in
Expand Up @@ -17,6 +17,9 @@
#include <qgsrelationeditorwidget.h>
%End




class QgsRelationEditorWidget : QgsCollapsibleGroupBox
{

Expand Down
91 changes: 36 additions & 55 deletions src/gui/qgsrelationeditorwidget.cpp
Expand Up @@ -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

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 );
}

const QgsFeatureIds &selectedFeatureIds() const override
{
return mSelectedFeatureIds;
}
for ( auto fid : layer->selectedFeatureIds() )
if ( mRequest.acceptFeature( layer->getFeature( fid ) ) )
mSelectedFeatureIds << fid;

connect( layer, &QgsVectorLayer::selectionChanged, this, &QgsFilteredSelectionManager::onSelectionChanged );
}

int selectedFeatureCount() override
{
return mSelectedFeatureIds.count();
}

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 );
}
const QgsFeatureIds &QgsFilteredSelectionManager::selectedFeatureIds() const
{
return mSelectedFeatureIds;
}

for ( auto fid : selected )
if ( mRequest.acceptFeature( layer()->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
else
lselected.remove( fid );
int QgsFilteredSelectionManager::selectedFeatureCount()
{
return mSelectedFeatureIds.count();
}

emit selectionChanged( lselected, deselected, clearAndSelect );
}
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 );
}

private:
for ( auto fid : selected )
if ( mRequest.acceptFeature( layer()->getFeature( fid ) ) )
mSelectedFeatureIds << fid;
else
lselected.remove( fid );

QgsFeatureRequest mRequest;
QgsFeatureIds mSelectedFeatureIds;
};
emit selectionChanged( lselected, deselected, clearAndSelect );
}

/// @endcond

Expand Down
33 changes: 32 additions & 1 deletion src/gui/qgsrelationeditorwidget.h
Expand Up @@ -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;

Expand All @@ -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
Expand Down

0 comments on commit 9a2e015

Please sign in to comment.