File indexing completed on 2024-05-19 05:35:22
0001 0002 ////////////////////////////////////////////////////////////////////////////// 0003 // oxygenwidgetstateengine.h 0004 // stores event filters and maps widgets to timelines for animations 0005 // ------------------- 0006 // 0007 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0008 // 0009 // SPDX-License-Identifier: MIT 0010 ////////////////////////////////////////////////////////////////////////////// 0011 0012 #include "oxygenwidgetstateengine.h" 0013 0014 #include "oxygenenabledata.h" 0015 0016 namespace Oxygen 0017 { 0018 //____________________________________________________________ 0019 bool WidgetStateEngine::registerWidget(QWidget *widget, AnimationModes mode) 0020 { 0021 if (!widget) 0022 return false; 0023 if (mode & AnimationHover && !_hoverData.contains(widget)) { 0024 _hoverData.insert(widget, new WidgetStateData(this, widget, duration()), enabled()); 0025 } 0026 if (mode & AnimationFocus && !_focusData.contains(widget)) { 0027 _focusData.insert(widget, new WidgetStateData(this, widget, duration()), enabled()); 0028 } 0029 if (mode & AnimationEnable && !_enableData.contains(widget)) { 0030 _enableData.insert(widget, new EnableData(this, widget, duration()), enabled()); 0031 } 0032 0033 // connect destruction signal 0034 connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(unregisterWidget(QObject *)), Qt::UniqueConnection); 0035 0036 return true; 0037 } 0038 0039 //____________________________________________________________ 0040 BaseEngine::WidgetList WidgetStateEngine::registeredWidgets(AnimationModes mode) const 0041 { 0042 WidgetList out; 0043 0044 // the typedef is needed to make Krazy happy 0045 typedef DataMap<WidgetStateData>::Value Value; 0046 0047 if (mode & AnimationHover) { 0048 for (const Value &value : std::as_const(_hoverData)) { 0049 if (value) 0050 out.insert(value.data()->target().data()); 0051 } 0052 } 0053 0054 if (mode & AnimationFocus) { 0055 for (const Value &value : std::as_const(_focusData)) { 0056 if (value) 0057 out.insert(value.data()->target().data()); 0058 } 0059 } 0060 0061 if (mode & AnimationEnable) { 0062 for (const Value &value : std::as_const(_enableData)) { 0063 if (value) 0064 out.insert(value.data()->target().data()); 0065 } 0066 } 0067 0068 return out; 0069 } 0070 0071 //____________________________________________________________ 0072 bool WidgetStateEngine::updateState(const QObject *object, AnimationMode mode, bool value) 0073 { 0074 DataMap<WidgetStateData>::Value data(WidgetStateEngine::data(object, mode)); 0075 return (data && data.data()->updateState(value)); 0076 } 0077 0078 //____________________________________________________________ 0079 bool WidgetStateEngine::isAnimated(const QObject *object, AnimationMode mode) 0080 { 0081 DataMap<WidgetStateData>::Value data(WidgetStateEngine::data(object, mode)); 0082 return (data && data.data()->animation() && data.data()->animation().data()->isRunning()); 0083 } 0084 0085 //____________________________________________________________ 0086 DataMap<WidgetStateData>::Value WidgetStateEngine::data(const QObject *object, AnimationMode mode) 0087 { 0088 switch (mode) { 0089 case AnimationHover: 0090 return _hoverData.find(object).data(); 0091 case AnimationFocus: 0092 return _focusData.find(object).data(); 0093 case AnimationEnable: 0094 return _enableData.find(object).data(); 0095 default: 0096 return DataMap<WidgetStateData>::Value(); 0097 } 0098 } 0099 }