Skip to content

Commit dbf8d89

Browse files
committedJun 16, 2016
[composer] Double click legend item to edit text (fix #13578)
1 parent aa0e6d8 commit dbf8d89

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
@@ -710,62 +710,7 @@ void QgsComposerLegendWidget::on_mEditPushButton_clicked()
710710
}
711711

712712
QModelIndex idx = mItemTreeView->selectionModel()->currentIndex();
713-
QgsLayerTreeModel* model = mItemTreeView->layerTreeModel();
714-
QgsLayerTreeNode* currentNode = model->index2node( idx );
715-
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
716-
QString currentText;
717-
718-
if ( QgsLayerTree::isGroup( currentNode ) )
719-
{
720-
currentText = QgsLayerTree::toGroup( currentNode )->name();
721-
}
722-
else if ( QgsLayerTree::isLayer( currentNode ) )
723-
{
724-
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
725-
QVariant v = currentNode->customProperty( "legend/title-label" );
726-
if ( !v.isNull() )
727-
currentText = v.toString();
728-
}
729-
else if ( legendNode )
730-
{
731-
currentText = legendNode->data( Qt::EditRole ).toString();
732-
}
733-
734-
bool ok;
735-
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
736-
QLineEdit::Normal, currentText, &ok );
737-
if ( !ok || newText == currentText )
738-
return;
739-
740-
mLegend->beginCommand( tr( "Legend item edited" ) );
741-
742-
if ( QgsLayerTree::isGroup( currentNode ) )
743-
{
744-
QgsLayerTree::toGroup( currentNode )->setName( newText );
745-
}
746-
else if ( QgsLayerTree::isLayer( currentNode ) )
747-
{
748-
currentNode->setCustomProperty( "legend/title-label", newText );
749-
750-
// force update of label of the legend node with embedded icon (a bit clumsy i know)
751-
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
752-
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
753-
nodes[0]->setUserLabel( QString() );
754-
}
755-
else if ( legendNode )
756-
{
757-
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
758-
//find unfiltered row number
759-
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
760-
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
761-
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
762-
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
763-
model->refreshLayerLegend( legendNode->layerNode() );
764-
}
765-
766-
mLegend->adjustBoxSize();
767-
mLegend->updateItem();
768-
mLegend->endCommand();
713+
on_mItemTreeView_doubleClicked( idx );
769714
}
770715

771716
void QgsComposerLegendWidget::resetLayerNodeToDefaults()
@@ -995,6 +940,71 @@ void QgsComposerLegendWidget::updateFilterLegendByAtlasButton()
995940
mFilterLegendByAtlasCheckBox->setEnabled( atlas.enabled() && atlas.coverageLayer() && atlas.coverageLayer()->geometryType() == QGis::Polygon );
996941
}
997942

943+
void QgsComposerLegendWidget::on_mItemTreeView_doubleClicked( const QModelIndex &idx )
944+
{
945+
if ( !mLegend || !idx.isValid() )
946+
{
947+
return;
948+
}
949+
950+
QgsLayerTreeModel* model = mItemTreeView->layerTreeModel();
951+
QgsLayerTreeNode* currentNode = model->index2node( idx );
952+
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
953+
QString currentText;
954+
955+
if ( QgsLayerTree::isGroup( currentNode ) )
956+
{
957+
currentText = QgsLayerTree::toGroup( currentNode )->name();
958+
}
959+
else if ( QgsLayerTree::isLayer( currentNode ) )
960+
{
961+
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
962+
QVariant v = currentNode->customProperty( "legend/title-label" );
963+
if ( !v.isNull() )
964+
currentText = v.toString();
965+
}
966+
else if ( legendNode )
967+
{
968+
currentText = legendNode->data( Qt::EditRole ).toString();
969+
}
970+
971+
bool ok;
972+
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
973+
QLineEdit::Normal, currentText, &ok );
974+
if ( !ok || newText == currentText )
975+
return;
976+
977+
mLegend->beginCommand( tr( "Legend item edited" ) );
978+
979+
if ( QgsLayerTree::isGroup( currentNode ) )
980+
{
981+
QgsLayerTree::toGroup( currentNode )->setName( newText );
982+
}
983+
else if ( QgsLayerTree::isLayer( currentNode ) )
984+
{
985+
currentNode->setCustomProperty( "legend/title-label", newText );
986+
987+
// force update of label of the legend node with embedded icon (a bit clumsy i know)
988+
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
989+
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
990+
nodes[0]->setUserLabel( QString() );
991+
}
992+
else if ( legendNode )
993+
{
994+
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
995+
//find unfiltered row number
996+
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
997+
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
998+
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
999+
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
1000+
model->refreshLayerLegend( legendNode->layerNode() );
1001+
}
1002+
1003+
mLegend->adjustBoxSize();
1004+
mLegend->updateItem();
1005+
mLegend->endCommand();
1006+
}
1007+
9981008

9991009
//
10001010
// QgsComposerLegendMenuProvider

‎src/app/composer/qgscomposerlegendwidget.h

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

102+
void on_mItemTreeView_doubleClicked( const QModelIndex &index );
103+
102104
private:
103105
QgsComposerLegendWidget();
104106
void blockAllSignals( bool b );

0 commit comments

Comments
 (0)
Please sign in to comment.