diff options
author | Arno <arno@disconnect.de> | 2016-11-27 06:52:50 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-11-27 06:52:50 +0100 |
commit | 9c89e2f83415c876f28f15ebff31c8325754a936 (patch) | |
tree | 81262fcd178af3071187cf89b415fc70cdb8d977 /viewer.cpp | |
parent | d1cf6c418855004a249d44fd383c889cbd1e7662 (diff) | |
download | ShemovCleaner-9c89e2f83415c876f28f15ebff31c8325754a936.tar.gz ShemovCleaner-9c89e2f83415c876f28f15ebff31c8325754a936.tar.bz2 ShemovCleaner-9c89e2f83415c876f28f15ebff31c8325754a936.zip |
Add picture viewer
Opens on doubleclick when it's image/*.
Diffstat (limited to 'viewer.cpp')
-rw-r--r-- | viewer.cpp | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/viewer.cpp b/viewer.cpp new file mode 100644 index 0000000..e8d5f7f --- /dev/null +++ b/viewer.cpp @@ -0,0 +1,79 @@ +#include <QLabel> +#include <QHBoxLayout> +#include <QDesktopWidget> +#include <QApplication> +#include <QFileInfo> +#include <QMimeDatabase> +#include <QDir> +#include <QWheelEvent> + +#include "viewer.h" + +Viewer::Viewer(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mCurIndex(-1) { + QDesktopWidget *dw = qApp->desktop(); + mLabel = new QLabel; + mLabel->setMaximumSize(dw->size() - QSize(20, 20)); + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addWidget(mLabel); + setLayout(mainLayout); +} + +void Viewer::setFile(const QString &file, bool allFiles){ + mCurIndex = -1; + QFileInfo fi(file); + QMimeDatabase db; + QMimeType mt = db.mimeTypeForFile(fi); + if(mt.name().startsWith("image")){ + mFiles << fi.absoluteFilePath(); + } + if(allFiles){ + foreach(auto curFi, fi.dir().entryInfoList()){ + if(!mFiles.contains(curFi.absoluteFilePath())){ + QMimeType mt = db.mimeTypeForFile(curFi); + if(mt.name().startsWith("image")){ + mFiles << curFi.absoluteFilePath(); + } + } + } + } + if(!mFiles.isEmpty()){ + mCurIndex = 0; + displayFile(mCurIndex); + } +} + +void Viewer::wheelEvent(QWheelEvent *event){ + QPoint numDeg = event->angleDelta() / 8; + if(numDeg.y() < 0){ //this is scrolling down -> next! + if(mCurIndex + 1 >= mFiles.count()){ + mCurIndex = 0; + }else{ + ++mCurIndex; + } + }else if(numDeg.y() > 0){ + if(mCurIndex - 1 < 0){ + mCurIndex = mFiles.count() - 1; + }else{ + --mCurIndex; + } + } + displayFile(mCurIndex); + event->accept(); +} + +void Viewer::displayFile(int index){ + if(index < 0){ + return; + } + QPixmap pm(mFiles.at(mCurIndex)); + if(pm.width() > mLabel->maximumWidth()){ + pm = pm.scaledToWidth(mLabel->maximumWidth()); + } + if(pm.height() > mLabel->maximumHeight()){ + pm = pm.scaledToHeight(mLabel->maximumHeight()); + } + mLabel->setPixmap(pm); + adjustSize(); + QString winTitle = QString(tr("%1 Viewer [%2]")).arg(qApp->applicationName()).arg(mFiles.at(mCurIndex)); + setWindowTitle(winTitle); +} |