Skip to content

Commit ee9b8d7

Browse files
committedNov 29, 2011
legend order: add checkboxes to control whether the legend or the layer order controls render order
1 parent 376d45b commit ee9b8d7

File tree

5 files changed

+55
-17
lines changed

5 files changed

+55
-17
lines changed
 

‎src/app/legend/qgslayerorder.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ QgsLayerOrder::QgsLayerOrder( QgsLegend *legend, QWidget * parent, const char *n
3838
this, SLOT( legendItemChanged( QTreeWidgetItem *, int ) ) );
3939

4040
// track if legend mode changes
41-
connect( mLegend, SIGNAL( updateDrawingOrderChanged( bool ) ),
42-
this, SLOT( updateDrawingOrderChanged( bool ) ) );
41+
connect( mLegend, SIGNAL( updateDrawingOrderChecked( bool ) ),
42+
this, SLOT( updateDrawingOrderChecked( bool ) ) );
4343

4444
connect( mLegend, SIGNAL( zOrderChanged() ),
4545
this, SLOT( refreshLayerList() ) );
@@ -64,13 +64,13 @@ QgsLayerOrder::QgsLayerOrder( QgsLegend *legend, QWidget * parent, const char *n
6464
setSelectionMode( QAbstractItemView::ExtendedSelection );
6565
setDragEnabled( false );
6666
setAutoScroll( true );
67-
QFont f( "Arial", 12, QFont::Bold );
67+
QFont f( "Arial", 11, QFont::Bold );
6868
setFont( f );
6969
QPalette palette;
7070
palette.setColor( backgroundRole(), QColor( 192, 192, 192 ) );
7171
setPalette( palette );
7272

73-
updateDrawingOrderChanged( mLegend->updateDrawingOrder() );
73+
updateDrawingOrderChecked( mLegend->updateDrawingOrder() );
7474
}
7575

7676
QgsLayerOrder::~QgsLayerOrder()
@@ -82,11 +82,12 @@ void QgsLayerOrder::refreshLayerList()
8282
{
8383
clear();
8484

85-
foreach( QgsMapLayer *layer, mLegend->layers() )
85+
foreach( QgsLegendLayer *layer, mLegend->legendLayers() )
8686
{
87-
QListWidgetItem *item = new QListWidgetItem( layer->name() );
88-
item->setData( Qt::UserRole, qVariantFromValue( qobject_cast<QObject*>( layer ) ) );
89-
item->setCheckState( mLegend->layerCheckState( layer ) );
87+
QListWidgetItem *item = new QListWidgetItem( layer->layer()->name() );
88+
item->setData( 1, QString::number( layer->drawingOrder() ) );
89+
item->setData( Qt::UserRole, qVariantFromValue( qobject_cast<QObject*>( layer->layer() ) ) );
90+
item->setCheckState( layer->isVisible() ? Qt::Checked : Qt::Unchecked );
9091
QgsDebugMsg( QString( "add item=%1 at %2" ).arg( item ? item->text() : "(null item)" ).arg( count() ) );
9192
addItem( item );
9293
}
@@ -189,16 +190,19 @@ void QgsLayerOrder::mouseMoveEvent( QMouseEvent * e )
189190
{
190191
mInsertRow = row( rowItem );
191192
QgsDebugMsg( QString( "Move to row %1" ).arg( mInsertRow ) );
193+
scrollToItem( rowItem );
192194
}
193195
else if ( e->pos().y() < visualItemRect( item( 0 ) ).bottom() )
194196
{
195197
mInsertRow = 0;
196198
QgsDebugMsg( QString( "Insert top row %1" ).arg( mInsertRow ) );
199+
scrollToTop();
197200
}
198201
else
199202
{
200203
mInsertRow = count();
201204
QgsDebugMsg( QString( "Append bottom row %1" ).arg( mInsertRow ) );
205+
scrollToBottom();
202206
}
203207

204208
int y;
@@ -269,7 +273,7 @@ void QgsLayerOrder::hideLine()
269273
mInsertionLine->setGeometry( 0, -100, 1, 1 );
270274
}
271275

272-
void QgsLayerOrder::updateDrawingOrderChanged( bool enabled )
276+
void QgsLayerOrder::updateDrawingOrderChecked( bool enabled )
273277
{
274278
setDisabled( enabled );
275279
}

‎src/app/legend/qgslayerorder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class QgsLayerOrder : public QListWidget
4646
void mouseReleaseEvent( QMouseEvent * e );
4747

4848
private slots:
49-
void updateDrawingOrderChanged( bool );
49+
void updateDrawingOrderChecked( bool );
5050
void itemChanged( QListWidgetItem * );
5151
void legendItemChanged( QTreeWidgetItem *, int );
5252
void refreshLayerList();

‎src/app/legend/qgslegend.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,7 +1403,8 @@ bool QgsLegend::readXML( QDomNode& legendnode )
14031403
clear(); //remove all items first
14041404
mEmbeddedGroups.clear();
14051405
mUpdateDrawingOrder = legendnode.toElement().attribute( "updateDrawingOrder", "true" ) == "true";
1406-
emit updateDrawingOrderChanged( mUpdateDrawingOrder );
1406+
emit updateDrawingOrderChecked( mUpdateDrawingOrder );
1407+
emit updateDrawingOrderUnchecked( !mUpdateDrawingOrder );
14071408
return readXML( 0, legendnode );
14081409
}
14091410

