Blame style/animations/adwaitawidgetstateengine.cpp

Packit 8e9c33
Packit 8e9c33
/*************************************************************************
Packit 8e9c33
 * Copyright (C) 2014 by Hugo Pereira Da Costa <hugo.pereira@free.fr>    *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * This program is free software; you can redistribute it and/or modify  *
Packit 8e9c33
 * it under the terms of the GNU General Public License as published by  *
Packit 8e9c33
 * the Free Software Foundation; either version 2 of the License, or     *
Packit 8e9c33
 * (at your option) any later version.                                   *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * This program is distributed in the hope that it will be useful,       *
Packit 8e9c33
 * but WITHOUT ANY WARRANTY; without even the implied warranty of        *
Packit 8e9c33
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
Packit 8e9c33
 * GNU General Public License for more details.                          *
Packit 8e9c33
 *                                                                       *
Packit 8e9c33
 * You should have received a copy of the GNU General Public License     *
Packit 8e9c33
 * along with this program; if not, write to the                         *
Packit 8e9c33
 * Free Software Foundation, Inc.,                                       *
Packit 8e9c33
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA .        *
Packit 8e9c33
 *************************************************************************/
Packit 8e9c33
Packit 8e9c33
#include "adwaitawidgetstateengine.h"
Packit 8e9c33
Packit 8e9c33
#include "adwaitaenabledata.h"
Packit 8e9c33
Packit 8e9c33
namespace Adwaita
Packit 8e9c33
{
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    bool WidgetStateEngine::registerWidget( QWidget* widget, AnimationModes mode )
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        if( !widget ) return false;
Packit 8e9c33
        if( mode&AnimationHover && !_hoverData.contains( widget ) ) { _hoverData.insert( widget, new WidgetStateData( this, widget, duration() ), enabled() ); }
Packit 8e9c33
        if( mode&AnimationFocus && !_focusData.contains( widget ) ) { _focusData.insert( widget, new WidgetStateData( this, widget, duration() ), enabled() ); }
Packit 8e9c33
        if( mode&AnimationEnable && !_enableData.contains( widget ) ) { _enableData.insert( widget, new EnableData( this, widget, duration() ), enabled() ); }
Packit 8e9c33
        if( mode&AnimationPressed && !_pressedData.contains( widget ) ) { _pressedData.insert( widget, new WidgetStateData( this, widget, duration() ), enabled() ); }
Packit 8e9c33
Packit 8e9c33
        // connect destruction signal
Packit 8e9c33
        connect( widget, SIGNAL(destroyed(QObject*)), this, SLOT(unregisterWidget(QObject*)), Qt::UniqueConnection );
Packit 8e9c33
Packit 8e9c33
        return true;
Packit 8e9c33
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    BaseEngine::WidgetList WidgetStateEngine::registeredWidgets( AnimationModes mode ) const
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        WidgetList out;
Packit 8e9c33
Packit 8e9c33
        using Value = DataMap<WidgetStateData>::Value;
Packit 8e9c33
Packit 8e9c33
        if( mode&AnimationHover )
Packit 8e9c33
        {
Packit 8e9c33
            foreach( const Value& value, _hoverData )
Packit 8e9c33
            { if( value ) out.insert( value.data()->target().data() ); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        if( mode&AnimationFocus )
Packit 8e9c33
        {
Packit 8e9c33
            foreach( const Value& value, _focusData )
Packit 8e9c33
            { if( value ) out.insert( value.data()->target().data() ); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        if( mode&AnimationEnable )
Packit 8e9c33
        {
Packit 8e9c33
            foreach( const Value& value, _enableData )
Packit 8e9c33
            { if( value ) out.insert( value.data()->target().data() ); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        if( mode&AnimationPressed )
Packit 8e9c33
        {
Packit 8e9c33
            foreach( const Value& value, _pressedData )
Packit 8e9c33
            { if( value ) out.insert( value.data()->target().data() ); }
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
        return out;
Packit 8e9c33
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    bool WidgetStateEngine::updateState( const QObject* object, AnimationMode mode, bool value )
Packit 8e9c33
    {
Packit 8e9c33
        DataMap<WidgetStateData>::Value data( WidgetStateEngine::data( object, mode ) );
Packit 8e9c33
        return ( data && data.data()->updateState( value ) );
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    bool WidgetStateEngine::isAnimated( const QObject* object, AnimationMode mode )
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        DataMap<WidgetStateData>::Value data( WidgetStateEngine::data( object, mode ) );
Packit 8e9c33
        return ( data && data.data()->animation() && data.data()->animation().data()->isRunning() );
Packit 8e9c33
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    DataMap<WidgetStateData>::Value WidgetStateEngine::data( const QObject* object, AnimationMode mode )
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        switch( mode )
Packit 8e9c33
        {
Packit 8e9c33
            case AnimationHover: return _hoverData.find( object ).data();
Packit 8e9c33
            case AnimationFocus: return _focusData.find( object ).data();
Packit 8e9c33
            case AnimationEnable: return _enableData.find( object ).data();
Packit 8e9c33
            case AnimationPressed: return _pressedData.find( object ).data();
Packit 8e9c33
            default: return DataMap<WidgetStateData>::Value();
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
    //____________________________________________________________
Packit 8e9c33
    DataMap<WidgetStateData>& WidgetStateEngine::dataMap( AnimationMode mode )
Packit 8e9c33
    {
Packit 8e9c33
Packit 8e9c33
        switch( mode )
Packit 8e9c33
        {
Packit 8e9c33
            default:
Packit 8e9c33
            case AnimationHover: return _hoverData;
Packit 8e9c33
            case AnimationFocus: return _focusData;
Packit 8e9c33
            case AnimationEnable: return _enableData;
Packit 8e9c33
            case AnimationPressed: return _pressedData;
Packit 8e9c33
Packit 8e9c33
        }
Packit 8e9c33
Packit 8e9c33
    }
Packit 8e9c33
Packit 8e9c33
}