Subversion Repositories public

Rev

Rev 280 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/***************************************************************************
 *   Copyright (C) 2007 - 2013 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>
#include <qrect.h>
#include <qstring.h>
#include <qtimer.h>
#include <KLocale>

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

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

#include <QtGui/QWidget>
#include <QTreeWidget>
#include "ui_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_OSM = 8
} MPT;

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 QWidget, public Ui::sportwatcherWidgetBase
class sportwatcherWidget : public QWidget, public Ui::sportwatcherWidgetBase, public CallbackInterface
{
    Q_OBJECT

        public:
            sportwatcherWidget (QWidget *parent = 0);
            ~sportwatcherWidget();
            /* $PUBLIC_FUNCTIONS$ */
            void Initialize();
                virtual int cbiCallbackFunction(void *g) { saveImported(g); return 0; }
            void saveImported (void *g);                // Callback function

        private:
            Ui::sportwatcherWidgetBase ui_sportwatcherWidgetBase;

        public slots:
            /* $PUBLIC_SLOTS$ */
            void btFullscreenSlot();
            void btGlasMinusSlot();
            void btGlasPlusSlot();
            void btHandSlot();
            void btGlasSlot();
            void btFlagSlot();
            void liLapsSlot ( Q3ListViewItem *item );
            void liActivitiesSlot ( QTreeWidgetItem *item, int col );
            void tabViewSlot ( int tab );
            void filePrint();
            void fileSaveAs();
            void fileSave();
            void fileOpen();
            void fileImport();
            void fileNew();
            void editRename();
            void extrasSaveHR();
            void extrasSettings();
            void extrasWMSSettings();
            void kcbCurveSlot ( int idx );

        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 showThreeCurve ( int pw=0, int ph=0 );
            void resizeEvent ( QResizeEvent *e );
            void mouseMoveEvent ( QMouseEvent *e );
            void mousePressEvent ( QMouseEvent *e );
            void mouseReleaseEvent ( QMouseEvent *e );

        protected:
            QTimer timer;

        private:
            void getActivities();
            QDateTime *garmin_dtime ( uint32 t );
            bool writeTag ( const QFile &fn, const QString &str, int indent );
            double getAvgAlt ( AVGHEIGHT *avgHeight, int pos );
            AVGHEIGHT *getAvgPtr ( AVGHEIGHT *avgHeight, int pos );
            void saveGPX ( const QString &fn );
            void saveOSM ( const QString &fn );
            QTreeWidgetItem *findElement ( QTreeWidget *wdg, const QString &val );
            void drawGrHR ( int x, int y );
            void drawGrElev ( int x, int y );
            void drawGrSpeed ( int x, int y );
            qreal milToPixel ( qreal, QPrinter &pr, bool dir=false );
        #if defined HAVE_GDAL
            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, pmHR, pmElevation, pmSpeed;
            QPixmap pmPrMap, prHR, prElevation, prSpeed;        // These are used for printing
            QDateTime StartTime;
            QStringList files;
            QRect mapPan;
            KLocale *kl;                // This is for translating date and time to the locale
            manageFile spw;
            disassemble ds;
            garmin_data *gmn;
            int min_hr, max_hr, avg_hr;
            int zfactor;
            double min_height, max_height;
            double min_speed, max_speed;
            double total_distance;
            double oldTransX, oldTransY;
            unsigned long max_time;
            bool stateHand, stateFlag, stateGlas;
            int lmbPressed;
            LAP *mapLap;
            int curTab;
            bool tabDirt0, tabDirt1, tabDirt2, tabDirt3;
            bool ActivePrint;
            QPainter printArea;
        #if defined HAVE_GDAL
            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, Forerunner;
            bool DIRTY;
            QString Device, Data, HRM, MAP;
};

#endif