diff --git a/cimageviewer.cpp b/cimageviewer.cpp index db0a5dd..caf70b6 100644 --- a/cimageviewer.cpp +++ b/cimageviewer.cpp @@ -1,60 +1,66 @@ #include "cimageviewer.h" #include "ui_cimageviewer.h" +#include "cimage.h" + #include +#include #include cImageViewer::cImageViewer(QWidget *parent) : QDialog(parent), - ui(new Ui::cImageViewer) + ui(new Ui::cImageViewer), + m_lpImage(nullptr) { ui->setupUi(this); ui->m_lpImage->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); -// connect(ui->m_lpImage, &cLabel::imageNext, this, &cImageViewer::onImageNext); -// connect(ui->m_lpImage, &cLabel::imagePrev, this, &cImageViewer::onImagePrev); -// connect(ui->m_lpImage, &cLabel::imageFirst, this, &cImageViewer::onImageFirst); -// connect(ui->m_lpImage, &cLabel::imageLast, this, &cImageViewer::onImageLast); + connect(ui->m_lpImage, &cLabel::imageNext, this, &cImageViewer::onImageNext); + connect(ui->m_lpImage, &cLabel::imagePrev, this, &cImageViewer::onImagePrev); + connect(ui->m_lpImage, &cLabel::imageFirst, this, &cImageViewer::onImageFirst); + connect(ui->m_lpImage, &cLabel::imageLast, this, &cImageViewer::onImageLast); } cImageViewer::~cImageViewer() { + if(m_lpImage) + delete m_lpImage; + delete ui; } -void cImageViewer::setImage(cImage* lpImage) +void cImageViewer::setPicture(QString szNumber, QString szRootPath, cPicture* lpPicture) { - ui->m_lpImage->setImage(lpImage); + QApplication::setOverrideCursor(Qt::WaitCursor); - setWindowFlag(Qt::Window); - showFullScreen(); + if(m_lpImage) + delete m_lpImage; - ui->m_lpImage->setFocus(); -} + QFile file(szRootPath + "/" + lpPicture->filePath() + "/" + lpPicture->fileName()); -void cImageViewer::keyPressEvent(QKeyEvent* e) -{ - switch(e->key()) + if(!file.exists()) + return; + + m_lpImage = new cImage(file.fileName()); + + QApplication::restoreOverrideCursor(); + + if(m_lpImage->isNull()) { - case Qt::Key_Left: - emit imagePrev(); - break; - case Qt::Key_Right: - emit imageNext(); - break; - case Qt::Key_Home: - emit imageFirst(); - break; - case Qt::Key_End: - emit imageLast(); - break; - default: - break; + delete m_lpImage; + m_lpImage = nullptr; + return; } - QDialog::keyPressEvent(e); + ui->m_lpImage->setImage(m_lpImage); + ui->m_lpFileName->setText(szNumber + " - " + lpPicture->filePath() + "/" + lpPicture->fileName()); + + setWindowFlag(Qt::Window); + showMaximized(); + + ui->m_lpImage->setFocus(); } void cImageViewer::onImageNext() diff --git a/cimageviewer.h b/cimageviewer.h index 1a98532..15f5f48 100644 --- a/cimageviewer.h +++ b/cimageviewer.h @@ -2,6 +2,7 @@ #define CIMAGEVIEWER_H +#include "cpicture.h" #include "cimage.h" #include @@ -19,12 +20,12 @@ public: explicit cImageViewer(QWidget *parent = nullptr); ~cImageViewer(); - void setImage(cImage* lpImage); + void setPicture(QString szNumber, QString szRootPath, cPicture* lpPicture); private: Ui::cImageViewer* ui; + cImage* m_lpImage; protected: - void keyPressEvent(QKeyEvent* e); private slots: /*! diff --git a/cimageviewer.ui b/cimageviewer.ui index 9f4fbff..a02f405 100644 --- a/cimageviewer.ui +++ b/cimageviewer.ui @@ -15,38 +15,52 @@ - - - true - - - - - 0 - 0 - 380 - 280 - - - - - - - - 20 - - - - loading... - - - Qt::AlignCenter - - - - - - + + + + + true + + + + + 0 + 0 + 378 + 259 + + + + + + + + 20 + + + + loading... + + + Qt::AlignCenter + + + + + + + + + + + + + + Qt::AlignCenter + + + + diff --git a/clabel.cpp b/clabel.cpp index e32079b..8bdbd60 100644 --- a/clabel.cpp +++ b/clabel.cpp @@ -3,6 +3,8 @@ #include #include +#include + cLabel::cLabel(QWidget *parent, Qt::WindowFlags f) : QLabel(parent, f) @@ -18,6 +20,7 @@ cLabel::cLabel(const QString &text, QWidget *parent, Qt::WindowFlags f) : void cLabel::setImage(cImage* lpImage) { m_lpImage = lpImage; + setPixmap(QPixmap::fromImage(m_lpImage->scaled(width(), height(), Qt::AspectRatioMode::KeepAspectRatio, Qt::TransformationMode::SmoothTransformation))); } void cLabel::resizeEvent(QResizeEvent* e) diff --git a/cmainwindow.cpp b/cmainwindow.cpp index 4cceada..ae4e992 100644 --- a/cmainwindow.cpp +++ b/cmainwindow.cpp @@ -14,7 +14,6 @@ #include "ccombopicker.h" #include "cimage.h" -#include "cimageviewer.h" #include "cstyleddelegate.h" @@ -49,7 +48,8 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) : m_bLoading(false), m_lpSplashScreen(lpSplashScreen), m_lpFileMenu(nullptr), - m_lpFileToolBar(nullptr) + m_lpFileToolBar(nullptr), + m_lpImageViewer(nullptr) { initUI(); createActions(); @@ -65,6 +65,9 @@ cMainWindow::cMainWindow(cSplashScreen* lpSplashScreen, QWidget *parent) : cMainWindow::~cMainWindow() { + if(m_lpImageViewer) + delete m_lpImageViewer; + if(m_lpFilterPanel) delete m_lpFilterPanel; @@ -461,33 +464,26 @@ void cMainWindow::onThumbnailDoubleClicked(const QModelIndex& index) if(!index.isValid()) return; - cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(index, Qt::UserRole+1).value(); - QFile file(m_pictureLibrary.rootPath() + "/" + lpPicture->filePath() + "/" + lpPicture->fileName()); + m_imageViewerIndex = index; + if(!m_lpImageViewer) + m_lpImageViewer = new cImageViewer(this); - if(!file.exists()) - return; + connect(m_lpImageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext); + connect(m_lpImageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev); + connect(m_lpImageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst); + connect(m_lpImageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast); - QApplication::setOverrideCursor(Qt::WaitCursor); - cImageViewer imageViewer(this); + viewImage(); - cImage image(file.fileName()); - QApplication::restoreOverrideCursor(); + m_lpImageViewer->exec(); - if(image.isNull()) - return; + disconnect(m_lpImageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext); + disconnect(m_lpImageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev); + disconnect(m_lpImageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst); + disconnect(m_lpImageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast); - connect(&imageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext); - connect(&imageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev); - connect(&imageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst); - connect(&imageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast); - - imageViewer.setImage(&image); - imageViewer.exec(); - - disconnect(&imageViewer, &cImageViewer::imageNext, this, &cMainWindow::onImageNext); - disconnect(&imageViewer, &cImageViewer::imagePrev, this, &cMainWindow::onImagePrev); - disconnect(&imageViewer, &cImageViewer::imageFirst, this, &cMainWindow::onImageFirst); - disconnect(&imageViewer, &cImageViewer::imageLast, this, &cMainWindow::onImageLast); + delete m_lpImageViewer; + m_lpImageViewer = nullptr; } void cMainWindow::onFolderSelected(const QItemSelection& /*selection*/, const QItemSelection& /*previous*/) @@ -993,22 +989,44 @@ void cMainWindow::onFilterTagChanged(QList idList, bool bAnd) showCount(); } +void cMainWindow::viewImage() +{ + if(!m_lpImageViewer) + return; + + cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(m_imageViewerIndex, Qt::UserRole+1).value(); + + m_lpImageViewer->setPicture(QString("%1/%2").arg(m_imageViewerIndex.row()+1).arg(m_lpThumbnailSortFilterProxyModel->rowCount()), m_pictureLibrary.rootPath(), lpPicture); +} + void cMainWindow::onImageNext() { - qDebug() << "next image"; + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_imageViewerIndex.row()+1, 0); + if(!m_imageViewerIndex.isValid()) + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(0, 0); + + viewImage(); } void cMainWindow::onImagePrev() { - qDebug() << "prev image"; + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_imageViewerIndex.row()-1, 0); + if(!m_imageViewerIndex.isValid()) + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_lpThumbnailViewModel->rowCount()-1, 0); + + viewImage(); } void cMainWindow::onImageLast() { - qDebug() << "last image"; + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(m_lpThumbnailViewModel->rowCount()-1, 0); + + viewImage(); } void cMainWindow::onImageFirst() { - qDebug() << "first image"; + m_imageViewerIndex = m_lpThumbnailSortFilterProxyModel->index(0, 0); + + viewImage(); } diff --git a/cmainwindow.h b/cmainwindow.h index f403338..456f14b 100644 --- a/cmainwindow.h +++ b/cmainwindow.h @@ -21,6 +21,8 @@ #include "cfilterpanel.h" +#include "cimageviewer.h" + #include #include @@ -106,6 +108,9 @@ private: QAction* m_lpSetHDRAction; /*!< TODO: describe */ QAction* m_lpUnsetHDRAction; /*!< TODO: describe */ + cImageViewer* m_lpImageViewer; /*!< TODO: describe */ + QModelIndex m_imageViewerIndex; /*!< TODO: describe */ + /*! \brief @@ -179,6 +184,13 @@ private: \fn showCount */ void showCount(); + + /*! + \brief + + \fn viewImage + */ + void viewImage(); protected: /*! \brief