~blue-shell-next/carbon-gtk/master

« back to all changes in this revision

Viewing changes to src/animations/carbonarrowstateengine.h

  • Committer: David Edmundson
  • Date: 2015-02-11 15:48:54 UTC
  • Revision ID: git-v1:ed61428ce6f52c8b8551e5efd0cdc4f2ad956719
RenameĀ files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef oxygenarrowstateengine_h
 
2
#define oxygenarrowstateengine_h
 
3
/*
 
4
* this file is part of the oxygen gtk engine
 
5
* Copyright (c) 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
 
6
*
 
7
* This  library is free  software; you can  redistribute it and/or
 
8
* modify it  under  the terms  of the  GNU Lesser  General  Public
 
9
* License  as published  by the Free  Software  Foundation; either
 
10
* version 2 of the License, or(at your option ) any later version.
 
11
*
 
12
* This library is distributed  in the hope that it will be useful,
 
13
* but  WITHOUT ANY WARRANTY; without even  the implied warranty of
 
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 
15
* Lesser General Public License for more details.
 
16
*
 
17
* You should have received a copy of the GNU Lesser General Public
 
18
* License  along  with  this library;  if not,  write to  the Free
 
19
* Software Foundation, Inc., 51  Franklin St, Fifth Floor, Boston,
 
20
* MA 02110-1301, USA.
 
21
*/
 
22
 
 
23
#include "../oxygenanimationdata.h"
 
24
#include "../oxygenstyleoptions.h"
 
25
#include "oxygenanimationengine.h"
 
26
#include "oxygengenericengine.h"
 
27
#include "oxygendatamap.h"
 
28
#include "oxygenarrowstatedata.h"
 
29
 
 
30
#include <gtk/gtk.h>
 
31
 
 
32
namespace Oxygen
 
33
{
 
34
    //! forward declaration
 
35
    class Animations;
 
36
 
 
37
    //! stores data associated to editable arrowstatees
 
38
    /*!
 
39
    ensures that the text entry and the button of editable arrowstatees
 
40
    gets hovered and focus flags at the same time
 
41
    */
 
42
    class ArrowStateEngine: public GenericEngine<ArrowStateData>, public AnimationEngine
 
43
    {
 
44
 
 
45
        public:
 
46
 
 
47
        //! constructor
 
48
        ArrowStateEngine( Animations* widget ):
 
49
            GenericEngine<ArrowStateData>( widget )
 
50
            {}
 
51
 
 
52
        //! destructor
 
53
        virtual ~ArrowStateEngine( void )
 
54
        {}
 
55
 
 
56
        //! enable state
 
57
        virtual bool setEnabled( bool value )
 
58
        {
 
59
            if( !BaseEngine::setEnabled( value ) ) return false;
 
60
            for( DataMap<ArrowStateData>::Map::iterator iter = data().map().begin(); iter != data().map().end(); iter++ )
 
61
            {
 
62
                iter->second.setEnabled( value );
 
63
                if( enabled() && !widgetIsBlackListed( iter->first ) ) iter->second.connect( iter->first );
 
64
                else iter->second.disconnect( iter->first );
 
65
            }
 
66
 
 
67
            return true;
 
68
        }
 
69
 
 
70
        //! transition duration
 
71
        virtual bool setDuration( int value )
 
72
        {
 
73
            if( !AnimationEngine::setDuration( value ) ) return false;
 
74
            for( DataMap<ArrowStateData>::Map::iterator iter = data().map().begin(); iter != data().map().end(); iter++ )
 
75
            { iter->second.setDuration( value ); }
 
76
            return true;
 
77
        }
 
78
 
 
79
        //! retrieve animation data matching a given widget for provided options
 
80
        /*! note: for convenience, this method also calls ::registerWidget and ::updateState */
 
81
        virtual AnimationData get( GtkWidget* widget, GtkArrowType type, const StyleOptions& options )
 
82
        {
 
83
 
 
84
            // check widget
 
85
            if( !( enabled() && widget ) ) return AnimationData();
 
86
 
 
87
            // register
 
88
            registerWidget( widget );
 
89
 
 
90
            ArrowStateData& data( this->data().value( widget ) );
 
91
            data.updateState( type, (options&Hover) && !(options&Disabled) );
 
92
 
 
93
            return data.isAnimated( type ) ? AnimationData( data.opacity( type ), AnimationHover ):AnimationData();
 
94
 
 
95
        }
 
96
 
 
97
        //@}
 
98
 
 
99
        protected:
 
100
 
 
101
        //!@name protected modifiers
 
102
        //@{
 
103
 
 
104
        //! register widget [overloaded]
 
105
        virtual bool registerWidget( GtkWidget* widget )
 
106
        {
 
107
            const bool registered( GenericEngine<ArrowStateData>::registerWidget( widget ) );
 
108
            if( registered ) {
 
109
                data().value( widget ).setEnabled( enabled() );
 
110
                data().value( widget ).setDuration( duration() );
 
111
            }
 
112
            return registered;
 
113
        }
 
114
 
 
115
        //@}
 
116
 
 
117
    };
 
118
 
 
119
}
 
120
 
 
121
#endif