QGIS/src/app/layout/qgslayoutitemslistview.cpp
Nyall Dawson d2fcf11336 [layouts] Add context menu entries for "copy" and "delete" item to
items list panel right click menu

Refs #11581
2017-12-07 08:49:33 +10:00

86 lines
3.3 KiB
C++

/***************************************************************************
qgslayoutitemslistview.cpp
--------------------------
Date : October 2017
Copyright : (C) 2017 Nyall Dawson
Email : nyall dot dawson at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgslayoutitemslistview.h"
#include "qgslayout.h"
#include "qgslayoutmodel.h"
#include "qgslayoutdesignerdialog.h"
#include "qgslayoutview.h"
#include <QHeaderView>
#include <QMouseEvent>
QgsLayoutItemsListView::QgsLayoutItemsListView( QWidget *parent, QgsLayoutDesignerDialog *designer )
: QTreeView( parent )
, mDesigner( designer )
{
setColumnWidth( 0, 30 );
setColumnWidth( 1, 30 );
setDragEnabled( true );
setAcceptDrops( true );
setDropIndicatorShown( true );
setDragDropMode( QAbstractItemView::InternalMove );
setContextMenuPolicy( Qt::CustomContextMenu );
setIndentation( 0 );
connect( this, &QWidget::customContextMenuRequested, this, &QgsLayoutItemsListView::showContextMenu );
}
void QgsLayoutItemsListView::setCurrentLayout( QgsLayout *layout )
{
mLayout = layout;
mModel = layout->itemsModel();
setModel( mModel );
header()->setSectionResizeMode( 0, QHeaderView::Fixed );
header()->setSectionResizeMode( 1, QHeaderView::Fixed );
setColumnWidth( 0, Qgis::UI_SCALE_FACTOR * fontMetrics().width( QStringLiteral( "xxxx" ) ) );
setColumnWidth( 1, Qgis::UI_SCALE_FACTOR * fontMetrics().width( QStringLiteral( "xxxx" ) ) );
header()->setSectionsMovable( false );
connect( selectionModel(), &QItemSelectionModel::currentChanged, mLayout->itemsModel(), &QgsLayoutModel::setSelected );
}
void QgsLayoutItemsListView::showContextMenu( QPoint point )
{
QModelIndex index = indexAt( point );
QgsLayoutItem *item = mModel->itemFromIndex( index );
if ( !item )
return;
QMenu *menu = new QMenu( this );
QAction *copyAction = new QAction( tr( "Copy Item" ), menu );
connect( copyAction, &QAction::triggered, this, [this, item]()
{
mDesigner->view()->copyItems( QList< QgsLayoutItem * >() << item, QgsLayoutView::ClipboardCopy );
} );
menu->addAction( copyAction );
QAction *deleteAction = new QAction( tr( "Delete Item" ), menu );
connect( deleteAction, &QAction::triggered, this, [this, item]()
{
mDesigner->view()->deleteItems( QList< QgsLayoutItem * >() << item );
} );
menu->addAction( deleteAction );
menu->addSeparator();
QAction *itemPropertiesAction = new QAction( tr( "Item Properties…" ), menu );
connect( itemPropertiesAction, &QAction::triggered, this, [this, item]()
{
mDesigner->showItemOptions( item, true );
} );
menu->addAction( itemPropertiesAction );
menu->popup( mapToGlobal( point ) );
}