OSDN Git Service

Cleanup compiler warning messages and alter backup & restore to handle new database...
[neighbornote/NeighborNote.git] / src / cx / fbn / nevernote / gui / Thumbnailer.java
1 package cx.fbn.nevernote.gui;\r
2 \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.AspectRatioMode;\r
10 import com.trolltech.qt.core.Qt.Orientation;\r
11 import com.trolltech.qt.core.Qt.ScrollBarPolicy;\r
12 import com.trolltech.qt.core.Qt.TransformationMode;\r
13 import com.trolltech.qt.gui.QImage;\r
14 import com.trolltech.qt.gui.QImage.Format;\r
15 import com.trolltech.qt.gui.QPainter;\r
16 import com.trolltech.qt.webkit.QWebPage;\r
17 \r
18 import cx.fbn.nevernote.Global;\r
19 import cx.fbn.nevernote.sql.DatabaseConnection;\r
20 import cx.fbn.nevernote.threads.ThumbnailRunner;\r
21 import cx.fbn.nevernote.utilities.ApplicationLogger;\r
22 import cx.fbn.nevernote.utilities.ListManager;\r
23 \r
24 public class Thumbnailer extends QObject {\r
25     public QWebPage page = new QWebPage();\r
26     public QImage image;\r
27     public QPainter painter = new QPainter();\r
28     public QMutex mutex;\r
29     public String guid;\r
30     private final QSize size;\r
31     private int zoom;\r
32     private QBuffer buffer;\r
33     private final ApplicationLogger logger;\r
34     private final DatabaseConnection conn;\r
35     \r
36     public Thumbnailer(ApplicationLogger logger, DatabaseConnection conn, ListManager l, ThumbnailRunner r)\r
37     {\r
38         mutex = new QMutex();\r
39         zoom = 1;\r
40 \r
41         this.logger = logger;\r
42         page = new QWebPage();\r
43         this.conn = conn;\r
44         size = new QSize(1024,768);\r
45 //        size = new QSize();\r
46 //        size.setWidth(Global.largeThumbnailSize.width());\r
47 //        size.setHeight(Global.largeThumbnailSize.height());\r
48         image = new QImage(size, Format.Format_ARGB32_Premultiplied);\r
49         page.setViewportSize(size);\r
50         page.loadFinished.connect(this, "loadFinished(Boolean)");\r
51         buffer = new QBuffer();\r
52         mutex.unlock();\r
53     }\r
54     \r
55     public void loadContent(String guid, QByteArray html, int zoom) {\r
56         this.zoom = zoom;\r
57         this.guid = guid;\r
58         page.mainFrame().setScrollBarPolicy(Orientation.Horizontal, ScrollBarPolicy.ScrollBarAlwaysOff);\r
59         page.mainFrame().setScrollBarPolicy(Orientation.Vertical, ScrollBarPolicy.ScrollBarAlwaysOff);\r
60         page.mainFrame().setContent(html);\r
61     }\r
62 \r
63     \r
64         @SuppressWarnings("unused")\r
65         private String loadFinished(Boolean ok) {\r
66                 if (!ok) { \r
67                         mutex.unlock();\r
68                         return null;\r
69                 }\r
70 //              page.setViewportSize(page.mainFrame().contentsSize());\r
71 //              image = new QImage(size, Format.Format_ARGB32);\r
72                 logger.log(logger.EXTREME, "Creating painter");\r
73                 painter = new QPainter();\r
74                 logger.log(logger.EXTREME, "Beginning painter");\r
75         painter.begin(image);\r
76         page.mainFrame().setZoomFactor(new Double(zoom));\r
77         if (painter.paintEngine() == null) {\r
78                 logger.log(logger.EXTREME, "Bad paint engine.  Aborting");\r
79                 painter.end();\r
80                         mutex.unlock();\r
81                         return null;\r
82         }\r
83                 logger.log(logger.EXTREME, "Rendering image");\r
84         page.mainFrame().render(painter);\r
85                 logger.log(logger.EXTREME, "Closing painter");\r
86         painter.end();\r
87         if (image.isNull()) {\r
88                 logger.log(logger.EXTREME, "Error rendering thumbnail image.  Aborting");\r
89                 mutex.unlock();\r
90                 return null;\r
91         }\r
92                 logger.log(logger.EXTREME, "Saving image isNull=" +image.isNull() +" Size=" +image.size());\r
93                 logger.log(logger.EXTREME, "Adding image to runner");\r
94                 saveImage();\r
95                 logger.log(logger.EXTREME, "Unlocking thumbnailer");\r
96         mutex.unlock();\r
97         return guid;\r
98     }\r
99         \r
100         \r
101         private void saveImage() {\r
102                 logger.log(logger.EXTREME, "Image found "+guid);\r
103                                 \r
104                 logger.log(logger.EXTREME, "Opening buffer");\r
105                 if (buffer == null)\r
106                         buffer = new QBuffer();\r
107         if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {\r
108                 logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");\r
109                 mutex.unlock();\r
110                 return;\r
111         }\r
112                 \r
113                 logger.log(logger.EXTREME, "Filling buffer");\r
114                 QImage img = image.scaled(Global.largeThumbnailSize,\r
115                                 AspectRatioMode.KeepAspectRatio, TransformationMode.SmoothTransformation);\r
116         if (!img.save(buffer, "PNG")) {\r
117                 logger.log(logger.EXTREME, "Failure to write to buffer.  Aborting.");     \r
118                 mutex.unlock();\r
119                 return;\r
120         }\r
121         buffer.close();\r
122                 \r
123                 logger.log(logger.EXTREME, "Updating database");\r
124                 QByteArray b = buffer.buffer();\r
125                 conn.getNoteTable().setThumbnail(guid, b);\r
126                 conn.getNoteTable().setThumbnailNeeded(guid, false);\r
127         }\r
128 }\r