]> git.mxchange.org Git - flightgear.git/blobdiff - src/GUI/AirportDiagram.hxx
Initial work on rendering parking locations.
[flightgear.git] / src / GUI / AirportDiagram.hxx
index 07eaf829765514499e6f172e825dfd9a5d4701da..c5c87004dd62e26596d103a74c01a2803faa416f 100644 (file)
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
-#include <QWidget>
-#include <QPainterPath>
+#ifndef GUI_AIRPORT_DIAGRAM_HXX
+#define GUI_AIRPORT_DIAGRAM_HXX
 
-#include <Airports/airports_fwd.hxx>
+#include "BaseDiagram.hxx"
+
+#include <Airports/parking.hxx>
+#include <Airports/runways.hxx>
 #include <simgear/math/sg_geodesy.hxx>
 
-class AirportDiagram : public QWidget
+class AirportDiagram : public BaseDiagram
 {
     Q_OBJECT
 public:
     AirportDiagram(QWidget* pr);
+    virtual ~AirportDiagram();
 
     void setAirport(FGAirportRef apt);
 
     void addRunway(FGRunwayRef rwy);
-    void addParking(FGParking* park);
+    void addParking(FGParkingRef park);
     
     FGRunwayRef selectedRunway() const;
     void setSelectedRunway(FGRunwayRef r);
+
+    void setApproachExtensionDistance(double distanceNm);
 Q_SIGNALS:
     void clickedRunway(FGRunwayRef rwy);
     
+    void clickedParking(FGParkingRef park);
 protected:
-    virtual void paintEvent(QPaintEvent* pe);
-    // wheel event for zoom
-
-    // mouse drag for pan
     
     virtual void mouseReleaseEvent(QMouseEvent* me);
 
+    void paintContents(QPainter*) Q_DECL_OVERRIDE;
 
+    void doComputeBounds() Q_DECL_OVERRIDE;
 private:
-    void extendBounds(const QPointF& p);
-    QPointF project(const SGGeod& geod) const;
-    QTransform transform() const;
-    
+
     void buildTaxiways();
     void buildPavements();
 
+    void drawILS(QPainter *painter, FGRunwayRef runway) const;
+    void drawParkings(QPainter *p);
+
     FGAirportRef m_airport;
-    SGGeod m_projectionCenter;
-    double m_scale;
-    QRectF m_bounds;
 
     struct RunwayData {
         QPointF p1, p2;
@@ -68,7 +70,7 @@ private:
         FGRunwayRef runway;
     };
 
-    QList<RunwayData> m_runways;
+    QVector<RunwayData> m_runways;
 
     struct TaxiwayData {
         QPointF p1, p2;
@@ -80,8 +82,21 @@ private:
         }
     };
 
-    QList<TaxiwayData> m_taxiways;
-    QList<QPainterPath> m_pavements;
-    
+    QVector<TaxiwayData> m_taxiways;
+    QVector<QPainterPath> m_pavements;
+
+    struct ParkingData
+    {
+        QPointF pt;
+        FGParkingRef parking;
+    };
+
+    QVector<ParkingData> m_parking;
+
+    QPainterPath m_parkingIconPath, // arrow points right
+        m_parkingIconLeftPath; // arrow points left
+    double m_approachDistanceNm;
     FGRunwayRef m_selectedRunway;
 };
+
+#endif // of GUI_AIRPORT_DIAGRAM_HXX