20#include "moc_qgslayoutitemcombobox.cpp"
32 connect(
this,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsLayoutItemComboBox::indexChanged );
37 const bool prevAllowEmpty = mProxyModel && mProxyModel->allowEmptyItem();
38 const int itemType = mProxyModel ? mProxyModel->filterType() : -1;
39 mProxyModel = std::make_unique<QgsLayoutProxyModel>( layout,
this );
40 connect( mProxyModel.get(), &QAbstractItemModel::rowsInserted,
this, &QgsLayoutItemComboBox::rowsChanged );
41 connect( mProxyModel.get(), &QAbstractItemModel::rowsRemoved,
this, &QgsLayoutItemComboBox::rowsChanged );
42 setModel( mProxyModel.get() );
45 mProxyModel->setAllowEmptyItem( prevAllowEmpty );
52 return mProxyModel->layout();
57 if ( !mProxyModel->sourceLayerModel() )
60 const QModelIndex idx = mProxyModel->sourceLayerModel()->indexForItem(
const_cast<QgsLayoutItem *
>(
item ) );
63 const QModelIndex proxyIdx = mProxyModel->mapFromSource( idx );
64 if ( proxyIdx.isValid() )
66 setCurrentIndex( proxyIdx.row() );
70 setCurrentIndex( mProxyModel->allowEmptyItem() ? 0 : -1 );
75 return item( currentIndex() );
78void QgsLayoutItemComboBox::indexChanged(
int i )
84void QgsLayoutItemComboBox::rowsChanged()
91 else if ( count() == 0 )
99 mProxyModel->setFilterType(
itemType );
104 return mProxyModel->filterType();
109 mProxyModel->setExceptedItemList( exceptList );
114 return mProxyModel->exceptedItemList();
119 mProxyModel->setAllowEmptyItem( allowEmpty );
124 return mProxyModel->allowEmptyItem();
129 mProxyModel->setItemFlags( flags );
134 return mProxyModel->itemFlags();
139 const QModelIndex proxyIndex = mProxyModel->index( index, 0 );
140 if ( !proxyIndex.isValid() )
145 const QModelIndex sourceIndex = mProxyModel->mapToSource( proxyIndex );
146 if ( !sourceIndex.isValid() )
151 return mProxyModel->itemFromSourceIndex( sourceIndex );
QgsLayoutItem * item(int index) const
Returns the item currently shown at the specified index within the combo box.
void setCurrentLayout(QgsLayout *layout)
Sets the layout containing the items to list in the combo box.
QgsLayout * currentLayout()
Returns the current layout containing the items shown in the combo box.
void setExceptedItemList(const QList< QgsLayoutItem * > &exceptList)
Sets a list of specific items to exclude from the combo box.
QgsLayoutItem * currentItem() const
Returns the item currently selected in the combo box.
QgsLayoutItemRegistry::ItemType itemType() const
Returns the filter for the item types to show in the combo box.
void setItemType(QgsLayoutItemRegistry::ItemType itemType)
Sets a filter for the item type to show in the combo box.
QgsLayoutItemComboBox(QWidget *parent=nullptr, QgsLayout *layout=nullptr)
QgsLayoutItemComboBox creates a combo box to display a list of items in a layout.
void setAllowEmptyItem(bool allowEmpty)
Sets whether an optional empty layout item is present in the combobox.
void setItem(const QgsLayoutItem *item)
Sets the currently selected item in the combo box.
QgsLayoutItem::Flags itemFlags() const
Returns the layout item flags used for filtering the available items.
bool allowEmptyItem() const
Returns true if the model includes the empty item choice.
void setItemFlags(QgsLayoutItem::Flags flags)
Sets layout item flags to use for filtering the available items.
QList< QgsLayoutItem * > exceptedItemList() const
Returns the list of specific items excluded from the combo box.
void itemChanged(QgsLayoutItem *item)
Emitted whenever the currently selected item changes.
Base class for graphical items within a QgsLayout.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.