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 }