File indexing completed on 2024-05-12 17:05:48
0001 #ifndef oxygengenericengine_h 0002 #define oxygengenericengine_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 0011 #include "oxygenbaseengine.h" 0012 #include "oxygendatamap.h" 0013 0014 #include <gtk/gtk.h> 0015 0016 namespace Oxygen 0017 { 0018 //! forward declaration 0019 class Animations; 0020 0021 //! associates widgets with some type of data 0022 template< typename T> 0023 class GenericEngine: public BaseEngine 0024 { 0025 0026 public: 0027 0028 //! constructor 0029 GenericEngine( Animations* widget ): 0030 BaseEngine( widget ) 0031 {} 0032 0033 //! destructor 0034 virtual ~GenericEngine( void ) 0035 {} 0036 0037 //! register widget 0038 virtual bool registerWidget( GtkWidget* widget ) 0039 { 0040 if( _data.contains( widget ) ) return false; 0041 if( enabled() ) 0042 { 0043 0044 T& data( _data.registerWidget( widget ) ); 0045 data.connect( widget ); 0046 0047 } else _data.registerWidget( widget ); 0048 0049 BaseEngine::registerWidget( widget ); 0050 return true; 0051 0052 } 0053 0054 //! unregister widget 0055 virtual void unregisterWidget( GtkWidget* widget ) 0056 { 0057 if( !_data.contains( widget ) ) return; 0058 _data.value( widget ).disconnect( widget ); 0059 _data.erase( widget ); 0060 } 0061 0062 //! enabled state 0063 /*! returns true if changed */ 0064 inline virtual bool setEnabled( bool value ); 0065 0066 //! true if widget is included 0067 virtual bool contains( GtkWidget* widget ) 0068 { return _data.contains( widget ); } 0069 0070 protected: 0071 0072 //! return refence to data 0073 virtual DataMap<T>& data( void ) 0074 { return _data; } 0075 0076 //! return refence to data 0077 virtual const DataMap<T>& data( void ) const 0078 { return _data; } 0079 0080 private: 0081 0082 //! map widgets to data 0083 DataMap<T> _data; 0084 0085 }; 0086 0087 //________________________________________________________________________ 0088 template< typename T> bool GenericEngine<T>::setEnabled( bool value ) 0089 { 0090 if( enabled() == value ) return false; 0091 0092 BaseEngine::setEnabled( value ); 0093 if( enabled() ) _data.connectAll(); 0094 else _data.disconnectAll(); 0095 0096 return true; 0097 0098 } 0099 0100 } 0101 0102 #endif