#include #include #include #include #include #include #include #include #include "helper.h" #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){ mFiles.clear(); mCurIndex = -1; QFileInfo fi(file); QMimeDatabase db; QMimeType mt = db.mimeTypeForFile(fi); if(mt.name().startsWith("image")){ mFiles << fi.absoluteFilePath(); } if(allFiles){ for(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::preview(const QString &file){ mFiles.clear(); mCurIndex = -1; QPixmap pm = Helper::preview(file); mLabel->setPixmap(pm); QString winTitle = QString(tr("%1 Viewer: [Preview %2]")).arg(qApp->applicationName()).arg(file); setWindowTitle(winTitle); adjustSize(); } void Viewer::wheelEvent(QWheelEvent *event){ if(mCurIndex == -1){ return; } 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); setFixedSize(size()); }