forked from foldynl/QLog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBandmapWidget.h
145 lines (125 loc) · 3.83 KB
/
BandmapWidget.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#ifndef QLOG_UI_BANDMAPWIDGET_H
#define QLOG_UI_BANDMAPWIDGET_H
#include <QWidget>
#include <QMap>
#include <QTimer>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QMutex>
#include <QColor>
#include <QSqlRecord>
#include "data/DxSpot.h"
#include "data/Band.h"
#include "rig/Rig.h"
#include "core/LogLocale.h"
namespace Ui {
class BandmapWidget;
}
class QGraphicsScene;
class GraphicsScene : public QGraphicsScene
{
Q_OBJECT;
public:
explicit GraphicsScene(QObject *parent = nullptr) : QGraphicsScene(parent){};
signals:
void spotClicked(QString, double, BandPlan::BandPlanMode mode);
protected:
void mousePressEvent (QGraphicsSceneMouseEvent *evt) override;
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent) override;
};
class BandmapWidget : public QWidget
{
Q_OBJECT
public:
explicit BandmapWidget(QWidget *parent = nullptr);
~BandmapWidget();
enum BandmapZoom {
ZOOM_100HZ,
ZOOM_250HZ,
ZOOM_500HZ,
ZOOM_1KHZ,
ZOOM_2K5HZ,
ZOOM_5KHZ,
ZOOM_10KHZ
};
public slots:
void update();
void updateTunedFrequency(VFOID, double, double, double);
void updateMode(VFOID, const QString &, const QString &mode,
const QString &subMode, qint32 width);
void addSpot(DxSpot spot);
void spotAgingChanged(int);
void clearSpots();
void zoomIn();
void zoomOut();
void updateSpotsStatusWhenQSOAdded(const QSqlRecord &record);
void updateSpotsStatusWhenQSOUpdated(const QSqlRecord &);
void updateSpotsDupeWhenQSODeleted(const QSqlRecord &record);
void updateSpotsDxccStatusWhenQSODeleted(const QSet<uint> &entities);
void recalculateDxccStatus();
void resetDupe();
void recalculateDupe();
signals:
void tuneDx(DxSpot);
void nearestSpotFound(const DxSpot &);
private:
void removeDuplicates(DxSpot &spot);
void spotAging();
void updateStations();
void determineStepDigits(double &steps, int &digits) const;
void clearAllCallsignFromScene();
void clearFreqMark(QGraphicsPolygonItem **);
void drawFreqMark(const double, const double, const QColor&, QGraphicsPolygonItem **);
void drawTXRXMarks(double);
void resizeEvent(QResizeEvent * event) override;
bool eventFilter(QObject *obj, QEvent *event) override;
void scrollToFreq(double freq);
QPointF Freq2ScenePos(const double) const;
double ScenePos2Freq(const QPointF &point) const;
DxSpot nearestSpot(const double) const;
void updateNearestSpot(bool force = false);
void setBandmapAnimation(bool);
void setBand(const Band &newBand, bool savePrevBandZoom = true);
void saveCurrentZoom();
BandmapWidget::BandmapZoom getSavedZoom(Band);
void saveCurrentScrollFreq();
double getSavedScrollFreq(Band);
double visibleCentreFreq() const;
private slots:
void centerRXActionChecked(bool);
void spotClicked(const QString&, double, BandPlan::BandPlanMode);
void showContextMenu(const QPoint&);
void updateStationTimer();
void focusZoomFreq(int, int);
private:
Ui::BandmapWidget *ui;
double rx_freq;
double tx_freq;
Band currentBand;
BandmapZoom zoom;
GraphicsScene* bandmapScene;
QMap<double, DxSpot> spots;
QTimer *update_timer;
QList<QGraphicsLineItem *> lineItemList;
QList<QGraphicsTextItem *> textItemList;
QGraphicsPolygonItem* rxMark;
QGraphicsPolygonItem* txMark;
bool keepRXCenter;
LogLocale locale;
quint32 pendingSpots;
qint64 lastStationUpdate;
double zoomFreq;
int zoomWidgetYOffset;
bool bandmapAnimation;
QString currBandMode;
QSettings settings;
struct LastTuneDx
{
QString callsign;
double freq;
};
LastTuneDx lastTunedDX;
DxSpot lastNearestSpot;
};
Q_DECLARE_METATYPE(BandmapWidget::BandmapZoom)
#endif // QLOG_UI_BANDMAPWIDGET_H