@@ -2356,7 +2357,8 @@ void QgsLegend::setUpdateDrawingOrder( bool updateDrawingOrder )
23562357

23572358
updateMapCanvasLayerSet();
23582359

2359-
emit updateDrawingOrderChanged( mUpdateDrawingOrder );
2360+
emit updateDrawingOrderChecked( mUpdateDrawingOrder );
2361+
emit updateDrawingOrderUnchecked( !mUpdateDrawingOrder );
23602362
}
23612363

23622364
bool QgsLegend::updateDrawingOrder()

‎src/app/legend/qgslegend.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ class QgsLegend : public QTreeWidget
116116
Else, an empty list is returned.*/
117117
QList<QgsMapLayer *> layers();
118118

119+
//!Return all layers in drawing order
120+
QList<QgsLegendLayer *> legendLayers();
121+
119122
void setDrawingOrder( QList<QgsMapLayer *> );
120123

121124
/*!set the current layer
@@ -307,6 +310,9 @@ class QgsLegend : public QTreeWidget
307310
/** Update drawing order */
308311
void setUpdateDrawingOrder( bool updateDrawingOrder );
309312

313+
/** Update drawing order */
314+
void unsetUpdateDrawingOrder( bool dontUpdateDrawingOrder ) { setUpdateDrawingOrder( !dontUpdateDrawingOrder ); }
315+
310316
protected:
311317

312318
/*!Event handler for mouse movements.
@@ -432,7 +438,6 @@ class QgsLegend : public QTreeWidget
432438
bool writeXML( QList<QTreeWidgetItem *> items, QDomNode &node, QDomDocument &document );
433439

434440
QList<QgsMapCanvasLayer> canvasLayers();
435-
QList<QgsLegendLayer *> legendLayers();
436441

437442
/*! Prevent the copying of QgsLegends
438443
* @todo See if this is really required - we may want multiple map, canvas and
@@ -511,7 +516,8 @@ class QgsLegend : public QTreeWidget
511516

512517
void zOrderChanged();
513518

514-
void updateDrawingOrderChanged( bool );
519+
void updateDrawingOrderChecked( bool );
520+
void updateDrawingOrderUnchecked( bool );
515521

516522
//! Emitted whenever current (selected) layer changes
517523
// the pointer to layer can be null if no layer is selected

‎src/app/qgisapp.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,19 +1716,45 @@ void QgisApp::initLegend()
17161716
mLegendDock = new QDockWidget( tr( "Layers" ), this );
17171717
mLegendDock->setObjectName( "Legend" );
17181718
mLegendDock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
1719-
mLegendDock->setWidget( mMapLegend );
1719+
1720+
QCheckBox *legendCb = new QCheckBox( tr( "Control rendering order" ) );
1721+
legendCb->setChecked( true );
1722+
1723+
QCheckBox *orderCb = new QCheckBox( tr( "Control rendering order" ) );
1724+
orderCb->setChecked( false );
1725+
1726+
connect( legendCb, SIGNAL( toggled( bool ) ), mMapLegend, SLOT( setUpdateDrawingOrder( bool ) ) );
1727+
connect( orderCb, SIGNAL( toggled( bool ) ), mMapLegend, SLOT( unsetUpdateDrawingOrder( bool ) ) );
1728+
connect( mMapLegend, SIGNAL( updateDrawingOrderChecked( bool ) ), legendCb, SLOT( setChecked( bool ) ) );
1729+
connect( mMapLegend, SIGNAL( updateDrawingOrderUnchecked( bool ) ), orderCb, SLOT( setChecked( bool ) ) );
1730+
1731+
QWidget *w = new QWidget( this );
1732+
QLayout *l = new QVBoxLayout;
1733+
l->addWidget( mMapLegend );
1734+
l->addWidget( legendCb );
1735+
w->setLayout( l );
1736+
mLegendDock->setWidget( w );
17201737
addDockWidget( Qt::LeftDockWidgetArea, mLegendDock );
17211738

17221739
// add to the Panel submenu
17231740
mPanelMenu->addAction( mLegendDock->toggleViewAction() );
17241741

17251742
mMapLayerOrder->setWhatsThis( tr( "Map layer list that displays all layers in drawing order." ) );
1726-
mLayerOrderDock = new QDockWidget( tr( "Layerorder" ), this );
1743+
mLayerOrderDock = new QDockWidget( tr( "Layer order" ), this );
17271744
mLayerOrderDock->setObjectName( "Legend" );
17281745
mLayerOrderDock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
1729-
mLayerOrderDock->setWidget( mMapLayerOrder );
1746+
1747+
w = new QWidget( this );
1748+
l = new QVBoxLayout;
1749+
l->addWidget( mMapLayerOrder );
1750+
l->addWidget( orderCb );
1751+
w->setLayout( l );
1752+
mLayerOrderDock->setWidget( w );
17301753
addDockWidget( Qt::LeftDockWidgetArea, mLayerOrderDock );
17311754

1755+
// add to the Panel submenu
1756+
mPanelMenu->addAction( mLayerOrderDock->toggleViewAction() );
1757+
17321758
return;
17331759
}
17341760

0 commit comments

Comments
 (0)
Please sign in to comment.