forked from CieNTi/serial_port_plotter
-
Notifications
You must be signed in to change notification settings - Fork 8
/
mainwindow.hpp
151 lines (122 loc) · 8.4 KB
/
mainwindow.hpp
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
146
147
148
149
150
151
/***************************************************************************
** This file is part of Serial Port Plotter **
** **
** **
** Serial Port Plotter is a program for plotting integer data from **
** serial port using Qt and QCustomPlot **
** **
** 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, either version 3 of the License, or **
** (at your option) any later version. **
** **
** 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, see http://www.gnu.org/licenses/. **
** **
****************************************************************************
** Author: Borislav **
** Contact: [email protected] **
** Date: 29.12.14 **
****************************************************************************/
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QMainWindow>
#include <QtSerialPort/QtSerialPort>
#include <QSerialPortInfo>
#include "helpwindow.hpp"
#include "qcustomplot/qcustomplot.h"
#define START_MSG '$'
#define END_MSG ';'
#define WAIT_START 1
#define IN_MESSAGE 2
#define UNDEFINED 3
#define CUSTOM_LINE_COLORS 14
#define GCP_CUSTOM_LINE_COLORS 4
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_comboPort_currentIndexChanged(const QString &arg1); // Slot displays message on status bar
void portOpenedSuccess(); // Called when port opens OK
void portOpenedFail(); // Called when port fails to open
void onPortClosed(); // Called when closing the port
void replot(); // Slot for repainting the plot
void onNewDataArrived(QStringList newData); // Slot for new data from serial port
void saveStream(QStringList newData); // Save the received data to the opened file
void on_spinAxesMin_valueChanged(int arg1); // Changing lower limit for the plot
void on_spinAxesMax_valueChanged(int arg1); // Changing upper limit for the plot
void readData(); // Slot for inside serial port
//void on_comboAxes_currentIndexChanged(int index); // Display number of axes and colors in status bar
void on_spinYStep_valueChanged(int arg1); // Spin box for changing Y axis tick step
void on_savePNGButton_clicked(); // Button for saving JPG
void onMouseMoveInPlot (QMouseEvent *event); // Displays coordinates of mouse pointer when clicked in plot in status bar
void on_spinPoints_valueChanged (int arg1); // Spin box controls how many data points are collected and displayed
void on_mouse_wheel_in_plot (QWheelEvent *event); // Makes wheel mouse works while plotting
/* Used when a channel is selected (plot or legend) */
void channel_selection (void);
void legend_double_click (QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event);
void on_actionConnect_triggered();
void on_actionDisconnect_triggered();
void on_actionHow_to_use_triggered();
void on_actionPause_Plot_triggered();
void on_actionClear_triggered();
void on_actionRecord_stream_triggered();
void on_pushButton_TextEditHide_clicked();
void on_pushButton_ShowallData_clicked();
void on_pushButton_AutoScale_clicked();
void on_pushButton_ResetVisible_clicked();
void on_listWidget_Channels_itemDoubleClicked(QListWidgetItem *item);
void on_pushButton_clicked();
signals:
void portOpenFail(); // Emitted when cannot open port
void portOpenOK(); // Emitted when port is open
void portClosed(); // Emitted when port is closed
void newData(QStringList data); // Emitted when new data has arrived
private:
Ui::MainWindow *ui;
/* Line colors */
QColor line_colors[CUSTOM_LINE_COLORS];
QColor gui_colors[GCP_CUSTOM_LINE_COLORS];
/* Main info */
bool connected; // Status connection variable
bool plotting; // Status plotting variable
int dataPointNumber; // Keep track of data points
/* Channels of data (number of graphs) */
int channels;
/* Data format */
int data_format;
/* Textbox Related */
bool filterDisplayedData = true;
/* Listview Related */
QStringListModel *channelListModel;
QStringList channelStrList;
//-- CSV file to save data
QFile* m_csvFile = nullptr;
void openCsvFile(void);
void closeCsvFile(void);
QTimer updateTimer; // Timer used for replotting the plot
QTime timeOfFirstData; // Record the time of the first data point
double timeBetweenSamples; // Store time between samples
QSerialPort *serialPort; // Serial port; runs in this thread
QString receivedData; // Used for reading from the port
int STATE; // State of recieiving message from port
int NUMBER_OF_POINTS; // Number of points plotted
HelpWindow *helpWindow;
void createUI(); // Populate the controls
void enable_com_controls (bool enable); // Enable/disable controls
void setupPlot(); // Setup the QCustomPlot
// Open the inside serial port with these parameters
void openPort(QSerialPortInfo portInfo, int baudRate, QSerialPort::DataBits dataBits, QSerialPort::Parity parity, QSerialPort::StopBits stopBits);
};
#endif // MAINWINDOW_HPP