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 #include "configoverlay.h"
0008 
0009 #include <chrono>
0010 #include <cmath>
0011 
0012 using namespace std::chrono_literals;
0013 
0014 ConfigOverlay::ConfigOverlay(QQuickItem *parent)
0015     : QQuickItem(parent)
0016 {
0017     m_hideTimer = new QTimer(this);
0018     m_hideTimer->setSingleShot(true);
0019     m_hideTimer->setInterval(600ms);
0020     connect(m_hideTimer, &QTimer::timeout, this, [this]() {
0021         setVisible(false);
0022     });
0023 }
0024 
0025 ConfigOverlay::~ConfigOverlay()
0026 {
0027 }
0028 
0029 bool ConfigOverlay::open() const
0030 {
0031     return m_open;
0032 }
0033 
0034 void ConfigOverlay::setOpen(bool open)
0035 {
0036     if (open == m_open) {
0037         return;
0038     }
0039 
0040     m_open = open;
0041 
0042     if (open) {
0043         m_hideTimer->stop();
0044         setVisible(true);
0045     } else {
0046         m_hideTimer->start();
0047     }
0048 
0049     Q_EMIT openChanged();
0050 }
0051 
0052 bool ConfigOverlay::touchInteraction() const
0053 {
0054     return m_touchInteraction;
0055 }
0056 void ConfigOverlay::setTouchInteraction(bool touch)
0057 {
0058     if (touch == m_touchInteraction) {
0059         return;
0060     }
0061 
0062     m_touchInteraction = touch;
0063     Q_EMIT touchInteractionChanged();
0064 }
0065 
0066 ItemContainer *ConfigOverlay::itemContainer() const
0067 {
0068     return m_itemContainer;
0069 }
0070 
0071 void ConfigOverlay::setItemContainer(ItemContainer *container)
0072 {
0073     if (container == m_itemContainer) {
0074         return;
0075     }
0076 
0077     if (m_itemContainer) {
0078         disconnect(m_itemContainer, nullptr, this, nullptr);
0079     }
0080 
0081     m_itemContainer = container;
0082 
0083     if (!m_itemContainer || !m_itemContainer->layout()) {
0084         return;
0085     }
0086 
0087     m_leftAvailableSpace = qMax(0.0, m_itemContainer->x());
0088     m_rightAvailableSpace = qMax(0.0, m_itemContainer->layout()->width() - (m_itemContainer->x() + m_itemContainer->width()));
0089     m_topAvailableSpace = qMax(0.0, m_itemContainer->y());
0090     m_bottomAvailableSpace = qMax(0.0, m_itemContainer->layout()->height() - (m_itemContainer->y() + m_itemContainer->height()));
0091     Q_EMIT leftAvailableSpaceChanged();
0092     Q_EMIT rightAvailableSpaceChanged();
0093     Q_EMIT topAvailableSpaceChanged();
0094     Q_EMIT bottomAvailableSpaceChanged();
0095 
0096     connect(m_itemContainer.data(), &ItemContainer::xChanged, this, [this]() {
0097         m_leftAvailableSpace = qMax(0.0, m_itemContainer->x());
0098         m_rightAvailableSpace = qMax(0.0, m_itemContainer->layout()->width() - (m_itemContainer->x() + m_itemContainer->width()));
0099         Q_EMIT leftAvailableSpaceChanged();
0100         Q_EMIT rightAvailableSpaceChanged();
0101     });
0102 
0103     connect(m_itemContainer.data(), &ItemContainer::yChanged, this, [this]() {
0104         m_topAvailableSpace = qMax(0.0, m_itemContainer->y());
0105         m_bottomAvailableSpace = qMax(0.0, m_itemContainer->layout()->height() - (m_itemContainer->y() + m_itemContainer->height()));
0106         Q_EMIT topAvailableSpaceChanged();
0107         Q_EMIT bottomAvailableSpaceChanged();
0108     });
0109 
0110     connect(m_itemContainer.data(), &ItemContainer::widthChanged, this, [this]() {
0111         m_rightAvailableSpace = qMax(0.0, m_itemContainer->layout()->width() - (m_itemContainer->x() + m_itemContainer->width()));
0112         Q_EMIT rightAvailableSpaceChanged();
0113     });
0114 
0115     connect(m_itemContainer.data(), &ItemContainer::heightChanged, this, [this]() {
0116         m_bottomAvailableSpace = qMax(0.0, m_itemContainer->layout()->height() - (m_itemContainer->y() + m_itemContainer->height()));
0117         Q_EMIT bottomAvailableSpaceChanged();
0118     });
0119     Q_EMIT itemContainerChanged();
0120 }
0121 
0122 #include "moc_configoverlay.cpp"