initial commit

This commit is contained in:
2019-02-13 18:33:19 +01:00
parent 9bc94a0afd
commit 1b3603beaa
7 changed files with 351 additions and 88 deletions
+168 -15
View File
@@ -1,16 +1,44 @@
#include "cimportdialog.h"
#include "ui_cimportdialog.h"
#include "common.h"
#include "cpicture.h"
#include <QSettings>
#include <QDir>
#include <QFileInfoList>
#include <QFileDialog>
#include <QPainter>
#include <QMimeDatabase>
#include <QMimeType>
#include <QMessageBox>
#include <QDebug>
cImportDialog::cImportDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::cImportDialog)
{
initUI();
createActions();
}
cImportDialog::~cImportDialog()
{
delete ui;
}
void cImportDialog::initUI()
{
ui->setupUi(this);
ui->m_lpProgress->setVisible(false);
m_lpImportListModel = new QStandardItemModel;
ui->m_lpImportList->setModel(m_lpImportListModel);
QSettings settings;
@@ -26,24 +54,21 @@ cImportDialog::cImportDialog(QWidget *parent) :
if(iX != -1 && iY != -1)
move(iX, iY);
}
qint32 iWidth1 = settings.value("import/splitter1", QVariant::fromValue(-1)).toInt();
qint32 iWidth2 = settings.value("import/splitter2", QVariant::fromValue(-1)).toInt();
ui->m_lpSplitter->setSizes(QList<int>() << iWidth1 << iWidth2);
ui->m_lpPath->setText(settings.value("import/path", QDir::homePath()).toString());
}
cImportDialog::~cImportDialog()
void cImportDialog::createActions()
{
delete ui;
}
void cImportDialog::on_m_lpPathSelect_clicked()
{
QSettings settings;
QString szPath = settings.value("import/path", QDir::homePath()).toString();
szPath = QFileDialog::getExistingDirectory(this, tr("Import Directory"), szPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(szPath.isEmpty())
return;
ui->m_lpPath->setText(szPath);
settings.setValue("import/path", szPath);
connect(ui->m_lpPathSelect, &QPushButton::clicked, this, &cImportDialog::onPathSelect);
connect(ui->m_lpRead, &QPushButton::clicked, this, &cImportDialog::onRead);
connect(ui->m_lpImport, &QPushButton::clicked, this, &cImportDialog::onImport);
connect(ui->m_lpImportList->selectionModel(), &QItemSelectionModel::selectionChanged, this, &cImportDialog::onThumbnailSelected);
}
void cImportDialog::closeEvent(QCloseEvent *event)
@@ -60,3 +85,131 @@ void cImportDialog::closeEvent(QCloseEvent *event)
event->accept();
}
void cImportDialog::onPathSelect()
{
QSettings settings;
QString szPath = settings.value("import/path", QDir::homePath()).toString();
szPath = QFileDialog::getExistingDirectory(this, tr("Import Directory"), szPath, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(szPath.isEmpty())
return;
ui->m_lpPath->setText(szPath);
settings.setValue("import/path", szPath);
}
void cImportDialog::onThumbnailSelected(const QItemSelection& /*selection*/, const QItemSelection& /*previous*/)
{
cToolBoxInfo* lpToolBoxInfo = ui->m_lpInfo;
if(ui->m_lpImportList->selectionModel()->selectedIndexes().count() != 1)
{
lpToolBoxInfo->setPicture(nullptr);
return;
}
QStandardItem* lpItem = m_lpImportListModel->itemFromIndex(ui->m_lpImportList->currentIndex());
cPicture* lpPicture = lpItem->data().value<cPicture*>();
lpToolBoxInfo->setPicture(lpPicture);
}
void cImportDialog::accept()
{
savePosition();
QDialog::accept();
}
void cImportDialog::reject()
{
savePosition();
QDialog::reject();
}
void cImportDialog::savePosition()
{
QSettings settings;
settings.setValue("import/width", QVariant::fromValue(size().width()));
settings.setValue("import/height", QVariant::fromValue(size().height()));
settings.setValue("import/x", QVariant::fromValue(x()));
settings.setValue("import/y", QVariant::fromValue(y()));
QList<qint32> sizes = ui->m_lpSplitter->sizes();
for(int x = 0;x < sizes.count();x++)
settings.setValue(QString("import/splitter%1").arg(x+1), QVariant::fromValue(sizes[x]));
}
void cImportDialog::onRead()
{
if(ui->m_lpPath->text().isEmpty())
{
QMessageBox::critical(this, tr("Error"), tr("no path given!"));
return;
}
m_lpImportListModel->clear();
readDirectory(ui->m_lpPath->text(), ui->m_lpRecursive->isChecked());
}
void cImportDialog::onImport()
{
}
void cImportDialog::readDirectory(const QString& szPath, bool bRecursive)
{
QMimeDatabase mimeDB;
QDir dir(szPath);
QStringList szDirs = dir.entryList(QDir::Dirs);
QFileInfoList szFiles = dir.entryInfoList(QDir::Files);
if(bRecursive)
{
szDirs.removeAll(".");
szDirs.removeAll("..");
for(int x = 0;x < szDirs.count();x++)
readDirectory(szPath + QDir::separator() + szDirs[x], bRecursive);
}
for(int x = 0;x < szFiles.count();x++)
{
QFileInfo fileInfo = szFiles[x];
QMimeType mimeType = mimeDB.mimeTypeForFile(szFiles[x]);
if(mimeType.name().startsWith("image"))
{
ui->m_lpStatusText->setText(QString(tr("found %1")).arg(fileInfo.fileName()));
qApp->processEvents();
cPicture* lpPicture = new cPicture;
QIcon icon;
if(lpPicture->fromFile(fileInfo.filePath()))
{
if(lpPicture->thumbnail().width() != THUMBNAIL_WIDTH || lpPicture->thumbnail().height() != THUMBNAIL_HEIGHT)
{
QImage thumbnail(THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, lpPicture->thumbnail().format());
thumbnail.fill(Qt::black);
QPainter painter(&thumbnail);
painter.drawImage((THUMBNAIL_WIDTH-lpPicture->thumbnail().width())/2, (THUMBNAIL_HEIGHT-lpPicture->thumbnail().height())/2, lpPicture->thumbnail());
painter.end();
icon = QIcon(QPixmap::fromImage(thumbnail));
}
else
icon = QIcon(QPixmap::fromImage(lpPicture->thumbnail()));
QStandardItem* lpItem = new QStandardItem(icon, lpPicture->fileName());
lpItem->setTextAlignment(Qt::AlignCenter);
lpItem->setData(QVariant::fromValue(lpPicture));
m_lpImportListModel->appendRow(lpItem);
qApp->processEvents();
}
}
}
ui->m_lpStatusText->setText("");
}
+38 -2
View File
@@ -3,7 +3,9 @@
#include <QDialog>
#include <QStandardItemModel>
#include <QCloseEvent>
#include <QItemSelection>
namespace Ui {
@@ -19,11 +21,45 @@ public:
~cImportDialog();
private slots:
void on_m_lpPathSelect_clicked();
/*!
\brief
\fn onPathSelect
*/
void onPathSelect();
/*!
\brief
\fn onRead
*/
void onRead();
/*!
\brief
\fn onImport
*/
void onImport();
/*!
\brief
\param selection
\param previous
\fn onThumbnailSelected
*/
void onThumbnailSelected(const QItemSelection& selection, const QItemSelection& previous);
private:
Ui::cImportDialog *ui;
Ui::cImportDialog* ui;
QStandardItemModel* m_lpImportListModel; /**< TODO: describe */
void initUI();
void createActions();
void readDirectory(const QString& szPath, bool bRecursive);
void accept();
void reject();
void savePosition();
protected:
/*!
\brief
+101 -24
View File
@@ -6,16 +6,16 @@
<rect>
<x>0</x>
<y>0</y>
<width>653</width>
<height>563</height>
<width>449</width>
<height>328</height>
</rect>
</property>
<property name="windowTitle">
<string>Import</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_2">
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="0,0,1,0,0">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -73,6 +73,20 @@
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="m_lpRead">
<property name="text">
<string>read</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpImport">
<property name="text">
<string>import</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@@ -89,35 +103,98 @@
</layout>
</item>
<item>
<widget class="QListView" name="m_lpImportList">
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
<widget class="QSplitter" name="m_lpSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="iconSize">
<size>
<width>160</width>
<height>120</height>
</size>
<widget class="QListView" name="m_lpImportList">
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
<property name="iconSize">
<size>
<width>160</width>
<height>120</height>
</size>
</property>
<property name="resizeMode">
<enum>QListView::Adjust</enum>
</property>
<property name="gridSize">
<size>
<width>180</width>
<height>180</height>
</size>
</property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
<widget class="QScrollArea" name="scrollArea">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>69</width>
<height>167</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="cToolBoxInfo" name="m_lpInfo" native="true"/>
</item>
</layout>
</widget>
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1,1">
<item>
<widget class="QLabel" name="m_lpStatusText">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QProgressBar" name="m_lpProgress">
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="m_lpButtonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QDialogButtonBox" name="m_lpButtonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>cToolBoxInfo</class>
<extends>QWidget</extends>
<header>ctoolboxinfo.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
+4 -41
View File
@@ -29,32 +29,6 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) :
loadData();
updateRecentFileActions();
// cPicture picture;
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_1371.CR2");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\20181123_125857.jpg");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_1371.CR2");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\tiff\\BSG1.tiff");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_3444.CR2");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_0248_49_50_easyHDR-dramatic-strong.jpg");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_3466_7_8_easyHDR-dramatic-dark.tif");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_0248_49_50_easyHDR-dramatic-strong.jpg");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\DSC_0214.NEF");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\DSC_0215.NEF");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_1652.JPG");
// picture.toDB();
// picture.fromFile(QDir::homePath() + "\\OneDrive - WINDESIGN\\exif-samples-master\\IMG_1657.JPG");
// picture.toDB();
}
cMainWindow::~cMainWindow()
@@ -128,6 +102,9 @@ void cMainWindow::createActions()
void cMainWindow::loadData()
{
m_pictureList.clear();
m_lpThumbnailViewModel->clear();
m_pictureList.load();
for(int x = 0;x < m_pictureList.count();x++)
@@ -419,22 +396,8 @@ void cMainWindow::onFileImport()
{
cImportDialog importDialog(this);
QSettings settings;
qint32 iX = settings.value("import/x", QVariant::fromValue(-1)).toInt();
qint32 iY = settings.value("import/y", QVariant::fromValue(-1)).toInt();
qint32 iWidth = settings.value("import/width", QVariant::fromValue(-1)).toInt();
qint32 iHeight = settings.value("import/height", QVariant::fromValue(-1)).toInt();
if(iX != -1 && iY != -1)
importDialog.move(iX, iY);
if(iWidth != -1 && iHeight != -1)
importDialog.resize(iWidth, iHeight);
if(importDialog.exec() == QDialog::Rejected)
return;
settings.setValue("import/width", QVariant::fromValue(importDialog.size().width()));
settings.setValue("import/height", QVariant::fromValue(importDialog.size().height()));
settings.setValue("import/x", QVariant::fromValue(importDialog.x()));
settings.setValue("import/y", QVariant::fromValue(importDialog.y()));
loadData();
}
+23 -6
View File
@@ -13,6 +13,7 @@ cPicture::cPicture(qint32 iID, QObject *parent) :
m_iID(iID),
m_szFileName(""),
m_szFilePath(""),
m_iFileSize(0),
m_imageWidth(0),
m_imageHeight(0),
m_cameraMake(""),
@@ -35,14 +36,17 @@ cPicture::cPicture(qint32 iID, QObject *parent) :
bool cPicture::fromFile(const QString& szFileName)
{
cEXIF exif;
cEXIF exif;
QFileInfo fileInfo(szFileName);
if(!exif.fromFile(szFileName))
return(false);
m_iID = -1;
m_szFileName = exif.fileName();
m_szFileName = fileInfo.fileName();
m_szFilePath = fileInfo.absolutePath();
m_iFileSize = fileInfo.size();
m_thumbnail = exif.thumbnail();
m_imageWidth = exif.imageWidth();
m_imageHeight = exif.imageHeight();
@@ -67,7 +71,6 @@ bool cPicture::fromFile(const QString& szFileName)
if(!m_dateTime.isValid())
{
QFileInfo fileInfo(m_szFileName);
setDateTime(fileInfo.birthTime());
}
@@ -89,16 +92,18 @@ bool cPicture::toDB()
}
if(!query.next())
query.prepare("INSERT INTO picture (fileName, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);");
query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);");
else
query.prepare("UPDATE picture SET fileName = :fileName, imageWidth = :imageWidth, imageHeight = :imageHeight, cameraMake = :cameraMake, cameraModel = :cameraModel, dateTime = :dateTime, fNumber = :fNumber, iso = :iso, flashID = :flashID, focalLength = :focalLength, lensMake = :lensMake, lensModel = :lensModel, exposureTime = :exposureTime, exposureBias = :exposureBias, exifVersion = :exifVersion, dateTimeOriginal = :dateTimeOriginal, dateTimeDigitized = :dateTimeDigitized, whiteBalance = :whiteBalance, focalLength35 = :focalLength35, gps = :gps, thumbnail = :thumbnail WHERE id = :id;");
query.prepare("UPDATE picture SET fileName=:fileName, filePath=:filePath, fileSize=:fileSize, imageWidth=:imageWidth, imageHeight=:imageHeight, cameraMake=:cameraMake, cameraModel=:cameraModel, dateTime=:dateTime, fNumber=:fNumber, iso=:iso, flashID=:flashID, focalLength=:focalLength, lensMake=:lensMake, lensModel=:lensModel, exposureTime=:exposureTime, exposureBias=:exposureBias, exifVersion=:exifVersion, dateTimeOriginal=:dateTimeOriginal, dateTimeDigitized=:dateTimeDigitized, whiteBalance=:whiteBalance, focalLength35=:focalLength35, gps=:gps, thumbnail=:thumbnail WHERE id=:id;");
}
else
query.prepare("INSERT INTO picture (fileName, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);");
query.prepare("INSERT INTO picture (fileName, filePath, fileSize, imageWidth, imageHeight, cameraMake, cameraModel, dateTime, fNumber, iso, flashID, focalLength, lensMake, lensModel, exposureTime, exposureBias, exifVersion, dateTimeOriginal, dateTimeDigitized, whiteBalance, focalLength35, gps, thumbnail) VALUES (:fileName, :filePath, :fileSize, :imageWidth, :imageHeight, :cameraMake, :cameraModel, :dateTime, :fNumber, :iso, :flashID, :focalLength, :lensMake, :lensModel, :exposureTime, :exposureBias, :exifVersion, :dateTimeOriginal, :dateTimeDigitized, :whiteBalance, :focalLength35, :gps, :thumbnail);");
query.bindValue(":id", m_iID);
query.bindValue(":fileName", m_szFileName);
query.bindValue(":filePath", m_szFilePath);
query.bindValue(":fileSize", m_iFileSize);
query.bindValue(":imageWidth", m_imageWidth);
query.bindValue(":imageHeight", m_imageHeight);
query.bindValue(":cameraMake", m_cameraMake);
@@ -375,6 +380,16 @@ QString cPicture::filePath()
return(m_szFilePath);
}
void cPicture::setFileSize(const qint64& fileSize)
{
m_iFileSize = fileSize;
}
qint64 cPicture::fileSize()
{
return(m_iFileSize);
}
void cPicture::setThumbnail(const QImage& thumbnail)
{
m_thumbnail = thumbnail;
@@ -398,6 +413,7 @@ bool cPictureList::load()
query.prepare("SELECT id, "
" fileName, "
" filePath, "
" fileSize, "
" imageWidth, "
" imageHeight, "
" cameraMake, "
@@ -432,6 +448,7 @@ bool cPictureList::load()
cPicture* lpPicture = add(query.value("id").toInt());
lpPicture->setFileName(query.value("fileName").toString());
lpPicture->setFilePath(query.value("filePath").toString());
lpPicture->setFileSize(query.value("fileSize").toLongLong());
lpPicture->setImageWidth(query.value("imageWidth").toInt());
lpPicture->setImageHeight(query.value("imageHeight").toInt());
lpPicture->setCameraMake(query.value("cameraMake").toString());
+14
View File
@@ -335,6 +335,19 @@ public:
*/
QString filePath();
/**
* @brief
*
* @param fileSize
*/
void setFileSize(const qint64& fileSize);
/**
* @brief
*
* @return qint64
*/
qint64 fileSize();
/**
* @brief
*
@@ -356,6 +369,7 @@ private:
qint32 m_iID; /**< TODO: describe */
QString m_szFileName; /**< TODO: describe */
QString m_szFilePath; /**< TODO: describe */
qint64 m_iFileSize; /**< TODO: describe */
QImage m_thumbnail; /**< TODO: describe */
qint32 m_imageWidth; /**< TODO: describe */
qint32 m_imageHeight; /**< TODO: describe */
+3
View File
@@ -110,6 +110,7 @@ bool cPictureLibrary::createDatabase()
" id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, "
" fileName TEXT, "
" filePath TEXT, "
" fileSize BIGINT, "
" imageWidth INTEGER, "
" imageHeight INTEGER, "
" cameraMake TEXT, "
@@ -181,6 +182,8 @@ bool cPictureLibrary::updateDatabase3(qint32 version)
if(!createTable("CREATE TABLE picture ( "
" id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, "
" fileName TEXT, "
" filePath TEXT, "
" fileSize BIGINT, "
" imageWidth INTEGER, "
" imageHeight INTEGER, "
" cameraMake TEXT, "