/***************************************************************************
* Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
* *
- * Based on the Itemviews NG project from Trolltech Labs: *
- * http://qt.gitorious.org/qt-labs/itemviews-ng *
+ * Based on the Itemviews NG project from Trolltech Labs *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#ifndef KITEMLISTCONTAINER_H
#define KITEMLISTCONTAINER_H
-#include <libdolphin_export.h>
+#include "dolphin_export.h"
#include <QAbstractScrollArea>
class KItemListController;
+class KItemListSmoothScroller;
class KItemListView;
class KItemModelBase;
-class QPropertyAnimation;
/**
* @brief Provides a QWidget based scrolling view for a KItemListController.
*
+ * The model and view are maintained by the KItemListController.
+ *
* @see KItemListController
*/
-class LIBDOLPHINPRIVATE_EXPORT KItemListContainer : public QAbstractScrollArea
+class DOLPHIN_EXPORT KItemListContainer : public QAbstractScrollArea
{
Q_OBJECT
public:
- explicit KItemListContainer(KItemListController* controller, QWidget* parent = 0);
- KItemListContainer(QWidget* parent = 0);
- virtual ~KItemListContainer();
-
+ /**
+ * @param controller Controller that maintains the model and the view.
+ * The KItemListContainer takes ownership of the controller
+ * (the parent will be set to the KItemListContainer).
+ * @param parent Optional parent widget.
+ */
+ explicit KItemListContainer(KItemListController* controller, QWidget* parent = nullptr);
+ ~KItemListContainer() override;
KItemListController* controller() const;
+ void setEnabledFrame(bool enable);
+ bool enabledFrame() const;
+
protected:
- virtual void keyPressEvent(QKeyEvent* event);
- virtual void showEvent(QShowEvent* event);
- virtual void resizeEvent(QResizeEvent* event);
- virtual void scrollContentsBy(int dx, int dy);
- virtual bool eventFilter(QObject* obj, QEvent* event);
- virtual void wheelEvent(QWheelEvent* event);
+ void keyPressEvent(QKeyEvent* event) override;
+ void showEvent(QShowEvent* event) override;
+ void resizeEvent(QResizeEvent* event) override;
+ void scrollContentsBy(int dx, int dy) override;
+ void wheelEvent(QWheelEvent* event) override;
private slots:
+ void slotScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous);
void slotModelChanged(KItemModelBase* current, KItemModelBase* previous);
void slotViewChanged(KItemListView* current, KItemListView* previous);
void scrollTo(qreal offset);
- void updateScrollBars();
+ void updateScrollOffsetScrollBar();
+ void updateItemOffsetScrollBar();
private:
- void initialize();
void updateGeometries();
+ void updateSmoothScrollers(Qt::Orientation orientation);
+
+ /**
+ * Helper method for updateScrollOffsetScrollBar(). Updates the scrollbar-policy
+ * to Qt::ScrollBarAlwaysOn for cases where turning off the scrollbar might lead
+ * to an endless layout loop (see bug #293318).
+ */
+ void updateScrollOffsetScrollBarPolicy();
private:
KItemListController* m_controller;
- bool m_sliderMovedByUser;
- QPropertyAnimation* m_viewOffsetAnimation;
+ KItemListSmoothScroller* m_horizontalSmoothScroller;
+ KItemListSmoothScroller* m_verticalSmoothScroller;
};
#endif