Skip to content

Commit b83aab7

Browse files
committedJul 7, 2016
Save attribute table sort order persistently
Fix #15235
1 parent febcabb commit b83aab7

File tree

7 files changed

+65
-15
lines changed

7 files changed

+65
-15
lines changed
 

‎python/core/qgsattributetableconfig.sip

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,16 @@ class QgsAttributeTableConfig
154154
* @see columnHidden()
155155
*/
156156
void setColumnHidden( int column, bool hidden );
157+
158+
/**
159+
* Get the sort order
160+
* @note Added in 2.16
161+
*/
162+
Qt::SortOrder sortOrder() const;
163+
164+
/**
165+
* Set the sort order
166+
* @note Added in 2.16
167+
*/
168+
void setSortOrder( const Qt::SortOrder& sortOrder );
157169
};

‎python/gui/attributetable/qgsdualview.sip

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ class QgsDualView : QStackedWidget
135135
* @return The table view
136136
*/
137137
QgsAttributeTableView* tableView();
138+
138139
/**
139140
* Set the attribute table config which should be used to control
140141
* the appearance of the attribute table.
@@ -144,7 +145,7 @@ class QgsDualView : QStackedWidget
144145
/**
145146
* Set the expression used for sorting the table and feature list.
146147
*/
147-
void setSortExpression( const QString& sortExpression );
148+
void setSortExpression( const QString& sortExpression , Qt::SortOrder sortOrder = Qt::AscendingOrder );
148149

149150
/**
150151
* Get the expression used for sorting the table and feature list.

‎src/core/qgsattributetableconfig.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ void QgsAttributeTableConfig::readXml( const QDomNode& node )
196196
}
197197

198198
mSortExpression = configNode.toElement().attribute( "sortExpression" );
199+
mSortOrder = static_cast<Qt::SortOrder>( configNode.toElement().attribute( "sortOrder" ).toInt() );
199200
}
200201

201202
QString QgsAttributeTableConfig::sortExpression() const
@@ -230,7 +231,17 @@ void QgsAttributeTableConfig::setColumnHidden( int column, bool hidden )
230231

231232
bool QgsAttributeTableConfig::operator!=( const QgsAttributeTableConfig& other ) const
232233
{
233-
return mSortExpression != other.mSortExpression || mColumns != other.mColumns || mActionWidgetStyle != other.mActionWidgetStyle;
234+
return mSortExpression != other.mSortExpression || mColumns != other.mColumns || mActionWidgetStyle != other.mActionWidgetStyle || mSortOrder != other.mSortOrder;
235+
}
236+
237+
Qt::SortOrder QgsAttributeTableConfig::sortOrder() const
238+
{
239+
return mSortOrder;
240+
}
241+
242+
void QgsAttributeTableConfig::setSortOrder( const Qt::SortOrder& sortOrder )
243+
{
244+
mSortOrder = sortOrder;
234245
}
235246

236247
void QgsAttributeTableConfig::writeXml( QDomNode& node ) const
@@ -242,6 +253,8 @@ void QgsAttributeTableConfig::writeXml( QDomNode& node ) const
242253

243254
configElement.setAttribute( "sortExpression", mSortExpression );
244255

256+
configElement.setAttribute( "sortOrder", mSortOrder );
257+
245258
QDomElement columnsElement = doc.createElement( "columns" );
246259

247260
Q_FOREACH ( const ColumnConfig& column, mColumns )

‎src/core/qgsattributetableconfig.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,18 @@ class CORE_EXPORT QgsAttributeTableConfig
167167
*/
168168
void setColumnHidden( int column, bool hidden );
169169

170+
/**
171+
* Get the sort order
172+
* @note Added in 2.16
173+
*/
174+
Qt::SortOrder sortOrder() const;
175+
176+
/**
177+
* Set the sort order
178+
* @note Added in 2.16
179+
*/
180+
void setSortOrder( const Qt::SortOrder& sortOrder );
181+
170182
/**
171183
* Compare this configuration to other.
172184
*/
@@ -176,6 +188,7 @@ class CORE_EXPORT QgsAttributeTableConfig
176188
QVector<ColumnConfig> mColumns;
177189
ActionWidgetStyle mActionWidgetStyle;
178190
QString mSortExpression;
191+
Qt::SortOrder mSortOrder;
179192
};
180193

181194
Q_DECLARE_METATYPE( QgsAttributeTableConfig::ColumnConfig )

‎src/gui/attributetable/qgsattributetablefiltermodel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ void QgsAttributeTableFilterModel::setAttributeTableConfig( const QgsAttributeTa
205205
}
206206
}
207207

208-
sort( config.sortExpression() );
208+
sort( config.sortExpression(), config.sortOrder() );
209209
}
210210

