/usr/include/KF5/KItemViews/kextendableitemdelegate.h is in libkf5itemviews-dev 5.28.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /* This file is part of the KDE libraries
Copyright (C) 2006,2007 Andreas Hartmetz (ahartmetz@gmail.com)
Copyright (C) 2008 Urs Wolfer (uwolfer @ kde.org)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KEXTENDABLEITEMDELEGATE_H
#define KEXTENDABLEITEMDELEGATE_H
#include <QStyledItemDelegate>
#include <kitemviews_export.h>
/**
* This delegate makes it possible to display an arbitrary QWidget ("extender") that spans all columns below a line of items.
* The extender will logically belong to a column in the row above it.
*
* It is your responsibility to devise a way to trigger extension and contraction of items, by calling
* extendItem() and contractItem(). You can e.g. reimplement itemActivated() and similar functions.
*
* @warning extendItem() reparents the provided widget @a extender to the
* viewport of the itemview it belongs to. The @a extender is destroyed when
* you call contractItem() for the associated index. If you fail to do that
* and the associated item gets deleted you're in trouble. It remains as a
* visible artefact in your treeview. Additionally when closing your
* application you get an assertion failure from KExtendableItemDelegate. Make
* sure that you always call contractItem for indices before you delete them.
*
* @author Andreas Hartmetz <ahartmetz@gmail.com>
*
* @since 4.1
*/
class QAbstractItemView;
class KITEMVIEWS_EXPORT KExtendableItemDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
enum auxDataRoles {ShowExtensionIndicatorRole = Qt::UserRole + 200};
/**
* Create a new KExtendableItemDelegate that belongs to @p parent. In contrast to generic
* QAbstractItemDelegates, an instance of this class can only ever be the delegate for one
* instance of af QAbstractItemView subclass.
*/
KExtendableItemDelegate(QAbstractItemView *parent);
virtual ~KExtendableItemDelegate();
/**
* Re-implemented for internal reasons. API not affected.
*/
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
/**
* Re-implemented for internal reasons. API not affected.
*/
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
/**
* Insert the @p extender for item at @p index into the view.
* If you need a parent for the extender at construction time, use the itemview's viewport().
* The delegate takes ownership of the extender; the extender will also be reparented and
* resized to the viewport.
*/
void extendItem(QWidget *extender, const QModelIndex &index);
/**
* Remove the extender of item at @p index from the view. The extender widget
* will be deleted.
*/
void contractItem(const QModelIndex &index);
/**
* Close all extenders and delete all extender widgets.
*/
void contractAll();
/**
* Return whether there is an extender that belongs to @p index.
*/
bool isExtended(const QModelIndex &index) const;
/**
* Reimplement this function to adjust the internal geometry of the extender.
* The external geometry of the extender will be set by the delegate.
*/
virtual void updateExtenderGeometry(QWidget *extender, const QStyleOptionViewItem &option, const QModelIndex &index) const;
Q_SIGNALS:
/**
* This signal indicates that the item at @p index was extended with @p extender.
*/
void extenderCreated(QWidget *extender, const QModelIndex &index);
/**
* This signal indicates that the @p extender belonging to @p index has emitted the destroyed() signal.
*/
void extenderDestroyed(QWidget *extender, const QModelIndex &index);
protected:
/**
* Reimplement this function to fine-tune the position of the extender. @p option.rect will be a rectangle
* that is as wide as the viewport and as high as the usual item height plus the extender size hint's height.
* Its upper left corner will be at the upper left corner of the usual item.
* You can place the returned rectangle of this function anywhere inside that area.
*/
QRect extenderRect(QWidget *extender, const QStyleOptionViewItem &option, const QModelIndex &index) const;
/**
* The pixmap that is displayed to extend an item. @p pixmap must have the same size as the pixmap in setContractPixmap.
*/
void setExtendPixmap(const QPixmap &pixmap);
/**
* The pixmap that is displayed to contract an item. @p pixmap must have the same size as the pixmap in setExtendPixmap.
*/
void setContractPixmap(const QPixmap &pixmap);
/**
* Return the pixmap that is displayed to extend an item.
*/
QPixmap extendPixmap();
/**
* Return the pixmap that is displayed to contract an item.
*/
QPixmap contractPixmap();
private:
class Private;
Private *const d;
Q_PRIVATE_SLOT(d, void _k_extenderDestructionHandler(QObject *destroyed))
Q_PRIVATE_SLOT(d, void _k_verticalScroll())
};
#endif // KEXTENDABLEITEMDELEGATE_H
|