Subversion Repositories public

Rev

Rev 172 | Rev 218 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/***************************************************************************
 *   Copyright (C) 2007, 2008 by Andreas Theofilu                          *
 *   andreas@theosys.at                                                    *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation version 3 of the License.                *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/

#ifndef SPORTWATCHERWIDGET_H
#define SPORTWATCHERWIDGET_H

#include <qlabel.h>
#include <qdatetime.h>
#include <qpixmap.h>
#include <qimage.h>
#include <qpainter.h>
#include <qpen.h>
#include <qpoint.h>
#include <qpointarray.h>
#include <qrect.h>
#include <qstring.h>
#include <qtimer.h>

#if defined HAVE_GDAL && HAVE_LIBGDAL1_5_0
   #include <gdal/gdal_priv.h>
#endif

#include "garmin.h"
#include "managefile.h"
#include "disassemble.h"

#include "sportwatcherwidgetbase.h"

typedef enum {
        MPT_BMP = 0,
        MPT_SHP = 1,
        MPT_VRT = 2,
        MPT_GIF = 3,
        MPT_PNG = 4,
        MPT_SGI = 5,
        MPT_TIF = 6,
        MPT_WMS = 7
} MPT;

typedef struct INDEX
{
        QString path;
        QString activ;
        INDEX *next;
} INDEX;

typedef struct GEORECT
{
        double llat;
        double llon;
        double rlat;
        double rlon;
        int width;
        int height;
} GEORECT;

typedef struct AVGHEIGHT
{
        double alt;             // Altitude
        int    pos;             // Position in the chain, starting with 0
        struct AVGHEIGHT *prev;
        struct AVGHEIGHT *next;
} AVGHEIGHT;

class sportwatcherWidget : public sportwatcherWidgetBase
{
  Q_OBJECT

public:
  sportwatcherWidget(QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
  ~sportwatcherWidget();
  /*$PUBLIC_FUNCTIONS$*/

public slots:
  /*$PUBLIC_SLOTS$*/
  virtual void          btFullscreenSlot();
  virtual void          btGlasMinusSlot();
  virtual void          btGlasPlusSlot();
  virtual void          btHandSlot();
  virtual void          btGlasSlot();
  virtual void          btFlagSlot();
  virtual void          liLapsSlot(QListViewItem *item);
  virtual void          liActivitiesSlot(QListViewItem *item);
  virtual void          helpAbout();
  virtual void          helpContents();
  virtual void          helpIndex();
  virtual void          fileExit();
  virtual void          filePrint();
  virtual void          fileSaveAs();
  virtual void          fileSave();
  virtual void          fileOpen();
  virtual void          fileImport();
  virtual void          fileNew();
  virtual void          extrasSaveHR();
  virtual void          extrasSettings();
  virtual void          extrasWMSSettings();

protected:
  /*$PROTECTED_FUNCTIONS$*/
  void destroy();
  void showLaps();
  void showTrack();
  void showTrack(int zoom);
  void showTrack(int zoom, const QRect &pan, LAP *lap);
  void showCurves();
  void showCurves(LAP *lap);
  void resizeEvent(QResizeEvent *e);
  void paintEvent(QPaintEvent *e);
  void mouseMoveEvent(QMouseEvent *e);
  void mousePressEvent(QMouseEvent *e);
  void mouseReleaseEvent(QMouseEvent *e);

protected:
  QTimer timer;

protected slots:
  /*$PROTECTED_SLOTS$*/

private:
    QDateTime *garmin_dtime (uint32 t);
    void getActivities();
    bool writeTag(const QFile &fn, const QString &str, int indent);
    bool findIndex(const QString &key);
    double getAvgAlt (AVGHEIGHT *avgHeight, int pos);
    AVGHEIGHT *getAvgPtr (AVGHEIGHT *avgHeight, int pos);
    void saveGPX(const QString &fn);
    void saveOSM(const QString &fn);
#if defined HAVE_GDAL && HAVE_LIBGDAL1_5_0
    bool writeWMSTag(double llat, double llon, double rlat, double rlon, int width, int height);
    bool transCoords (double *x1, double *y1, double *x2, double *y2, int code, int width, int height, bool square);
    QString *getProjection (int isrs, QString *srs);
    bool warpImage(QString fn, QString *fName);
#endif

private:
  QWidget *mama;
  QPixmap pmProfile, pmMap;
  QDateTime StartTime;
  QStringList files;
  QRect mapPan;
  manageFile spw;
  disassemble ds;
  garmin_data *gmn;
  int min_hr, max_hr, avg_hr;
  int zfactor;
  double min_height, max_height;
  double total_distance;
  double oldTransX, oldTransY;
  unsigned long max_time;
  bool stateHand, stateFlag, stateGlas;
  int lmbPressed;
  LAP *mapLap;
  INDEX *index;
#if defined HAVE_GDAL && HAVE_LIBGDAL1_5_0
  GDALDataset *poDataset;
  int mFactor;
  GEORECT geoRect;
#endif

private:
  /* Config Parameters */
  int lower1, lower2, lower3;
  int upper1, upper2, upper3;
  int MaxHr, restHr;
  int vo2max, weight, sampleTime;
  int Units, MapType;
  bool Serial, Contour;
  QString Device, Data, HRM, MAP;
};

#endif