@@ -487,10 +487,8 @@ void QgsComposerView::mouseDoubleClickEvent( QMouseEvent* e )
487
487
e->ignore ();
488
488
}
489
489
490
- void QgsComposerView::keyPressEvent ( QKeyEvent * e )
490
+ void QgsComposerView::copyItems ( ClipboardMode mode )
491
491
{
492
- // TODO : those should be actions (so we could also display menu items and/or toolbar items)
493
-
494
492
if ( !composition () )
495
493
{
496
494
return ;
@@ -499,93 +497,123 @@ void QgsComposerView::keyPressEvent( QKeyEvent * e )
499
497
QList<QgsComposerItem*> composerItemList = composition ()->selectedComposerItems ();
500
498
QList<QgsComposerItem*>::iterator itemIt = composerItemList.begin ();
501
499
502
- // increment used for cursor key item movement
503
- double increment = 1.0 ;
504
- if ( e-> modifiers () & Qt::ShiftModifier )
500
+ QDomDocument doc;
501
+ QDomElement documentElement = doc. createElement ( " ComposerItemClipboard " ) ;
502
+ for ( ; itemIt != composerItemList. end (); ++itemIt )
505
503
{
506
- // holding shift while pressing cursor keys results in a big step
507
- increment = 10.0 ;
508
- }
509
-
510
- if ( e->matches ( QKeySequence::Copy ) || e->matches ( QKeySequence::Cut ) )
511
- {
512
- QDomDocument doc;
513
- QDomElement documentElement = doc.createElement ( " ComposerItemClipboard" );
514
- for ( ; itemIt != composerItemList.end (); ++itemIt )
504
+ // copy each item in a group
505
+ QgsComposerItemGroup* itemGroup = dynamic_cast <QgsComposerItemGroup*>( *itemIt );
506
+ if ( itemGroup && composition () )
515
507
{
516
- // copy each item in a group
517
- QgsComposerItemGroup* itemGroup = dynamic_cast <QgsComposerItemGroup*>( *itemIt );
518
- if ( itemGroup && composition () )
519
- {
520
- QSet<QgsComposerItem*> groupedItems = itemGroup->items ();
521
- QSet<QgsComposerItem*>::iterator it = groupedItems.begin ();
522
- for ( ; it != groupedItems.end (); ++it )
523
- {
524
- ( *it )->writeXML ( documentElement, doc );
525
- }
526
- }
527
- ( *itemIt )->writeXML ( documentElement, doc );
528
- if ( e->matches ( QKeySequence::Cut ) )
508
+ QSet<QgsComposerItem*> groupedItems = itemGroup->items ();
509
+ QSet<QgsComposerItem*>::iterator it = groupedItems.begin ();
510
+ for ( ; it != groupedItems.end (); ++it )
529
511
{
530
- composition ( )->removeComposerItem ( *itemIt );
512
+ ( *it )->writeXML ( documentElement, doc );
531
513
}
532
514
}
533
- doc.appendChild ( documentElement );
515
+ ( *itemIt )->writeXML ( documentElement, doc );
516
+ if ( mode == ClipboardModeCut )
517
+ {
518
+ composition ()->removeComposerItem ( *itemIt );
519
+ }
520
+ }
521
+ doc.appendChild ( documentElement );
534
522
535
- // if it's a copy, we have to remove the UUIDs since we don't want any duplicate UUID
536
- if ( e->matches ( QKeySequence::Copy ) )
523
+ // if it's a copy, we have to remove the UUIDs since we don't want any duplicate UUID
524
+ if ( mode == ClipboardModeCopy )
525
+ {
526
+ // remove all uuid attributes
527
+ QDomNodeList composerItemsNodes = doc.elementsByTagName ( " ComposerItem" );
528
+ for ( int i = 0 ; i < composerItemsNodes.count (); ++i )
537
529
{
538
- // remove all uuid attributes
539
- QDomNodeList composerItemsNodes = doc.elementsByTagName ( " ComposerItem" );
540
- for ( int i = 0 ; i < composerItemsNodes.count (); ++i )
530
+ QDomNode composerItemNode = composerItemsNodes.at ( i );
531
+ if ( composerItemNode.isElement () )
541
532
{
542
- QDomNode composerItemNode = composerItemsNodes.at ( i );
543
- if ( composerItemNode.isElement () )
544
- {
545
- composerItemNode.toElement ().removeAttribute ( " uuid" );
546
- }
533
+ composerItemNode.toElement ().removeAttribute ( " uuid" );
547
534
}
548
535
}
536
+ }
537
+
538
+ QMimeData *mimeData = new QMimeData;
539
+ mimeData->setData ( " text/xml" , doc.toByteArray () );
540
+ QClipboard *clipboard = QApplication::clipboard ();
541
+ clipboard->setMimeData ( mimeData );
542
+ }
549
543
550
- QMimeData *mimeData = new QMimeData;
551
- mimeData->setData ( " text/xml" , doc.toByteArray () );
552
- QClipboard *clipboard = QApplication::clipboard ();
553
- clipboard->setMimeData ( mimeData );
544
+ void QgsComposerView::pasteItems ( PasteMode mode )
545
+ {
546
+ if ( !composition () )
547
+ {
548
+ return ;
554
549
}
555
550
556
- // TODO : "Ctrl+Shift+V" is one way to paste, but on some platefoms you can use Shift+Ins and F18
557
- if ( e->matches ( QKeySequence::Paste ) || ( e->key () == Qt::Key_V && e->modifiers () & Qt::ControlModifier && e->modifiers () & Qt::ShiftModifier ) )
551
+ QDomDocument doc;
552
+ QClipboard *clipboard = QApplication::clipboard ();
553
+ if ( doc.setContent ( clipboard->mimeData ()->data ( " text/xml" ) ) )
558
554
{
559
- QDomDocument doc;
560
- QClipboard *clipboard = QApplication::clipboard ();
561
- if ( doc.setContent ( clipboard->mimeData ()->data ( " text/xml" ) ) )
555
+ QDomElement docElem = doc.documentElement ();
556
+ if ( docElem.tagName () == " ComposerItemClipboard" )
562
557
{
563
- QDomElement docElem = doc.documentElement ();
564
- if ( docElem.tagName () == " ComposerItemClipboard" )
558
+ if ( composition () )
565
559
{
566
- if ( composition () )
560
+ QPointF pt;
561
+ if ( mode == PasteModeCursor )
567
562
{
568
- QPointF pt = mapToScene ( mapFromGlobal ( QCursor::pos () ) );
569
- bool pasteInPlace = ( e->modifiers () & Qt::ShiftModifier );
570
- composition ()->addItemsFromXML ( docElem, doc, 0 , true , &pt, pasteInPlace );
563
+ // place items at cursor position
564
+ pt = mapToScene ( mapFromGlobal ( QCursor::pos () ) );
571
565
}
566
+ else
567
+ {
568
+ // place items in center of viewport
569
+ pt = mapToScene ( viewport ()->rect ().center () );
570
+ }
571
+ bool pasteInPlace = ( mode == PasteModeInPlace );
572
+ composition ()->addItemsFromXML ( docElem, doc, 0 , true , &pt, pasteInPlace );
572
573
}
573
574
}
574
575
}
576
+ }
577
+
578
+ void QgsComposerView::deleteSelectedItems ()
579
+ {
580
+ if ( !composition () )
581
+ {
582
+ return ;
583
+ }
584
+
585
+ QList<QgsComposerItem*> composerItemList = composition ()->selectedComposerItems ();
586
+ QList<QgsComposerItem*>::iterator itemIt = composerItemList.begin ();
575
587
576
588
// delete selected items
577
- if ( e-> key () == Qt::Key_Delete || e-> key () == Qt::Key_Backspace )
589
+ for ( ; itemIt != composerItemList. end (); ++itemIt )
578
590
{
579
- for ( ; itemIt != composerItemList. end (); ++itemIt )
591
+ if ( composition () )
580
592
{
581
- if ( composition () )
582
- {
583
- composition ()->removeComposerItem ( *itemIt );
584
- }
593
+ composition ()->removeComposerItem ( *itemIt );
585
594
}
586
595
}
596
+ }
597
+
598
+ void QgsComposerView::keyPressEvent ( QKeyEvent * e )
599
+ {
600
+ if ( !composition () )
601
+ {
602
+ return ;
603
+ }
604
+
605
+ QList<QgsComposerItem*> composerItemList = composition ()->selectedComposerItems ();
606
+ QList<QgsComposerItem*>::iterator itemIt = composerItemList.begin ();
607
+
608
+ // increment used for cursor key item movement
609
+ double increment = 1.0 ;
610
+ if ( e->modifiers () & Qt::ShiftModifier )
611
+ {
612
+ // holding shift while pressing cursor keys results in a big step
613
+ increment = 10.0 ;
614
+ }
587
615
588
- else if ( e->key () == Qt::Key_Left )
616
+ if ( e->key () == Qt::Key_Left )
589
617
{
590
618
for ( ; itemIt != composerItemList.end (); ++itemIt )
591
619
{
0 commit comments