1 #ifndef GUI_MAPWIDGET_HXX
2 #define GUI_MAPWIDGET_HXX
5 #include <simgear/compiler.h>
6 #include <simgear/math/SGMath.hxx>
7 #include <simgear/props/props.hxx>
11 #include "dialog.hxx" // for GUI_ID
23 class MapWidget : public puObject
26 MapWidget(int x, int y, int width, int height);
29 virtual void setSize(int width, int height);
30 virtual void doHit( int button, int updown, int x, int y ) ;
31 virtual void draw( int dx, int dy ) ;
32 virtual int checkKey(int key, int updown);
34 void setProperty(SGPropertyNode_ptr prop);
37 PROJECTION_SAMSON_FLAMSTEED,
38 PROJECTION_ORTHO_AZIMUTH,
44 void handlePan(int x, int y);
46 void pan(const SGVec2d& delta);
50 void paintAircraftLocation(const SGGeod& aircraftPos);
53 void drawFlightHistory();
56 void drawNavRadio(SGPropertyNode_ptr radio);
57 void drawTunedLocalizer(SGPropertyNode_ptr radio);
59 void drawLatLonGrid();
60 SGVec2d gridPoint(int ix, int iy);
61 bool drawLineClipped(const SGVec2d& a, const SGVec2d& b);
64 void drawAirport(FGAirport* apt);
65 int scoreAirportRunways(FGAirport* apt);
66 void drawRunwayPre(FGRunway* rwy);
67 void drawRunway(FGRunway* rwy);
68 void drawHelipad(FGHelipad* hp);
69 void drawILS(bool tuned, FGRunway* rwy);
73 void drawNDB(bool tuned, FGNavRecord* nav);
74 void drawVOR(bool tuned, FGNavRecord* nav);
75 void drawFix(FGFix* fix);
77 void drawCountries(FGNavRecord* rec);
78 void drawCities(FGNavRecord* rec);
79 void drawTowns(FGNavRecord* rec);
82 void drawAIAircraft(const SGPropertyNode* model, const SGGeod& pos, double hdg);
83 void drawAIShip(const SGPropertyNode* model, const SGGeod& pos, double hdg);
86 bool validDataForKey(void* key);
87 MapData* getOrCreateDataForKey(void* key);
88 MapData* createDataForKey(void* key);
89 void setAnchorForKey(void* key, const SGVec2d& anchor);
92 SGVec2d project(const SGGeod& geod) const;
93 SGGeod unproject(const SGVec2d& p) const;
94 double currentScale() const;
96 int displayHeading(double trueHeading) const;
98 void circleAt(const SGVec2d& center, int nSides, double r);
99 void circleAtAlt(const SGVec2d& center, int nSides, double r, double r2);
100 void squareAt(const SGVec2d& center, double r);
101 void drawLine(const SGVec2d& p1, const SGVec2d& p2);
102 void drawLegendBox(const SGVec2d& pos, const std::string& t);
107 double _upHeading; // true heading corresponding to +ve y-axis
108 bool _magneticHeadings;
111 SGGeod _projectionCenter;
112 Projection _projection;
115 SGVec2d _hitLocation;
117 SGPropertyNode_ptr _root;
118 SGPropertyNode_ptr _gps;
120 typedef std::map<void*, MapData*> KeyDataMap;
122 std::vector<MapData*> _dataQueue;
126 typedef std::map<int, SGVec2d> GridPointCache;
127 GridPointCache _gridCache;
132 #endif // of GUI_MAPWIDGET_HXX