]> git.mxchange.org Git - flightgear.git/blob - src/GUI/MapWidget.hxx
Remove hard-coded values wherever possible;
[flightgear.git] / src / GUI / MapWidget.hxx
1 #ifndef GUI_MAPWIDGET_HXX
2 #define GUI_MAPWIDGET_HXX
3
4 #include <map>
5 #include <simgear/compiler.h>
6 #include <simgear/math/SGMath.hxx>
7 #include <simgear/props/props.hxx>
8
9 #include <plib/pu.h>
10
11 #include "dialog.hxx" // for GUI_ID
12
13 // forward decls
14 class FGRouteMgr;
15 class FGRunway;
16 class FGAirport;
17 class FGNavRecord;
18 class FGFix;
19 class MapData;
20 class SGMagVar;
21
22 class MapWidget : public puObject
23 {
24 public:
25   MapWidget(int x, int y, int width, int height);
26   virtual ~MapWidget();
27   
28   virtual void setSize(int width, int height);
29   virtual void doHit( int button, int updown, int x, int y ) ;
30   virtual void draw( int dx, int dy ) ;
31   virtual int checkKey(int key, int updown);
32     
33   void setProperty(SGPropertyNode_ptr prop);
34 private:
35   int zoom() const;
36   
37   void handlePan(int x, int y);
38   
39   void pan(const SGVec2d& delta);
40   void zoomIn();
41   void zoomOut();
42   
43   void paintAircraftLocation(const SGGeod& aircraftPos);
44   void paintRoute();
45   void paintRuler();
46   
47   void drawGPSData();
48   void drawNavRadio(SGPropertyNode_ptr radio);
49   void drawTunedLocalizer(SGPropertyNode_ptr radio);
50   
51   void drawLatLonGrid();
52   SGVec2d gridPoint(int ix, int iy);
53   bool drawLineClipped(const SGVec2d& a, const SGVec2d& b);
54   
55   void drawAirports();
56   void drawAirport(FGAirport* apt);
57   int scoreAirportRunways(FGAirport* apt);
58   void drawRunwayPre(FGRunway* rwy);
59   void drawRunway(FGRunway* rwy);
60   void drawILS(bool tuned, FGRunway* rwy);
61   
62   void drawNavaids();
63   void drawNDB(bool tuned, FGNavRecord* nav);
64   void drawVOR(bool tuned, FGNavRecord* nav);
65   void drawFix(FGFix* fix);
66   
67   void drawTraffic();
68   void drawAIAircraft(const SGPropertyNode* model, const SGGeod& pos, double hdg);
69   void drawAIShip(const SGPropertyNode* model, const SGGeod& pos, double hdg);
70   
71   void drawData();
72   bool validDataForKey(void* key);
73   MapData* getOrCreateDataForKey(void* key);
74   MapData* createDataForKey(void* key);
75   void setAnchorForKey(void* key, const SGVec2d& anchor);
76   void clearData();
77   
78   SGVec2d project(const SGGeod& geod) const;
79   SGGeod unproject(const SGVec2d& p) const;
80   double currentScale() const;
81   
82   int displayHeading(double trueHeading) const;
83   
84   void circleAt(const SGVec2d& center, int nSides, double r);
85   void circleAtAlt(const SGVec2d& center, int nSides, double r, double r2);
86   void drawLine(const SGVec2d& p1, const SGVec2d& p2);
87   void drawLegendBox(const SGVec2d& pos, const std::string& t);
88   
89   int _width, _height;
90   int _cachedZoom;
91   double _drawRangeNm;
92   double _upHeading; // true heading corresponding to +ve y-axis
93   bool _magneticHeadings;
94   bool _hasPanned;
95   
96   SGGeod _projectionCenter;
97   SGGeod _aircraft;
98   SGGeod _clickGeod;
99   SGVec2d _hitLocation;
100   FGRouteMgr* _route;
101   SGPropertyNode_ptr _root;
102   SGPropertyNode_ptr _gps;
103   
104   typedef std::map<void*, MapData*> KeyDataMap;
105   KeyDataMap _mapData;
106   std::vector<MapData*> _dataQueue;
107   
108   SGMagVar* _magVar;
109   
110   typedef std::map<int, SGVec2d> GridPointCache;
111   GridPointCache _gridCache;
112   double _gridSpacing;
113   SGGeod _gridCenter;
114 };
115
116 #endif // of GUI_MAPWIDGET_HXX