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 }