File indexing completed on 2024-05-12 17:08:54

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QQuickItem>
0010 #include <QTimer>
0011 
0012 #include "itemcontainer.h"
0013 
0014 class ConfigOverlay : public QQuickItem
0015 {
0016     Q_OBJECT
0017     Q_PROPERTY(bool open READ open WRITE setOpen NOTIFY openChanged)
0018     Q_PROPERTY(ItemContainer *itemContainer READ itemContainer NOTIFY itemContainerChanged)
0019     Q_PROPERTY(qreal leftAvailableSpace READ leftAvailableSpace NOTIFY leftAvailableSpaceChanged);
0020     Q_PROPERTY(qreal topAvailableSpace READ topAvailableSpace NOTIFY topAvailableSpaceChanged);
0021     Q_PROPERTY(qreal rightAvailableSpace READ rightAvailableSpace NOTIFY rightAvailableSpaceChanged);
0022     Q_PROPERTY(qreal bottomAvailableSpace READ bottomAvailableSpace NOTIFY bottomAvailableSpaceChanged);
0023     Q_PROPERTY(bool touchInteraction READ touchInteraction NOTIFY touchInteractionChanged)
0024 
0025 public:
0026     ConfigOverlay(QQuickItem *parent = nullptr);
0027     ~ConfigOverlay();
0028 
0029     ItemContainer *itemContainer() const;
0030     // NOTE: setter not accessible from QML by purpose
0031     void setItemContainer(ItemContainer *container);
0032 
0033     bool open() const;
0034     void setOpen(bool open);
0035 
0036     qreal leftAvailableSpace()
0037     {
0038         return m_leftAvailableSpace;
0039     }
0040     qreal topAvailableSpace()
0041     {
0042         return m_topAvailableSpace;
0043     }
0044     qreal rightAvailableSpace()
0045     {
0046         return m_rightAvailableSpace;
0047     }
0048     qreal bottomAvailableSpace()
0049     {
0050         return m_bottomAvailableSpace;
0051     }
0052 
0053     bool touchInteraction() const;
0054     // This only usable from C++
0055     void setTouchInteraction(bool touch);
0056 
0057 Q_SIGNALS:
0058     void openChanged();
0059     void itemContainerChanged();
0060     void leftAvailableSpaceChanged();
0061     void topAvailableSpaceChanged();
0062     void rightAvailableSpaceChanged();
0063     void bottomAvailableSpaceChanged();
0064     void touchInteractionChanged();
0065 
0066 private:
0067     QPointer<ItemContainer> m_itemContainer;
0068     qreal m_leftAvailableSpace = 0;
0069     qreal m_topAvailableSpace = 0;
0070     qreal m_rightAvailableSpace = 0;
0071     qreal m_bottomAvailableSpace = 0;
0072 
0073     QTimer *m_hideTimer = nullptr;
0074 
0075     QList<QTouchEvent::TouchPoint> m_oldTouchPoints;
0076 
0077     bool m_open = false;
0078     bool m_touchInteraction = false;
0079 };