File indexing completed on 2024-05-19 05:35:16

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygenanimationconfigwidget.cpp
0003 // animation configuration widget
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: MIT
0009 //////////////////////////////////////////////////////////////////////////////
0010 
0011 #include "oxygenanimationconfigwidget.h"
0012 #include "oxygenanimationconfigitem.h"
0013 #include "oxygengenericanimationconfigitem.h"
0014 
0015 #include <KLocalizedString>
0016 #include <QButtonGroup>
0017 #include <QHoverEvent>
0018 #include <QTextStream>
0019 
0020 namespace Oxygen
0021 {
0022 //_______________________________________________
0023 AnimationConfigWidget::AnimationConfigWidget(QWidget *parent)
0024     : BaseAnimationConfigWidget(parent)
0025 {
0026     QGridLayout *layout(qobject_cast<QGridLayout *>(BaseAnimationConfigWidget::layout()));
0027 
0028     setupItem(layout,
0029               m_buttonAnimations =
0030                   new GenericAnimationConfigItem(this, i18n("Button mouseover transition"), i18n("Configure window buttons' mouseover highlight animation")));
0031 
0032     setupItem(layout,
0033               m_shadowAnimations =
0034                   new GenericAnimationConfigItem(this,
0035                                                  i18n("Window active state change transitions"),
0036                                                  i18n("Configure fading between window shadow and glow when window's active state is changed")));
0037 
0038     // add spacers to the first column, previous row to finalize layout
0039     layout->addItem(new QSpacerItem(25, 0), _row - 1, 0, 1, 1);
0040 
0041     // add vertical spacer
0042     layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), _row, 1, 1, 1);
0043     ++_row;
0044 
0045     connect(animationsEnabled(), SIGNAL(toggled(bool)), SLOT(updateChanged()));
0046 
0047     const auto children = findChildren<AnimationConfigItem *>();
0048     for (AnimationConfigItem *item : children) {
0049         item->QWidget::setEnabled(false);
0050         connect(animationsEnabled(), SIGNAL(toggled(bool)), item, SLOT(setEnabled(bool)));
0051     }
0052 }
0053 
0054 //_______________________________________________
0055 void AnimationConfigWidget::load(void)
0056 {
0057     // check configuration
0058     if (!m_internalSettings)
0059         return;
0060 
0061     animationsEnabled()->setChecked(m_internalSettings.data()->animationsEnabled());
0062 
0063     m_buttonAnimations->setEnabled(m_internalSettings.data()->buttonAnimationsEnabled());
0064     m_buttonAnimations->setDuration(m_internalSettings.data()->buttonAnimationsDuration());
0065 
0066     m_shadowAnimations->setEnabled(m_internalSettings.data()->shadowAnimationsEnabled());
0067     m_shadowAnimations->setDuration(m_internalSettings.data()->shadowAnimationsDuration());
0068 
0069     setChanged(false);
0070 }
0071 
0072 //_______________________________________________
0073 void AnimationConfigWidget::save(void)
0074 {
0075     // check configuration
0076     if (!m_internalSettings)
0077         return;
0078 
0079     // save modifications
0080     m_internalSettings.data()->setAnimationsEnabled(animationsEnabled()->isChecked());
0081 
0082     m_internalSettings.data()->setButtonAnimationsEnabled(m_buttonAnimations->enabled());
0083     m_internalSettings.data()->setButtonAnimationsDuration(m_buttonAnimations->duration());
0084 
0085     m_internalSettings.data()->setShadowAnimationsEnabled(m_shadowAnimations->enabled());
0086     m_internalSettings.data()->setShadowAnimationsDuration(m_shadowAnimations->duration());
0087 
0088     setChanged(false);
0089 }
0090 
0091 //_______________________________________________
0092 void AnimationConfigWidget::updateChanged(void)
0093 {
0094     // check configuration
0095     if (!m_internalSettings)
0096         return;
0097 
0098     // track modifications
0099     bool modified(false);
0100     if (animationsEnabled()->isChecked() != m_internalSettings.data()->animationsEnabled())
0101         modified = true;
0102     else if (m_buttonAnimations->enabled() != m_internalSettings.data()->buttonAnimationsEnabled())
0103         modified = true;
0104     else if (m_buttonAnimations->duration() != m_internalSettings.data()->buttonAnimationsDuration())
0105         modified = true;
0106 
0107     else if (m_shadowAnimations->enabled() != m_internalSettings.data()->shadowAnimationsEnabled())
0108         modified = true;
0109     else if (m_shadowAnimations->duration() != m_internalSettings.data()->shadowAnimationsDuration())
0110         modified = true;
0111 
0112     setChanged(modified);
0113 }
0114 }