mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-02 00:04:53 -04:00
86 lines
3.3 KiB
C++
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 ) );
|
|
}
|