Skip to content

Commit 4d14d36

Browse files
committed
[composer] Double click legend item to edit text (fix #13578)
(cherry-picked from dbf8d89)
1 parent edd6301 commit 4d14d36

File tree

2 files changed

+68
-56
lines changed

2 files changed

+68
-56
lines changed

src/app/composer/qgscomposerlegendwidget.cpp

Lines changed: 66 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -728,62 +728,7 @@ void QgsComposerLegendWidget::on_mEditPushButton_clicked()
728728
}
729729

730730
QModelIndex idx = mItemTreeView->selectionModel()->currentIndex();
731-
QgsLayerTreeModel* model = mItemTreeView->layerTreeModel();
732-
QgsLayerTreeNode* currentNode = model->index2node( idx );
733-
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
734-
QString currentText;
735-
736-
if ( QgsLayerTree::isGroup( currentNode ) )
737-
{
738-
currentText = QgsLayerTree::toGroup( currentNode )->name();
739-
}
740-
else if ( QgsLayerTree::isLayer( currentNode ) )
741-
{
742-
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
743-
QVariant v = currentNode->customProperty( "legend/title-label" );
744-
if ( !v.isNull() )
745-
currentText = v.toString();
746-
}
747-
else if ( legendNode )
748-
{
749-
currentText = legendNode->data( Qt::EditRole ).toString();
750-
}
751-
752-
bool ok;
753-
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
754-
QLineEdit::Normal, currentText, &ok );
755-
if ( !ok || newText == currentText )
756-
return;
757-
758-
mLegend->beginCommand( tr( "Legend item edited" ) );
759-
760-
if ( QgsLayerTree::isGroup( currentNode ) )
761-
{
762-
QgsLayerTree::toGroup( currentNode )->setName( newText );
763-
}
764-
else if ( QgsLayerTree::isLayer( currentNode ) )
765-
{
766-
currentNode->setCustomProperty( "legend/title-label", newText );
767-
768-
// force update of label of the legend node with embedded icon (a bit clumsy i know)
769-
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
770-
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
771-
nodes[0]->setUserLabel( QString() );
772-
}
773-
else if ( legendNode )
774-
{
775-
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
776-
//find unfiltered row number
777-
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
778-
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
779-
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
780-
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
781-
model->refreshLayerLegend( legendNode->layerNode() );
782-
}
783-
784-
mLegend->adjustBoxSize();
785-
mLegend->updateItem();
786-
mLegend->endCommand();
731+
on_mItemTreeView_doubleClicked( idx );
787732
}
788733

789734
void QgsComposerLegendWidget::resetLayerNodeToDefaults()
@@ -1056,6 +1001,71 @@ void QgsComposerLegendWidget::updateFilterLegendByAtlasButton()
10561001
mFilterLegendByAtlasCheckBox->setEnabled( atlas.enabled() && atlas.coverageLayer() && atlas.coverageLayer()->geometryType() == QGis::Polygon );
10571002
}
10581003

1004+
void QgsComposerLegendWidget::on_mItemTreeView_doubleClicked( const QModelIndex &idx )
1005+
{
1006+
if ( !mLegend || !idx.isValid() )
1007+
{
1008+
return;
1009+
}
1010+
1011+
QgsLayerTreeModel* model = mItemTreeView->layerTreeModel();
1012+
QgsLayerTreeNode* currentNode = model->index2node( idx );
1013+
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
1014+
QString currentText;
1015+
1016+
if ( QgsLayerTree::isGroup( currentNode ) )
1017+
{
1018+
currentText = QgsLayerTree::toGroup( currentNode )->name();
1019+
}
1020+
else if ( QgsLayerTree::isLayer( currentNode ) )
1021+
{
1022+
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
1023+
QVariant v = currentNode->customProperty( "legend/title-label" );
1024+
if ( !v.isNull() )
1025+
currentText = v.toString();
1026+
}
1027+
else if ( legendNode )
1028+
{
1029+
currentText = legendNode->data( Qt::EditRole ).toString();
1030+
}
1031+
1032+
bool ok;
1033+
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
1034+
QLineEdit::Normal, currentText, &ok );
1035+
if ( !ok || newText == currentText )
1036+
return;
1037+
1038+
mLegend->beginCommand( tr( "Legend item edited" ) );
1039+
1040+
if ( QgsLayerTree::isGroup( currentNode ) )
1041+
{
1042+
QgsLayerTree::toGroup( currentNode )->setName( newText );
1043+
}
1044+
else if ( QgsLayerTree::isLayer( currentNode ) )
1045+
{
1046+
currentNode->setCustomProperty( "legend/title-label", newText );
1047+
1048+
// force update of label of the legend node with embedded icon (a bit clumsy i know)
1049+
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
1050+
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
1051+
nodes[0]->setUserLabel( QString() );
1052+
}
1053+
else if ( legendNode )
1054+
{
1055+
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
1056+
//find unfiltered row number
1057+
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
1058+
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
1059+
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
1060+
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
1061+
model->refreshLayerLegend( legendNode->layerNode() );
1062+
}
1063+
1064+
mLegend->adjustBoxSize();
1065+
mLegend->updateItem();
1066+
mLegend->endCommand();
1067+
}
1068+
10591069

10601070
//
10611071
// QgsComposerLegendMenuProvider

src/app/composer/qgscomposerlegendwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class QgsComposerLegendWidget: public QgsComposerItemBaseWidget, private Ui::Qgs
102102
/** Update the enabling state of the filter by atlas button */
103103
void updateFilterLegendByAtlasButton();
104104

105+
void on_mItemTreeView_doubleClicked( const QModelIndex &index );
106+
105107
private:
106108
QgsComposerLegendWidget();
107109
void blockAllSignals( bool b );

0 commit comments

Comments
 (0)