Skip to content

Commit afbba96

Browse files
author
mhugent
committed
Added functions to move composer items front/back
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@9153 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent b551267 commit afbba96

11 files changed

+307
-13
lines changed
860 Bytes
Loading
430 Bytes
Loading
514 Bytes
Loading
877 Bytes
Loading

src/app/composer/qgscomposer.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ QgsComposer::QgsComposer( QgisApp *qgis ): QMainWindow()
7676

7777
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionGroupItems.png" ) ), tr( "&Group Items" ), this, SLOT( groupItems() ) );
7878
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionUngroupItems.png" ) ), tr( "&Ungroup Items" ), this, SLOT( ungroupItems() ) );
79+
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionRaiseItems.png")), tr("Raise selected items"), this, SLOT(raiseSelectedItems()));
80+
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionLowerItems.png")), tr("Lower selected items"), this, SLOT(lowerSelectedItems()));
81+
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionMoveItemsToTop.png")), tr("Move selected items to top"), this, SLOT(moveSelectedItemsToTop()));
82+
toolBar->addAction( QIcon( QPixmap( myIconPath + "mActionMoveItemsToBottom.png")), tr("Move selected items to bottom"), this, SLOT(moveSelectedItemsToBottom()));
7983

8084
QActionGroup* toggleActionGroup = new QActionGroup( this );
8185
toggleActionGroup->addAction( moveItemContentAction );
@@ -1028,6 +1032,38 @@ void QgsComposer::ungroupItems( void )
10281032
}
10291033
}
10301034

1035+
void QgsComposer::raiseSelectedItems()
1036+
{
1037+
if(mComposition)
1038+
{
1039+
mComposition->raiseSelectedItems();
1040+
}
1041+
}
1042+
1043+
void QgsComposer::lowerSelectedItems()
1044+
{
1045+
if(mComposition)
1046+
{
1047+
mComposition->lowerSelectedItems();
1048+
}
1049+
}
1050+
1051+
void QgsComposer::moveSelectedItemsToTop()
1052+
{
1053+
if(mComposition)
1054+
{
1055+
mComposition->moveSelectedItemsToTop();
1056+
}
1057+
}
1058+
1059+
void QgsComposer::moveSelectedItemsToBottom()
1060+
{
1061+
if(mComposition)
1062+
{
1063+
mComposition->moveSelectedItemsToBottom();
1064+
}
1065+
}
1066+
10311067
void QgsComposer::moveEvent( QMoveEvent *e ) { saveWindowState(); }
10321068

10331069
void QgsComposer::resizeEvent( QResizeEvent *e )
@@ -1305,6 +1341,7 @@ void QgsComposer::readXML( const QDomDocument& doc )
13051341
mComposition->update();
13061342
}
13071343

1344+
mComposition->sortZList();
13081345
mView->setComposition( mComposition );
13091346
}
13101347

src/app/composer/qgscomposer.h

+12
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,18 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
147147
//! Ungroup selected item group
148148
void ungroupItems( void );
149149

150+
//! Move selected items one position up
151+
void raiseSelectedItems();
152+
153+
//!Move selected items one position down
154+
void lowerSelectedItems();
155+
156+
//!Move selected items to top
157+
void moveSelectedItemsToTop();
158+
159+
//!Move selected items to bottom
160+
void moveSelectedItemsToBottom();
161+
150162
//! read project
151163
void projectRead();
152164

src/core/composer/qgscomposeritem.cpp

+16
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ QgsComposerItem::QgsComposerItem( QgsComposition* composition ): QGraphicsRectIt
3737
QPen defaultPen( QColor( 0, 0, 0 ) );
3838
defaultPen.setWidth( 1 );
3939
setPen( defaultPen );
40+
41+
//let z-Value be managed by composition
42+
if(mComposition)
43+
{
44+
mComposition->addItemToZList(this);
45+
}
4046
}
4147

4248
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 @@ QgsComposerItem::QgsComposerItem( qreal x, qreal y, qreal width, qreal height, Q
5359
QPen defaultPen( QColor( 0, 0, 0 ) );
5460
defaultPen.setWidth( 1 );
5561
setPen( defaultPen );
62+
63+
//let z-Value be managed by composition
64+
if(mComposition)
65+
{
66+
mComposition->addItemToZList(this);
67+
}
5668
}
5769

5870
QgsComposerItem::~QgsComposerItem()
5971
{
72+
if(mComposition)
73+
{
74+
mComposition->removeItemFromZList(this);
75+
}
6076
}
6177

6278
void QgsComposerItem::setSelected( bool s )

src/core/composer/qgscomposermap.cpp

-5
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
6363
mExtent = mMapRenderer->extent();
6464
}
6565
setSceneRect( QRectF( x, y, width, height ) );
66-
67-
QGraphicsRectItem::setZValue( 20 );
68-
6966
setToolTip( tr( "Map" ) + " " + QString::number( mId ) );
70-
71-
QGraphicsRectItem::show();
7267
}
7368

7469
QgsComposerMap::QgsComposerMap( QgsComposition *composition )

src/core/composer/qgscomposition.cpp

+212
Original file line numberDiff line numberDiff line change
@@ -189,3 +189,215 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
189189

