Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsoptional.h - QgsOptional 3 : : 4 : : --------------------- 5 : : begin : 7.9.2016 6 : : copyright : (C) 2016 by Matthias Kuhn 7 : : email : matthias@opengis.ch 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : #ifndef QGSOPTIONAL_H 17 : : #define QGSOPTIONAL_H 18 : : 19 : : #include "qgis_core.h" 20 : : 21 : : 22 : : /** 23 : : * \ingroup core 24 : : * 25 : : * \brief QgsOptional is a container for other classes and adds an additional enabled/disabled flag. 26 : : * 27 : : * Often it is used for configuration options which can be enabled or disabled but also have 28 : : * more internal configuration information that should not be lost when disabling and re-enabling. 29 : : * 30 : : * \note For Python you need to use implementations for specific template classes 31 : : * \note Not available in Python bindings (although SIP file is present for specific implementations). 32 : : * 33 : : * \since QGIS 3.0 34 : : */ 35 : : template<typename T> 36 : 62 : class CORE_EXPORT QgsOptional 37 : : { 38 : : public: 39 : : 40 : : /** 41 : : * A QgsOptional is disabled by default if default constructed. 42 : : */ 43 : 78 : QgsOptional() = default; 44 : : 45 : : /** 46 : : * A QgsOptional is enabled by default if constructed with payload. 47 : : */ 48 : 0 : QgsOptional( const T &data ) 49 : 0 : : mEnabled( true ) 50 : 0 : , mData( data ) 51 : : { 52 : 0 : } 53 : : 54 : : /** 55 : : * A QgsOptional constructed with enabled status and data 56 : : */ 57 : 0 : QgsOptional( const T &data, bool enabled ) 58 : 0 : : mEnabled( enabled ) 59 : 0 : , mData( data ) 60 : : { 61 : 0 : } 62 : : 63 : : /** 64 : : * Compare this QgsOptional to another one. 65 : : * 66 : : * This will compare the enabled flag and call the == operator 67 : : * of the contained class. 68 : : * 69 : : * \since QGIS 3.0 70 : : */ 71 : 0 : bool operator== ( const QgsOptional<T> &other ) const 72 : : { 73 : 0 : return mEnabled == other.mEnabled && mData == other.mData; 74 : : } 75 : : 76 : : /** 77 : : * Boolean operator. Will return TRUE if this optional is enabled. 78 : : */ 79 : : operator bool() const 80 : : { 81 : : return mEnabled; 82 : : } 83 : : 84 : : /** 85 : : * Check if this optional is enabled 86 : : * 87 : : * \since QGIS 3.0 88 : : */ 89 : 0 : bool enabled() const 90 : : { 91 : 0 : return mEnabled; 92 : : } 93 : : 94 : : /** 95 : : * Set if this optional is enabled 96 : : * 97 : : * \since QGIS 3.0 98 : : */ 99 : 0 : void setEnabled( bool enabled ) 100 : : { 101 : 0 : mEnabled = enabled; 102 : 0 : } 103 : : 104 : : /** 105 : : * Access the payload data 106 : : * 107 : : * \since QGIS 3.0 108 : : */ 109 : 0 : const T *operator->() const 110 : : { 111 : 0 : return &mData; 112 : : } 113 : : 114 : : /** 115 : : * Access the payload data 116 : : * 117 : : * \since QGIS 3.0 118 : : */ 119 : 0 : T data() const 120 : : { 121 : 0 : return mData; 122 : : } 123 : : 124 : : /** 125 : : * Set the payload data 126 : : * 127 : : * \since QGIS 3.0 128 : : */ 129 : 0 : void setData( const T &data ) 130 : : { 131 : 0 : mData = data; 132 : 0 : } 133 : : 134 : : private: 135 : 78 : bool mEnabled = false; 136 : : T mData; 137 : : }; 138 : : 139 : : #endif // QGSOPTIONAL_H