void QgsComposerView::keyPressEvent( QKeyEvent * e ) { if ( e->key() == Qt::Key_Shift ) { mShiftKeyPressed = true; } if ( !composition() ) { return; } QList<QgsComposerItem*> composerItemList = composition()->selectedComposerItems(); QList<QgsComposerItem*>::iterator itemIt = composerItemList.begin(); //delete selected items if ( e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace ) { for ( ; itemIt != composerItemList.end(); ++itemIt ) { QgsComposerMap* map = dynamic_cast<QgsComposerMap *>( *itemIt ); if ( !map || !map->isDrawing() ) //don't delete a composer map while it draws { composition()->removeItem( *itemIt ); QgsComposerItemGroup* itemGroup = dynamic_cast<QgsComposerItemGroup*>( *itemIt ); if ( itemGroup && composition() ) { //add add/remove item command for every item in the group QUndoCommand* parentCommand = new QUndoCommand( tr( "Remove item group" ) ); QSet<QgsComposerItem*> groupedItems = itemGroup->items(); QSet<QgsComposerItem*>::iterator it = groupedItems.begin(); for ( ; it != groupedItems.end(); ++it ) { QgsAddRemoveItemCommand* subcommand = new QgsAddRemoveItemCommand( QgsAddRemoveItemCommand::Removed, *it, composition(), "", parentCommand ); connectAddRemoveCommandSignals( subcommand ); emit itemRemoved( *it ); } composition()->undoStack()->push( parentCommand ); delete itemGroup; emit itemRemoved( itemGroup ); } else { emit itemRemoved( *itemIt ); pushAddRemoveCommand( *itemIt, tr( "Item deleted" ), QgsAddRemoveItemCommand::Removed ); } } } } else if ( e->key() == Qt::Key_Left ) { for ( ; itemIt != composerItemList.end(); ++itemIt ) { ( *itemIt )->move( -1.0, 0.0 ); } } else if ( e->key() == Qt::Key_Right ) { for ( ; itemIt != composerItemList.end(); ++itemIt ) { ( *itemIt )->move( 1.0, 0.0 ); } } else if ( e->key() == Qt::Key_Down ) { for ( ; itemIt != composerItemList.end(); ++itemIt ) { ( *itemIt )->move( 0.0, 1.0 ); } } else if ( e->key() == Qt::Key_Up ) { for ( ; itemIt != composerItemList.end(); ++itemIt ) { ( *itemIt )->move( 0.0, -1.0 ); } } }
void QgsComposition::removeComposerItem( QgsComposerItem* item, bool createCommand ) { QgsComposerMap* map = dynamic_cast<QgsComposerMap *>( item ); if ( !map || !map->isDrawing() ) //don't delete a composer map while it draws { removeItem( item ); QgsComposerItemGroup* itemGroup = dynamic_cast<QgsComposerItemGroup*>( item ); if ( itemGroup ) { //add add/remove item command for every item in the group QUndoCommand* parentCommand = new QUndoCommand( tr( "Remove item group" ) ); QSet<QgsComposerItem*> groupedItems = itemGroup->items(); QSet<QgsComposerItem*>::iterator it = groupedItems.begin(); for ( ; it != groupedItems.end(); ++it ) { QgsAddRemoveItemCommand* subcommand = new QgsAddRemoveItemCommand( QgsAddRemoveItemCommand::Removed, *it, this, "", parentCommand ); connectAddRemoveCommandSignals( subcommand ); emit itemRemoved( *it ); } undoStack()->push( parentCommand ); delete itemGroup; emit itemRemoved( itemGroup ); } else { bool frameItem = ( item->type() == QgsComposerItem::ComposerFrame ); QgsComposerMultiFrame* multiFrame = 0; if ( createCommand ) { if ( frameItem ) //multiframe tracks item changes { multiFrame = static_cast<QgsComposerFrame*>( item )->multiFrame(); item->beginItemCommand( tr( "Frame deleted" ) ); emit itemRemoved( item ); item->endItemCommand(); } else { emit itemRemoved( item ); pushAddRemoveCommand( item, tr( "Item deleted" ), QgsAddRemoveItemCommand::Removed ); } } else { emit itemRemoved( item ); } //check if there are frames left. If not, remove the multi frame if ( frameItem && multiFrame ) { if ( multiFrame->nFrames() < 1 ) { removeMultiFrame( multiFrame ); if ( createCommand ) { QgsAddRemoveMultiFrameCommand* command = new QgsAddRemoveMultiFrameCommand( QgsAddRemoveMultiFrameCommand::Removed, multiFrame, this, tr( "Multiframe removed" ) ); undoStack()->push( command ); } else { delete multiFrame; } } } } } }