190190
return true;
191191
}
192+
193+
void QgsComposition::addItemToZList(QgsComposerItem* item)
194+
{
195+
if(!item)
196+
{
197+
return;
198+
}
199+
mItemZList.push_back(item);
200+
qWarning(QString::number(mItemZList.size()).toLocal8Bit().data());
201+
item->setZValue(mItemZList.size());
202+
}
203+
204+
void QgsComposition::removeItemFromZList(QgsComposerItem* item)
205+
{
206+
if(!item)
207+
{
208+
return;
209+
}
210+
mItemZList.removeAll(item);
211+
}
212+
213+
void QgsComposition::raiseSelectedItems()
214+
{
215+
QList<QgsComposerItem*> selectedItems = selectedComposerItems();
216+
QList<QgsComposerItem*>::iterator it = selectedItems.begin();
217+
for(; it != selectedItems.end(); ++it)
218+
{
219+
raiseItem(*it);
220+
}
221+
222+
//update all positions
223+
updateZValues();
224+
update();
225+
}
226+
227+
void QgsComposition::raiseItem(QgsComposerItem* item)
228+
{
229+
//search item
230+
QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
231+
if(it.findNext(item))
232+
{
233+
if(it.hasNext())
234+
{
235+
it.remove();
236+
it.next();
237+
it.insert(item);
238+
}
239+
}
240+
}
241+
242+
void QgsComposition::lowerSelectedItems()
243+
{
244+
QList<QgsComposerItem*> selectedItems = selectedComposerItems();
245+
QList<QgsComposerItem*>::iterator it = selectedItems.begin();
246+
for(; it != selectedItems.end(); ++it)
247+
{
248+
lowerItem(*it);
249+
}
250+
251+
//update all positions
252+
updateZValues();
253+
update();
254+
}
255+
256+
void QgsComposition::lowerItem(QgsComposerItem* item)
257+
{
258+
//search item
259+
QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
260+
if(it.findNext(item))
261+
{
262+
it.previous();
263+
if(it.hasPrevious())
264+
{
265+
it.remove();
266+
it.previous();
267+
it.insert(item);
268+
}
269+
}
270+
}
271+
272+
void QgsComposition::moveSelectedItemsToTop()
273+
{
274+
QList<QgsComposerItem*> selectedItems = selectedComposerItems();
275+
QList<QgsComposerItem*>::iterator it = selectedItems.begin();
276+
for(; it != selectedItems.end(); ++it)
277+
{
278+
moveItemToTop(*it);
279+
}
280+
281+
//update all positions
282+
updateZValues();
283+
update();
284+
}
285+
286+
void QgsComposition::moveItemToTop(QgsComposerItem* item)
287+
{
288+
//search item
289+
QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
290+
if(it.findNext(item))
291+
{
292+
it.remove();
293+
}
294+
mItemZList.push_back(item);
295+
}
296+
297+
void QgsComposition::moveSelectedItemsToBottom()
298+
{
299+
QList<QgsComposerItem*> selectedItems = selectedComposerItems();
300+
QList<QgsComposerItem*>::iterator it = selectedItems.begin();
301+
for(; it != selectedItems.end(); ++it)
302+
{
303+
moveItemToBottom(*it);
304+
}
305+
306+
//update all positions
307+
updateZValues();
308+
update();
309+
}
310+
311+
void QgsComposition::moveItemToBottom(QgsComposerItem* item)
312+
{
313+
//search item
314+
QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
315+
if(it.findNext(item))
316+
{
317+
it.remove();
318+
}
319+
mItemZList.push_front(item);
320+
}
321+
322+
void QgsComposition::updateZValues()
323+
{
324+
int counter = 1;
325+
QLinkedList<QgsComposerItem*>::iterator it = mItemZList.begin();
326+
QgsComposerItem* currentItem = 0;
327+
328+
for(; it != mItemZList.end(); ++it)
329+
{
330+
currentItem = *it;
331+
if(currentItem)
332+
{
333+
qWarning(QString::number(counter).toLocal8Bit().data());
334+
currentItem->setZValue(counter);
335+
}
336+
++counter;
337+
}
338+
}
339+
340+
void QgsComposition::sortZList()
341+
{
342+
//debug: list before sorting
343+
qWarning("before sorting");
344+
QLinkedList<QgsComposerItem*>::iterator before_it = mItemZList.begin();
345+
for(; before_it != mItemZList.end(); ++before_it)
346+
{
347+
qWarning(QString::number((*before_it)->zValue()).toLocal8Bit().data());
348+
}
349+
350+
QMutableLinkedListIterator<QgsComposerItem*> it(mItemZList);
351+
int previousZ, afterZ; //z values of items before and after
352+
QgsComposerItem* previousItem;
353+
QgsComposerItem* afterItem;
354+
355+
while(it.hasNext())
356+
{
357+
previousItem = it.next();
358+
if(previousItem)
359+
{
360+
previousZ = previousItem->zValue();
361+
}
362+
else
363+
{
364+
previousZ = -1;
365+
}
366+
367+
if(!it.hasNext())
368+
{
369+
break; //this is the end...
370+
}
371+
afterItem = it.peekNext();
372+
373+
if(afterItem)
374+
{
375+
afterZ = afterItem->zValue();
376+
}
377+
else
378+
{
379+
afterZ = -1;
380+
}
381+
382+
if(previousZ > afterZ)
383+
{
384+
//swap items
385+
if(previousItem && afterItem)
386+
{
387+
it.remove();
388+
it.next();
389+
it.insert(previousItem);
390+
it.previous();
391+
}
392+
}
393+
}
394+
395+
//debug: list after sorting
396+
//debug: list before sorting
397+
qWarning("after sorting");
398+
QLinkedList<QgsComposerItem*>::iterator after_it = mItemZList.begin();
399+
for(; after_it != mItemZList.end(); ++after_it)
400+
{
401+
qWarning(QString::number((*after_it)->zValue()).toLocal8Bit().data());
402+
}
403+
}

0 commit comments

Comments
 (0)