]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/MapWidget.hxx
Support for multiple data dirs.
[flightgear.git] / src / GUI / MapWidget.hxx
index f2722e327f32e71d15df3e77ab6e2d314751d314..0a826f761b61884c79c0db3b2a2460ef0d173e55 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef GUI_MAPWIDGET_HXX
 #define GUI_MAPWIDGET_HXX
 
+#include <map>
 #include <simgear/compiler.h>
 #include <simgear/math/SGMath.hxx>
 #include <simgear/props/props.hxx>
@@ -12,6 +13,7 @@
 // forward decls
 class FGRouteMgr;
 class FGRunway;
+class FGHelipad;
 class FGAirport;
 class FGNavRecord;
 class FGFix;
@@ -31,6 +33,14 @@ public:
     
   void setProperty(SGPropertyNode_ptr prop);
 private:
+    enum Projection {
+        PROJECTION_SAMSON_FLAMSTEED,
+        PROJECTION_ORTHO_AZIMUTH,
+        PROJECTION_SPHERICAL
+    };
+    
+  int zoom() const;
+  
   void handlePan(int x, int y);
   
   void pan(const SGVec2d& delta);
@@ -40,6 +50,7 @@ private:
   void paintAircraftLocation(const SGGeod& aircraftPos);
   void paintRoute();
   void paintRuler();
+  void drawFlightHistory();
   
   void drawGPSData();
   void drawNavRadio(SGPropertyNode_ptr radio);
@@ -54,12 +65,18 @@ private:
   int scoreAirportRunways(FGAirport* apt);
   void drawRunwayPre(FGRunway* rwy);
   void drawRunway(FGRunway* rwy);
+  void drawHelipad(FGHelipad* hp);
   void drawILS(bool tuned, FGRunway* rwy);
   
   void drawNavaids();
+  void drawPOIs();
   void drawNDB(bool tuned, FGNavRecord* nav);
   void drawVOR(bool tuned, FGNavRecord* nav);
   void drawFix(FGFix* fix);
+
+  void drawCountries(FGNavRecord* rec);
+  void drawCities(FGNavRecord* rec);
+  void drawTowns(FGNavRecord* rec);
   
   void drawTraffic();
   void drawAIAircraft(const SGPropertyNode* model, const SGGeod& pos, double hdg);
@@ -70,23 +87,29 @@ private:
   MapData* getOrCreateDataForKey(void* key);
   MapData* createDataForKey(void* key);
   void setAnchorForKey(void* key, const SGVec2d& anchor);
+  void clearData();
   
   SGVec2d project(const SGGeod& geod) const;
   SGGeod unproject(const SGVec2d& p) const;
   double currentScale() const;
   
+  int displayHeading(double trueHeading) const;
+  
   void circleAt(const SGVec2d& center, int nSides, double r);
   void circleAtAlt(const SGVec2d& center, int nSides, double r, double r2);
+  void squareAt(const SGVec2d& center, double r);
   void drawLine(const SGVec2d& p1, const SGVec2d& p2);
   void drawLegendBox(const SGVec2d& pos, const std::string& t);
   
   int _width, _height;
-  int _zoom;
+  int _cachedZoom;
   double _drawRangeNm;
   double _upHeading; // true heading corresponding to +ve y-axis
   bool _magneticHeadings;
+  bool _hasPanned;
   
   SGGeod _projectionCenter;
+  Projection _projection;
   SGGeod _aircraft;
   SGGeod _clickGeod;
   SGVec2d _hitLocation;