image viewer
This commit is contained in:
+35
-29
@@ -1,60 +1,66 @@
|
||||
#include "cimageviewer.h"
|
||||
#include "ui_cimageviewer.h"
|
||||
|
||||
#include "cimage.h"
|
||||
|
||||
#include <QKeyEvent>
|
||||
#include <QFile>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
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()
|
||||
|
||||
+3
-2
@@ -2,6 +2,7 @@
|
||||
#define CIMAGEVIEWER_H
|
||||
|
||||
|
||||
#include "cpicture.h"
|
||||
#include "cimage.h"
|
||||
|
||||
#include <QDialog>
|
||||
@@ -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:
|
||||
/*!
|
||||
|
||||
+46
-32
@@ -15,38 +15,52 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<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>380</width>
|
||||
<height>280</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="cLabel" name="m_lpImage">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>loading...</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<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>378</width>
|
||||
<height>259</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="cLabel" name="m_lpImage">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>loading...</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="m_lpFileName">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <QResizeEvent>
|
||||
#include <QKeyEvent>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
||||
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)
|
||||
|
||||
+46
-28
@@ -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<cPicture*>();
|
||||
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<qint32> idList, bool bAnd)
|
||||
showCount();
|
||||
}
|
||||
|
||||
void cMainWindow::viewImage()
|
||||
{
|
||||
if(!m_lpImageViewer)
|
||||
return;
|
||||
|
||||
cPicture* lpPicture = m_lpThumbnailSortFilterProxyModel->data(m_imageViewerIndex, Qt::UserRole+1).value<cPicture*>();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
#include "cfilterpanel.h"
|
||||
|
||||
#include "cimageviewer.h"
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QCloseEvent>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user