Skip to content

Commit db20ac2

Browse files
Marco Hugentoblermhugent
authored andcommittedJun 10, 2011
Don't list join fields to facilitate 'save as' function (fixes #3857). Don't display the query builder if a layer has joins (#3858)
1 parent dac39eb commit db20ac2

File tree

4 files changed

+21
-4
lines changed

4 files changed

+21
-4
lines changed
 

‎src/app/qgsvectorlayerproperties.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,8 @@ void QgsVectorLayerProperties::toggleEditing()
296296
{
297297
emit toggleEditing( layer );
298298

299-
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() && !layer->isEditable() );
299+
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
300+
!layer->isEditable() && layer->vectorJoins().size() < 1 );
300301
if ( layer->isEditable() )
301302
{
302303
pbnQueryBuilder->setToolTip( tr( "Stop editing mode to enable this." ) );
@@ -474,7 +475,8 @@ void QgsVectorLayerProperties::reset( void )
474475
// on the builder. If the ability to enter a query directly into the box is required,
475476
// a mechanism to check it must be implemented.
476477
txtSubsetSQL->setEnabled( false );
477-
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() && !layer->isEditable() );
478+
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
479+
!layer->isEditable() && layer->vectorJoins().size() < 1 );
478480
if ( layer->isEditable() )
479481
{
480482
pbnQueryBuilder->setToolTip( tr( "Stop editing mode to enable this." ) );
@@ -1079,6 +1081,8 @@ void QgsVectorLayerProperties::on_mButtonAddJoin_clicked()
10791081
layer->addJoin( info );
10801082
loadRows(); //update attribute tab
10811083
addJoinToTreeWidget( info );
1084+
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
1085+
!layer->isEditable() && layer->vectorJoins().size() < 1 );
10821086
}
10831087
}
10841088
}
@@ -1116,6 +1120,8 @@ void QgsVectorLayerProperties::on_mButtonRemoveJoin_clicked()
11161120
layer->removeJoin( currentJoinItem->data( 0, Qt::UserRole ).toString() );
11171121
loadRows();
11181122
mJoinTreeWidget->takeTopLevelItem( mJoinTreeWidget->indexOfTopLevelItem( currentJoinItem ) );
1123+
pbnQueryBuilder->setEnabled( layer && layer->dataProvider() && layer->dataProvider()->supportsSubsetString() &&
1124+
!layer->isEditable() && layer->vectorJoins().size() < 1 );
11191125
}
11201126

11211127
void QgsVectorLayerProperties::handleDiagramItemDoubleClick( QTreeWidgetItem * item, int column )

‎src/core/qgsvectorlayer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2693,6 +2693,7 @@ bool QgsVectorLayer::readXml( const QDomNode& layer_node )
26932693
mJoinBuffer->readXml( layer_node );
26942694

26952695
updateFieldMap();
2696+
connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( checkJoinLayerRemove( QString ) ) );
26962697

26972698
QString errorMsg;
26982699
if ( !readSymbology( layer_node, errorMsg ) )

‎src/core/qgsvectorlayerjoinbuffer.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ void QgsVectorLayerJoinBuffer::updateFieldMap( QgsFieldMap& fields, int& maxInde
9696
QgsFieldMap::const_iterator fieldIt = joinFields.constBegin();
9797
for ( ; fieldIt != joinFields.constEnd(); ++fieldIt )
9898
{
99-
fields.insert( maxIndex + 1 + fieldIt.key(), fieldIt.value() );
99+
//skip the join field to avoid double field names (fields often have the same name)
100+
if ( fieldIt.key() != joinIt->joinField )
101+
{
102+
fields.insert( maxIndex + 1 + fieldIt.key(), fieldIt.value() );
103+
}
100104
}
101105

102106
if ( maximumIndex( joinFields, currentMaxIndex ) )
@@ -217,6 +221,12 @@ void QgsVectorLayerJoinBuffer::addJoinedFeatureAttributes( QgsFeature& f, const
217221
QgsAttributeList::const_iterator attIt = attributes.constBegin();
218222
for ( ; attIt != attributes.constEnd(); ++attIt )
219223
{
224+
//skip the join field to avoid double field names (fields often have the same name)
225+
if ( *attIt == joinInfo.joinField )
226+
{
227+
continue;
228+
}
229+
220230
if ( found )
221231
{
222232
f.addAttribute( *attIt + attributeIndexOffset, featureAttributes.value( *attIt ) );

‎src/core/qgsvectorlayerjoinbuffer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
#include <QHash>
2525
#include <QString>
2626

27-
/**Manages joined field for a vector layer*/
27+
/**Manages joined fields for a vector layer*/
2828
class CORE_EXPORT QgsVectorLayerJoinBuffer
2929
{
3030
public:

0 commit comments

Comments
 (0)
Please sign in to comment.