File: MainWindow.cpp

package info (click to toggle)
labplot 2.12.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 78,528 kB
  • sloc: cpp: 241,047; ansic: 6,324; python: 915; xml: 400; yacc: 237; sh: 221; awk: 35; makefile: 11
file content (104 lines) | stat: -rw-r--r-- 3,237 bytes parent folder | download | duplicates (2)
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
/*
	File                 : MQTT_test.cpp
	Project              : LabPlot
	Description          : Tests for MQTT import.
	--------------------------------------------------------------------
	SPDX-FileCopyrightText: 2018 Kovacs Ferencz <kferike98@gmail.com>
	SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "MainWindow.h"
#include "ui_MainWindow.h"

#include <QDateTime>
#include <QMessageBox>
#include <QMqttClient>
#include <QTimer>

#include <chrono>
#include <iostream>
#include <random>

MainWindow::MainWindow(int interval, QWidget* parent)
	: QMainWindow(parent)
	, ui(new Ui::MainWindow)
	, m_run(false) {
	ui->setupUi(this);

	m_timer = new QTimer(this);
	m_timer->setInterval(interval);

	m_client = std::make_unique<BrownianMotionMqttClient>(this, interval);
	ui->lineEditHost->setText(m_client->hostname());

	connect(m_client.get(), &QMqttClient::disconnected, this, &MainWindow::brokerDisconnected);
	connect(m_timer, &QTimer::timeout, this, &MainWindow::publish);
	connect(ui->lePublishInterval, &QLineEdit::textChanged, this, &MainWindow::intervalChanged);
	connect(ui->bPublish, &QPushButton::clicked, this, &MainWindow::publish);
	connect(m_client.get(), &QMqttClient::connected, this, &MainWindow::onConnect);

	connect(m_client.get(), &QMqttClient::messageReceived, this, [this](const QByteArray& message, const QMqttTopicName& topic) {
		const QString content = QDateTime::currentDateTime().toString() + QLatin1String(" Received Topic: %1").arg(topic.name())
			+ QLatin1String(" Message:\n%1\n").arg(QString::fromUtf8(message));
		ui->editLog->insertPlainText(content);
	});

	connect(ui->lineEditHost, &QLineEdit::textChanged, m_client.get(), &QMqttClient::setHostname);
	connect(ui->spinBoxPort, QOverload<int>::of(&QSpinBox::valueChanged), this, &MainWindow::setClientPort);
}

MainWindow::~MainWindow() {
	delete ui;
	qApp->quit();
}

void MainWindow::on_buttonConnect_clicked() {
	if (m_client->state() == QMqttClient::Disconnected) {
		ui->lineEditHost->setEnabled(false);
		ui->spinBoxPort->setEnabled(false);
		ui->buttonConnect->setText(tr("Disconnect"));
		m_client->connectToHost();
	} else {
		ui->lineEditHost->setEnabled(true);
		ui->spinBoxPort->setEnabled(true);
		ui->buttonConnect->setText(tr("Connect"));
		m_client->disconnectFromHost();
	}
}

void MainWindow::on_buttonQuit_clicked() {
	QApplication::quit();
}

void MainWindow::brokerDisconnected() {
	ui->lineEditHost->setEnabled(true);
	ui->spinBoxPort->setEnabled(true);
	ui->buttonConnect->setText(tr("Connect"));
}

void MainWindow::setClientPort(int p) {
	m_client->setPort(p);
}

void MainWindow::on_buttonSubscribe_clicked() {
	const auto& status = m_client->subscribeBrownianTopic();
	if (!status.isEmpty())
		QMessageBox::critical(this, QLatin1String("Error"), status);
	else
		m_timer->start();
}

void MainWindow::publish() {
	m_client->publishBrownianData();
}

void MainWindow::intervalChanged(const QString& interval) {
	int newInterval = interval.toInt();
	m_timer->start(newInterval);
	m_client->setInterval(newInterval);
}

void MainWindow::onConnect() {
	const QString content = QDateTime::currentDateTime().toString() + QLatin1String("  Successfully connected to broker\n");
	ui->editLog->insertPlainText(content);
}