From 4131e0b303cc3ecb97319baa822c1bc1b9f2d9a1 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 17 Dec 2018 14:12:43 +1000 Subject: [PATCH] [layouts] Fix selected items appear in bold in all widgets instead of just the items list panel E.g. we don't want selected items to show in bold in the item combo boxes --- src/app/layout/qgslayoutitemslistview.cpp | 52 ++++++++++++++++++++++- src/app/layout/qgslayoutitemslistview.h | 23 +++++++++- src/core/layout/qgslayoutmodel.cpp | 10 ----- 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/src/app/layout/qgslayoutitemslistview.cpp b/src/app/layout/qgslayoutitemslistview.cpp index 1ec386fff2a4..3fdaff50f5d6 100644 --- a/src/app/layout/qgslayoutitemslistview.cpp +++ b/src/app/layout/qgslayoutitemslistview.cpp @@ -21,6 +21,54 @@ #include #include + +QgsLayoutItemsListViewModel::QgsLayoutItemsListViewModel( QgsLayoutModel *model, QObject *parent ) + : QSortFilterProxyModel( parent ) + , mModel( model ) +{ + setSourceModel( mModel ); +} + +QgsLayoutItem *QgsLayoutItemsListViewModel::itemFromIndex( const QModelIndex &index ) const +{ + return mModel->itemFromIndex( mapToSource( index ) ); +} + +void QgsLayoutItemsListViewModel::setSelected( const QModelIndex &index ) +{ + mModel->setSelected( mapToSource( index ) ); +} + +QVariant QgsLayoutItemsListViewModel::data( const QModelIndex &index, int role ) const +{ + if ( !index.isValid() ) + return QVariant(); + + QgsLayoutItem *item = itemFromIndex( index ); + if ( !item ) + { + return QVariant(); + } + + if ( role == Qt::FontRole ) + { + if ( index.column() == QgsLayoutModel::ItemId && item->isSelected() ) + { + //draw name of selected items in bold + QFont boldFont; + boldFont.setBold( true ); + return boldFont; + } + } + + return QSortFilterProxyModel::data( index, role ); +} + + +// +// QgsLayoutItemsListView +// + QgsLayoutItemsListView::QgsLayoutItemsListView( QWidget *parent, QgsLayoutDesignerDialog *designer ) : QTreeView( parent ) , mDesigner( designer ) @@ -39,7 +87,7 @@ QgsLayoutItemsListView::QgsLayoutItemsListView( QWidget *parent, QgsLayoutDesign void QgsLayoutItemsListView::setCurrentLayout( QgsLayout *layout ) { mLayout = layout; - mModel = layout->itemsModel(); + mModel = new QgsLayoutItemsListViewModel( layout->itemsModel(), this ); setModel( mModel ); header()->setSectionResizeMode( 0, QHeaderView::Fixed ); @@ -48,7 +96,7 @@ void QgsLayoutItemsListView::setCurrentLayout( QgsLayout *layout ) setColumnWidth( 1, Qgis::UI_SCALE_FACTOR * fontMetrics().width( QStringLiteral( "xxxx" ) ) ); header()->setSectionsMovable( false ); - connect( selectionModel(), &QItemSelectionModel::currentChanged, mLayout->itemsModel(), &QgsLayoutModel::setSelected ); + connect( selectionModel(), &QItemSelectionModel::currentChanged, mModel, &QgsLayoutItemsListViewModel::setSelected ); } void QgsLayoutItemsListView::showContextMenu( QPoint point ) diff --git a/src/app/layout/qgslayoutitemslistview.h b/src/app/layout/qgslayoutitemslistview.h index 7346b60a645a..9b45e2e094b7 100644 --- a/src/app/layout/qgslayoutitemslistview.h +++ b/src/app/layout/qgslayoutitemslistview.h @@ -18,10 +18,31 @@ #include "qgis.h" #include +#include class QgsLayout; class QgsLayoutDesignerDialog; class QgsLayoutModel; +class QgsLayoutItem; + +class QgsLayoutItemsListViewModel : public QSortFilterProxyModel +{ + Q_OBJECT + + public: + + QgsLayoutItemsListViewModel( QgsLayoutModel *model, QObject *parent ); + + QgsLayoutItem *itemFromIndex( const QModelIndex &index ) const; \ + QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override; + + public slots: + void setSelected( const QModelIndex &index ); + + private: + + QgsLayoutModel *mModel = nullptr; +}; /** * A list view for showing items in a layout @@ -46,7 +67,7 @@ class QgsLayoutItemsListView : public QTreeView private: QgsLayout *mLayout = nullptr; - QgsLayoutModel *mModel = nullptr; + QgsLayoutItemsListViewModel *mModel = nullptr; QgsLayoutDesignerDialog *mDesigner = nullptr; }; diff --git a/src/core/layout/qgslayoutmodel.cpp b/src/core/layout/qgslayoutmodel.cpp index 2a0ce176d363..6c2867dc743d 100644 --- a/src/core/layout/qgslayoutmodel.cpp +++ b/src/core/layout/qgslayoutmodel.cpp @@ -182,16 +182,6 @@ QVariant QgsLayoutModel::data( const QModelIndex &index, int role ) const return QVariant(); } - case Qt::FontRole: - if ( index.column() == ItemId && item->isSelected() ) - { - //draw name of selected items in bold - QFont boldFont; - boldFont.setBold( true ); - return boldFont; - } - return QVariant(); - default: return QVariant(); }