Skip to content

Commit

Permalink
More drawing order related changes...
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Nov 20, 2012
1 parent 32e981d commit 49cadd5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/app/legend/qgslegend.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -1182,7 +1182,7 @@ QList<DrawingOrderInfo> QgsLegend::drawingOrder()
} }
else if ( lgroup ) else if ( lgroup )
{ {
if ( lgroup->isEmbedded() ) if ( lgroup->isEmbedded() && !(lgroup->parent()) )
{ {
QList<QgsLegendLayer*> groupLayers = lgroup->legendLayers(); QList<QgsLegendLayer*> groupLayers = lgroup->legendLayers();
QList<QgsLegendLayer*>::const_iterator groupLayerIt = groupLayers.constBegin(); QList<QgsLegendLayer*>::const_iterator groupLayerIt = groupLayers.constBegin();
Expand Down
33 changes: 28 additions & 5 deletions src/mapserver/qgsprojectparser.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2246,7 +2246,7 @@ QgsRectangle QgsProjectParser::layerBoundingBoxInProjectCRS( const QDomElement&
} }


void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers, void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers,
bool embedded ) const bool embedded, int embeddedOrder ) const
{ {
if ( elem.isNull() ) if ( elem.isNull() )
{ {
Expand All @@ -2255,9 +2255,17 @@ void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder,


if ( elem.tagName() == "legendlayer" ) if ( elem.tagName() == "legendlayer" )
{ {
if ( useDrawingOrder ) if ( useDrawingOrder || embeddedOrder != -1 )
{ {
int order = elem.attribute( "drawingOrder", "-1" ).toInt(); int order = -1;
if( embedded )
{
order = embeddedOrder;
}
else
{
order = drawingOrder( elem );
}
orderedLayerList.insertMulti( order + nEmbeddedGroupLayers, elem.attribute( "name" ) ); orderedLayerList.insertMulti( order + nEmbeddedGroupLayers, elem.attribute( "name" ) );
} }
else else
Expand All @@ -2278,6 +2286,7 @@ void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder,
//load layers / elements from project file //load layers / elements from project file
QString project = convertToAbsolutePath( elem.attribute( "project" ) ); QString project = convertToAbsolutePath( elem.attribute( "project" ) );
QString embeddedGroupName = elem.attribute( "name" ); QString embeddedGroupName = elem.attribute( "name" );
int embedDrawingOrder = elem.attribute( "drawingOrder", "-1" ).toInt();
QgsProjectParser* p = dynamic_cast<QgsProjectParser*>( QgsConfigCache::instance()->searchConfiguration( project ) ); QgsProjectParser* p = dynamic_cast<QgsProjectParser*>( QgsConfigCache::instance()->searchConfiguration( project ) );
if ( p ) if ( p )
{ {
Expand All @@ -2286,7 +2295,7 @@ void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder,
{ {
if ( groupElem.attribute( "name" ) == embeddedGroupName ) if ( groupElem.attribute( "name" ) == embeddedGroupName )
{ {
addDrawingOrder( groupElem, false, orderedLayerList, nEmbeddedGroupLayers, true ); addDrawingOrder( groupElem, false, orderedLayerList, nEmbeddedGroupLayers, true, embedDrawingOrder );
break; break;
} }
} }
Expand All @@ -2298,7 +2307,8 @@ void QgsProjectParser::addDrawingOrder( QDomElement elem, bool useDrawingOrder,
QDomElement childElem; QDomElement childElem;
for ( int i = 0; i < childList.size(); ++i ) for ( int i = 0; i < childList.size(); ++i )
{ {
addDrawingOrder( childList.at( i ).toElement(), useDrawingOrder, orderedLayerList, nEmbeddedGroupLayers, false ); addDrawingOrder( childList.at( i ).toElement(), useDrawingOrder, orderedLayerList, nEmbeddedGroupLayers,
embedded, embeddedOrder );
} }
} }
} }
Expand Down Expand Up @@ -2687,3 +2697,16 @@ void QgsProjectParser::drawAnnotationRectangle( QPainter* p, const QDomElement&


p->drawRect( QRectF( xPos, yPos, itemWidth, itemHeight ) ); p->drawRect( QRectF( xPos, yPos, itemWidth, itemHeight ) );
} }

int QgsProjectParser::drawingOrder( const QDomElement& elem )
{
QDomElement e = elem;
while( !e.isNull() )
{
if( e.hasAttribute( "drawingOrder" ) )
{
return e.attribute( "drawingOrder" ).toInt();
}
e = e.parentNode().toElement();
}
}
5 changes: 4 additions & 1 deletion src/mapserver/qgsprojectparser.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class QgsProjectParser: public QgsConfigParser
void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const; void addDrawingOrder( QDomElement& parentElem, QDomDocument& doc ) const;
/**Adds drawing order info from layer element or group element (recursive)*/ /**Adds drawing order info from layer element or group element (recursive)*/
void addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers, void addDrawingOrder( QDomElement elem, bool useDrawingOrder, QMap<int, QString>& orderedLayerList, int& nEmbeddedGroupLayers,
bool embedded = false ) const; bool embedded = false, int embeddedOrder = -1 ) const;
/**Returns project layers by id*/ /**Returns project layers by id*/
void projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const; void projectLayerMap( QMap<QString, QgsMapLayer*>& layerMap ) const;


Expand Down Expand Up @@ -245,6 +245,9 @@ class QgsProjectParser: public QgsConfigParser
@param itemWidth item width in pixels in the QGIS project (screen pixels) @param itemWidth item width in pixels in the QGIS project (screen pixels)
@param itemHeight item height in pixels in the QGIS project (screen pixels)*/ @param itemHeight item height in pixels in the QGIS project (screen pixels)*/
static void drawAnnotationRectangle( QPainter* p, const QDomElement& elem, double scaleFactor, double xPos, double yPos, int itemWidth, int itemHeight ); static void drawAnnotationRectangle( QPainter* p, const QDomElement& elem, double scaleFactor, double xPos, double yPos, int itemWidth, int itemHeight );

/**Returns the drawing order attribute of the element or of one parent. Returns -1 if the element and all the parents don't have drawing order attribute*/
static int drawingOrder( const QDomElement& elem );
}; };


#endif // QGSPROJECTPARSER_H #endif // QGSPROJECTPARSER_H

0 comments on commit 49cadd5

Please sign in to comment.