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     iconLayoutBounds.moveLeft( iconLayoutBounds.x() + icon.width() + QFontMetrics( textOption.font ).horizontalAdvance( 
'X' ) );
 
  115     iconLayoutBounds.setTop( option.rect.y() + ( option.rect.height() - pixmap.height() ) / 2.0 );
 
  116     iconLayoutBounds.setHeight( pixmap.height() );
 
  117     drawDecoration( painter, iconOption, iconLayoutBounds, pixmap );
 
  121   QRect textLayoutBounds( iconLayoutBounds.x() + iconLayoutBounds.width(), option.rect.y(), option.rect.width() - ( iconLayoutBounds.x() + iconLayoutBounds.width() ), option.rect.height() );
 
  124   const QVariant font = index.model()->data( index, Qt::FontRole );
 
  125   if ( font.isValid() )
 
  127     textOption.font = font.value< QFont >();
 
  129 #if QT_VERSION < QT_VERSION_CHECK(5, 13, 0) 
  130   const QVariant textColor = index.model()->data( index, Qt::TextColorRole );
 
  132   const QVariant textColor = index.model()->data( index, Qt::ForegroundRole );
 
  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 );
 
static QPixmap getThemePixmap(const QString &name, const QColor &foreColor=QColor(), const QColor &backColor=QColor(), int size=16)
Helper to get a theme icon as a pixmap.
virtual QModelIndex mapToMaster(const QModelIndex &proxyIndex) const
QgsFeatureListViewDelegate(QgsFeatureListModel *listModel, QObject *parent=nullptr)
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setEditSelectionModel(QItemSelectionModel *editSelectionModel)
static const int ICON_SIZE
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setCurrentFeatureEdited(bool state)
void setFeatureSelectionModel(QgsFeatureSelectionModel *featureSelectionModel)
Element positionToElement(QPoint pos)
virtual bool isSelected(QgsFeatureId fid)
Returns the selection status of a given feature id.
bool isEdited
True if feature has been edited.
bool isNew
True if feature is a newly added feature.