Skip to content

Commit

Permalink
Fix re-initialization of dual view
Browse files Browse the repository at this point in the history
  • Loading branch information
m-kuhn committed Sep 22, 2014
1 parent f351195 commit 55f86d5
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 15 deletions.
11 changes: 10 additions & 1 deletion src/gui/attributetable/qgsattributetableview.cpp
Expand Up @@ -118,8 +118,10 @@ void QgsAttributeTableView::setModel( QgsAttributeTableFilterModel* filterModel
mFilterModel = filterModel;
QTableView::setModel( filterModel );

connect( mFilterModel, SIGNAL( destroyed() ), this, SLOT( modelDeleted() ) );

delete mFeatureSelectionModel;
mFeatureSelectionModel = NULL;
mFeatureSelectionModel = 0;

if ( filterModel )
{
Expand Down Expand Up @@ -255,6 +257,13 @@ void QgsAttributeTableView::_q_selectRow( int row )
selectRow( row, false );
}

void QgsAttributeTableView::modelDeleted()
{
mFilterModel = 0;
mFeatureSelectionManager = 0;
mFeatureSelectionModel = 0;
}

void QgsAttributeTableView::selectRow( int row, bool anchor )
{
if ( selectionBehavior() == QTableView::SelectColumns
Expand Down
3 changes: 3 additions & 0 deletions src/gui/attributetable/qgsattributetableview.h
Expand Up @@ -137,6 +137,9 @@ class GUI_EXPORT QgsAttributeTableView : public QTableView
virtual void selectRow( int row );
virtual void _q_selectRow( int row );

private slots:
void modelDeleted();

private:
void selectRow( int row, bool anchor );
QgsAttributeTableModel* mMasterModel;
Expand Down
28 changes: 15 additions & 13 deletions src/gui/attributetable/qgsdualview.cpp
Expand Up @@ -37,6 +37,8 @@ QgsDualView::QgsDualView( QWidget* parent )
: QStackedWidget( parent )
, mEditorContext()
, mMasterModel( 0 )
, mFilterModel( 0 )
, mFeatureListModel( 0 )
, mAttributeForm( 0 )
, mLayerCache( 0 )
, mProgressDlg( 0 )
Expand Down Expand Up @@ -78,7 +80,9 @@ void QgsDualView::init( QgsVectorLayer* layer, QgsMapCanvas* mapCanvas, const Qg

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

if ( !mFeatureListPreviewButton->actions().count() )
if ( mFeatureListPreviewButton->defaultAction() )
mFeatureList->setDisplayExpression( mDisplayExpression );
else
columnBoxInit();
}

Expand Down Expand Up @@ -143,21 +147,10 @@ void QgsDualView::columnBoxInit()
}
}

// now initialise the menu
QList< QAction* > previewActions = mFeatureListPreviewButton->actions();
foreach ( QAction* a, previewActions )
{
if ( a != mActionExpressionPreview )
{
mPreviewActionMapper->removeMappings( a );
delete a;
}
}

mFeatureListPreviewButton->addAction( mActionExpressionPreview );
mFeatureListPreviewButton->addAction( mActionPreviewColumnsMenu );

foreach ( const QgsField& field, fields )
Q_FOREACH( const QgsField& field, fields )
{
if ( mLayerCache->layer()->editorWidgetV2( mLayerCache->layer()->fieldNameIndex( field.name() ) ) != "Hidden" )
{
Expand All @@ -182,6 +175,7 @@ void QgsDualView::columnBoxInit()
{
mFeatureList->setDisplayExpression( displayExpression );
mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
mDisplayExpression = mFeatureList->displayExpression();
}
else
{
Expand Down Expand Up @@ -223,6 +217,10 @@ void QgsDualView::initLayerCache( QgsVectorLayer* layer )

void QgsDualView::initModels( QgsMapCanvas* mapCanvas, const QgsFeatureRequest& request )
{
delete mFeatureListModel;
delete mFilterModel;
delete mMasterModel;

mMasterModel = new QgsAttributeTableModel( mLayerCache, this );
mMasterModel->setRequest( request );
mMasterModel->setEditorContext( mEditorContext );
Expand Down Expand Up @@ -282,6 +280,8 @@ void QgsDualView::previewExpressionBuilder()
mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
mFeatureListPreviewButton->setPopupMode( QToolButton::MenuButtonPopup );
}

mDisplayExpression = mFeatureList->displayExpression();
}

void QgsDualView::previewColumnChanged( QObject* action )
Expand All @@ -306,6 +306,8 @@ void QgsDualView::previewColumnChanged( QObject* action )
}
}

mDisplayExpression = mFeatureList->displayExpression();

Q_ASSERT( previewAction );
}

Expand Down
1 change: 1 addition & 0 deletions src/gui/attributetable/qgsdualview.h
Expand Up @@ -232,6 +232,7 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
QProgressDialog* mProgressDlg;
QgsIFeatureSelectionManager* mFeatureSelectionManager;
QgsDistanceArea mDistanceArea;
QString mDisplayExpression;

friend class TestQgsDualView;
};
Expand Down
2 changes: 1 addition & 1 deletion src/gui/editorwidgets/qgsrelationwidgetwrapper.cpp
Expand Up @@ -34,7 +34,7 @@ QWidget* QgsRelationWidgetWrapper::createWidget( QWidget* parent )

void QgsRelationWidgetWrapper::setFeature( const QgsFeature& feature )
{
if ( mWidget )
if ( mWidget && mRelation.isValid() )
mWidget->setRelationFeature( mRelation, feature );
}

Expand Down

0 comments on commit 55f86d5

Please sign in to comment.