From 79813e4a8a3c3af72f8fabff80cd848949b4b89d Mon Sep 17 00:00:00 2001 From: ruglory Date: Sat, 31 Jan 2009 00:26:33 +0000 Subject: [PATCH] Context menu added to bring item front/send to back/delete added git-svn-id: https://svn.code.sf.net/p/qlscribe/svn/trunk@33 cac9541e-1b8d-4bfa-827e-589bba606050 --- src/qcdscene.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ src/qcdscene.h | 4 ++++ src/qcdview.cpp | 3 ++- 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/qcdscene.cpp b/src/qcdscene.cpp index 23edf98..50422e4 100644 --- a/src/qcdscene.cpp +++ b/src/qcdscene.cpp @@ -204,6 +204,9 @@ void QCDScene::contextMenuEvent( QGraphicsSceneContextMenuEvent *mouseEvent ) item->setSelected( true ); QMenu menu; menu.addAction( tr( "edit..." ), this, SLOT( onMenuEdit() ) ); + menu.addAction( tr( "bring to Front" ), this, SLOT( onMenuToFront() ) ); + menu.addAction( tr( "send to Back" ), this, SLOT( onMenuToBack() ) ); + menu.addAction( tr( "delete" ), this, SLOT( onMenuDelete() ) ); menu.exec( mouseEvent->screenPos() ); } @@ -215,3 +218,43 @@ void QCDScene::onMenuEdit() QGraphicsItem *item = list.front(); QShapeFactory::instance().edit( item, 0 ); } + +void QCDScene::onMenuToFront() +{ + sendItemTo( true ); +} + +void QCDScene::onMenuToBack() +{ + sendItemTo( false ); +} + +void QCDScene::onMenuDelete() +{ + QList list = selectedItems(); + if( list.empty() ) + return; + QGraphicsItem *item = list.front(); + removeItem( item ); + delete item; + setChanged(); +} + +void QCDScene::sendItemTo( bool front ) +{ + if ( selectedItems().isEmpty()) + return; + + QGraphicsItem *selectedItem = selectedItems().first(); + QList overlapItems = selectedItem->collidingItems(); + + qreal zValue = 0; + foreach( QGraphicsItem *item, overlapItems ) { + if( front && item->zValue() >= zValue ) + zValue = item->zValue() + 0.1; + + if( !front && item->zValue() <= zValue ) + zValue = item->zValue() - 0.1; + } + selectedItem->setZValue( zValue ); +} diff --git a/src/qcdscene.h b/src/qcdscene.h index 1c16f2d..f4787d0 100644 --- a/src/qcdscene.h +++ b/src/qcdscene.h @@ -49,10 +49,14 @@ protected: private slots: void onMenuEdit(); + void onMenuToFront(); + void onMenuToBack(); + void onMenuDelete(); private: void write( QXmlStreamWriter &writer ); void read( QXmlStreamReader &reader ); + void sendItemTo( bool front ); private: QString m_name; diff --git a/src/qcdview.cpp b/src/qcdview.cpp index afe25a5..fe95684 100644 --- a/src/qcdview.cpp +++ b/src/qcdview.cpp @@ -83,7 +83,8 @@ void QCDView::closeEvent( QCloseEvent *event ) inline void drawCircle( QPainter *painter, double radi ) { - painter->drawEllipse( -radi, -radi, radi * 2, radi * 2 ); + painter->drawEllipse( int( -radi ), int( -radi ), + int( radi * 2 ), int( radi * 2 ) ); } void QCDView::drawCD( QPainter *painter, const QRectF & rect, bool alpha )