File indexing completed on 2024-05-19 05:35:21
0001 #ifndef oxygensplitterengine_h 0002 #define oxygensplitterengine_h 0003 0004 ////////////////////////////////////////////////////////////////////////////// 0005 // oxygensplitterengine.h 0006 // QSplitter engine 0007 // ------------------- 0008 // 0009 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0010 // 0011 // SPDX-License-Identifier: MIT 0012 ////////////////////////////////////////////////////////////////////////////// 0013 0014 #include "oxygenbaseengine.h" 0015 #include "oxygendatamap.h" 0016 #include "oxygenwidgetstatedata.h" 0017 0018 namespace Oxygen 0019 { 0020 //* QSplitter animation engine 0021 class SplitterEngine : public BaseEngine 0022 { 0023 Q_OBJECT 0024 0025 public: 0026 //* constructor 0027 explicit SplitterEngine(QObject *parent) 0028 : BaseEngine(parent) 0029 { 0030 } 0031 0032 //* enable state 0033 void setEnabled(bool value) override 0034 { 0035 BaseEngine::setEnabled(value); 0036 _data.setEnabled(value); 0037 } 0038 0039 //* duration 0040 void setDuration(int value) override 0041 { 0042 BaseEngine::setDuration(value); 0043 _data.setDuration(value); 0044 } 0045 0046 //* register widget 0047 bool registerWidget(QWidget *); 0048 0049 //* true if widget hover state is changed 0050 bool updateState(const QPaintDevice *, bool); 0051 0052 //* true if widget is animated 0053 bool isAnimated(const QPaintDevice *); 0054 0055 //* animation opacity 0056 qreal opacity(const QPaintDevice *object) 0057 { 0058 return isAnimated(object) ? data(object).data()->opacity() : AnimationData::OpacityInvalid; 0059 } 0060 0061 public Q_SLOTS: 0062 0063 //* remove widget from map 0064 bool unregisterWidget(QObject *data) override 0065 { 0066 if (!data) 0067 return false; 0068 0069 // reinterpret_cast is safe here since only the address is used to find 0070 // data in the map 0071 return _data.unregisterWidget(reinterpret_cast<QPaintDevice *>(data)); 0072 } 0073 0074 private: 0075 //* returns data associated to widget 0076 PaintDeviceDataMap<WidgetStateData>::Value data(const QPaintDevice *object) 0077 { 0078 return _data.find(object).data(); 0079 } 0080 0081 //* engine enable state 0082 bool _enabled; 0083 0084 //* animation duration 0085 int _duration; 0086 0087 //* map 0088 PaintDeviceDataMap<WidgetStateData> _data; 0089 }; 0090 } 0091 0092 #endif