////////////////////////////////////////////////////////////////////////////// // breezetransitiondata.h // data container for generic transitions // ------------------- // // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa // // SPDX-License-Identifier: MIT ////////////////////////////////////////////////////////////////////////////// #pragma once #include "breezetransitionwidget.h" #include #include #include namespace Breeze { //* generic data class TransitionData : public QObject { Q_OBJECT public: //* constructor TransitionData(QObject *parent, QWidget *target, int); //* destructor virtual ~TransitionData(); //* enability virtual void setEnabled(bool value) { _enabled = value; } //* enability virtual bool enabled() const { return _enabled; } //* duration virtual void setDuration(int duration) { if (_transition) { _transition.data()->setDuration(duration); } } //* max render time void setMaxRenderTime(int value) { _maxRenderTime = value; } //* max renderTime const int &maxRenderTime() const { return _maxRenderTime; } //* start clock void startClock() { if (!_clock.isValid()) { _clock.start(); } else { _clock.restart(); } } //* check if rendering is too slow bool slow() const { return !(!_clock.isValid() || _clock.elapsed() <= maxRenderTime()); } protected Q_SLOTS: //* initialize animation virtual bool initializeAnimation() = 0; //* animate virtual bool animate() = 0; protected: //* returns true if one parent matches given class name inline bool hasParent(const QWidget *, const char *) const; //* transition widget virtual const TransitionWidget::Pointer &transition() const { return _transition; } //* used to avoid recursion when grabbing widgets void setRecursiveCheck(bool value) { _recursiveCheck = value; } //* used to avoid recursion when grabbing widgets bool recursiveCheck() const { return _recursiveCheck; } private: //* enability bool _enabled = true; //* used to avoid recursion when grabbing widgets bool _recursiveCheck = false; //* timer used to detect slow rendering QElapsedTimer _clock; //* max render time /*! used to detect slow rendering */ int _maxRenderTime = 200; //* animation handling TransitionWidget::Pointer _transition; }; //_____________________________________________________________________________________ bool TransitionData::hasParent(const QWidget *widget, const char *className) const { if (!widget) { return false; } for (QWidget *parent = widget->parentWidget(); parent; parent = parent->parentWidget()) { if (parent->inherits(className)) { return true; } } return false; } }