This commit is contained in:
2019-02-21 17:12:16 +01:00
parent 49d098c2d7
commit f10552c711
8 changed files with 130 additions and 66 deletions
+18 -29
View File
@@ -8,8 +8,6 @@
#include "common.h" #include "common.h"
#include "cpicture.h"
#include "cdatetimepicker.h" #include "cdatetimepicker.h"
#include <QSettings> #include <QSettings>
@@ -28,13 +26,14 @@
#include <QDebug> #include <QDebug>
cImportDialog::cImportDialog(const QString& szRootPath, QWidget *parent) : cImportDialog::cImportDialog(const QString& szRootPath, cPictureList& pictureList, QWidget *parent) :
QDialog(parent), QDialog(parent),
ui(new Ui::cImportDialog), ui(new Ui::cImportDialog),
m_szRootPath(szRootPath), m_szRootPath(szRootPath),
m_pictureList(pictureList),
m_lpFolderViewModel(nullptr), m_lpFolderViewModel(nullptr),
m_lpThumbnailViewModel(nullptr), m_lpThumbnailViewModel(nullptr),
m_lpThumbnailFilterProxyModel(nullptr), m_lpThumbnailSortFilterProxyModel(nullptr),
m_bLoading(false), m_bLoading(false),
m_bHasImported(false), m_bHasImported(false),
m_lpRootItem(nullptr) m_lpRootItem(nullptr)
@@ -47,7 +46,7 @@ cImportDialog::~cImportDialog()
{ {
delete m_lpThumbnailViewModel; delete m_lpThumbnailViewModel;
delete m_lpFolderViewModel; delete m_lpFolderViewModel;
delete m_lpThumbnailFilterProxyModel; delete m_lpThumbnailSortFilterProxyModel;
delete ui; delete ui;
} }
@@ -62,9 +61,9 @@ void cImportDialog::initUI()
ui->m_lpFolderView->setModel(m_lpFolderViewModel); ui->m_lpFolderView->setModel(m_lpFolderViewModel);
m_lpThumbnailViewModel = new QStandardItemModel; m_lpThumbnailViewModel = new QStandardItemModel;
m_lpThumbnailFilterProxyModel = new cThumbnailSortFilterProxyModel(this); m_lpThumbnailSortFilterProxyModel = new cThumbnailSortFilterProxyModel(this);
ui->m_lpThumbnailView->setModel(m_lpThumbnailFilterProxyModel); ui->m_lpThumbnailView->setModel(m_lpThumbnailSortFilterProxyModel);
m_lpThumbnailFilterProxyModel->setSourceModel(m_lpThumbnailViewModel); m_lpThumbnailSortFilterProxyModel->setSourceModel(m_lpThumbnailViewModel);
QSettings settings; QSettings settings;
@@ -143,7 +142,7 @@ void cImportDialog::onThumbnailSelected(const QItemSelection& /*selection*/, con
if(!index.isValid()) if(!index.isValid())
return; return;
cPicture* lpPicture = m_lpThumbnailFilterProxyModel->data(index, Qt::UserRole+1).value<cPicture*>(); cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(index, Qt::UserRole+1).value<cPicture*>();
lpToolBoxInfo->setPicture(lpPicture); lpToolBoxInfo->setPicture(lpPicture);
} }
@@ -156,7 +155,7 @@ void cImportDialog::onFolderSelected(const QItemSelection& /*selection*/, const
if(!lpItem) if(!lpItem)
return; return;
m_lpThumbnailFilterProxyModel->setFilterPath(lpItem->data(Qt::UserRole+2).toString()); m_lpThumbnailSortFilterProxyModel->setFilterPath(lpItem->data(Qt::UserRole+2).toString());
} }
void cImportDialog::accept() void cImportDialog::accept()
@@ -220,20 +219,18 @@ void cImportDialog::onRead()
void cImportDialog::onImport() void cImportDialog::onImport()
{ {
QModelIndexList selected = ui->m_lpThumbnailView->selectionModel()->selectedRows();
QDir dir; QDir dir;
QFile file; QFile file;
ui->m_lpProgress->setVisible(true); ui->m_lpProgress->setVisible(true);
ui->m_lpProgress->setRange(0, selected.count()); ui->m_lpProgress->setRange(0, ui->m_lpThumbnailView->selectionModel()->selectedIndexes().count());
for(int x = 0;x < selected.count();x++) for(int x = 0;x < ui->m_lpThumbnailView->selectionModel()->selectedIndexes().count();x++)
{ {
QStandardItem* lpItem = m_lpThumbnailViewModel->itemFromIndex(selected[x]); QModelIndex index = ui->m_lpThumbnailView->selectionModel()->selectedIndexes()[x];
if(index.isValid())
if(lpItem)
{ {
cPicture* lpPicture = lpItem->data().value<cPicture*>(); cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(index, Qt::UserRole+1).value<cPicture*>();
if(lpPicture) if(lpPicture)
{ {
@@ -251,26 +248,18 @@ void cImportDialog::onImport()
szDestPath.append(lpPicture->cameraModel() + QDir::separator()); szDestPath.append(lpPicture->cameraModel() + QDir::separator());
szDest.append(szDestPath); szDest.append(szDestPath);
szDest.append(lpPicture->fileName());
if(dir.mkpath(szDest)) // if(copyFile(szSource, szDest, ui->m_lpMove->isChecked()))
if(copyFile(szSource, szDest, false))
{ {
szDest.append(lpPicture->fileName());
if(file.exists(szDest))
file.remove(szDest);
file.copy(szSource, szDest);
ui->m_lpProgress->setValue(x); ui->m_lpProgress->setValue(x);
qApp->processEvents(); qApp->processEvents();
lpPicture->setFilePath(szDestPath.left(szDestPath.length()-1).replace("\\", "/")); lpPicture->setFilePath(szDestPath.left(szDestPath.length()-1).replace("\\", "/"));
lpPicture->toDB(); lpPicture->toDB();
m_pictureList.add(lpPicture);
if(ui->m_lpMove->isChecked())
{
// file.remove(szSource);
}
} }
} }
} }
+23 -21
View File
@@ -12,6 +12,7 @@
#include <QCloseEvent> #include <QCloseEvent>
#include <QItemSelection> #include <QItemSelection>
#include "cpicture.h"
#include "cthumbnailsortfilterproxymodel.h" #include "cthumbnailsortfilterproxymodel.h"
@@ -36,7 +37,7 @@ public:
\param szRootPath \param szRootPath
\param parent \param parent
*/ */
explicit cImportDialog(const QString& szRootPath, QWidget *parent = nullptr); explicit cImportDialog(const QString& szRootPath, cPictureList& pictureList, QWidget *parent = nullptr);
/*! /*!
\brief \brief
@@ -50,7 +51,7 @@ public:
\fn hasImported \fn hasImported
\return bool \return bool
*/ */
bool hasImported(); bool hasImported();
private slots: private slots:
/*! /*!
@@ -58,19 +59,19 @@ private slots:
\fn onPathSelect \fn onPathSelect
*/ */
void onPathSelect(); void onPathSelect();
/*! /*!
\brief \brief
\fn onRead \fn onRead
*/ */
void onRead(); void onRead();
/*! /*!
\brief \brief
\fn onImport \fn onImport
*/ */
void onImport(); void onImport();
/*! /*!
\brief \brief
@@ -78,7 +79,7 @@ private slots:
\param selection \param selection
\param previous \param previous
*/ */
void onThumbnailSelected(const QItemSelection& selection, const QItemSelection& previous); void onThumbnailSelected(const QItemSelection& selection, const QItemSelection& previous);
/*! /*!
\brief \brief
@@ -86,30 +87,31 @@ private slots:
\param selection \param selection
\param previous \param previous
*/ */
void onFolderSelected(const QItemSelection& selection, const QItemSelection& previous); void onFolderSelected(const QItemSelection& selection, const QItemSelection& previous);
private: private:
Ui::cImportDialog* ui; /*!< TODO: describe */ Ui::cImportDialog* ui; /*!< TODO: describe */
QString m_szRootPath; /*!< TODO: describe */ QString m_szRootPath; /*!< TODO: describe */
QStandardItemModel* m_lpFolderViewModel; /*!< TODO: describe */ cPictureList& m_pictureList; /*!< TODO: describe */
QStandardItemModel* m_lpThumbnailViewModel; /*!< TODO: describe */ QStandardItemModel* m_lpFolderViewModel; /*!< TODO: describe */
cThumbnailSortFilterProxyModel* m_lpThumbnailFilterProxyModel; /*!< TODO: describe */ QStandardItemModel* m_lpThumbnailViewModel; /*!< TODO: describe */
bool m_bLoading; /*!< TODO: describe */ cThumbnailSortFilterProxyModel* m_lpThumbnailSortFilterProxyModel; /*!< TODO: describe */
bool m_bHasImported; /*!< TODO: describe */ bool m_bLoading; /*!< TODO: describe */
QStandardItem* m_lpRootItem; /*!< TODO: describe */ bool m_bHasImported; /*!< TODO: describe */
QStandardItem* m_lpRootItem; /*!< TODO: describe */
/*! /*!
\brief \brief
\fn initUI \fn initUI
*/ */
void initUI(); void initUI();
/*! /*!
\brief \brief
\fn createActions \fn createActions
*/ */
void createActions(); void createActions();
/*! /*!
\brief \brief
@@ -118,27 +120,27 @@ private:
\param szPath \param szPath
\param bRecursive \param bRecursive
*/ */
void readDirectory(const QString& szPath, bool bRecursive); void readDirectory(const QString& szPath, bool bRecursive);
/*! /*!
\brief \brief
\fn accept \fn accept
*/ */
void accept(); void accept();
/*! /*!
\brief \brief
\fn reject \fn reject
*/ */
void reject(); void reject();
/*! /*!
\brief \brief
\fn savePosition \fn savePosition
*/ */
void savePosition(); void savePosition();
protected: protected:
}; };
+23 -14
View File
@@ -124,14 +124,23 @@ void cMainWindow::loadData(bool bProgressBar)
m_bLoading = true; m_bLoading = true;
m_pictureList.clear(); m_pictureList.clear();
m_pictureList.load(m_lpSplashScreen, bProgressBar ? m_lpProgressBar : nullptr);
displayData();
m_bLoading = false;
}
void cMainWindow::displayData()
{
m_lpThumbnailViewModel->clear(); m_lpThumbnailViewModel->clear();
m_lpFolderViewModel->clear(); m_lpFolderViewModel->clear();
ui->m_lpStatusBar->showMessage(tr("refreshing..."));
qApp->processEvents();
m_lpRootItem = new QStandardItem("library"); m_lpRootItem = new QStandardItem("library");
m_lpFolderViewModel->appendRow(m_lpRootItem); m_lpFolderViewModel->appendRow(m_lpRootItem);
m_pictureList.load(m_lpSplashScreen, bProgressBar ? m_lpProgressBar : nullptr);
for(int x = 0;x < m_pictureList.count();x++) for(int x = 0;x < m_pictureList.count();x++)
{ {
QIcon icon; QIcon icon;
@@ -159,8 +168,7 @@ void cMainWindow::loadData(bool bProgressBar)
} }
ui->m_lpFolderView->expandAll(); ui->m_lpFolderView->expandAll();
ui->m_lpStatusBar->showMessage(tr("done."), 3);
m_bLoading = false;
} }
void cMainWindow::closeEvent(QCloseEvent *event) void cMainWindow::closeEvent(QCloseEvent *event)
@@ -412,15 +420,11 @@ void cMainWindow::onFileOpen()
void cMainWindow::onFileImport() void cMainWindow::onFileImport()
{ {
cImportDialog importDialog(m_pictureLibrary.rootPath(), this); cImportDialog importDialog(m_pictureLibrary.rootPath(), m_pictureList, this);
importDialog.exec(); importDialog.exec();
if(importDialog.hasImported()) if(importDialog.hasImported())
{ displayData();
m_lpProgressBar->setVisible(true);
loadData(true);
m_lpProgressBar->setVisible(false);
}
} }
void cMainWindow::onThumbnailViewContextMenu(const QPoint& pos) void cMainWindow::onThumbnailViewContextMenu(const QPoint& pos)
@@ -458,12 +462,17 @@ void cMainWindow::onChangeDate()
lpPicture->setDateTime(dateTimePicker.dateTime()); lpPicture->setDateTime(dateTimePicker.dateTime());
QString szPath = QString::number(lpPicture->dateTime().date().year()) + "/" + lpPicture->dateTime().date().toString("yyyy-MM-dd"); QString szPath = QString::number(lpPicture->dateTime().date().year()) + "/" + lpPicture->dateTime().date().toString("yyyy-MM-dd");
lpPicture->setFilePath(szPath);
m_lpThumbnailSortFilterProxyModel->setData(index, QVariant::fromValue(szPath), Qt::UserRole+2); m_lpThumbnailSortFilterProxyModel->setData(index, QVariant::fromValue(szPath), Qt::UserRole+2);
insertPath(szPath, m_lpRootItem); if(copyFile(m_pictureLibrary.rootPath() + QDir::separator() + lpPicture->filePath() + QDir::separator() + lpPicture->fileName(),
m_lpFolderSortFilterProxyModel->sort(0); m_pictureLibrary.rootPath() + QDir::separator() + szPath + QDir::separator() + lpPicture->fileName(), true))
{
lpPicture->setFilePath(szPath);
lpPicture->toDB();
insertPath(szPath, m_lpRootItem);
m_lpFolderSortFilterProxyModel->sort(0);
m_lpThumbnailSortFilterProxyModel->invalidate(); m_lpThumbnailSortFilterProxyModel->invalidate();
}
} }
} }
+6
View File
@@ -126,6 +126,12 @@ private:
\param bProgressBar \param bProgressBar
*/ */
void loadData(bool bProgressBar = false); void loadData(bool bProgressBar = false);
/*!
\brief
\fn displayData
*/
void displayData();
protected: protected:
/*! /*!
+25 -1
View File
@@ -41,7 +41,7 @@ QByteArray image2Blob(const QImage &image)
QStandardItem* insertPath(QString szPath, QStandardItem* lpRootItem) QStandardItem* insertPath(QString szPath, QStandardItem* lpRootItem)
{ {
if(!lpRootItem) if(!lpRootItem)
return(0); return(nullptr);
QString szPath1 = szPath.replace("\\", "/"); QString szPath1 = szPath.replace("\\", "/");
QStringList szPathList = szPath1.split("/"); QStringList szPathList = szPath1.split("/");
@@ -85,3 +85,27 @@ QStandardItem* insertPath(QString szPath, QStandardItem* lpRootItem)
return(lpCurRoot); return(lpCurRoot);
} }
bool copyFile(const QString& szSource, const QString& szDest, bool bDelete)
{
QString szDestPath;
QString szDestFilePath = szDest;
QDir dir;
QFile file;
szDestFilePath.replace("\\", "/");
szDestPath = szDestFilePath.left(szDestFilePath.lastIndexOf("/"));
dir.mkpath(szDestPath);
if(file.exists(szDestFilePath))
file.remove(szDestFilePath);
file.copy(szSource, szDestFilePath);
if(bDelete)
file.remove(szSource);
return(true);
}
+10
View File
@@ -54,5 +54,15 @@ QByteArray image2Blob(const QImage& image);
*/ */
QStandardItem* insertPath(QString szPath, QStandardItem* lpRootItem); QStandardItem* insertPath(QString szPath, QStandardItem* lpRootItem);
/*!
\brief
\fn copyFile
\param szSource
\param szDest
\param bDelete
\return bool
*/
bool copyFile(const QString& szSource, const QString& szDest, bool bDelete = false);
#endif // COMMON_H #endif // COMMON_H
+16 -1
View File
@@ -86,7 +86,7 @@ bool cPicture::toDB()
if(m_iID != -1) if(m_iID != -1)
{ {
query.prepare("SELECT id FROM file WHERE id=:id;"); query.prepare("SELECT id FROM picture WHERE id=:id;");
query.bindValue(":id", m_iID); query.bindValue(":id", m_iID);
if(!query.exec()) if(!query.exec())
{ {
@@ -534,6 +534,21 @@ cPicture* cPictureList::add(qint32 iID, bool bNoCheck)
return(lpNew); return(lpNew);
} }
bool cPictureList::add(cPicture* lpPicture, bool bNoCheck)
{
if(bNoCheck)
{
append(lpPicture);
return(true);
}
if(contains(lpPicture))
return(false);
append(lpPicture);
return(true);
}
cPicture* cPictureList::find(qint32 iID) cPicture* cPictureList::find(qint32 iID)
{ {
for(int i = 0;i < count();i++) for(int i = 0;i < count();i++)
+9
View File
@@ -517,6 +517,15 @@ public:
/*! /*!
\brief \brief
\fn add
\param cPicture
\param bNoCheck
\return bool
*/
bool add(cPicture* lpPicture, bool bNoCheck = false);
/*!
\brief
\fn find \fn find
\param iID \param iID
\return cPicture \return cPicture