Skip to content

Commit 55f86d5

Browse files
committedSep 22, 2014
Fix re-initialization of dual view
1 parent f351195 commit 55f86d5

File tree

5 files changed

+30
-15
lines changed

5 files changed

+30
-15
lines changed
 

‎src/gui/attributetable/qgsattributetableview.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,10 @@ void QgsAttributeTableView::setModel( QgsAttributeTableFilterModel* filterModel
118118
mFilterModel = filterModel;
119119
QTableView::setModel( filterModel );
120120

121+
connect( mFilterModel, SIGNAL( destroyed() ), this, SLOT( modelDeleted() ) );
122+
121123
delete mFeatureSelectionModel;
122-
mFeatureSelectionModel = NULL;
124+
mFeatureSelectionModel = 0;
123125

124126
if ( filterModel )
125127
{
@@ -255,6 +257,13 @@ void QgsAttributeTableView::_q_selectRow( int row )
255257
selectRow( row, false );
256258
}
257259

260+
void QgsAttributeTableView::modelDeleted()
261+
{
262+
mFilterModel = 0;
263+
mFeatureSelectionManager = 0;
264+
mFeatureSelectionModel = 0;
265+
}
266+
258267
void QgsAttributeTableView::selectRow( int row, bool anchor )
259268
{
260269
if ( selectionBehavior() == QTableView::SelectColumns

‎src/gui/attributetable/qgsattributetableview.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ class GUI_EXPORT QgsAttributeTableView : public QTableView
137137
virtual void selectRow( int row );
138138
virtual void _q_selectRow( int row );
139139

140+
private slots:
141+
void modelDeleted();
142+
140143
private:
141144
void selectRow( int row, bool anchor );
142145
QgsAttributeTableModel* mMasterModel;

‎src/gui/attributetable/qgsdualview.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ QgsDualView::QgsDualView( QWidget* parent )
3737
: QStackedWidget( parent )
3838
, mEditorContext()
3939
, mMasterModel( 0 )
40+
, mFilterModel( 0 )
41+
, mFeatureListModel( 0 )
4042
, mAttributeForm( 0 )
4143
, mLayerCache( 0 )
4244
, mProgressDlg( 0 )
@@ -78,7 +80,9 @@ void QgsDualView::init( QgsVectorLayer* layer, QgsMapCanvas* mapCanvas, const Qg
7880

7981
connect( mAttributeForm, SIGNAL( attributeChanged( QString, QVariant ) ), this, SLOT( featureFormAttributeChanged() ) );
8082

81-
if ( !mFeatureListPreviewButton->actions().count() )
83+
if ( mFeatureListPreviewButton->defaultAction() )
84+
mFeatureList->setDisplayExpression( mDisplayExpression );
85+
else
8286
columnBoxInit();
8387
}
8488

@@ -143,21 +147,10 @@ void QgsDualView::columnBoxInit()
143147
}
144148
}
145149

146-
// now initialise the menu
147-
QList< QAction* > previewActions = mFeatureListPreviewButton->actions();
148-
foreach ( QAction* a, previewActions )
149-
{
150-
if ( a != mActionExpressionPreview )
151-
{
152-
mPreviewActionMapper->removeMappings( a );
153-
delete a;
154-
}
155-
}
156-
157150
mFeatureListPreviewButton->addAction( mActionExpressionPreview );
158151
mFeatureListPreviewButton->addAction( mActionPreviewColumnsMenu );
159152

160-
foreach ( const QgsField& field, fields )
153+
Q_FOREACH( const QgsField& field, fields )
161154
{
162155
if ( mLayerCache->layer()->editorWidgetV2( mLayerCache->layer()->fieldNameIndex( field.name() ) ) != "Hidden" )
163156
{
@@ -182,6 +175,7 @@ void QgsDualView::columnBoxInit()
182175
{
183176
mFeatureList->setDisplayExpression( displayExpression );
184177
mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
178+
mDisplayExpression = mFeatureList->displayExpression();
185179
}
186180
else
187181
{
@@ -223,6 +217,10 @@ void QgsDualView::initLayerCache( QgsVectorLayer* layer )
223217

224218
void QgsDualView::initModels( QgsMapCanvas* mapCanvas, const QgsFeatureRequest& request )
225219
{
220+
delete mFeatureListModel;
221+
delete mFilterModel;
222+
delete mMasterModel;
223+
226224
mMasterModel = new QgsAttributeTableModel( mLayerCache, this );
227225
mMasterModel->setRequest( request );
228226
mMasterModel->setEditorContext( mEditorContext );
@@ -282,6 +280,8 @@ void QgsDualView::previewExpressionBuilder()
282280
mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
283281
mFeatureListPreviewButton->setPopupMode( QToolButton::MenuButtonPopup );
284282
}
283+
284+
mDisplayExpression = mFeatureList->displayExpression();
285285
}
286286

287287
void QgsDualView::previewColumnChanged( QObject* action )
@@ -306,6 +306,8 @@ void QgsDualView::previewColumnChanged( QObject* action )
306306
}
307307
}
308308

309+
mDisplayExpression = mFeatureList->displayExpression();
310+
309311
Q_ASSERT( previewAction );
310312
}
311313

‎src/gui/attributetable/qgsdualview.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
232232
QProgressDialog* mProgressDlg;
233233
QgsIFeatureSelectionManager* mFeatureSelectionManager;
234234
QgsDistanceArea mDistanceArea;
235+
QString mDisplayExpression;
235236

236237
friend class TestQgsDualView;
237238
};

‎src/gui/editorwidgets/qgsrelationwidgetwrapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ QWidget* QgsRelationWidgetWrapper::createWidget( QWidget* parent )
3434

3535
void QgsRelationWidgetWrapper::setFeature( const QgsFeature& feature )
3636
{
37-
if ( mWidget )
37+
if ( mWidget && mRelation.isValid() )
3838
mWidget->setRelationFeature( mRelation, feature );
3939
}
4040

0 commit comments

Comments
 (0)
Please sign in to comment.