Package cx.fbn.nevernote.sql

Source Code of cx.fbn.nevernote.sql.SystemIconTable

/*
* This file is part of NixNote
* Copyright 2009 Randy Baumgarte
*
* This file may be licensed under the terms of of the
* GNU General Public License Version 2 (the ``GPL'').
*
* Software distributed under the License is distributed
* on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the GPL for the specific language
* governing rights and limitations.
*
* You should have received a copy of the GPL along with this
* program. If not, go to http://www.gnu.org/licenses/gpl.html
* or write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/


package cx.fbn.nevernote.sql;

import com.trolltech.qt.core.QBuffer;
import com.trolltech.qt.core.QByteArray;
import com.trolltech.qt.core.QIODevice;
import com.trolltech.qt.gui.QIcon;
import com.trolltech.qt.gui.QImage;
import com.trolltech.qt.gui.QPixmap;

import cx.fbn.nevernote.sql.driver.NSqlQuery;
import cx.fbn.nevernote.utilities.ApplicationLogger;

public class SystemIconTable {
 
  private final ApplicationLogger     logger;
  DatabaseConnection              db;
 
  // Constructor
  public SystemIconTable(ApplicationLogger l, DatabaseConnection d) {
    logger = l;
    db = d;
  }
  // Create the table
  public void createTable() {
    NSqlQuery query = new NSqlQuery(db.getConnection());
        logger.log(logger.HIGH, "Creating table SystemIcon...");
        if (!query.exec("Create table SystemIcon (name varchar, " +
            "type varchar, " +
            "primary key(name, type), " +
            "icon blob)"))             
          logger.log(logger.HIGH, "Table SystemIcon creation FAILED!!!");  
  }
  // Drop the table
  public void dropTable() {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    query.exec("Drop table SystemIcon");
  }

 
  // Get the notebooks custom icon
  public QIcon getIcon(String name, String type) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
   
    if (!query.prepare("Select icon from SystemIcon where name=:name and type=:type"))
      logger.log(logger.EXTREME, "Error preparing system icon select.");
    query.bindValue(":name", name);
    query.bindValue(":type", type);
    if (!query.exec())
      logger.log(logger.EXTREME, "Error finding system icon.");
    if (!query.next() || query.getBlob(0) == null)
      return null;
   
    QByteArray blob = new QByteArray(query.getBlob(0));
    QIcon icon = new QIcon(QPixmap.fromImage(QImage.fromData(blob)));
    return icon;
  }
 
 
  // Get the notebooks custom icon
  public boolean exists(String name, String type) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
   
    if (!query.prepare("Select icon from SystemIcon where name=:name and type=:type"))
      logger.log(logger.EXTREME, "Error preparing system icon select.");
    query.bindValue(":name", name);
    query.bindValue(":type", type);
    if (!query.exec())
      logger.log(logger.EXTREME, "Error finding system icon.");
    if (!query.next() || query.getBlob(0) == null)
      return false;
    return true;
  }
 
 
  // Set the notebooks custom icon
  public void setIcon(String name, String rectype, QIcon icon, String filetype) {
    if (exists(name, rectype))
      updateIcon(name, rectype, icon, filetype);
    else
      addIcon(name, rectype, icon, filetype);
  }
 
 
 
  // Set the notebooks custom icon
  public void addIcon(String name, String rectype, QIcon icon, String filetype) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    if (icon == null) {
      return;
    } else {
      if (!query.prepare("Insert into SystemIcon (icon, name, type) values (:icon, :name, :type)"))
        logger.log(logger.EXTREME, "Error preparing notebook icon select.");
      QBuffer buffer = new QBuffer();
          if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
            logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");
            return;
          }
          QPixmap p = icon.pixmap(32, 32);
          QImage i = p.toImage();
           i.save(buffer, filetype.toUpperCase());
           buffer.close();
           QByteArray b = new QByteArray(buffer.buffer());
           if (!b.isNull() && !b.isEmpty())
             query.bindValue(":icon", b.toByteArray());
           else
             return;
    }
    query.bindValue(":name", name);
    query.bindValue(":type", rectype);
    if (!query.exec())
      logger.log(logger.LOW, "Error setting system icon. " +query.lastError());
  }
 
 
 
  // Set the notebooks custom icon
  public void updateIcon(String name, String rectype, QIcon icon, String filetype) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    if (icon == null) {
      if (!query.prepare("delete from SystemIcon where name=:name and type=:type"))
        logger.log(logger.EXTREME, "Error preparing notebook icon select.");
    } else {
      if (!query.prepare("update SystemIcon set icon=:icon where name=:name and type=:type"))
        logger.log(logger.EXTREME, "Error preparing notebook icon select.");
      QBuffer buffer = new QBuffer();
          if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
            logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");
            return;
          }
          QPixmap p = icon.pixmap(32, 32);
          QImage i = p.toImage();
           i.save(buffer, filetype.toUpperCase());
           buffer.close();
           QByteArray b = new QByteArray(buffer.buffer());
           if (!b.isNull() && !b.isEmpty())
             query.bindValue(":icon", b.toByteArray());
           else
             return;
    }
    query.bindValue(":name", name);
    query.bindValue(":type", rectype);
    if (!query.exec())
      logger.log(logger.LOW, "Error setting system icon. " +query.lastError());
  }

}

TOP

Related Classes of cx.fbn.nevernote.sql.SystemIconTable

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.