Added dialogs to change home and work locations.
[ptas] / zouba / location.h
index f04ad98..30c1aea 100644 (file)
@@ -7,27 +7,39 @@
 #include <QObject>
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
+#include <QGeoPositionInfo>
+#include <math.h>
+
+QTM_USE_NAMESPACE
 
 class Location : public QObject
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
-  Location( QString x, QString y );
+  Location( const QString &x, const QString &y, const QString &label=QString() );
+  Location( const QGeoPositionInfo &positionInfo, const QString &label=QString() );
   Location( const Location &from );
   Location &operator=( const Location &from );
-  Location();
+  Location( const QString &label=QString() );
 
   ~Location();
 
-  void resolveAddress( QString address );
-
   QString x() const;
 
   QString y() const;
 
+  void setAddress( const QString &address ) const;
+  QString address() const;
+
+  void setLabel( const QString &label ) const;
+  QString label() const;
+
   bool isValid() const;
 
+public Q_SLOTS:
+  void resolveAddress( const QString &address );
+
 Q_SIGNALS:
   void becomeValid();
 
@@ -37,6 +49,55 @@ private Q_SLOTS:
 private:
   LocationPrivate *q;
   QNetworkAccessManager *manager;
+
+  typedef uint KKJ;
+
+  /**
+   * Transformes WGS84 longitude/latitude coordinates to KKJ x/y coordinates.
+   * @param longitude the input longitude in degrees
+   * @param latitude the input latitude in degrees
+   * @param outX the result x (easting)
+   * @param outY the result y (northing)
+   */
+  void WGS84lola_to_KKJxy(double longitude, double latitude, KKJ *outX, KKJ *outY);
+
+  /**
+   * Transformes KKJ x/y coordinates to WGS84 longitude/latitude coordinates.
+   * @param x the input x (easting)
+   * @param y the input y (northing)
+   * @param outLongitude the result longitude in degrees
+   * @param outLatitude the result latitude in degrees
+   */
+  void KKJxy_to_WGS84lola(KKJ x, KKJ y, double *outLongitude, double *outLatitude);
+
+  // Degrees to radians
+  double radians(double deg);
+
+  // Radians to degrees
+  double degrees(double rad);
+
+  // Constants
+  // Longitude0 and Center meridian of KKJ bands
+  static const double KkjZoneInfo[][2];
+
+  // Function:  KKJ_Zone_I
+  int KKJ_Zone_I(KKJ easting);
+
+  // Function:  KKJ_Zone_Lo
+  int KKJ_Zone_Lo(double kkjlo);
+
+  // Function:  KKJlalo_to_WGS84lalo
+  void KKJlola_to_WGS84lola(double kkjlo, double kkjla, double *outLongitude, double *outLatitude);
+
+  // Function:  WGS84lalo_to_KKJlalo
+  void WGS84lola_to_KKJlola(double longitude, double latitude, double *outLongitude, double *outLatitude);
+
+  // Function:  KKJlalo_to_KKJxy
+  void KKJlola_to_KKJxy(double lon, double lat, int zoneNumber, KKJ *outX, KKJ *outY);
+
+  // Function:  KKJxy_to_KKJlalo
+  void KKJxy_to_KKJlola(KKJ x, KKJ y, double *outLongitude, double *outLatitude);
+
 };
 
 #endif // LOCATION_H