File indexing completed on 2024-05-19 05:35:22

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygentoolbarengine.cpp
0003 // stores event filters and maps widgets to timelines for animations
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: MIT
0009 //////////////////////////////////////////////////////////////////////////////
0010 
0011 #include "oxygentoolbarengine.h"
0012 
0013 #include <QEvent>
0014 
0015 namespace Oxygen
0016 {
0017 //____________________________________________________________
0018 void ToolBarEngine::registerWidget(QWidget *widget)
0019 {
0020     if (!widget)
0021         return;
0022 
0023     // create new data class
0024     if (!_data.contains(widget)) {
0025         DataMap<ToolBarData>::Value value(new ToolBarData(this, widget, duration()));
0026         value.data()->setFollowMouseDuration(followMouseDuration());
0027         _data.insert(widget, value, enabled());
0028     }
0029 
0030     // connect destruction signal
0031     disconnect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(unregisterWidget(QObject *)));
0032     connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(unregisterWidget(QObject *)));
0033 }
0034 
0035 //____________________________________________________________
0036 BaseEngine::WidgetList ToolBarEngine::registeredWidgets(void) const
0037 {
0038     WidgetList out;
0039 
0040     // the typedef is needed to make Krazy happy
0041     typedef DataMap<ToolBarData>::Value Value;
0042     for (const Value &value : std::as_const(_data)) {
0043         if (value)
0044             out.insert(value.data()->target().data());
0045     }
0046     return out;
0047 }
0048 
0049 //____________________________________________________________
0050 bool ToolBarEngine::isAnimated(const QObject *object)
0051 {
0052     if (!enabled())
0053         return false;
0054 
0055     DataMap<ToolBarData>::Value data(_data.find(object));
0056     if (!data)
0057         return false;
0058     if (Animation::Pointer animation = data.data()->animation())
0059         return animation.data()->isRunning();
0060     else
0061         return false;
0062 }
0063 
0064 //____________________________________________________________
0065 bool ToolBarEngine::isFollowMouseAnimated(const QObject *object)
0066 {
0067     if (!enabled())
0068         return false;
0069 
0070     DataMap<ToolBarData>::Value data(_data.find(object));
0071     if (!data)
0072         return false;
0073     if (Animation::Pointer animation = data.data()->progressAnimation())
0074         return animation.data()->isRunning();
0075     else
0076         return false;
0077 }
0078 
0079 //____________________________________________________________
0080 QRect ToolBarEngine::currentRect(const QObject *object)
0081 {
0082     if (!enabled())
0083         return QRect();
0084     DataMap<ToolBarData>::Value data(_data.find(object));
0085     return data ? data.data()->currentRect() : QRect();
0086 }
0087 
0088 //____________________________________________________________
0089 QRect ToolBarEngine::animatedRect(const QObject *object)
0090 {
0091     if (!enabled())
0092         return QRect();
0093     DataMap<ToolBarData>::Value data(_data.find(object));
0094     return data ? data.data()->animatedRect() : QRect();
0095 }
0096 
0097 //____________________________________________________________
0098 bool ToolBarEngine::isTimerActive(const QObject *object)
0099 {
0100     if (!enabled())
0101         return false;
0102     DataMap<ToolBarData>::Value data(_data.find(object));
0103     return data ? data.data()->timer().isActive() : false;
0104 }
0105 }