From ac19b91a42d20b1da88d085ac892da129c1dab4d Mon Sep 17 00:00:00 2001 From: Richard Duivenvoorde Date: Thu, 29 Dec 2011 10:54:36 +0100 Subject: [PATCH 1/3] make tree in single selection mode. All buttons/tools in this dialog work only wiht one item --- src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp index 9566553c17fd..39fcee130b05 100644 --- a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp +++ b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp @@ -59,6 +59,7 @@ QgsRuleBasedRendererV2Widget::QgsRuleBasedRendererV2Widget( QgsVectorLayer* laye setupUi( this ); treeRules->setRenderer( mRenderer ); + treeRules->setSelectionMode(QAbstractItemView::SingleSelection); mRefineMenu = new QMenu( btnRefineRule ); mRefineMenu->addAction( tr( "Add scales" ), this, SLOT( refineRuleScales() ) ); mRefineMenu->addAction( tr( "Add categories" ), this, SLOT( refineRuleCategories() ) ); From 8c0c746a030174a8844def1e578c36594e883ac3 Mon Sep 17 00:00:00 2001 From: Richard Duivenvoorde Date: Thu, 29 Dec 2011 11:35:10 +0100 Subject: [PATCH 2/3] after increase/decrease make moved item selected/current again, so you can just increase/decrease it again --- .../qgsrulebasedrendererv2widget.cpp | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp index 39fcee130b05..0477b10c9512 100644 --- a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp +++ b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp @@ -203,13 +203,18 @@ void QgsRuleBasedRendererV2Widget::increasePriority() { if ( rule_index > 0 ) // do not increase priority of first rule { + // we need the string width of the index (which is a string) for finding it back + int indexWidth = item->data(4, Qt::EditRole).toString().length(); mRenderer->swapRules( rule_index, rule_index - 1 ); treeRules->populateRules(); - // TODO: find out where the moved rule goes and reselect it (at least for non-grouped display) - // maybe based on the following functions : - // findItems(QString(rule_index - 1), Qt::MatchExactly, 4).first.index) - // setCurrentItem, setSelected, scrollToItem + QList items = treeRules->findItems( + QString("%1").arg(rule_index, indexWidth), Qt::MatchExactly, 4 ); + if (items.length()==1) + { + treeRules->setCurrentItem(items.first()); + } } + } } @@ -228,8 +233,16 @@ void QgsRuleBasedRendererV2Widget::decreasePriority() { if ( rule_index + 1 < mRenderer->ruleCount() ) // do not increase priority of last rule { + // we need the string width of the index (which is a string) for finding it back + int indexWidth = item->data(4, Qt::EditRole).toString().length(); mRenderer->swapRules( rule_index, rule_index + 1 ); treeRules->populateRules(); + QList items = treeRules->findItems( + QString("%1").arg(rule_index+2, indexWidth), Qt::MatchExactly, 4 ); + if (items.length()==1) + { + treeRules->setCurrentItem(items.first()); + } } } } From 65df833c3f5ae93224e9a9396d3fd163b433336d Mon Sep 17 00:00:00 2001 From: Richard Duivenvoorde Date: Thu, 29 Dec 2011 12:38:43 +0100 Subject: [PATCH 3/3] sort on priority after increasing or decreasing prio of a item, see also #4480 --- src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp index 0477b10c9512..df733477aabf 100644 --- a/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp +++ b/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp @@ -216,7 +216,7 @@ void QgsRuleBasedRendererV2Widget::increasePriority() } } - + treeRules->sortByColumn(4, Qt::AscendingOrder); // busy with priority: more clear if we order by prio now } @@ -245,6 +245,7 @@ void QgsRuleBasedRendererV2Widget::decreasePriority() } } } + treeRules->sortByColumn(4, Qt::AscendingOrder); // busy with priority: more clear if we order by prio now }