-
Notifications
You must be signed in to change notification settings - Fork 44
/
mtextedit.cpp
76 lines (64 loc) · 2.65 KB
/
mtextedit.cpp
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
#include "mtextedit.h"
#include <QTextDocument>
#include <QTextCursor>
#include <QImage>
#include <QByteArray>
#include <QBuffer>
#include <stdlib.h>
MTextEdit::MTextEdit(QWidget *parent) : QTextEdit(parent) {
}
bool MTextEdit::canInsertFromMimeData(const QMimeData *source) const {
return source->hasImage() || QTextEdit::canInsertFromMimeData(source);
}
void MTextEdit::insertFromMimeData(const QMimeData *source) {
if (source->hasImage()) {
QStringList formats = source->formats();
QString format;
for (int i=0; i<formats.size(); i++) {
if (formats[i] == "image/bmp") { format = "BMP"; break; }
if (formats[i] == "image/jpeg") { format = "JPG"; break; }
if (formats[i] == "image/jpg") { format = "JPG"; break; }
if (formats[i] == "image/gif") { format = "GIF"; break; }
if (formats[i] == "image/png") { format = "PNG"; break; }
if (formats[i] == "image/pbm") { format = "PBM"; break; }
if (formats[i] == "image/pgm") { format = "PGM"; break; }
if (formats[i] == "image/ppm") { format = "PPM"; break; }
if (formats[i] == "image/tiff") { format = "TIFF"; break; }
if (formats[i] == "image/xbm") { format = "XBM"; break; }
if (formats[i] == "image/xpm") { format = "XPM"; break; }
}
if (!format.isEmpty()) {
// dropImage(qvariant_cast<QImage>(source->imageData()), format);
dropImage(qvariant_cast<QImage>(source->imageData()), "JPG"); // Sorry, ale cokoli jiného dlouho trvá
return;
}
}
QTextEdit::insertFromMimeData(source);
}
QMimeData *MTextEdit::createMimeDataFromSelection() const {
return QTextEdit::createMimeDataFromSelection();
}
void MTextEdit::dropImage(const QImage& image, const QString& format) {
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, format.toLocal8Bit().data());
buffer.close();
QByteArray base64 = bytes.toBase64();
QByteArray base64l;
for (int i=0; i<base64.size(); i++) {
base64l.append(base64[i]);
if (i%80 == 0) {
base64l.append("\n");
}
}
QTextCursor cursor = textCursor();
QTextImageFormat imageFormat;
imageFormat.setWidth ( image.width() );
imageFormat.setHeight ( image.height() );
imageFormat.setName ( QString("data:image/%1;base64,%2")
.arg(QString("%1.%2").arg(rand()).arg(format))
.arg(base64l.data())
);
cursor.insertImage ( imageFormat );
}