1/*
2 * SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#pragma once
8
9#include "columnview.h"
10
11#include <QPointer>
12#include <QQuickItem>
13
14class QPropertyAnimation;
15class QQmlComponent;
16namespace Kirigami
17{
18namespace Platform
19{
20class Units;
21}
22}
23
24class QmlComponentsPool : public QObject
25{
26 Q_OBJECT
27
28public:
29 QmlComponentsPool(QQmlEngine *engine);
30 ~QmlComponentsPool() override;
31
32 QQmlComponent m_separatorComponent;
33 Kirigami::Platform::Units *m_units = nullptr;
34
35Q_SIGNALS:
36 void gridUnitChanged();
37 void longDurationChanged();
38};
39
40class ContentItem : public QQuickItem
41{
42 Q_OBJECT
43
44public:
45 ContentItem(ColumnView *parent = nullptr);
46 ~ContentItem() override;
47
48 void layoutItems();
49 void layoutPinnedItems();
50 qreal childWidth(QQuickItem *child);
51 void updateVisibleItems();
52 void forgetItem(QQuickItem *item);
53 QQuickItem *ensureSeparator(QQuickItem *previousColumn, QQuickItem *column, QQuickItem *nextColumn);
54
55 void setBoundedX(qreal x);
56 void animateX(qreal x);
57 void snapToItem();
58
59 void connectHeader(QQuickItem *oldHeader, QQuickItem *newHeader);
60 void connectFooter(QQuickItem *oldFooter, QQuickItem *newFooter);
61
62 inline qreal viewportLeft() const;
63 inline qreal viewportRight() const;
64
65protected:
66 void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value) override;
67 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
68
69private Q_SLOTS:
70 void syncItemsOrder();
71 void updateRepeaterModel();
72
73private:
74 ColumnView *m_view;
75 QQuickItem *m_globalHeaderParent;
76 QQuickItem *m_globalFooterParent;
77
78 QPropertyAnimation *m_slideAnim;
79 QList<QQuickItem *> m_items;
80 QList<QQuickItem *> m_visibleItems;
81 QPointer<QQuickItem> m_viewAnchorItem;
82 QHash<QQuickItem *, QQuickItem *> m_separators;
83 QHash<QObject *, QObject *> m_models;
84
85 qreal m_leftPinnedSpace = 361;
86 qreal m_rightPinnedSpace = 0;
87
88 qreal m_columnWidth = 0;
89 qreal m_lastDragDelta = 0;
90 ColumnView::ColumnResizeMode m_columnResizeMode = ColumnView::FixedColumns;
91 bool m_shouldAnimate = false;
92 bool m_creationInProgress = true;
93 friend class ColumnView;
94};
95

source code of kirigami/src/layouts/columnview_p.h