157 lines
3.5 KiB
C++
157 lines
3.5 KiB
C++
#ifndef RM_DIALOG_MAP_H
|
||
#define RM_DIALOG_MAP_H
|
||
|
||
#if !(DO_NOT_USE_MAP)
|
||
#if !(USE_WEBVIEW2)
|
||
|
||
#include <QDialog>
|
||
#include <QVBoxLayout>
|
||
#include <QMap>
|
||
#include "../rm_app.h"
|
||
#include "../fm_event_types.h"
|
||
//#include "../core/rm_player_base.h"
|
||
#include <QMainWindow>
|
||
|
||
#if (TEST_MAP_MOVE_THREAD)
|
||
#include "rm_map_thread.h"
|
||
#endif
|
||
|
||
class RMVideoItem;
|
||
class RMSensorData;
|
||
|
||
// 전체 경로를 그리는 방식이라 무조건 처음부터 사용해야함...
|
||
class TitleWidget;
|
||
class RMWidgetDrag;
|
||
class RMWidgetMap;
|
||
|
||
#if (KMH_MPH_TOGGLE)
|
||
class RMSpeedLabel;
|
||
#endif
|
||
|
||
class RMDialogMap : public QDialog
|
||
{
|
||
Q_OBJECT
|
||
friend class RMExcelReport;
|
||
public:
|
||
//static void start(); // show
|
||
static RMDialogMap* instance(QWidget* parent = nullptr);
|
||
//#if (TOGGLE_PLAYER)
|
||
// ~RMDialogMap();
|
||
//#endif
|
||
|
||
bool isHiddenReal();
|
||
|
||
bool isGPSExist();
|
||
|
||
static double distance(double slat, double slon, double dlat, double dlon)
|
||
{
|
||
double R = 6378137; // Earth’s mean radius in meter
|
||
double dLat = (dlat - slat) * 0.0174533; // degree to radian
|
||
double dLong = (dlon - slon) * 0.0174533;
|
||
double a = sin(dLat / 2) * sin(dLat / 2) +
|
||
cos(slat * 0.0174533) * cos(dlat * 0.0174533) *
|
||
sin(dLong / 2) * sin(dLong / 2);
|
||
|
||
double c = 2 * atan2(sqrt(a), sqrt(1 - a));
|
||
double d = R * c;
|
||
return d;
|
||
}
|
||
#if (TOGGLE_PLAYER || USE_MAXIMIZE)
|
||
void snapTo(QWidget* target);
|
||
#endif
|
||
#if (USE_HTML_MAP)
|
||
void removeHtml();
|
||
#endif
|
||
|
||
#if (KMH_MPH_TOGGLE)
|
||
#if (MODEL_BBVIEWER)
|
||
RMSpeedLabel* speedLabel;
|
||
#endif
|
||
void refreshSpeedBarUnit();
|
||
#endif
|
||
|
||
void runScript(QString script);
|
||
|
||
private:
|
||
double lonX;
|
||
double latY;
|
||
double speed;
|
||
RMSensorData* sensor;
|
||
// 기존 위치 확인해서 2초 이상 점프시 라인 그리지 않는다 SEEK
|
||
qint64 _lastPosition;
|
||
|
||
// 연속 그리기 방지
|
||
QMap<QString,bool> _drawList;
|
||
QString _packLine(double lon1, double lat1, double lon2, double lat2);
|
||
|
||
bool _bFirst;
|
||
bool _bHTMLLoaded;
|
||
explicit RMDialogMap(QWidget *parent = nullptr);
|
||
bool _hideOnFullScreen;
|
||
void initHtml();
|
||
#if (USE_RM_KEYBOARD_EVENT)
|
||
void keyPressEvent(QKeyEvent *event);
|
||
void keyReleaseEvent(QKeyEvent *event);
|
||
#endif
|
||
|
||
#if (TOGGLE_PLAYER)
|
||
QWidget* snapTarget;
|
||
#endif
|
||
|
||
#if !(TOGGLE_PLAYER)
|
||
QLabel* highLable; // 고속 MPH 의 경우 변경하기 위해
|
||
QLabel* lowLable;
|
||
#endif
|
||
|
||
protected:
|
||
#if !(TOGGLE_PLAYER)
|
||
TitleWidget* _title;
|
||
#endif
|
||
QVBoxLayout* _layout;
|
||
RMWidgetMap* _map;
|
||
#if !(TOGGLE_PLAYER)
|
||
RMWidgetDrag* _drag;
|
||
#endif
|
||
|
||
void moveTo(double lon, double lat, double speed, bool drawLine);
|
||
|
||
#if (TEST_MAP_MOVE_THREAD)
|
||
RMMapUpdater updater;
|
||
#endif
|
||
|
||
#if (LIVE_LANGUAGE_CHANGE && MODEL_STANDARD)
|
||
void refreshLanguage();
|
||
#endif
|
||
|
||
//#if (TOGGLE_PLAYER)
|
||
// // SNAP
|
||
// bool eventFilter(QObject *o, QEvent *e) override;
|
||
//#endif
|
||
|
||
signals:
|
||
|
||
public slots:
|
||
void onClose();
|
||
void onAppEvent(RMApp::Event event,int param);
|
||
void activexEventHandler(const QString &name, int argc, void *argv);
|
||
|
||
#if (TEST_MAP_MOVE_THREAD)
|
||
void onMoveToProcess(double lon, double lat, double speed, bool drawLine);
|
||
#endif
|
||
|
||
void onPlayEvent(PLAY_EVENT event,RMVideoItem* item);
|
||
void onPositionChanged(qint64 position,qint64 duration);
|
||
|
||
#if (KMH_MPH_TOGGLE)
|
||
void onSpeedUnitChange();
|
||
#endif
|
||
|
||
#if (LIVE_LANGUAGE_CHANGE)
|
||
void onLanguageChange(RMLanguage::LANGUAGE_TYPE language);
|
||
#endif
|
||
};
|
||
|
||
#endif // #if !(USE_WEBVIEW2)
|
||
#endif // #if !(DO_NOT_USE_MAP)
|
||
#endif // RM_DIALOG_MAP_H
|