File indexing completed on 2024-05-12 15:58:45
0001 /* 0002 * SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_timed_signal_threshold.h" 0008 #include <QElapsedTimer> 0009 #include "kis_debug.h" 0010 0011 0012 struct KisTimedSignalThreshold::Private 0013 { 0014 Private(int _delay, int _cancelDelay) 0015 : delay(_delay), 0016 cancelDelay(0), 0017 enabled(true) 0018 { 0019 setCancelDelay(_cancelDelay); 0020 } 0021 0022 void setCancelDelay(int value) { 0023 cancelDelay = value >= 0 ? value : 2 * delay; 0024 } 0025 0026 QElapsedTimer timer; 0027 int delay; 0028 int cancelDelay; 0029 bool enabled; 0030 }; 0031 0032 0033 KisTimedSignalThreshold::KisTimedSignalThreshold(int delay, int cancelDelay, QObject *parent) 0034 : QObject(parent), 0035 m_d(new Private(delay, cancelDelay)) 0036 { 0037 } 0038 0039 KisTimedSignalThreshold::~KisTimedSignalThreshold() 0040 { 0041 } 0042 0043 void KisTimedSignalThreshold::forceDone() 0044 { 0045 stop(); 0046 emit timeout(); 0047 } 0048 0049 void KisTimedSignalThreshold::start() 0050 { 0051 if (!m_d->enabled) return; 0052 0053 if (!m_d->timer.isValid()) { 0054 m_d->timer.start(); 0055 } else if (m_d->timer.elapsed() > m_d->cancelDelay) { 0056 stop(); 0057 } else if (m_d->timer.elapsed() > m_d->delay) { 0058 forceDone(); 0059 } 0060 } 0061 0062 void KisTimedSignalThreshold::stop() 0063 { 0064 m_d->timer.invalidate(); 0065 } 0066 0067 void KisTimedSignalThreshold::setEnabled(bool value) 0068 { 0069 m_d->enabled = value; 0070 if (!m_d->enabled) { 0071 stop(); 0072 } 0073 } 0074 0075 void KisTimedSignalThreshold::setDelayThreshold(int delay, int cancelDelay) 0076 { 0077 m_d->delay = delay; 0078 m_d->setCancelDelay(cancelDelay); 0079 }