Skip to content

Commit

Permalink
[composer] Double click legend item to edit text (fix #13578)
Browse files Browse the repository at this point in the history
(cherry-picked from dbf8d89)
  • Loading branch information
nyalldawson committed Jul 1, 2016
1 parent edd6301 commit 4d14d36
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 56 deletions.
122 changes: 66 additions & 56 deletions src/app/composer/qgscomposerlegendwidget.cpp
Expand Up @@ -728,62 +728,7 @@ void QgsComposerLegendWidget::on_mEditPushButton_clicked()
} }


QModelIndex idx = mItemTreeView->selectionModel()->currentIndex(); QModelIndex idx = mItemTreeView->selectionModel()->currentIndex();
QgsLayerTreeModel* model = mItemTreeView->layerTreeModel(); on_mItemTreeView_doubleClicked( idx );
QgsLayerTreeNode* currentNode = model->index2node( idx );
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
QString currentText;

if ( QgsLayerTree::isGroup( currentNode ) )
{
currentText = QgsLayerTree::toGroup( currentNode )->name();
}
else if ( QgsLayerTree::isLayer( currentNode ) )
{
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
QVariant v = currentNode->customProperty( "legend/title-label" );
if ( !v.isNull() )
currentText = v.toString();
}
else if ( legendNode )
{
currentText = legendNode->data( Qt::EditRole ).toString();
}

bool ok;
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
QLineEdit::Normal, currentText, &ok );
if ( !ok || newText == currentText )
return;

mLegend->beginCommand( tr( "Legend item edited" ) );

if ( QgsLayerTree::isGroup( currentNode ) )
{
QgsLayerTree::toGroup( currentNode )->setName( newText );
}
else if ( QgsLayerTree::isLayer( currentNode ) )
{
currentNode->setCustomProperty( "legend/title-label", newText );

// force update of label of the legend node with embedded icon (a bit clumsy i know)
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
nodes[0]->setUserLabel( QString() );
}
else if ( legendNode )
{
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
//find unfiltered row number
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
model->refreshLayerLegend( legendNode->layerNode() );
}

mLegend->adjustBoxSize();
mLegend->updateItem();
mLegend->endCommand();
} }


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


void QgsComposerLegendWidget::on_mItemTreeView_doubleClicked( const QModelIndex &idx )
{
if ( !mLegend || !idx.isValid() )
{
return;
}

QgsLayerTreeModel* model = mItemTreeView->layerTreeModel();
QgsLayerTreeNode* currentNode = model->index2node( idx );
QgsLayerTreeModelLegendNode* legendNode = model->index2legendNode( idx );
QString currentText;

if ( QgsLayerTree::isGroup( currentNode ) )
{
currentText = QgsLayerTree::toGroup( currentNode )->name();
}
else if ( QgsLayerTree::isLayer( currentNode ) )
{
currentText = QgsLayerTree::toLayer( currentNode )->layerName();
QVariant v = currentNode->customProperty( "legend/title-label" );
if ( !v.isNull() )
currentText = v.toString();
}
else if ( legendNode )
{
currentText = legendNode->data( Qt::EditRole ).toString();
}

bool ok;
QString newText = QInputDialog::getText( this, tr( "Legend item properties" ), tr( "Item text" ),
QLineEdit::Normal, currentText, &ok );
if ( !ok || newText == currentText )
return;

mLegend->beginCommand( tr( "Legend item edited" ) );

if ( QgsLayerTree::isGroup( currentNode ) )
{
QgsLayerTree::toGroup( currentNode )->setName( newText );
}
else if ( QgsLayerTree::isLayer( currentNode ) )
{
currentNode->setCustomProperty( "legend/title-label", newText );

// force update of label of the legend node with embedded icon (a bit clumsy i know)
QList<QgsLayerTreeModelLegendNode*> nodes = model->layerLegendNodes( QgsLayerTree::toLayer( currentNode ) );
if ( nodes.count() == 1 && nodes[0]->isEmbeddedInParent() )
nodes[0]->setUserLabel( QString() );
}
else if ( legendNode )
{
QList<int> order = QgsMapLayerLegendUtils::legendNodeOrder( legendNode->layerNode() );
//find unfiltered row number
QList<QgsLayerTreeModelLegendNode*> layerLegendNodes = model->layerOriginalLegendNodes( legendNode->layerNode() );
int unfilteredRowIndex = layerLegendNodes.indexOf( legendNode );
int originalIndex = ( unfilteredRowIndex >= 0 && unfilteredRowIndex < order.count() ? order[unfilteredRowIndex] : -1 );
QgsMapLayerLegendUtils::setLegendNodeUserLabel( legendNode->layerNode(), originalIndex, newText );
model->refreshLayerLegend( legendNode->layerNode() );
}

mLegend->adjustBoxSize();
mLegend->updateItem();
mLegend->endCommand();
}



// //
// QgsComposerLegendMenuProvider // QgsComposerLegendMenuProvider
Expand Down
2 changes: 2 additions & 0 deletions src/app/composer/qgscomposerlegendwidget.h
Expand Up @@ -102,6 +102,8 @@ class QgsComposerLegendWidget: public QgsComposerItemBaseWidget, private Ui::Qgs
/** Update the enabling state of the filter by atlas button */ /** Update the enabling state of the filter by atlas button */
void updateFilterLegendByAtlasButton(); void updateFilterLegendByAtlasButton();


void on_mItemTreeView_doubleClicked( const QModelIndex &index );

private: private:
QgsComposerLegendWidget(); QgsComposerLegendWidget();
void blockAllSignals( bool b ); void blockAllSignals( bool b );
Expand Down

0 comments on commit 4d14d36

Please sign in to comment.