211211
void QgsAttributeTableFilterModel::sort( QString expression, Qt::SortOrder order )

‎src/gui/attributetable/qgsdualview.cpp

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ void QgsDualView::modifySort()
591591
orderByDlg.setLayout( layout );
592592

593593
QGroupBox* sortingGroupBox = new QGroupBox();
594-
sortingGroupBox->setTitle( tr( "Enable sorting order in attribute table" ) );
594+
sortingGroupBox->setTitle( tr( "Defined sort order in attribute table" ) );
595595
sortingGroupBox->setCheckable( true );
596596
sortingGroupBox->setChecked( !sortExpression().isEmpty() );
597597
layout->addWidget( sortingGroupBox );
@@ -610,22 +610,27 @@ void QgsDualView::modifySort()
610610

611611
sortingGroupBox->layout()->addWidget( expressionBuilder );
612612

613+
QCheckBox* cbxSortAscending = new QCheckBox( tr( "Sort ascending" ) );
614+
cbxSortAscending->setChecked( config.sortOrder() == Qt::AscendingOrder );
615+
sortingGroupBox->layout()->addWidget( cbxSortAscending );
616+
613617
layout->addWidget( dialogButtonBox );
614618
if ( orderByDlg.exec() )
615619
{
620+
Qt::SortOrder sortOrder = cbxSortAscending->isChecked() ? Qt::AscendingOrder : Qt::DescendingOrder;
616621
if ( sortingGroupBox->isChecked() )
617622
{
618-
setSortExpression( expressionBuilder->expressionText() );
623+
setSortExpression( expressionBuilder->expressionText(), sortOrder );
619624
config.setSortExpression( expressionBuilder->expressionText() );
625+
config.setSortOrder( sortOrder );
620626
}
621627
else
622628
{
623-
setSortExpression( QString() );
629+
setSortExpression( QString(), sortOrder );
624630
config.setSortExpression( QString() );
625631
}
626632

627-
layer->setAttributeTableConfig( config );
628-
mConfig = config;
633+
setAttributeTableConfig( config );
629634
}
630635
}
631636

@@ -655,12 +660,18 @@ void QgsDualView::onSortColumnChanged()
655660
{
656661
QgsAttributeTableConfig cfg = mLayerCache->layer()->attributeTableConfig();
657662
cfg.setSortExpression( mFilterModel->sortExpression() );
663+
cfg.setSortOrder( mFilterModel->sortOrder() );
658664
mLayerCache->layer()->setAttributeTableConfig( cfg );
659665
}
660666

661667
void QgsDualView::sortByPreviewExpression()
662668
{
663-
setSortExpression( mFeatureList->displayExpression() );
669+
Qt::SortOrder sortOrder = Qt::AscendingOrder;
670+
if ( mFeatureList->displayExpression() == sortExpression() )
671+
{
672+
sortOrder = mConfig.sortOrder() == Qt::AscendingOrder ? Qt::DescendingOrder : Qt::AscendingOrder;
673+
}
674+
setSortExpression( mFeatureList->displayExpression(), sortOrder );
664675
}
665676

666677
void QgsDualView::featureFormAttributeChanged()
@@ -697,16 +708,16 @@ void QgsDualView::setAttributeTableConfig( const QgsAttributeTableConfig& config
697708
mConfig = config;
698709
}
699710

700-
void QgsDualView::setSortExpression( const QString& sortExpression )
711+
void QgsDualView::setSortExpression( const QString& sortExpression, Qt::SortOrder sortOrder )
701712
{
702713
if ( sortExpression.isNull() )
703714
mFilterModel->sort( -1 );
704715
else
705-
mFilterModel->sort( sortExpression );
716+
mFilterModel->sort( sortExpression, sortOrder );
706717

707-
QgsAttributeTableConfig cfg = mLayerCache->layer()->attributeTableConfig();
708-
cfg.setSortExpression( sortExpression );
709-
mLayerCache->layer()->setAttributeTableConfig( cfg );
718+
mConfig.setSortExpression( sortExpression );
719+
mConfig.setSortOrder( sortOrder );
720+
mLayerCache->layer()->setAttributeTableConfig( mConfig );
710721
}
711722

712723
QString QgsDualView::sortExpression() const

‎src/gui/attributetable/qgsdualview.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ class GUI_EXPORT QgsDualView : public QStackedWidget, private Ui::QgsDualViewBas
185185
/**
186186
* Set the expression used for sorting the table and feature list.
187187
*/
188-
void setSortExpression( const QString& sortExpression );
188+
void setSortExpression( const QString& sortExpression , Qt::SortOrder sortOrder = Qt::AscendingOrder );
189189

190190
/**
191191
* Get the expression used for sorting the table and feature list.

0 commit comments

Comments
 (0)
Please sign in to comment.