Package cx.fbn.nevernote.gui

Source Code of cx.fbn.nevernote.gui.Thumbnailer

package cx.fbn.nevernote.gui;

import com.trolltech.qt.core.QBuffer;
import com.trolltech.qt.core.QByteArray;
import com.trolltech.qt.core.QIODevice;
import com.trolltech.qt.core.QMutex;
import com.trolltech.qt.core.QObject;
import com.trolltech.qt.core.QSize;
import com.trolltech.qt.core.Qt.AspectRatioMode;
import com.trolltech.qt.core.Qt.Orientation;
import com.trolltech.qt.core.Qt.ScrollBarPolicy;
import com.trolltech.qt.core.Qt.TransformationMode;
import com.trolltech.qt.gui.QImage;
import com.trolltech.qt.gui.QImage.Format;
import com.trolltech.qt.gui.QPainter;
import com.trolltech.qt.webkit.QWebPage;

import cx.fbn.nevernote.Global;
import cx.fbn.nevernote.sql.DatabaseConnection;
import cx.fbn.nevernote.threads.ThumbnailRunner;
import cx.fbn.nevernote.utilities.ApplicationLogger;
import cx.fbn.nevernote.utilities.ListManager;

public class Thumbnailer extends QObject {
    public QWebPage page = new QWebPage();
    public QImage image;
    public QPainter painter = new QPainter();
    public QMutex mutex;
    public String guid;
    private final QSize size;
    private int zoom;
    private QBuffer buffer;
    private final ApplicationLogger logger;
    private final DatabaseConnection conn;
   
    public Thumbnailer(ApplicationLogger logger, DatabaseConnection conn, ListManager l, ThumbnailRunner r)
    {
      mutex = new QMutex();
      zoom = 1;

      this.logger = logger;
      page = new QWebPage();
      this.conn = conn;
        size = new QSize(1024,768);
//        size = new QSize();
//        size.setWidth(Global.largeThumbnailSize.width());
//        size.setHeight(Global.largeThumbnailSize.height());
        image = new QImage(size, Format.Format_ARGB32_Premultiplied);
      page.setViewportSize(size);
      page.loadFinished.connect(this, "loadFinished(Boolean)");
      buffer = new QBuffer();
        mutex.unlock();
    }
   
    public void loadContent(String guid, QByteArray html, int zoom) {
      this.zoom = zoom;
      this.guid = guid;
      page.mainFrame().setScrollBarPolicy(Orientation.Horizontal, ScrollBarPolicy.ScrollBarAlwaysOff);
      page.mainFrame().setScrollBarPolicy(Orientation.Vertical, ScrollBarPolicy.ScrollBarAlwaysOff);
      page.mainFrame().setContent(html);
    }

   
  @SuppressWarnings("unused")
  private String loadFinished(Boolean ok) {
    if (!ok) {
      mutex.unlock();
      return null;
    }
//    page.setViewportSize(page.mainFrame().contentsSize());
//    image = new QImage(size, Format.Format_ARGB32);
    logger.log(logger.EXTREME, "Creating painter");
    painter = new QPainter();
    logger.log(logger.EXTREME, "Beginning painter");
        painter.begin(image);
        page.mainFrame().setZoomFactor(new Double(zoom));
      if (painter.paintEngine() == null) {
        logger.log(logger.EXTREME, "Bad paint engine.  Aborting");
        painter.end();
      mutex.unlock();
      return null;
      }
    logger.log(logger.EXTREME, "Rendering image");
        page.mainFrame().render(painter);
    logger.log(logger.EXTREME, "Closing painter");
        painter.end();
        if (image.isNull()) {
          logger.log(logger.EXTREME, "Error rendering thumbnail image.  Aborting");
          mutex.unlock();
          return null;
        }
    logger.log(logger.EXTREME, "Saving image isNull=" +image.isNull() +" Size=" +image.size());
    logger.log(logger.EXTREME, "Adding image to runner");
    saveImage();
    logger.log(logger.EXTREME, "Unlocking thumbnailer");
        mutex.unlock();
        return guid;
    }
 
 
  private void saveImage() {
    logger.log(logger.EXTREME, "Image found "+guid);
       
    logger.log(logger.EXTREME, "Opening buffer");
    if (buffer == null)
      buffer = new QBuffer();
        if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
          logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");
          mutex.unlock();
          return;
        }
         
    logger.log(logger.EXTREME, "Filling buffer");
    QImage img = image.scaled(Global.largeThumbnailSize,
        AspectRatioMode.KeepAspectRatio, TransformationMode.SmoothTransformation);
        if (!img.save(buffer, "PNG")) {
          logger.log(logger.EXTREME, "Failure to write to buffer.  Aborting.");   
          mutex.unlock();
          return;
        }
        buffer.close();
         
    logger.log(logger.EXTREME, "Updating database");
    QByteArray b = buffer.buffer();
    conn.getNoteTable().setThumbnail(guid, b);
    conn.getNoteTable().setThumbnailNeeded(guid, false);
  }
}
TOP

Related Classes of cx.fbn.nevernote.gui.Thumbnailer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.