File indexing completed on 2024-04-28 05:45:06
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com> 0003 * 0004 * Based on the Itemviews NG project from Trolltech Labs 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #ifndef KITEMLISTCONTAINER_H 0010 #define KITEMLISTCONTAINER_H 0011 0012 #include "dolphin_export.h" 0013 0014 #include <QAbstractScrollArea> 0015 0016 class KItemListController; 0017 class KItemListSmoothScroller; 0018 class KItemListView; 0019 class KItemModelBase; 0020 class QScroller; 0021 0022 /** 0023 * @brief Provides a QWidget based scrolling view for a KItemListController. 0024 * 0025 * The model and view are maintained by the KItemListController. 0026 * 0027 * @see KItemListController 0028 */ 0029 class DOLPHIN_EXPORT KItemListContainer : public QAbstractScrollArea 0030 { 0031 Q_OBJECT 0032 0033 public: 0034 /** 0035 * @param controller Controller that maintains the model and the view. 0036 * The KItemListContainer takes ownership of the controller 0037 * (the parent will be set to the KItemListContainer). 0038 * @param parent Optional parent widget. 0039 */ 0040 explicit KItemListContainer(KItemListController *controller, QWidget *parent = nullptr); 0041 ~KItemListContainer() override; 0042 KItemListController *controller() const; 0043 0044 void setEnabledFrame(bool enable); 0045 bool enabledFrame() const; 0046 0047 protected: 0048 void keyPressEvent(QKeyEvent *event) override; 0049 void contextMenuEvent(QContextMenuEvent *event) override; 0050 void showEvent(QShowEvent *event) override; 0051 void resizeEvent(QResizeEvent *event) override; 0052 void scrollContentsBy(int dx, int dy) override; 0053 void wheelEvent(QWheelEvent *event) override; 0054 void focusInEvent(QFocusEvent *event) override; 0055 void focusOutEvent(QFocusEvent *event) override; 0056 0057 private Q_SLOTS: 0058 void slotScrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous); 0059 void slotModelChanged(KItemModelBase *current, KItemModelBase *previous); 0060 void slotViewChanged(KItemListView *current, KItemListView *previous); 0061 void scrollTo(qreal offset); 0062 void updateScrollOffsetScrollBar(); 0063 void updateItemOffsetScrollBar(); 0064 void stopScroller(); 0065 0066 private: 0067 void updateGeometries(); 0068 void updateSmoothScrollers(Qt::Orientation orientation); 0069 0070 /** 0071 * Helper method for updateScrollOffsetScrollBar(). Updates the scrollbar-policy 0072 * to Qt::ScrollBarAlwaysOn for cases where turning off the scrollbar might lead 0073 * to an endless layout loop (see bug #293318). 0074 */ 0075 void updateScrollOffsetScrollBarPolicy(); 0076 0077 private: 0078 KItemListController *m_controller; 0079 0080 KItemListSmoothScroller *m_horizontalSmoothScroller; 0081 KItemListSmoothScroller *m_verticalSmoothScroller; 0082 QScroller *m_scroller; 0083 }; 0084 0085 #endif