OpenCores
URL https://opencores.org/ocsvn/riscv_vhdl/riscv_vhdl/trunk

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [gui_plugin/] [GnssWidgets/] [MapWidget.h] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sergeykhbr
/**
2
 * @file
3
 * @copyright  Copyright 2017 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      Open Street map widget.
6
 */
7
 
8
#pragma once
9
 
10
#include "api_core.h"   // MUST BE BEFORE QtWidgets.h or any other Qt header.
11
#include "attribute.h"
12
#include "igui.h"
13
#include "coreservices/irawlistener.h"
14
#include "coreservices/iserial.h"
15
 
16
#include <QtCore/QBasicTimer>
17
#include <QtWidgets/QMenu>
18
#include <QtWidgets/QWidget>
19
#include <QtGui/qevent.h>
20
#include <QtWidgets/QMdiArea>
21
#include <QtWidgets/QMdiSubWindow>
22
#include "StreetMapObject.h"
23
 
24
namespace debugger {
25
 
26
class SlideAverageType {
27
public:
28
    SlideAverageType(int sz = 32) {
29
        size_ = sz;
30
        data_ = new double [2*sz];
31
        pcur_ = &data_[sz];
32
        avg_cnt_ = 0;
33
        avg_sum_ = 0;
34
        memset(data_, 0, 2*sz*sizeof(double));
35
    }
36
    ~SlideAverageType() {
37
        delete [] data_;
38
    }
39
    void put(double v) {
40
        if (--pcur_ < data_) {
41
            pcur_ = &data_[size_ - 1];
42
        }
43
        avg_sum_ -= *pcur_;
44
        *pcur_ = *(pcur_ + size_) = v;
45
        avg_sum_ += v;
46
        if (avg_cnt_ < size_) {
47
            avg_cnt_++;
48
        }
49
    }
50
    double *getp() {
51
        return pcur_;
52
    }
53
    double get_avg() {
54
        return avg_cnt_ == 0 ? 0 : avg_sum_/avg_cnt_;
55
    }
56
    int size() {
57
        return avg_cnt_;
58
    }
59
private:
60
    int size_;
61
    double *data_;
62
    double *pcur_;
63
    double avg_cnt_;
64
    double avg_sum_;
65
};
66
 
67
class MapWidget : public QWidget,
68
                  public IRawListener {
69
    Q_OBJECT
70
public:
71
    MapWidget(IGui *igui, QWidget *parent);
72
    virtual ~MapWidget();
73
 
74
    /** IRawListener */
75
    virtual void updateData(const char *buf, int buflen);
76
 
77
signals:
78
    void signalRequestNetworkData();
79
    void signalUpdateGnssRaw();
80
public slots:
81
    void slotUpdateGnssRaw();
82
    void slotTilesUpdated(QRect);
83
    void slotRightClickMenu(const QPoint &p);
84
    void slotActionClear();
85
    void slotActionNightMode();
86
 
87
protected:
88
    void renderAll();
89
    void renderMinimap();
90
    void renderPosInfo(QPainter &p);
91
    void renderMainMap();
92
    void renderTrack(int trkIdx, QPainter &p);
93
 
94
    void resizeEvent(QResizeEvent *);
95
    void paintEvent(QPaintEvent *event);
96
    void mousePressEvent(QMouseEvent *event);
97
    void mouseMoveEvent(QMouseEvent *event);
98
    void mouseReleaseEvent(QMouseEvent *);
99
    void keyPressEvent(QKeyEvent *event);
100
 
101
private:
102
    IGui *igui_;
103
    ISerial *uart_;
104
 
105
    // Gnss parser's data
106
    char gnssBuf_[1 << 16];
107
    int gnssBufCnt_;
108
    int gnssBraceCnt_;
109
    Reg64Type gnssMagicNumber_;
110
    bool gnssIsParsing_;
111
    AttributeType gnssRawMeas_;
112
 
113
 
114
    bool bNewDataAvailable;
115
 
116
    StreetMap *m_normalMap;
117
    StreetMap *m_miniMap;
118
    bool pressed;
119
    QPoint pressPos;
120
    QFont fontPos;
121
 
122
    QSize mainmapSize;
123
    QPixmap mainmapPixmap;
124
 
125
    QSize posinfoSize;
126
    QPixmap posinfoPixmap;
127
 
128
    int minimapRadius;
129
    int minimapInnerRadius;
130
    QSize minimapSize;
131
    QPoint minimapPosition;
132
    QPoint minimapCenter;
133
    QPixmap minimapPixmap;
134
    QPixmap minimapPixmapMask;
135
    QMenu *contextMenu;
136
    bool invert;
137
 
138
    SlideAverageType gpsLat_;
139
    SlideAverageType gpsLon_;
140
};
141
 
142
class MapQMdiSubWindow : public QMdiSubWindow {
143
    Q_OBJECT
144
public:
145
    MapQMdiSubWindow(IGui *igui, QMdiArea *area, QWidget *parent,
146
                      QAction *act)
147
        : QMdiSubWindow(parent) {
148
        setAttribute(Qt::WA_DeleteOnClose);
149
        action_ = act;
150
        area_ = area;
151
 
152
        setWindowTitle(tr("Map"));
153
        setMinimumWidth(parent->size().width() / 2);
154
        setMinimumHeight(parent->size().height() / 2);
155
        QWidget *pnew = new MapWidget(igui, this);
156
        setWindowIcon(act->icon());
157
        act->setChecked(true);
158
        setWidget(pnew);
159
        area_->addSubWindow(this);
160
        show();
161
    }
162
 
163
protected:
164
    void closeEvent(QCloseEvent *event_) Q_DECL_OVERRIDE {
165
        if (action_) {
166
            action_->setChecked(false);
167
        }
168
        area_->removeSubWindow(this);
169
        event_->accept();
170
    }
171
private:
172
    QAction *action_;
173
    QMdiArea *area_;
174
};
175
 
176
}  // namespace debugger
177
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.