File indexing completed on 2024-05-19 05:28:50
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "breezewidgetstateengine.h" 0008 0009 #include "breezeenabledata.h" 0010 0011 namespace Breeze 0012 { 0013 //____________________________________________________________ 0014 bool WidgetStateEngine::registerWidget(QObject *target, AnimationModes modes) 0015 { 0016 if (!target) { 0017 return false; 0018 } 0019 if (modes & AnimationHover && !_hoverData.contains(target)) { 0020 _hoverData.insert(target, new WidgetStateData(this, target, duration()), enabled()); 0021 } 0022 if (modes & AnimationFocus && !_focusData.contains(target)) { 0023 _focusData.insert(target, new WidgetStateData(this, target, duration()), enabled()); 0024 } 0025 if (modes & AnimationEnable && !_enableData.contains(target)) { 0026 _enableData.insert(target, new EnableData(this, target, duration()), enabled()); 0027 } 0028 if (modes & AnimationPressed && !_pressedData.contains(target)) { 0029 _pressedData.insert(target, new WidgetStateData(this, target, duration()), enabled()); 0030 } 0031 0032 // connect destruction signal 0033 connect(target, &QObject::destroyed, this, &WidgetStateEngine::unregisterWidget, Qt::UniqueConnection); 0034 0035 return true; 0036 } 0037 0038 //____________________________________________________________ 0039 bool WidgetStateEngine::updateState(const QObject *object, AnimationMode mode, bool value) 0040 { 0041 DataMap<WidgetStateData>::Value data(WidgetStateEngine::data(object, mode)); 0042 return (data && data.data()->updateState(value)); 0043 } 0044 0045 //____________________________________________________________ 0046 bool WidgetStateEngine::isAnimated(const void *object, AnimationMode mode) 0047 { 0048 DataMap<WidgetStateData>::Value data(WidgetStateEngine::data(object, mode)); 0049 return (data && data.data()->animation() && data.data()->animation().data()->isRunning()); 0050 } 0051 0052 //____________________________________________________________ 0053 DataMap<WidgetStateData>::Value WidgetStateEngine::data(const void *object, AnimationMode mode) 0054 { 0055 switch (mode) { 0056 case AnimationHover: 0057 return _hoverData.find(object).data(); 0058 case AnimationFocus: 0059 return _focusData.find(object).data(); 0060 case AnimationEnable: 0061 return _enableData.find(object).data(); 0062 case AnimationPressed: 0063 return _pressedData.find(object).data(); 0064 default: 0065 return DataMap<WidgetStateData>::Value(); 0066 } 0067 } 0068 0069 //____________________________________________________________ 0070 DataMap<WidgetStateData> &WidgetStateEngine::dataMap(AnimationMode mode) 0071 { 0072 switch (mode) { 0073 default: 0074 case AnimationHover: 0075 return _hoverData; 0076 case AnimationFocus: 0077 return _focusData; 0078 case AnimationEnable: 0079 return _enableData; 0080 case AnimationPressed: 0081 return _pressedData; 0082 } 0083 } 0084 0085 }