-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmainwindow.cpp
More file actions
121 lines (97 loc) · 3.14 KB
/
mainwindow.cpp
File metadata and controls
121 lines (97 loc) · 3.14 KB
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
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui/QClipboard>
#include <QMimeData>
#include <QCloseEvent>
#include <QDebug>
#include <QSettings>
#include <QTimer>
MainWindow::MainWindow(unsigned short p, QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
socket(0),
port(p)
{
ui->setupUi(this);
// busted in Qt5
//connect(QApplication::clipboard(), SIGNAL(changed(QClipboard::Mode)), this, SLOT(clipboardChanged()));
connect(ui->listWidget, SIGNAL(clicked(QModelIndex)), this, SLOT(textActivated()));
currentText = QApplication::clipboard()->text();
QTimer *timer = new QTimer(this);
timer->setInterval(200);
connect(timer, SIGNAL(timeout()), this, SLOT(pollClipboard()));
timer->start();
socket = new QUdpSocket(this);
socket->bind(QHostAddress::Any, port);
connect(socket, SIGNAL(readyRead()), this, SLOT(readDatagrams()));
QSettings s;
if(s.contains("geom")) {
QByteArray geom = s.value("geom").toByteArray();
restoreGeometry(geom);
}
}
MainWindow::~MainWindow()
{
delete ui;
delete socket;
}
void MainWindow::sysTrayActivate(QSystemTrayIcon::ActivationReason reason) {
qDebug() << "Activate reason:" << reason;
if(reason == QSystemTrayIcon::Context || reason == QSystemTrayIcon::DoubleClick) {
qApp->quit();
} else {
show();
raise();
activateWindow();
}
}
void MainWindow::addNode(const QHostAddress& nodeAddress) {
nodes.append(nodeAddress);
}
void MainWindow::addText(const QString &text) {
if(ui->listWidget->count() > 0 && text == ui->listWidget->item(0)->text())
return;
QList<QListWidgetItem *> matches = ui->listWidget->findItems(text, Qt::MatchCaseSensitive);
foreach(QListWidgetItem *i, matches) {
delete i;
}
ui->listWidget->insertItem(0, text);
foreach(QHostAddress addy, nodes) {
socket->writeDatagram(text.toUtf8(), addy, port);
}
}
void MainWindow::clipboardChanged() {
qDebug() << "Clipboard changed";
if(qApp->clipboard()->mimeData()->hasText()) {
addText(qApp->clipboard()->mimeData()->text());
}
}
void MainWindow::closeEvent(QCloseEvent *e) {
e->ignore();
QSettings s;
s.setValue("geom", this->saveGeometry());
hide();
}
void MainWindow::textActivated() {
qApp->clipboard()->setText(ui->listWidget->currentItem()->text());
QSettings s;
s.setValue("geom", this->saveGeometry());
hide();
}
void MainWindow::readDatagrams() {
while (socket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(socket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
socket->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
qApp->clipboard()->setText(QString::fromUtf8(datagram.data()));
}
}
void MainWindow::pollClipboard()
{
if(QApplication::clipboard()->text() != currentText) {
currentText = QApplication::clipboard()->text();
clipboardChanged();
}
}