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 }