[QGIS Commit] r9153 - in trunk/qgis: images/themes/default
src/app/composer src/core/composer src/gui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sun Aug 24 11:56:41 EDT 2008
Author: mhugent
Date: 2008-08-24 11:56:41 -0400 (Sun, 24 Aug 2008)
New Revision: 9153
Added:
trunk/qgis/images/themes/default/mActionLowerItems.png
trunk/qgis/images/themes/default/mActionMoveItemsToBottom.png
trunk/qgis/images/themes/default/mActionMoveItemsToTop.png
trunk/qgis/images/themes/default/mActionRaiseItems.png
Modified:
trunk/qgis/src/app/composer/qgscomposer.cpp
trunk/qgis/src/app/composer/qgscomposer.h
trunk/qgis/src/core/composer/qgscomposeritem.cpp
trunk/qgis/src/core/composer/qgscomposermap.cpp
trunk/qgis/src/core/composer/qgscomposition.cpp
trunk/qgis/src/core/composer/qgscomposition.h
trunk/qgis/src/gui/qgscomposerview.cpp
Log:
Added functions to move composer items front/back
Added: trunk/qgis/images/themes/default/mActionLowerItems.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/images/themes/default/mActionLowerItems.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/qgis/images/themes/default/mActionMoveItemsToBottom.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/images/themes/default/mActionMoveItemsToBottom.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/qgis/images/themes/default/mActionMoveItemsToTop.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/images/themes/default/mActionMoveItemsToTop.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/qgis/images/themes/default/mActionRaiseItems.png
===================================================================
(Binary files differ)
Property changes on: trunk/qgis/images/themes/default/mActionRaiseItems.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/qgis/src/app/composer/qgscomposer.cpp
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.cpp 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/app/composer/qgscomposer.cpp 2008-08-24 15:56:41 UTC (rev 9153)
@@ -76,6 +76,10 @@
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionGroupItems.png" ) ), tr( "&Group Items" ), this, SLOT( groupItems() ) );
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionUngroupItems.png" ) ), tr( "&Ungroup Items" ), this, SLOT( ungroupItems() ) );
+ toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionRaiseItems.png")), tr("Raise selected items"), this, SLOT(raiseSelectedItems()));
+ toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionLowerItems.png")), tr("Lower selected items"), this, SLOT(lowerSelectedItems()));
+ toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionMoveItemsToTop.png")), tr("Move selected items to top"), this, SLOT(moveSelectedItemsToTop()));
+ toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionMoveItemsToBottom.png")), tr("Move selected items to bottom"), this, SLOT(moveSelectedItemsToBottom()));
QActionGroup* toggleActionGroup = new QActionGroup( this );
toggleActionGroup->addAction( moveItemContentAction );
@@ -1028,6 +1032,38 @@
}
}
+void QgsComposer::raiseSelectedItems()
+{
+ if(mComposition)
+ {
+ mComposition->raiseSelectedItems();
+ }
+}
+
+void QgsComposer::lowerSelectedItems()
+{
+ if(mComposition)
+ {
+ mComposition->lowerSelectedItems();
+ }
+}
+
+void QgsComposer::moveSelectedItemsToTop()
+{
+ if(mComposition)
+ {
+ mComposition->moveSelectedItemsToTop();
+ }
+}
+
+void QgsComposer::moveSelectedItemsToBottom()
+{
+ if(mComposition)
+ {
+ mComposition->moveSelectedItemsToBottom();
+ }
+}
+
void QgsComposer::moveEvent( QMoveEvent *e ) { saveWindowState(); }
void QgsComposer::resizeEvent( QResizeEvent *e )
@@ -1305,6 +1341,7 @@
mComposition->update();
}
+ mComposition->sortZList();
mView->setComposition( mComposition );
}
Modified: trunk/qgis/src/app/composer/qgscomposer.h
===================================================================
--- trunk/qgis/src/app/composer/qgscomposer.h 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/app/composer/qgscomposer.h 2008-08-24 15:56:41 UTC (rev 9153)
@@ -147,6 +147,18 @@
//! Ungroup selected item group
void ungroupItems( void );
+ //! Move selected items one position up
+ void raiseSelectedItems();
+
+ //!Move selected items one position down
+ void lowerSelectedItems();
+
+ //!Move selected items to top
+ void moveSelectedItemsToTop();
+
+ //!Move selected items to bottom
+ void moveSelectedItemsToBottom();
+
//! read project
void projectRead();
Modified: trunk/qgis/src/core/composer/qgscomposeritem.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposeritem.cpp 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/core/composer/qgscomposeritem.cpp 2008-08-24 15:56:41 UTC (rev 9153)
@@ -37,6 +37,12 @@
QPen defaultPen( QColor( 0, 0, 0 ) );
defaultPen.setWidth( 1 );
setPen( defaultPen );
+
+ //let z-Value be managed by composition
+ if(mComposition)
+ {
+ mComposition->addItemToZList(this);
+ }
}
QgsComposerItem::QgsComposerItem( qreal x, qreal y, qreal width, qreal height, QgsComposition* composition ): QGraphicsRectItem( 0, 0, width, height, 0 ), mComposition( composition ), mBoundingResizeRectangle( 0 ), mFrame( true )
@@ -53,10 +59,20 @@
QPen defaultPen( QColor( 0, 0, 0 ) );
defaultPen.setWidth( 1 );
setPen( defaultPen );
+
+ //let z-Value be managed by composition
+ if(mComposition)
+ {
+ mComposition->addItemToZList(this);
+ }
}
QgsComposerItem::~QgsComposerItem()
{
+ if(mComposition)
+ {
+ mComposition->removeItemFromZList(this);
+ }
}
void QgsComposerItem::setSelected( bool s )
Modified: trunk/qgis/src/core/composer/qgscomposermap.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposermap.cpp 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/core/composer/qgscomposermap.cpp 2008-08-24 15:56:41 UTC (rev 9153)
@@ -63,12 +63,7 @@
mExtent = mMapRenderer->extent();
}
setSceneRect( QRectF( x, y, width, height ) );
-
- QGraphicsRectItem::setZValue( 20 );
-
setToolTip( tr( "Map" ) + " " + QString::number( mId ) );
-
- QGraphicsRectItem::show();
}
QgsComposerMap::QgsComposerMap( QgsComposition *composition )
Modified: trunk/qgis/src/core/composer/qgscomposition.cpp
===================================================================
--- trunk/qgis/src/core/composer/qgscomposition.cpp 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/core/composer/qgscomposition.cpp 2008-08-24 15:56:41 UTC (rev 9153)
@@ -189,3 +189,215 @@
return true;
}
+
+void QgsComposition::addItemToZList(QgsComposerItem* item)
+{
+ if(!item)
+ {
+ return;
+ }
+ mItemZList.push_back(item);
+ qWarning(QString::number(mItemZList.size()).toLocal8Bit().data());
+ item->setZValue(mItemZList.size());
+}
+
+void QgsComposition::removeItemFromZList(QgsComposerItem* item)
+{
+ if(!item)
+ {
+ return;
+ }
+ mItemZList.removeAll(item);
+}
+
+void QgsComposition::raiseSelectedItems()
+{
+ QList<QgsComposerItem*> selectedItems = selectedComposerItems();
+ QList<QgsComposerItem*>::iterator it = selectedItems.begin();
+ for(; it != selectedItems.end(); ++it)
+ {
+ raiseItem(*it);
+ }
+
+ //update all positions
+ updateZValues();
+ update();
+}
+
+void QgsComposition::raiseItem(QgsComposerItem* item)
+{
+ //search item
+ QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
+ if(it.findNext(item))
+ {
+ if(it.hasNext())
+ {
+ it.remove();
+ it.next();
+ it.insert(item);
+ }
+ }
+}
+
+void QgsComposition::lowerSelectedItems()
+{
+ QList<QgsComposerItem*> selectedItems = selectedComposerItems();
+ QList<QgsComposerItem*>::iterator it = selectedItems.begin();
+ for(; it != selectedItems.end(); ++it)
+ {
+ lowerItem(*it);
+ }
+
+ //update all positions
+ updateZValues();
+ update();
+}
+
+void QgsComposition::lowerItem(QgsComposerItem* item)
+{
+ //search item
+ QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
+ if(it.findNext(item))
+ {
+ it.previous();
+ if(it.hasPrevious())
+ {
+ it.remove();
+ it.previous();
+ it.insert(item);
+ }
+ }
+}
+
+void QgsComposition::moveSelectedItemsToTop()
+{
+ QList<QgsComposerItem*> selectedItems = selectedComposerItems();
+ QList<QgsComposerItem*>::iterator it = selectedItems.begin();
+ for(; it != selectedItems.end(); ++it)
+ {
+ moveItemToTop(*it);
+ }
+
+ //update all positions
+ updateZValues();
+ update();
+}
+
+void QgsComposition::moveItemToTop(QgsComposerItem* item)
+{
+ //search item
+ QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
+ if(it.findNext(item))
+ {
+ it.remove();
+ }
+ mItemZList.push_back(item);
+}
+
+void QgsComposition::moveSelectedItemsToBottom()
+{
+ QList<QgsComposerItem*> selectedItems = selectedComposerItems();
+ QList<QgsComposerItem*>::iterator it = selectedItems.begin();
+ for(; it != selectedItems.end(); ++it)
+ {
+ moveItemToBottom(*it);
+ }
+
+ //update all positions
+ updateZValues();
+ update();
+}
+
+void QgsComposition::moveItemToBottom(QgsComposerItem* item)
+{
+ //search item
+ QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
+ if(it.findNext(item))
+ {
+ it.remove();
+ }
+ mItemZList.push_front(item);
+}
+
+void QgsComposition::updateZValues()
+{
+ int counter = 1;
+ QLinkedList<QgsComposerItem*>::iterator it = mItemZList.begin();
+ QgsComposerItem* currentItem = 0;
+
+ for(; it != mItemZList.end(); ++it)
+ {
+ currentItem = *it;
+ if(currentItem)
+ {
+ qWarning(QString::number(counter).toLocal8Bit().data());
+ currentItem->setZValue(counter);
+ }
+ ++counter;
+ }
+}
+
+void QgsComposition::sortZList()
+{
+ //debug: list before sorting
+ qWarning("before sorting");
+ QLinkedList<QgsComposerItem*>::iterator before_it = mItemZList.begin();
+ for(; before_it != mItemZList.end(); ++before_it)
+ {
+ qWarning(QString::number((*before_it)->zValue()).toLocal8Bit().data());
+ }
+
+ QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
+ int previousZ, afterZ; //z values of items before and after
+ QgsComposerItem* previousItem;
+ QgsComposerItem* afterItem;
+
+ while(it.hasNext())
+ {
+ previousItem = it.next();
+ if(previousItem)
+ {
+ previousZ = previousItem->zValue();
+ }
+ else
+ {
+ previousZ = -1;
+ }
+
+ if(!it.hasNext())
+ {
+ break; //this is the end...
+ }
+ afterItem = it.peekNext();
+
+ if(afterItem)
+ {
+ afterZ = afterItem->zValue();
+ }
+ else
+ {
+ afterZ = -1;
+ }
+
+ if(previousZ > afterZ)
+ {
+ //swap items
+ if(previousItem && afterItem)
+ {
+ it.remove();
+ it.next();
+ it.insert(previousItem);
+ it.previous();
+ }
+ }
+ }
+
+ //debug: list after sorting
+ //debug: list before sorting
+ qWarning("after sorting");
+ QLinkedList<QgsComposerItem*>::iterator after_it = mItemZList.begin();
+ for(; after_it != mItemZList.end(); ++after_it)
+ {
+ qWarning(QString::number((*after_it)->zValue()).toLocal8Bit().data());
+ }
+}
Modified: trunk/qgis/src/core/composer/qgscomposition.h
===================================================================
--- trunk/qgis/src/core/composer/qgscomposition.h 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/core/composer/qgscomposition.h 2008-08-24 15:56:41 UTC (rev 9153)
@@ -17,6 +17,7 @@
#define QGSCOMPOSITION_H
#include <QGraphicsScene>
+#include <QLinkedList>
class QgsComposerItem;
class QgsComposerMap;
@@ -27,8 +28,10 @@
class QDomElement;
/** \ingroup MapComposer
- * Graphics scene for map printing. It manages the paper item which always
- * is the item in the back (z-value 0).
+ * Graphics scene for map printing. The class manages the paper item which always
+ * is the item in the back (z-value 0). It maintains the z-Values of the items and stores
+ * them in a list in ascending z-Order. This list can be changed to lower/raise items one position
+ * or to bring them to front/back.
* */
class CORE_EXPORT QgsComposition: public QGraphicsScene
{
@@ -89,16 +92,41 @@
/**Reads settings from xml file*/
bool readXML( const QDomElement& compositionElem, const QDomDocument& doc );
+ /**Adds item to z list. Usually called from constructor of QgsComposerItem*/
+ void addItemToZList(QgsComposerItem* item);
+ /**Removes item from z list. Usually called from destructor of QgsComposerItem*/
+ void removeItemFromZList(QgsComposerItem* item);
+
+ void raiseSelectedItems();
+ void raiseItem(QgsComposerItem* item);
+ void lowerSelectedItems();
+ void lowerItem(QgsComposerItem* item);
+ void moveSelectedItemsToTop();
+ void moveItemToTop(QgsComposerItem* item);
+ void moveSelectedItemsToBottom();
+ void moveItemToBottom(QgsComposerItem* item);
+
+ /**Sorts the zList. The only time where this function needs to be called is from QgsComposer
+ after reading all the items from xml file*/
+ void sortZList();
+
+
private:
/**Pointer to map renderer of QGIS main map*/
QgsMapRenderer* mMapRenderer;
QgsComposition::PlotStyle mPlotStyle;
QGraphicsRectItem* mPaperItem;
+ /**Maintains z-Order of items. Starts with item at position 1 (position 0 is always paper item)*/
+ QLinkedList<QgsComposerItem*> mItemZList;
+
/**Dpi for printout*/
int mPrintoutResolution;
QgsComposition(); //default constructor is forbidden
+
+ /**Reset z-values of items based on position in z list*/
+ void updateZValues();
};
#endif
Modified: trunk/qgis/src/gui/qgscomposerview.cpp
===================================================================
--- trunk/qgis/src/gui/qgscomposerview.cpp 2008-08-24 15:10:54 UTC (rev 9152)
+++ trunk/qgis/src/gui/qgscomposerview.cpp 2008-08-24 15:56:41 UTC (rev 9153)
@@ -101,7 +101,6 @@
emit composerLabelAdded( newLabelItem );
scene()->clearSelection();
newLabelItem->setSceneRect( QRectF( scenePoint.x(), scenePoint.y(), newLabelItem->rect().width(), newLabelItem->rect().height() ) );
- newLabelItem->setZValue( 60 );
newLabelItem->setSelected( true );
emit selectedItemChanged( newLabelItem );
emit actionFinished();
@@ -124,7 +123,6 @@
scene()->addItem( newScaleBar );
emit composerScaleBarAdded( newScaleBar );
scene()->clearSelection();
- newScaleBar->setZValue( 60 );
newScaleBar->setSelected( true );
emit selectedItemChanged( newScaleBar );
emit actionFinished();
@@ -137,7 +135,6 @@
scene()->addItem( newLegend );
emit composerLegendAdded( newLegend );
scene()->clearSelection();
- newLegend->setZValue( 60 );
newLegend->setSceneRect( QRectF( scenePoint.x(), scenePoint.y(), newLegend->rect().width(), newLegend->rect().height() ) );
newLegend->setSelected( true );
emit selectedItemChanged( newLegend );
@@ -150,7 +147,6 @@
scene()->addItem( newPicture );
emit composerPictureAdded( newPicture );
scene()->clearSelection();
- newPicture->setZValue( 60 );
newPicture->setSceneRect( QRectF( scenePoint.x(), scenePoint.y(), 30, 30 ) );
newPicture->setSelected( true );
emit selectedItemChanged( newPicture );
@@ -212,8 +208,6 @@
composerMap->setPreviewMode( QgsComposerMap::Rectangle );
emit composerMapAdded( composerMap );
-
- composerMap->setZValue( 50 );
scene()->addItem( composerMap );
scene()->clearSelection();
More information about the QGIS-commit
mailing list