Showing with 388 additions and 66 deletions.
  1. +116 −6 src/app/composer/qgscomposer.cpp
  2. +29 −0 src/app/composer/qgscomposer.h
  3. +158 −58 src/gui/qgscomposerview.cpp
  4. +31 −0 src/gui/qgscomposerview.h
  5. +54 −2 src/ui/qgscomposerbase.ui
122 changes: 116 additions & 6 deletions src/app/composer/qgscomposer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,42 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
composerMenu->addAction( mActionQuit );
QObject::connect( mActionQuit, SIGNAL( triggered() ), this, SLOT( close() ) );

//cut/copy/paste actions. Note these are not included in the ui file
//as ui files have no support for QKeySequence shortcuts
mActionCut = new QAction( tr( "Cu&t" ), this );
mActionCut->setShortcuts( QKeySequence::Cut );
mActionCut->setStatusTip( tr( "Cut" ) );
QObject::connect( mActionCut, SIGNAL( triggered() ), this, SLOT( actionCutTriggered() ) );
mActionCopy = new QAction( tr( "&Copy" ), this );
mActionCopy->setShortcuts( QKeySequence::Copy );
mActionCopy->setStatusTip( tr( "Copy" ) );
QObject::connect( mActionCopy, SIGNAL( triggered() ), this, SLOT( actionCopyTriggered() ) );
mActionPaste = new QAction( tr( "&Paste" ), this );
mActionPaste->setShortcuts( QKeySequence::Paste );
mActionPaste->setStatusTip( tr( "Paste" ) );
QObject::connect( mActionPaste, SIGNAL( triggered() ), this, SLOT( actionPasteTriggered() ) );

QMenu *editMenu = menuBar()->addMenu( tr( "Edit" ) );
editMenu->addAction( mActionUndo );
editMenu->addAction( mActionRedo );
editMenu->addSeparator();

//Backspace should also trigger delete selection
QShortcut* backSpace = new QShortcut( QKeySequence( "Backspace" ), this );
connect( backSpace, SIGNAL( activated() ), mActionDeleteSelection, SLOT( trigger() ) );
editMenu->addAction( mActionDeleteSelection );
editMenu->addSeparator();

editMenu->addAction( mActionCut );
editMenu->addAction( mActionCopy );
editMenu->addAction( mActionPaste );
//TODO : "Ctrl+Shift+V" is one way to paste in place, but on some platforms you can use Shift+Ins and F18
editMenu->addAction( mActionPasteInPlace );
editMenu->addSeparator();
editMenu->addAction( mActionSelectAll );
editMenu->addAction( mActionDeselectAll );
editMenu->addAction( mActionInvertSelection );

QMenu *viewMenu = menuBar()->addMenu( tr( "View" ) );
viewMenu->addAction( mActionZoomIn );
viewMenu->addAction( mActionZoomOut );
Expand All @@ -225,22 +261,20 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
mToolbarMenu->addAction( mItemToolbar->toggleViewAction() );

QMenu *layoutMenu = menuBar()->addMenu( tr( "Layout" ) );
layoutMenu->addAction( mActionUndo );
layoutMenu->addAction( mActionRedo );
layoutMenu->addSeparator();
layoutMenu->addAction( mActionAddNewMap );
layoutMenu->addAction( mActionAddNewLabel );
layoutMenu->addAction( mActionAddNewScalebar );
layoutMenu->addAction( mActionAddNewLegend );
layoutMenu->addAction( mActionAddImage );
layoutMenu->addAction( mActionSelectMoveItem );
layoutMenu->addAction( mActionMoveItemContent );

layoutMenu->addAction( mActionAddArrow );
layoutMenu->addAction( mActionAddTable );
layoutMenu->addSeparator();
layoutMenu->addAction( mActionSelectMoveItem );
layoutMenu->addAction( mActionMoveItemContent );
layoutMenu->addSeparator();
layoutMenu->addAction( mActionGroupItems );
layoutMenu->addAction( mActionUngroupItems );
layoutMenu->addSeparator();
layoutMenu->addAction( mActionRaiseItems );
layoutMenu->addAction( mActionLowerItems );
layoutMenu->addAction( mActionMoveItemsToTop );
Expand Down Expand Up @@ -1669,6 +1703,82 @@ void QgsComposer::on_mActionUnlockAll_triggered()
}
}

void QgsComposer::actionCutTriggered()
{
if ( mView )
{
mView->copyItems( QgsComposerView::ClipboardModeCut );
}
}

void QgsComposer::actionCopyTriggered()
{
if ( mView )
{
mView->copyItems( QgsComposerView::ClipboardModeCopy );
}
}

void QgsComposer::actionPasteTriggered()
{
if ( mView )
{
QPointF pt = mView->mapToScene( mView->mapFromGlobal( QCursor::pos() ) );
//TODO - use a better way of determining whether paste was triggered by keystroke
//or menu item
if (( pt.x() < 0 ) || ( pt.y() < 0 ) )
{
//action likely triggered by menu, paste items in center of screen
mView->pasteItems( QgsComposerView::PasteModeCenter );
}
else
{
//action likely triggered by keystroke, paste items at cursor position
mView->pasteItems( QgsComposerView::PasteModeCursor );
}
}
}

void QgsComposer::on_mActionPasteInPlace_triggered()
{
if ( mView )
{
mView->pasteItems( QgsComposerView::PasteModeInPlace );
}
}

void QgsComposer::on_mActionDeleteSelection_triggered()
{
if ( mView )
{
mView->deleteSelectedItems();
}
}

void QgsComposer::on_mActionSelectAll_triggered()
{
if ( mView )
{
mView->selectAll();
}
}

void QgsComposer::on_mActionDeselectAll_triggered()
{
if ( mView )
{
mView->selectNone();
}
}

void QgsComposer::on_mActionInvertSelection_triggered()
{
if ( mView )
{
mView->selectInvert();
}
}

void QgsComposer::on_mActionRaiseItems_triggered()
{
if ( mComposition )
Expand Down
29 changes: 29 additions & 0 deletions src/app/composer/qgscomposer.h
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,30 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
//! Group selected items
void on_mActionGroupItems_triggered();

//! Cut item(s)
void actionCutTriggered();

//! Copy item(s)
void actionCopyTriggered();

//! Paste item(s)
void actionPasteTriggered();

//! Paste in place item(s)
void on_mActionPasteInPlace_triggered();

//! Delete selected item(s)
void on_mActionDeleteSelection_triggered();

//! Select all items
void on_mActionSelectAll_triggered();

//! Deselect all items
void on_mActionDeselectAll_triggered();

//! Invert selection
void on_mActionInvertSelection_triggered();

//! Ungroup selected item group
void on_mActionUngroupItems_triggered();

Expand Down Expand Up @@ -373,6 +397,11 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
//! Window menu action to select this window
QAction *mWindowAction;

//! Copy/cut/paste actions
QAction *mActionCut;
QAction *mActionCopy;
QAction *mActionPaste;

//! Page & Printer Setup
QPrinter mPrinter;

Expand Down
Loading