]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kitemlistwidget.h
Merge remote-tracking branch 'origin/KDE/4.11'
[dolphin.git] / src / kitemviews / kitemlistwidget.h
index 4c8ff1a9520fd30975ab1f9f644e0274a866eed2..55181faa863c993e9362a464c4ca93b1b2ef2dc4 100644 (file)
 #include <QStyle>
 
 class KItemListSelectionToggle;
+class KItemListView;
 class QPropertyAnimation;
 
+/**
+ * @brief Provides information for creating an instance of KItemListWidget.
+ *
+ * KItemListView only creates KItemListWidget instances for the visible
+ * area. For calculating the required size of all items the expected
+ * size for the invisible items must be accessible. KItemListWidgetInformant
+ * provides this information.
+ */
+class LIBDOLPHINPRIVATE_EXPORT KItemListWidgetInformant
+{
+public:
+    KItemListWidgetInformant();
+    virtual ~KItemListWidgetInformant();
+
+    virtual QSizeF itemSizeHint(int index, const KItemListView* view) const = 0;
+
+    virtual qreal preferredRoleColumnWidth(const QByteArray& role,
+                                           int index,
+                                           const KItemListView* view) const = 0;
+};
+
 /**
  * @brief Widget that shows a visible item from the model.
  *
@@ -46,7 +68,7 @@ class LIBDOLPHINPRIVATE_EXPORT KItemListWidget : public QGraphicsWidget
     Q_OBJECT
 
 public:
-    KItemListWidget(QGraphicsItem* parent);
+    KItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent);
     virtual ~KItemListWidget();
 
     void setIndex(int index);
@@ -102,6 +124,16 @@ public:
     void setSiblingsInformation(const QBitArray& siblings);
     QBitArray siblingsInformation() const;
 
+    /**
+     * Allows the user to edit the role \a role. The signals
+     * roleEditingCanceled() or roleEditingFinished() will be
+     * emitted after editing. An ongoing editing gets canceled if
+     * the role is empty. Derived classes must implement
+     * editedRoleChanged().
+     */
+    void setEditedRole(const QByteArray& role);
+    QByteArray editedRole() const;
+
     /**
      * @return True if \a point is inside KItemListWidget::hoverRect(),
      *         KItemListWidget::textRect(), KItemListWidget::selectionToggleRect()
@@ -143,6 +175,16 @@ public:
      */
     virtual QRectF expansionToggleRect() const;
 
+    /**
+     * @return Pixmap that is used when dragging an item. Per default the current state of the
+     *         widget is returned as pixmap.
+     */
+    virtual QPixmap createDragPixmap(const QStyleOptionGraphicsItem* option, QWidget* widget = 0);
+
+signals:
+    void roleEditingCanceled(int index, const QByteArray& role, const QVariant& value);
+    void roleEditingFinished(int index, const QByteArray& role, const QVariant& value);
+
 protected:
     virtual void dataChanged(const QHash<QByteArray, QVariant>& current, const QSet<QByteArray>& roles = QSet<QByteArray>());
     virtual void visibleRolesChanged(const QList<QByteArray>& current, const QList<QByteArray>& previous);
@@ -153,6 +195,7 @@ protected:
     virtual void hoveredChanged(bool hovered);
     virtual void alternateBackgroundChanged(bool enabled);
     virtual void siblingsInformationChanged(const QBitArray& current, const QBitArray& previous);
+    virtual void editedRoleChanged(const QByteArray& current, const QByteArray& previous);
     virtual void resizeEvent(QGraphicsSceneResizeEvent* event);
 
     /**
@@ -161,6 +204,8 @@ protected:
      */
     qreal hoverOpacity() const;
 
+    const KItemListWidgetInformant* informant() const;
+
 private slots:
     void slotHoverAnimationFinished();
 
@@ -173,6 +218,7 @@ private:
 private:
     Q_PROPERTY(qreal hoverOpacity READ hoverOpacity WRITE setHoverOpacity)
 
+    KItemListWidgetInformant* m_informant;
     int m_index;
     bool m_selected;
     bool m_current;
@@ -190,7 +236,15 @@ private:
     QPropertyAnimation* m_hoverAnimation;
 
     KItemListSelectionToggle* m_selectionToggle;
+
+    QByteArray m_editedRole;
 };
+
+inline const KItemListWidgetInformant* KItemListWidget::informant() const
+{
+    return m_informant;
+}
+
 #endif