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

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 "oxygenfollowmouseanimationconfigitem.h"
0014 #include "oxygengenericanimationconfigitem.h"
0015 #include "oxygenstyleconfigdata.h"
0016 
0017 #include <KLocalizedString>
0018 #include <QButtonGroup>
0019 #include <QHoverEvent>
0020 #include <QTextStream>
0021 
0022 namespace Oxygen
0023 {
0024 //_______________________________________________
0025 AnimationConfigWidget::AnimationConfigWidget(QWidget *parent)
0026     : BaseAnimationConfigWidget(parent)
0027 {
0028     QGridLayout *layout(qobject_cast<QGridLayout *>(BaseAnimationConfigWidget::layout()));
0029 
0030     setupItem(layout,
0031               _genericAnimations = new GenericAnimationConfigItem(
0032                   this,
0033                   i18n("Focus, mouseover and widget state transition"),
0034                   i18n("Configure widgets' focus and mouseover highlight animation, as well as widget enabled/disabled state transition")));
0035 
0036     setupItem(layout,
0037               _toolBarAnimations =
0038                   new FollowMouseAnimationConfigItem(this, i18n("Toolbar highlight"), i18n("Configure toolbars' mouseover highlight animation")));
0039     _toolBarAnimations->hideDurationSpinBox();
0040 
0041     setupItem(layout,
0042               _menuBarAnimations =
0043                   new FollowMouseAnimationConfigItem(this, i18n("Menu bar highlight"), i18n("Configure menu bars' mouseover highlight animation")));
0044 
0045     setupItem(layout,
0046               _menuAnimations = new FollowMouseAnimationConfigItem(this, i18n("Menu highlight"), i18n("Configure menus' mouseover highlight animation")));
0047 
0048     setupItem(layout,
0049               _progressBarAnimations = new GenericAnimationConfigItem(this, i18n("Progress bar animation"), i18n("Configure progress bars' steps animation")));
0050 
0051     setupItem(layout,
0052               _stackedWidgetAnimations = new GenericAnimationConfigItem(this, i18n("Tab transitions"), i18n("Configure fading transition between tabs")));
0053 
0054     setupItem(layout,
0055               _labelAnimations =
0056                   new GenericAnimationConfigItem(this, i18n("Label transitions"), i18n("Configure fading transition when a label's text is changed")));
0057 
0058     setupItem(layout,
0059               _lineEditAnimations =
0060                   new GenericAnimationConfigItem(this, i18n("Text editor transitions"), i18n("Configure fading transition when an editor's text is changed")));
0061 
0062     setupItem(layout,
0063               _comboBoxAnimations = new GenericAnimationConfigItem(this,
0064                                                                    i18n("Combo box transitions"),
0065                                                                    i18n("Configure fading transition when a combo box's selected choice is changed")));
0066 
0067     // add a separator
0068     QFrame *frame = new QFrame(this);
0069     frame->setFrameStyle(QFrame::HLine | QFrame::Sunken);
0070     layout->addWidget(frame, _row, 0, 1, 2);
0071     ++_row;
0072 
0073     // progress bar busy animation
0074     setupItem(layout,
0075               _progressBarBusyAnimations =
0076                   new GenericAnimationConfigItem(this, i18n("Progress bar busy indicator"), i18n("Configure progress bars' busy indicator animation")));
0077 
0078     // add spacers to the first column, previous row to finalize layout
0079     layout->addItem(new QSpacerItem(25, 0), _row - 1, 0, 1, 1);
0080 
0081     // add vertical spacer
0082     layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), _row, 1, 1, 1);
0083     ++_row;
0084 
0085     connect(animationsEnabled(), SIGNAL(toggled(bool)), SLOT(updateChanged()));
0086     const auto children = findChildren<AnimationConfigItem *>();
0087     for (AnimationConfigItem *item : children) {
0088         if (item != _progressBarBusyAnimations) {
0089             item->QWidget::setEnabled(false);
0090             connect(animationsEnabled(), SIGNAL(toggled(bool)), item, SLOT(setEnabled(bool)));
0091         }
0092     }
0093 }
0094 
0095 //_______________________________________________
0096 void AnimationConfigWidget::load(void)
0097 {
0098     animationsEnabled()->setChecked(StyleConfigData::animationsEnabled());
0099     _genericAnimations->setEnabled(StyleConfigData::genericAnimationsEnabled());
0100     _genericAnimations->setDuration(StyleConfigData::genericAnimationsDuration());
0101 
0102     _toolBarAnimations->setEnabled(StyleConfigData::toolBarAnimationType() != StyleConfigData::TB_NONE);
0103     _toolBarAnimations->setDuration(StyleConfigData::genericAnimationsDuration());
0104     _toolBarAnimations->setFollowMouseDuration(StyleConfigData::toolBarAnimationsDuration());
0105 
0106     switch (StyleConfigData::toolBarAnimationType()) {
0107     case StyleConfigData::TB_FOLLOW_MOUSE:
0108         _toolBarAnimations->setType(1);
0109         break;
0110 
0111     case StyleConfigData::TB_FADE:
0112     default:
0113         _toolBarAnimations->setType(0);
0114         break;
0115     }
0116 
0117     _menuBarAnimations->setEnabled(StyleConfigData::menuBarAnimationType() != StyleConfigData::MB_NONE);
0118     _menuBarAnimations->setDuration(StyleConfigData::menuBarAnimationsDuration());
0119     _menuBarAnimations->setFollowMouseDuration(StyleConfigData::menuBarFollowMouseAnimationsDuration());
0120     switch (StyleConfigData::menuBarAnimationType()) {
0121     case StyleConfigData::MB_FOLLOW_MOUSE:
0122         _menuBarAnimations->setType(1);
0123         break;
0124 
0125     case StyleConfigData::MB_FADE:
0126     default:
0127         _menuBarAnimations->setType(0);
0128         break;
0129     }
0130 
0131     _menuAnimations->setEnabled(StyleConfigData::menuAnimationType() != StyleConfigData::ME_NONE);
0132     _menuAnimations->setDuration(StyleConfigData::menuAnimationsDuration());
0133     _menuAnimations->setFollowMouseDuration(StyleConfigData::menuFollowMouseAnimationsDuration());
0134     switch (StyleConfigData::menuAnimationType()) {
0135     case StyleConfigData::ME_FOLLOW_MOUSE:
0136         _menuAnimations->setType(1);
0137         break;
0138 
0139     case StyleConfigData::ME_FADE:
0140     default:
0141         _menuAnimations->setType(0);
0142         break;
0143     }
0144 
0145     _progressBarAnimations->setEnabled(StyleConfigData::progressBarAnimationsEnabled());
0146     _progressBarAnimations->setDuration(StyleConfigData::progressBarAnimationsDuration());
0147 
0148     _progressBarBusyAnimations->setEnabled(StyleConfigData::progressBarAnimated());
0149     _progressBarBusyAnimations->setDuration(StyleConfigData::progressBarBusyStepDuration());
0150 
0151     _stackedWidgetAnimations->setEnabled(StyleConfigData::stackedWidgetTransitionsEnabled());
0152     _stackedWidgetAnimations->setDuration(StyleConfigData::stackedWidgetTransitionsDuration());
0153 
0154     _labelAnimations->setEnabled(StyleConfigData::labelTransitionsEnabled());
0155     _labelAnimations->setDuration(StyleConfigData::labelTransitionsDuration());
0156 
0157     _lineEditAnimations->setEnabled(StyleConfigData::lineEditTransitionsEnabled());
0158     _lineEditAnimations->setDuration(StyleConfigData::lineEditTransitionsDuration());
0159 
0160     _comboBoxAnimations->setEnabled(StyleConfigData::comboBoxTransitionsEnabled());
0161     _comboBoxAnimations->setDuration(StyleConfigData::comboBoxTransitionsDuration());
0162 }
0163 
0164 //_______________________________________________
0165 void AnimationConfigWidget::save(void)
0166 {
0167     StyleConfigData::setAnimationsEnabled(animationsEnabled()->isChecked());
0168     StyleConfigData::setGenericAnimationsEnabled(_genericAnimations->enabled());
0169     StyleConfigData::setGenericAnimationsDuration(_genericAnimations->duration());
0170 
0171     StyleConfigData::setToolBarAnimationsDuration(_toolBarAnimations->followMouseDuration());
0172     if (!_toolBarAnimations->enabled())
0173         StyleConfigData::setToolBarAnimationType(StyleConfigData::TB_NONE);
0174     else if (_toolBarAnimations->type() == 1)
0175         StyleConfigData::setToolBarAnimationType(StyleConfigData::TB_FOLLOW_MOUSE);
0176     else
0177         StyleConfigData::setToolBarAnimationType(StyleConfigData::TB_FADE);
0178 
0179     StyleConfigData::setMenuBarAnimationsDuration(_menuBarAnimations->duration());
0180     StyleConfigData::setMenuBarFollowMouseAnimationsDuration(_menuBarAnimations->followMouseDuration());
0181     if (!_menuBarAnimations->enabled())
0182         StyleConfigData::setMenuBarAnimationType(StyleConfigData::MB_NONE);
0183     else if (_menuBarAnimations->type() == 1)
0184         StyleConfigData::setMenuBarAnimationType(StyleConfigData::MB_FOLLOW_MOUSE);
0185     else
0186         StyleConfigData::setMenuBarAnimationType(StyleConfigData::MB_FADE);
0187 
0188     StyleConfigData::setMenuAnimationsDuration(_menuAnimations->duration());
0189     StyleConfigData::setMenuFollowMouseAnimationsDuration(_menuAnimations->followMouseDuration());
0190     if (!_menuAnimations->enabled())
0191         StyleConfigData::setMenuAnimationType(StyleConfigData::ME_NONE);
0192     else if (_menuAnimations->type() == 1)
0193         StyleConfigData::setMenuAnimationType(StyleConfigData::ME_FOLLOW_MOUSE);
0194     else
0195         StyleConfigData::setMenuAnimationType(StyleConfigData::ME_FADE);
0196 
0197     StyleConfigData::setProgressBarAnimationsEnabled(_progressBarAnimations->enabled());
0198     StyleConfigData::setProgressBarAnimationsDuration(_progressBarAnimations->duration());
0199 
0200     StyleConfigData::setProgressBarAnimated(_progressBarBusyAnimations->enabled());
0201     StyleConfigData::setProgressBarBusyStepDuration(_progressBarBusyAnimations->duration());
0202 
0203     StyleConfigData::setStackedWidgetTransitionsEnabled(_stackedWidgetAnimations->enabled());
0204     StyleConfigData::setStackedWidgetTransitionsDuration(_stackedWidgetAnimations->duration());
0205 
0206     StyleConfigData::setLabelTransitionsEnabled(_labelAnimations->enabled());
0207     StyleConfigData::setLabelTransitionsDuration(_labelAnimations->duration());
0208 
0209     StyleConfigData::setLineEditTransitionsEnabled(_lineEditAnimations->enabled());
0210     StyleConfigData::setLineEditTransitionsDuration(_lineEditAnimations->duration());
0211 
0212     StyleConfigData::setComboBoxTransitionsEnabled(_comboBoxAnimations->enabled());
0213     StyleConfigData::setComboBoxTransitionsDuration(_comboBoxAnimations->duration());
0214     setChanged(false);
0215 }
0216 
0217 //_______________________________________________
0218 void AnimationConfigWidget::updateChanged(void)
0219 {
0220     bool modified(false);
0221     if (animationsEnabled()->isChecked() != StyleConfigData::animationsEnabled())
0222         modified = true;
0223     else if (_genericAnimations->enabled() != StyleConfigData::genericAnimationsEnabled())
0224         modified = true;
0225     else if (_genericAnimations->duration() != StyleConfigData::genericAnimationsDuration())
0226         modified = true;
0227 
0228     else if (_toolBarAnimations->duration() != StyleConfigData::genericAnimationsDuration())
0229         modified = true;
0230     else if (_toolBarAnimations->followMouseDuration() != StyleConfigData::toolBarAnimationsDuration())
0231         modified = true;
0232     else if (StyleConfigData::toolBarAnimationType() == StyleConfigData::TB_NONE && _toolBarAnimations->enabled())
0233         modified = true;
0234     else if (StyleConfigData::toolBarAnimationType() == StyleConfigData::TB_FOLLOW_MOUSE && !(_toolBarAnimations->type() == 1 && _toolBarAnimations->enabled()))
0235         modified = true;
0236     else if (StyleConfigData::toolBarAnimationType() == StyleConfigData::TB_FADE && !(_toolBarAnimations->type() == 0 && _toolBarAnimations->enabled()))
0237         modified = true;
0238 
0239     else if (_menuBarAnimations->duration() != StyleConfigData::menuBarAnimationsDuration())
0240         modified = true;
0241     else if (_menuBarAnimations->followMouseDuration() != StyleConfigData::menuBarFollowMouseAnimationsDuration())
0242         modified = true;
0243     else if (StyleConfigData::menuBarAnimationType() == StyleConfigData::MB_NONE && _menuBarAnimations->enabled())
0244         modified = true;
0245     else if (StyleConfigData::menuBarAnimationType() == StyleConfigData::MB_FOLLOW_MOUSE && !(_menuBarAnimations->type() == 1 && _menuBarAnimations->enabled()))
0246         modified = true;
0247     else if (StyleConfigData::menuBarAnimationType() == StyleConfigData::MB_FADE && !(_menuBarAnimations->type() == 0 && _menuBarAnimations->enabled()))
0248         modified = true;
0249 
0250     else if (_menuAnimations->duration() != StyleConfigData::menuAnimationsDuration())
0251         modified = true;
0252     else if (_menuAnimations->followMouseDuration() != StyleConfigData::menuFollowMouseAnimationsDuration())
0253         modified = true;
0254     else if (StyleConfigData::menuAnimationType() == StyleConfigData::ME_NONE && _menuAnimations->enabled())
0255         modified = true;
0256     else if (StyleConfigData::menuAnimationType() == StyleConfigData::ME_FOLLOW_MOUSE && !(_menuAnimations->type() == 1 && _menuAnimations->enabled()))
0257         modified = true;
0258     else if (StyleConfigData::menuAnimationType() == StyleConfigData::ME_FADE && !(_menuAnimations->type() == 0 && _menuAnimations->enabled()))
0259         modified = true;
0260 
0261     else if (_progressBarAnimations->enabled() != StyleConfigData::progressBarAnimationsEnabled())
0262         modified = true;
0263     else if (_progressBarAnimations->duration() != StyleConfigData::progressBarAnimationsDuration())
0264         modified = true;
0265 
0266     else if (_progressBarBusyAnimations->enabled() != StyleConfigData::progressBarAnimated())
0267         modified = true;
0268     else if (_progressBarBusyAnimations->duration() != StyleConfigData::progressBarBusyStepDuration())
0269         modified = true;
0270 
0271     else if (_stackedWidgetAnimations->enabled() != StyleConfigData::stackedWidgetTransitionsEnabled())
0272         modified = true;
0273     else if (_stackedWidgetAnimations->duration() != StyleConfigData::stackedWidgetTransitionsDuration())
0274         modified = true;
0275 
0276     else if (_labelAnimations->enabled() != StyleConfigData::labelTransitionsEnabled())
0277         modified = true;
0278     else if (_labelAnimations->duration() != StyleConfigData::labelTransitionsDuration())
0279         modified = true;
0280 
0281     else if (_lineEditAnimations->enabled() != StyleConfigData::lineEditTransitionsEnabled())
0282         modified = true;
0283     else if (_lineEditAnimations->duration() != StyleConfigData::lineEditTransitionsDuration())
0284         modified = true;
0285 
0286     else if (_comboBoxAnimations->enabled() != StyleConfigData::comboBoxTransitionsEnabled())
0287         modified = true;
0288     else if (_comboBoxAnimations->duration() != StyleConfigData::comboBoxTransitionsDuration())
0289         modified = true;
0290 
0291     setChanged(modified);
0292 }
0293 }