23 #include <QHBoxLayout>    24 #include <QPushButton>    26 #include <QApplication>    27 #include <QMouseEvent>    31   : QItemDelegate( parent )
    32   , mListModel( listModel )
    33   , mCurrentFeatureEdited( false )
    51   mFeatureSelectionModel = featureSelectionModel;
    56   mCurrentFeatureEdited = state;
    61   mEditSelectionModel = editSelectionModel;
    68   return QSize( option.rect.width(), std::max( height, option.fontMetrics.height() ) );
    73   const bool isEditSelection = mEditSelectionModel && mEditSelectionModel->isSelected( mListModel->
mapToMaster( index ) );
    75   QStyleOptionViewItem textOption = option;
    76   textOption.state |= QStyle::State_Enabled;
    77   if ( isEditSelection )
    79     textOption.state |= QStyle::State_Selected;
    81   drawBackground( painter, textOption, index );
    84   static QPixmap sSelectedIcon;
    85   if ( sSelectedIcon.isNull() )
    87   static QPixmap sDeselectedIcon;
    88   if ( sDeselectedIcon.isNull() )
    91   QString text = index.model()->data( index, Qt::EditRole ).toString();
    95   QStyleOptionViewItem iconOption;
    97   QRect iconLayoutBounds( option.rect.x(), option.rect.y(), option.rect.height(), option.rect.height() );
    99   QPixmap icon = mFeatureSelectionModel->
isSelected( index ) ? sSelectedIcon : sDeselectedIcon;
   104     icon = icon.scaledToHeight( option.rect.height(), Qt::SmoothTransformation );
   107   drawDecoration( painter, iconOption, iconLayoutBounds, icon );
   110   const QVariant conditionalIcon = index.model()->data( index, Qt::DecorationRole );
   111   if ( conditionalIcon.isValid() )
   113     const QPixmap pixmap = conditionalIcon.value< QPixmap >();
   114 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)   115     iconLayoutBounds.moveLeft( iconLayoutBounds.x() + icon.width() + QFontMetrics( textOption.font ).width( 
'X' ) );
   117     iconLayoutBounds.moveLeft( iconLayoutBounds.x() + icon.width() + QFontMetrics( textOption.font ).horizontalAdvance( 
'X' ) );
   119     iconLayoutBounds.setTop( option.rect.y() + ( option.rect.height() - pixmap.height() ) / 2.0 );
   120     iconLayoutBounds.setHeight( pixmap.height() );
   121     drawDecoration( painter, iconOption, iconLayoutBounds, pixmap );
   125   QRect textLayoutBounds( iconLayoutBounds.x() + iconLayoutBounds.width(), option.rect.y(), option.rect.width() - ( iconLayoutBounds.x() + iconLayoutBounds.width() ), option.rect.height() );
   128   const QVariant font = index.model()->data( index, Qt::FontRole );
   129   if ( font.isValid() )
   131     textOption.font = font.value< QFont >();
   133   const QVariant textColor = index.model()->data( index, Qt::TextColorRole );
   134   if ( textColor.isValid() )
   136     textOption.palette.setColor( QPalette::Text, textColor.value< QColor >() );
   139   if ( featInfo.
isNew )
   141     textOption.font.setStyle( QFont::StyleItalic );
   142     textOption.palette.setColor( QPalette::Text, Qt::darkGreen );
   143     textOption.palette.setColor( QPalette::HighlightedText, Qt::darkGreen );
   145   else if ( featInfo.
isEdited || ( mCurrentFeatureEdited && isEditSelection ) )
   147     textOption.font.setStyle( QFont::StyleItalic );
   148     textOption.palette.setColor( QPalette::Text, Qt::red );
   149     textOption.palette.setColor( QPalette::HighlightedText, Qt::red );
   152   drawDisplay( painter, textOption, textLayoutBounds, text );
 virtual bool isSelected(QgsFeatureId fid)
Returns the selection status of a given feature id. 
 
static QPixmap getThemePixmap(const QString &name)
Helper to get a theme icon as a pixmap. 
 
virtual QModelIndex mapToMaster(const QModelIndex &proxyIndex) const
 
bool isEdited
True if feature has been edited. 
 
static const int ICON_SIZE
 
void setFeatureSelectionModel(QgsFeatureSelectionModel *featureSelectionModel)
 
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
 
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
 
QgsFeatureListViewDelegate(QgsFeatureListModel *listModel, QObject *parent=nullptr)
 
void setCurrentFeatureEdited(bool state)
 
bool isNew
True if feature is a newly added feature. 
 
Element positionToElement(QPoint pos)
 
void setEditSelectionModel(QItemSelectionModel *editSelectionModel)