void QgsComposerView::addComposerShape( QgsComposerShape* shape ) { scene()->addItem( shape ); emit composerShapeAdded( shape ); scene()->clearSelection(); shape->setSelected( true ); emit selectedItemChanged( shape ); pushAddRemoveCommand( shape, tr( "Shape added" ) ); }
void QgsComposerView::addComposerTable( QgsComposerAttributeTable* table ) { scene()->addItem( table ); emit composerTableAdded( table ); scene()->clearSelection(); table->setSelected( true ); emit selectedItemChanged( table ); pushAddRemoveCommand( table, tr( "Table added" ) ); }
void QgsComposerView::addComposerLabel( QgsComposerLabel* label ) { composition()->addItem( label ); emit composerLabelAdded( label ); scene()->clearSelection(); label->setSelected( true ); emit selectedItemChanged( label ); pushAddRemoveCommand( label, tr( "Label added" ) ); }
void QgsComposerView::addComposerPicture( QgsComposerPicture* picture ) { scene()->addItem( picture ); emit composerPictureAdded( picture ); scene()->clearSelection(); picture->setSelected( true ); emit selectedItemChanged( picture ); pushAddRemoveCommand( picture, tr( "Picture added" ) ); }
void QgsComposerView::addComposerArrow( QgsComposerArrow* arrow ) { composition()->addItem( arrow ); emit composerArrowAdded( arrow ); scene()->clearSelection(); arrow->setSelected( true ); emit selectedItemChanged( arrow ); pushAddRemoveCommand( arrow, tr( "Arrow added" ) ); }
void QgsComposerView::addComposerMap( QgsComposerMap* map ) { scene()->addItem( map ); //set default preview mode to cache. Must be done here between adding composer map to scene and emiting signal map->setPreviewMode( QgsComposerMap::Cache ); map->cache(); emit composerMapAdded( map ); scene()->clearSelection(); map->setSelected( true ); emit selectedItemChanged( map ); pushAddRemoveCommand( map, tr( "Map added" ) ); }
void QgsComposerView::addComposerLegend( QgsComposerLegend* legend ) { //take first available map QList<const QgsComposerMap*> mapItemList = composition()->composerMapItems(); if ( mapItemList.size() > 0 ) { legend->setComposerMap( mapItemList.at( 0 ) ); } scene()->addItem( legend ); emit composerLegendAdded( legend ); scene()->clearSelection(); legend->setSelected( true ); emit selectedItemChanged( legend ); pushAddRemoveCommand( legend, tr( "Legend added" ) ); }
void QgsComposerView::addComposerScaleBar( QgsComposerScaleBar* scaleBar ) { //take first available map QList<const QgsComposerMap*> mapItemList = composition()->composerMapItems(); if ( mapItemList.size() > 0 ) { scaleBar->setComposerMap( mapItemList.at( 0 ) ); } scaleBar->applyDefaultSize(); //4 segments, 1/5 of composer map width scene()->addItem( scaleBar ); emit composerScaleBarAdded( scaleBar ); scene()->clearSelection(); scaleBar->setSelected( true ); emit selectedItemChanged( scaleBar ); pushAddRemoveCommand( scaleBar, tr( "Scale bar added" ) ); }
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::addItemsFromXML( const QDomElement& elem, const QDomDocument& doc, QMap< QgsComposerMap*, int >* mapsToRestore, bool addUndoCommands, QPointF* pos ) { QDomNodeList composerLabelList = elem.elementsByTagName( "ComposerLabel" ); for ( int i = 0; i < composerLabelList.size(); ++i ) { QDomElement currentComposerLabelElem = composerLabelList.at( i ).toElement(); QgsComposerLabel* newLabel = new QgsComposerLabel( this ); newLabel->readXML( currentComposerLabelElem, doc ); if ( pos ) { newLabel->setItemPosition( pos->x(), pos->y() ); } addComposerLabel( newLabel ); if ( addUndoCommands ) { pushAddRemoveCommand( newLabel, tr( "Label added" ) ); } } // map QDomNodeList composerMapList = elem.elementsByTagName( "ComposerMap" ); for ( int i = 0; i < composerMapList.size(); ++i ) { QDomElement currentComposerMapElem = composerMapList.at( i ).toElement(); QgsComposerMap* newMap = new QgsComposerMap( this ); newMap->readXML( currentComposerMapElem, doc ); newMap->assignFreeId(); if ( mapsToRestore ) { mapsToRestore->insert( newMap, ( int )( newMap->previewMode() ) ); newMap->setPreviewMode( QgsComposerMap::Rectangle ); } addComposerMap( newMap, false ); if ( pos ) { newMap->setItemPosition( pos->x(), pos->y() ); } if ( addUndoCommands ) { pushAddRemoveCommand( newMap, tr( "Map added" ) ); } } // arrow QDomNodeList composerArrowList = elem.elementsByTagName( "ComposerArrow" ); for ( int i = 0; i < composerArrowList.size(); ++i ) { QDomElement currentComposerArrowElem = composerArrowList.at( i ).toElement(); QgsComposerArrow* newArrow = new QgsComposerArrow( this ); newArrow->readXML( currentComposerArrowElem, doc ); if ( pos ) { newArrow->setItemPosition( pos->x(), pos->y() ); } addComposerArrow( newArrow ); if ( addUndoCommands ) { pushAddRemoveCommand( newArrow, tr( "Arrow added" ) ); } } // scalebar QDomNodeList composerScaleBarList = elem.elementsByTagName( "ComposerScaleBar" ); for ( int i = 0; i < composerScaleBarList.size(); ++i ) { QDomElement currentComposerScaleBarElem = composerScaleBarList.at( i ).toElement(); QgsComposerScaleBar* newScaleBar = new QgsComposerScaleBar( this ); newScaleBar->readXML( currentComposerScaleBarElem, doc ); if ( pos ) { newScaleBar->setItemPosition( pos->x(), pos->y() ); } addComposerScaleBar( newScaleBar ); if ( addUndoCommands ) { pushAddRemoveCommand( newScaleBar, tr( "Scale bar added" ) ); } } // shape QDomNodeList composerShapeList = elem.elementsByTagName( "ComposerShape" ); for ( int i = 0; i < composerShapeList.size(); ++i ) { QDomElement currentComposerShapeElem = composerShapeList.at( i ).toElement(); QgsComposerShape* newShape = new QgsComposerShape( this ); newShape->readXML( currentComposerShapeElem, doc ); if ( pos ) { newShape->setItemPosition( pos->x(), pos->y() ); } addComposerShape( newShape ); if ( addUndoCommands ) { pushAddRemoveCommand( newShape, tr( "Shape added" ) ); } } // picture QDomNodeList composerPictureList = elem.elementsByTagName( "ComposerPicture" ); for ( int i = 0; i < composerPictureList.size(); ++i ) { QDomElement currentComposerPictureElem = composerPictureList.at( i ).toElement(); QgsComposerPicture* newPicture = new QgsComposerPicture( this ); newPicture->readXML( currentComposerPictureElem, doc ); if ( pos ) { newPicture->setItemPosition( pos->x(), pos->y() ); } addComposerPicture( newPicture ); if ( addUndoCommands ) { pushAddRemoveCommand( newPicture, tr( "Picture added" ) ); } } // legend QDomNodeList composerLegendList = elem.elementsByTagName( "ComposerLegend" ); for ( int i = 0; i < composerLegendList.size(); ++i ) { QDomElement currentComposerLegendElem = composerLegendList.at( i ).toElement(); QgsComposerLegend* newLegend = new QgsComposerLegend( this ); newLegend->readXML( currentComposerLegendElem, doc ); if ( pos ) { newLegend->setItemPosition( pos->x(), pos->y() ); } addComposerLegend( newLegend ); if ( addUndoCommands ) { pushAddRemoveCommand( newLegend, tr( "Legend added" ) ); } } // table QDomNodeList composerTableList = elem.elementsByTagName( "ComposerAttributeTable" ); for ( int i = 0; i < composerTableList.size(); ++i ) { QDomElement currentComposerTableElem = composerTableList.at( i ).toElement(); QgsComposerAttributeTable* newTable = new QgsComposerAttributeTable( this ); newTable->readXML( currentComposerTableElem, doc ); if ( pos ) { newTable->setItemPosition( pos->x(), pos->y() ); } addComposerTable( newTable ); if ( addUndoCommands ) { pushAddRemoveCommand( newTable, tr( "Table added" ) ); } } //html QDomNodeList composerHtmlList = elem.elementsByTagName( "ComposerHtml" ); for ( int i = 0; i < composerHtmlList.size(); ++i ) { QDomElement currentHtmlElem = composerHtmlList.at( i ).toElement(); QgsComposerHtml* newHtml = new QgsComposerHtml( this, false ); newHtml->readXML( currentHtmlElem, doc ); newHtml->setCreateUndoCommands( true ); this->addMultiFrame( newHtml ); } }
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; } } } } } }