File indexing completed on 2024-05-19 05:35:25
0001 // krazy:excludeall=qclasses 0002 0003 ////////////////////////////////////////////////////////////////////////////// 0004 // oxygentransitions.cpp 0005 // container for all transition engines 0006 // ------------------- 0007 // 0008 // SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0009 // 0010 // SPDX-License-Identifier: MIT 0011 ////////////////////////////////////////////////////////////////////////////// 0012 0013 #include "oxygentransitions.h" 0014 #include "oxygenpropertynames.h" 0015 #include "oxygenstyleconfigdata.h" 0016 0017 namespace Oxygen 0018 { 0019 //________________________________________________________-- 0020 Transitions::Transitions(QObject *parent) 0021 : QObject(parent) 0022 { 0023 registerEngine(_comboBoxEngine = new ComboBoxEngine(this)); 0024 registerEngine(_labelEngine = new LabelEngine(this)); 0025 registerEngine(_lineEditEngine = new LineEditEngine(this)); 0026 registerEngine(_stackedWidgetEngine = new StackedWidgetEngine(this)); 0027 } 0028 0029 //________________________________________________________-- 0030 void Transitions::setupEngines(void) 0031 { 0032 // animation steps 0033 TransitionWidget::setSteps(StyleConfigData::animationSteps()); 0034 0035 // default enability, duration and maxFrame 0036 bool animationsEnabled(StyleConfigData::animationsEnabled()); 0037 0038 // enability 0039 comboBoxEngine().setEnabled(animationsEnabled && StyleConfigData::comboBoxTransitionsEnabled()); 0040 labelEngine().setEnabled(animationsEnabled && StyleConfigData::labelTransitionsEnabled()); 0041 lineEditEngine().setEnabled(animationsEnabled && StyleConfigData::lineEditTransitionsEnabled()); 0042 stackedWidgetEngine().setEnabled(animationsEnabled && StyleConfigData::stackedWidgetTransitionsEnabled()); 0043 0044 // durations 0045 comboBoxEngine().setDuration(StyleConfigData::comboBoxTransitionsDuration()); 0046 labelEngine().setDuration(StyleConfigData::labelTransitionsDuration()); 0047 lineEditEngine().setDuration(StyleConfigData::lineEditTransitionsDuration()); 0048 stackedWidgetEngine().setDuration(StyleConfigData::stackedWidgetTransitionsDuration()); 0049 } 0050 0051 //____________________________________________________________ 0052 void Transitions::registerWidget(QWidget *widget) const 0053 { 0054 if (!widget) 0055 return; 0056 0057 // check against noAnimations propery 0058 QVariant propertyValue(widget->property(PropertyNames::noAnimations)); 0059 if (propertyValue.isValid() && propertyValue.toBool()) 0060 return; 0061 0062 if (QLabel *label = qobject_cast<QLabel *>(widget)) { 0063 // do not animate labels from tooltips 0064 if (widget->window() && widget->window()->windowFlags().testFlag(Qt::ToolTip)) 0065 return; 0066 else if (widget->window() && widget->window()->inherits("KWin::GeometryTip")) 0067 return; 0068 else 0069 labelEngine().registerWidget(label); 0070 0071 } else if (QComboBox *comboBox = qobject_cast<QComboBox *>(widget)) { 0072 comboBoxEngine().registerWidget(comboBox); 0073 0074 } else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) { 0075 lineEditEngine().registerWidget(lineEdit); 0076 0077 } else if (QStackedWidget *stack = qobject_cast<QStackedWidget *>(widget)) { 0078 stackedWidgetEngine().registerWidget(stack); 0079 } 0080 } 0081 0082 //____________________________________________________________ 0083 void Transitions::unregisterWidget(QWidget *widget) const 0084 { 0085 if (!widget) 0086 return; 0087 0088 // the following allows some optimization of widget unregistration 0089 // it assumes that a widget can be registered atmost in one of the 0090 // engines stored in the list. 0091 for (const BaseEngine::Pointer &engine : std::as_const(_engines)) { 0092 if (engine && engine.data()->unregisterWidget(widget)) 0093 break; 0094 } 0095 } 0096 }