File indexing completed on 2024-05-12 17:05:46
0001 #ifndef oxygenarrowstatedata_h 0002 #define oxygenarrowstatedata_h 0003 /* 0004 * this file is part of the oxygen gtk engine 0005 * SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0006 * 0007 * SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include "oxygentimeline.h" 0011 0012 #include <gtk/gtk.h> 0013 0014 namespace Oxygen 0015 { 0016 //! track arrow state changes events, 0017 /*! used to deal with spinbox and Notebook arrows */ 0018 class ArrowStateData 0019 { 0020 0021 public: 0022 0023 //! constructor 0024 explicit ArrowStateData( void ): 0025 _target( 0L ) 0026 {} 0027 0028 //! destructor 0029 virtual ~ArrowStateData( void ) 0030 {} 0031 0032 //! setup connections 0033 void connect( GtkWidget* ); 0034 0035 //! disconnect 0036 void disconnect( GtkWidget* ); 0037 0038 //! update state 0039 bool updateState( GtkArrowType type, bool value ) 0040 { return data( type ).updateState( value ); } 0041 0042 //! enable state 0043 void setEnabled( bool value ) 0044 { 0045 _upArrowData._timeLine.setEnabled( value ); 0046 _downArrowData._timeLine.setEnabled( value ); 0047 } 0048 0049 //! duration 0050 void setDuration( int value ) 0051 { 0052 _upArrowData._timeLine.setDuration( value ); 0053 _downArrowData._timeLine.setDuration( value ); 0054 } 0055 0056 //! true if timeline for give arrow type is running 0057 bool isAnimated( GtkArrowType type ) const 0058 { return data( type )._timeLine.isRunning(); } 0059 0060 //! opacity 0061 double opacity( GtkArrowType type ) const 0062 { return data( type )._timeLine.value(); } 0063 0064 protected: 0065 0066 // arrow data 0067 class Data 0068 { 0069 0070 public: 0071 0072 //! constructor 0073 explicit Data( void ): 0074 _state( false ) 0075 {} 0076 0077 //! update state 0078 bool updateState( bool ); 0079 0080 //! timeline 0081 TimeLine _timeLine; 0082 0083 //! state 0084 bool _state; 0085 0086 }; 0087 0088 //! get data for given arrow type 0089 const Data& data( GtkArrowType type ) const 0090 { 0091 switch( type ) 0092 { 0093 0094 case GTK_ARROW_UP: 0095 case GTK_ARROW_LEFT: 0096 return _upArrowData; 0097 0098 default: 0099 case GTK_ARROW_DOWN: 0100 case GTK_ARROW_RIGHT: 0101 return _downArrowData; 0102 0103 } 0104 } 0105 0106 //! get data for given arrow type 0107 Data& data( GtkArrowType type ) 0108 { 0109 switch( type ) 0110 { 0111 0112 case GTK_ARROW_UP: 0113 case GTK_ARROW_LEFT: 0114 return _upArrowData; 0115 0116 default: 0117 case GTK_ARROW_DOWN: 0118 case GTK_ARROW_RIGHT: 0119 return _downArrowData; 0120 0121 } 0122 } 0123 0124 //! delayed update 0125 static gboolean delayedUpdate( gpointer ); 0126 0127 private: 0128 0129 //! target 0130 GtkWidget* _target; 0131 0132 // up/left arrow 0133 Data _upArrowData; 0134 0135 // down/right arrow 0136 Data _downArrowData; 0137 0138 }; 0139 0140 } 0141 0142 #endif