1 // SPDX-License-Identifier: LGPL-2.1-or-later 2 // 3 // SPDX-FileCopyrightText: 2007-2009 Torsten Rahn <tackat@kde.org> 4 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org> 5 // 6 7 #ifndef MARBLE_GLOBAL_H 8 #define MARBLE_GLOBAL_H 9 10 11 #include <cmath> 12 13 #include <QString> 14 15 #include "marble_export.h" 16 #include "marble_version.h" 17 18 // #define QT_STRICT_ITERATORS 19 20 /* M_PI is a #define that may or may not be handled in <cmath> */ 21 #ifndef M_PI 22 #define M_PI 3.14159265358979323846264338327950288419717 23 #endif 24 25 namespace Marble 26 { 27 28 enum TessellationFlag { 29 NoTessellation = 0x0, 30 Tessellate = 0x1, 31 RespectLatitudeCircle = 0x2, 32 FollowGround = 0x4, 33 PreventNodeFiltering = 0x8 34 }; 35 36 Q_DECLARE_FLAGS(TessellationFlags, TessellationFlag) 37 38 /** 39 * @brief This enum is used to choose the projection shown in the view. 40 */ 41 enum Projection { 42 Spherical, ///< Spherical projection ("Orthographic") 43 Equirectangular, ///< Flat projection ("plate carree") 44 Mercator, ///< Mercator projection 45 Gnomonic, ///< Gnomonic projection 46 Stereographic, ///< Stereographic projection 47 LambertAzimuthal, ///< Lambert Azimuthal Equal-Area projection 48 AzimuthalEquidistant, ///< Azimuthal Equidistant projection 49 VerticalPerspective ///< Vertical perspective projection 50 // NOTE: MarbleWidget::setProjection(int) relies on VerticalPerspective being the last 51 // value above. Adjust that method if you do changes here 52 }; 53 54 /** 55 * @brief This enum is used to choose the unit chosen to measure angles. 56 */ 57 enum AngleUnit { 58 DMSDegree, ///< Degrees in DMS notation 59 DecimalDegree, ///< Degrees in decimal notation 60 UTM ///< UTM 61 }; 62 63 /** 64 * @brief This enum is used to choose context in which map quality gets used. 65 */ 66 enum ViewContext { 67 Still, ///< still image 68 Animation ///< animated view (e.g. while rotating the globe) 69 }; 70 71 /** 72 * @brief This enum is used to choose the map quality shown in the view. 73 */ 74 enum MapQuality { 75 OutlineQuality, ///< Only a wire representation is drawn 76 LowQuality, ///< Low resolution (e.g. interlaced) 77 NormalQuality, ///< Normal quality 78 HighQuality, ///< High quality (e.g. antialiasing for lines) 79 PrintQuality ///< Print quality 80 }; 81 82 /** 83 * @brief This enum is used to specify the proxy that is used. 84 */ 85 enum ProxyType { 86 HttpProxy, ///< Uses an Http proxy 87 Socks5Proxy ///< Uses a Socks5Proxy 88 }; 89 90 /** 91 * @brief This enum is used to choose the localization of the labels. 92 */ 93 enum LabelPositionFlag { 94 NoLabel = 0x0, 95 LineStart = 0x1, 96 LineCenter = 0x2, 97 LineEnd = 0x4, 98 IgnoreXMargin = 0x8, 99 IgnoreYMargin = 0x10, 100 FollowLine = 0x20 101 }; 102 103 Q_DECLARE_FLAGS(LabelPositionFlags, LabelPositionFlag) 104 105 /** 106 * @brief This enum is used to choose the localization of the labels. 107 */ 108 enum LabelLocalization { 109 CustomAndNative, ///< Custom and native labels 110 Custom, ///< Shows the name in the user's language 111 Native ///< Display the name in the official language and 112 /// glyphs of the labeled place. 113 }; 114 115 /** 116 * @brief This enum is used to choose how the globe behaves while dragging. 117 */ 118 enum DragLocation { 119 KeepAxisVertically, ///< Keep planet axis vertically 120 FollowMousePointer ///< Follow mouse pointer exactly 121 }; 122 123 /** 124 * @brief This enum is used to choose how the globe behaves while dragging. 125 */ 126 enum OnStartup { 127 ShowHomeLocation, ///< Show home location on startup 128 LastLocationVisited ///< Show last location visited on quit 129 }; 130 131 enum AltitudeMode { 132 ClampToGround, ///< Altitude always sticks to ground level 133 RelativeToGround, ///< Altitude is always given relative to ground level 134 Absolute, ///< Altitude is given relative to the sealevel 135 RelativeToSeaFloor, ///< Altitude is given relative to the sea floor 136 ClampToSeaFloor ///< Altitude always sticks to sea floor 137 }; 138 139 enum Pole { 140 AnyPole, ///< Any pole 141 NorthPole, ///< Only North Pole 142 SouthPole ///< Only South Pole 143 }; 144 145 /** 146 * @brief This enum is used to describe the type of download 147 */ 148 enum DownloadUsage { 149 DownloadBulk, ///< Bulk download, for example "File/Download region" 150 DownloadBrowse ///< Browsing mode, normal operation of Marble, like a web browser 151 }; 152 153 /** 154 * @brief Describes possible flight mode (interpolation between source 155 * and target camera positions) 156 */ 157 enum FlyToMode { 158 Automatic, ///< A sane value is chosen automatically depending on animation settings and the action 159 Instant, ///< Change camera position immediately (no interpolation) 160 Linear, ///< Linear interpolation of lon, lat and distance to ground 161 Jump ///< Linear interpolation of lon and lat, distance increases towards the middle point, then decreases 162 }; 163 164 /** 165 * @brief Search mode: Global (worldwide) versus area (local, regional) search 166 */ 167 enum SearchMode { 168 GlobalSearch, ///< Search a whole planet 169 AreaSearch ///< Search a certain region of a planet (e.g. visible region) 170 }; 171 172 /** 173 * @brief 174 */ 175 enum RenderStatus { 176 Complete, ///< All data is there and up to date 177 WaitingForUpdate, ///< Rendering is based on complete, but outdated data, data update was requested 178 WaitingForData, ///< Rendering is based on no or partial data, more data was requested (e.g. pending network queries) 179 Incomplete ///< Data is missing and some error occurred when trying to retrieve it (e.g. network failure) 180 }; 181 182 const int defaultLevelZeroColumns = 2; 183 const int defaultLevelZeroRows = 1; 184 185 // Conversion Metric / Imperial System: km vs. miles 186 const qreal MI2KM = 1.609344; 187 const qreal KM2MI = 1.0 / MI2KM; 188 189 // Conversion Nautical / Imperial System: nm vs. km 190 const qreal NM2KM = 1.852; 191 const qreal KM2NM = 1.0 / NM2KM; 192 const qreal NM2FT = 6080; // nm feet 193 194 // Conversion Metric / Imperial System: meter vs. feet 195 const qreal M2FT = 3.2808; 196 const qreal FT2M = 1.0 / M2FT; 197 198 // Conversion Metric / Imperial System: meter vs inch 199 const qreal M2IN = 39.3701; 200 const qreal IN2M = 1.0 / M2IN; 201 202 // Interconversion between Imperial System: feet vs inch 203 const qreal FT2IN = 12.0; 204 205 // Conversion Metric / Imperial System: meter vs yard 206 const qreal M2YD = 1.09361; 207 const qreal YD2M = 1.0 / M2YD; 208 209 // Conversion meter vs millimeter 210 const qreal M2MM = 1000.0; 211 const qreal MM2M = 1.0 / M2MM; 212 213 // Conversion meter vs centimeter 214 const qreal M2CM = 100.0; 215 const qreal CM2M = 1.0 / M2CM; 216 217 // Conversion degree vs. radians 218 const qreal DEG2RAD = M_PI / 180.0; 219 const qreal RAD2DEG = 180.0 / M_PI; 220 221 // Conversion meter vs kilometer 222 const qreal KM2METER = 1000.0; 223 const qreal METER2KM = 1.0 / KM2METER; 224 225 //Conversion hour vs minute 226 const qreal HOUR2MIN = 60.0; 227 const qreal MIN2HOUR = 1.0 / HOUR2MIN; 228 229 //Conversion (time) minute vs second 230 const qreal MIN2SEC = 60.0; 231 const qreal SEC2MIN = 1.0 / MIN2SEC; 232 233 //Conversion hour vs second 234 const qreal HOUR2SEC = 3600.0; 235 const qreal SEC2HOUR = 1.0 / HOUR2SEC; 236 237 const qreal TWOPI = 2 * M_PI; 238 239 // Version definitions to use with an external application (as digiKam) 240 241 // String for about dialog and http user agent 242 const QString MARBLE_VERSION_STRING = QString::fromLatin1( MARBLE_LIB_VERSION_STRING ); 243 244 // API Version id: 245 // up until the 21.04 release, this was supposed to be 0xMMmmpp (major,minor,patch), but in reality it was stuck at version 0.27.0 246 // now it is ((major<<16)|(minor<<8)|(patch)) 247 #define MARBLE_VERSION MARBLE_LIB_VERSION 248 249 static const char NOT_AVAILABLE[] = QT_TRANSLATE_NOOP("Marble", "not available"); 250 251 const int tileDigits = 6; 252 253 // Average earth radius in m 254 // Deprecated: Please use model()->planetRadius() instead. 255 const qreal EARTH_RADIUS = 6378137.0; 256 257 // Maximum level of base tiles 258 const int maxBaseTileLevel = 4; 259 260 // Default size (width and height) of tiles 261 const unsigned int c_defaultTileSize = 675; 262 263 class MarbleGlobalPrivate; 264 class MarbleLocale; 265 266 class MARBLE_EXPORT MarbleGlobal 267 { 268 public: 269 static MarbleGlobal * getInstance(); 270 ~MarbleGlobal(); 271 272 MarbleLocale * locale() const; 273 274 enum Profile { 275 Default = 0x0, 276 SmallScreen = 0x1, 277 HighResolution = 0x2 278 }; 279 280 Q_DECLARE_FLAGS( Profiles, Profile ) 281 282 Profiles profiles() const; 283 void setProfiles( Profiles profiles ); 284 285 /** @deprecated Profiles are detected automatically now. This only returns profiles() anymore */ 286 MARBLE_DEPRECATED static Profiles detectProfiles(); 287 288 private: 289 MarbleGlobal(); 290 291 Q_DISABLE_COPY( MarbleGlobal ) 292 MarbleGlobalPrivate * const d; 293 }; 294 295 } 296 297 Q_DECLARE_OPERATORS_FOR_FLAGS( Marble::TessellationFlags ) 298 Q_DECLARE_OPERATORS_FOR_FLAGS( Marble::LabelPositionFlags ) 299 Q_DECLARE_OPERATORS_FOR_FLAGS( Marble::MarbleGlobal::Profiles ) 300 301 #endif 302