17#include "moc_qgslayoutitemslistview.cpp"
29 : QSortFilterProxyModel( parent )
32 setSourceModel( mModel );
42 return mapFromSource( mModel->
indexForItem( item, column ) );
47 mModel->setSelected( mapToSource( index ) );
59 if ( !index.isValid() )
68 if ( role == Qt::FontRole )
74 boldFont.setBold(
true );
79 return QSortFilterProxyModel::data( index, role );
89 , mDesigner( designer )
91 setColumnWidth( 0, 30 );
92 setColumnWidth( 1, 30 );
93 setDragEnabled(
true );
94 setAcceptDrops(
true );
95 setDropIndicatorShown(
true );
96 setDragDropMode( QAbstractItemView::InternalMove );
97 setContextMenuPolicy( Qt::CustomContextMenu );
101 setSelectionMode( QAbstractItemView::ExtendedSelection );
102 setSelectionBehavior( QAbstractItemView::SelectRows );
104 connect(
this, &QWidget::customContextMenuRequested,
this, &QgsLayoutItemsListView::showContextMenu );
114 header()->setSectionResizeMode( 0, QHeaderView::Fixed );
115 header()->setSectionResizeMode( 1, QHeaderView::Fixed );
118 header()->setSectionsMovable(
false );
120 connect( selectionModel(), &QItemSelectionModel::selectionChanged,
this, &QgsLayoutItemsListView::updateSelection );
125 if ( event->key() == Qt::Key_Space )
127 const auto constSelectedIndexes = selectionModel()->selectedIndexes();
128 if ( !constSelectedIndexes.isEmpty() )
130 const bool isFirstItemVisible = mModel->
itemFromIndex( constSelectedIndexes[0] )->isVisible();
132 for (
const QModelIndex &index : constSelectedIndexes )
144 QTreeView::keyPressEvent( event );
147void QgsLayoutItemsListView::updateSelection()
152 if ( !mModel || mUpdatingFromView )
156 mUpdatingSelection =
true;
162 QList<QgsLayoutItem *> selectedItems;
163 for (
const QModelIndex &index : selectionModel()->selectedIndexes() )
167 selectedItems << item;
172 bool itemSelected =
false;
175 if ( selectionModel()->isSelected( selectionModel()->currentIndex() ) )
194 item->setSelected(
true );
203 if ( group && group != item )
208 mUpdatingSelection =
false;
211void QgsLayoutItemsListView::onItemFocused(
QgsLayoutItem *focusedItem )
214 if ( !mModel || mUpdatingSelection )
218 mUpdatingFromView =
true;
224 QModelIndex index = mModel->
indexForItem( focusedItem );
225 if ( index.isValid() )
227 setCurrentIndex( index );
234 const QModelIndex firstCol = mModel->
indexForItem( item );
235 if ( firstCol.isValid() )
238 QItemSelection selection;
239 selection.select( firstCol, firstCol.siblingAtColumn( mModel->columnCount( firstCol.parent() ) - 1 ) );
240 selectionModel()->select( selection, QItemSelectionModel::Select );
244 mUpdatingFromView =
false;
247void QgsLayoutItemsListView::showContextMenu( QPoint point )
251 const QModelIndex index = indexAt( point );
256 QMenu *menu =
new QMenu(
this );
258 QAction *copyAction =
new QAction( tr(
"Copy Item" ), menu );
259 connect( copyAction, &QAction::triggered,
this, [
this, item]()
263 menu->addAction( copyAction );
264 QAction *deleteAction =
new QAction( tr(
"Delete Item" ), menu );
265 connect( deleteAction, &QAction::triggered,
this, [
this, item]()
267 mDesigner->
view()->deleteItems( QList< QgsLayoutItem * >() << item );
269 menu->addAction( deleteAction );
270 menu->addSeparator();
272 QAction *itemPropertiesAction =
new QAction( tr(
"Item Properties…" ), menu );
273 connect( itemPropertiesAction, &QAction::triggered,
this, [
this, item]()
277 menu->addAction( itemPropertiesAction );
279 menu->popup( mapToGlobal( point ) );
static const double UI_SCALE_FACTOR
UI scaling factor.
A common interface for layout designer dialogs and widgets.
virtual void showItemOptions(QgsLayoutItem *item, bool bringPanelToFront=true)=0
Shows the configuration widget for the specified layout item.
virtual QgsLayoutView * view()=0
Returns the layout view utilized by the designer.
A container for grouping several QgsLayoutItems.
Base class for graphical items within a QgsLayout.
QgsLayoutItemGroup * parentGroup() const
Returns the item's parent group, if the item is part of a QgsLayoutItemGroup group.
virtual void setSelected(bool selected)
Sets whether the item should be selected.
virtual void setVisibility(bool visible)
Sets whether the item is visible.
Model for the layout items list view.
QgsLayoutItem * itemFromIndex(const QModelIndex &index) const
Returns the layout item listed at the specified index.
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
QgsLayoutItemsListViewModel(QgsLayoutModel *model, QObject *parent)
constructor
void setSelected(const QModelIndex &index)
Sets the selected index.
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QModelIndex indexForItem(QgsLayoutItem *item, const int column=0) const
Returns the model index matching the specified layout item.
void setCurrentLayout(QgsLayout *layout)
Sets the current layout.
QgsLayoutItemsListView(QWidget *parent, QgsLayoutDesignerInterface *designer)
Constructor for QgsLayoutItemsListView.
void keyPressEvent(QKeyEvent *event) override
A model for items attached to a layout.
QgsLayoutItem * itemFromIndex(const QModelIndex &index) const
Returns the QgsLayoutItem corresponding to a QModelIndex index, if possible.
QModelIndex indexForItem(QgsLayoutItem *item, int column=0)
Returns the QModelIndex corresponding to a QgsLayoutItem item and column, if possible.
void itemFocused(QgsLayoutItem *item)
Emitted when an item is "focused" in the view, i.e.
@ ClipboardCopy
Copy items.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
QgsLayoutModel * itemsModel()
Returns the items model attached to the layout.
QList< QgsLayoutItem * > selectedLayoutItems(bool includeLockedItems=true)
Returns list of selected layout items.
void setSelectedItem(QgsLayoutItem *item)
Clears any selected items and sets item as the current selection.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.