1 package cx.fbn.nevernote.gui;
\r
3 import com.trolltech.qt.core.QBuffer;
\r
4 import com.trolltech.qt.core.QByteArray;
\r
5 import com.trolltech.qt.core.QIODevice;
\r
6 import com.trolltech.qt.core.QMutex;
\r
7 import com.trolltech.qt.core.QObject;
\r
8 import com.trolltech.qt.core.QSize;
\r
9 import com.trolltech.qt.core.Qt.Orientation;
\r
10 import com.trolltech.qt.core.Qt.ScrollBarPolicy;
\r
11 import com.trolltech.qt.gui.QColor;
\r
12 import com.trolltech.qt.gui.QImage;
\r
13 import com.trolltech.qt.gui.QImage.Format;
\r
14 import com.trolltech.qt.gui.QPainter;
\r
15 import com.trolltech.qt.webkit.QWebPage;
\r
17 import cx.fbn.nevernote.sql.DatabaseConnection;
\r
18 import cx.fbn.nevernote.threads.ThumbnailRunner;
\r
19 import cx.fbn.nevernote.utilities.ApplicationLogger;
\r
20 import cx.fbn.nevernote.utilities.ListManager;
\r
22 public class Thumbnailer extends QObject {
\r
23 public QWebPage page = new QWebPage();
\r
24 public QImage image;
\r
25 public QPainter painter = new QPainter();
\r
26 public QMutex mutex;
\r
28 private final QSize size;
\r
30 private QBuffer buffer;
\r
31 private final ListManager listManager;
\r
32 private final ThumbnailRunner runner;
\r
33 private final ApplicationLogger logger;
\r
34 private final DatabaseConnection conn;
\r
36 public Thumbnailer(ApplicationLogger logger, DatabaseConnection conn, ListManager l, ThumbnailRunner r)
\r
38 mutex = new QMutex();
\r
42 this.logger = logger;
\r
43 page = new QWebPage();
\r
46 size = new QSize(1024,768);
\r
47 image = new QImage(size, Format.Format_ARGB32_Premultiplied);
\r
48 page.setViewportSize(size);
\r
49 page.loadFinished.connect(this, "loadFinished(Boolean)");
\r
50 buffer = new QBuffer();
\r
54 public void loadContent(String guid, QByteArray html, int zoom) {
\r
57 page.mainFrame().setScrollBarPolicy(Orientation.Horizontal, ScrollBarPolicy.ScrollBarAlwaysOff);
\r
58 page.mainFrame().setScrollBarPolicy(Orientation.Vertical, ScrollBarPolicy.ScrollBarAlwaysOff);
\r
59 page.mainFrame().setContent(html);
\r
63 public String loadFinished(Boolean ok) {
\r
68 logger.log(logger.EXTREME, "Creating painter");
\r
69 painter = new QPainter();
\r
70 logger.log(logger.EXTREME, "Creating image");
\r
71 if (image == null) {
\r
72 System.out.println("Null image");
\r
73 image = new QImage(size, Format.Format_ARGB32_Premultiplied);
\r
74 if (image.isNull()) {
\r
75 logger.log(logger.EXTREME, "Image is null. Aborting");
\r
80 logger.log(logger.EXTREME, "Filling image");
\r
81 image.fill(QColor.white.rgb());
\r
82 logger.log(logger.EXTREME, "Beginning painter");
\r
83 painter.begin(image);
\r
84 page.mainFrame().setZoomFactor(new Double(zoom));
\r
85 if (painter.paintEngine() == null) {
\r
86 logger.log(logger.EXTREME, "Bad paint engine. Aborting");
\r
91 logger.log(logger.EXTREME, "Rendering image");
\r
92 page.mainFrame().render(painter);
\r
93 logger.log(logger.EXTREME, "Closing painter");
\r
96 if (image.isNull()) {
\r
97 logger.log(logger.EXTREME, "Error rendering thumbnail image. Aborting");
\r
101 logger.log(logger.EXTREME, "Adding to listManager");
\r
102 // listManager.getThumbnails().remove(guid);
\r
103 // listManager.getThumbnails().put(guid, image.clone());
\r
104 logger.log(logger.EXTREME, "Saving image isNull=" +image.isNull() +" Size=" +image.size());
\r
105 logger.log(logger.EXTREME, "Adding image to runner");
\r
107 logger.log(logger.EXTREME, "Unlocking thumbnailer");
\r
113 private void saveImage() {
\r
114 logger.log(logger.EXTREME, "Image found "+guid);
\r
116 logger.log(logger.EXTREME, "Opening buffer");
\r
117 if (buffer == null)
\r
118 buffer = new QBuffer();
\r
119 if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
\r
120 logger.log(logger.EXTREME, "Failure to open buffer. Aborting.");
\r
125 logger.log(logger.EXTREME, "Filling buffer");
\r
126 if (!image.save(buffer, "PNG")) {
\r
127 logger.log(logger.EXTREME, "Failure to write to buffer. Aborting.");
\r
133 logger.log(logger.EXTREME, "Updating database");
\r
134 QByteArray b = buffer.buffer();
\r
135 conn.getNoteTable().setThumbnail(guid, b);
\r
136 conn.getNoteTable().setThumbnailNeeded(guid, false);
\r