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"