From aba573026ec3ca79e30d0350a645d91169421443 Mon Sep 17 00:00:00 2001 From: Arno Date: Tue, 29 Mar 2016 20:29:26 +0200 Subject: Make the SlideDialog do somethin Well, implement functionality. Seems to work as intended. --- pictureviewer2.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 4 deletions(-) (limited to 'pictureviewer2.cpp') diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index ead82ea..d95602a 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -32,16 +32,17 @@ #include #include #include -#include #include #include -#include #include #include #include #include #include +#include +#include + #include "pictureviewer2.h" #include "picfilesmodel.h" #include "pictureswidget.h" @@ -59,6 +60,8 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setWindowState(Qt::WindowMaximized); + mSlideDlg = new PictureViewerSlideDlg(this); + connect(mSlideDlg, SIGNAL(accepted()), this, SLOT(doSlide())); //initial file list PicData initialData; @@ -69,11 +72,13 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) mFiles << initialData; //picture show + mTimer = new QTimer(this); mSlideTimer = new QTimer(this); mSlideTimerAll = new QTimer(this); mSlideTimerRecent = new QTimer(this); mCurTimer = mSlideTimer; mSlideTimerAllRestart = true; + connect(mTimer, SIGNAL(timeout()), this, SLOT(nextSlide())); connect(mSlideTimer, SIGNAL(timeout()), this, SLOT(next())); connect(mSlideTimerAll, SIGNAL(timeout()), this, SLOT(nextFromAll())); connect(mSlideTimerRecent, SIGNAL(timeout()), this, SLOT(nextFromRecent())); @@ -493,9 +498,42 @@ void PictureViewer2::doControl(QGraphicsItem *item){ } } +void PictureViewer2::showSlide(){ + mSlideTimer->stop(); + mSlideDlg->show(); +} + void PictureViewer2::doSlide(){ - PictureViewerSlideDlg dlg(this); - dlg.exec(); + int result = mSlideDlg->result(); + if(result == PictureViewerSlideDlg::NoSlide){ + mTimer->stop(); + return; + } + mNextSlideCtr = 0; + if(result == PictureViewerSlideDlg::SlideAll){ + mPicFilesModel->selectFromAll(); + }else if (result == PictureViewerSlideDlg::SlideRecent){ + int days = mSlideDlg->days(); + mPicFilesModel->selectFromRecent(days); + }else if (result == PictureViewerSlideDlg::SlideSelection){ + MappingEditWidget *editWidget = mSlideDlg->mappingEditWidget(); + QList mappingParentsIds = editWidget->model()->getMappings(editWidget->model()->root()); + mPicFilesModel->selectFromSelection(mappingParentsIds); + } + mPicData = mPicFilesModel->allPics(); + if(mSlideDlg->shuffle()){ + unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::shuffle(mPicData.begin(), mPicData.end(), std::default_random_engine(seed)); + } + auto picDataOld = mPicData; + mPicData.clear(); + foreach(auto pd, picDataOld){ + QList tmp; + tmp << Helper::createArchivePath(pd.value(0).toString(), pd.value(1).toString()) << pd.value(2); + mPicData << tmp; + } + mTotal = mPicData.count(); + mTimer->start(5000); } void PictureViewer2::wheelEvent(QWheelEvent *event){ @@ -589,6 +627,26 @@ void PictureViewer2::resizeEvent(QResizeEvent *event){ showFile(mCurPicData); } +void PictureViewer2::nextSlide(){ + if(mPicData.isEmpty()){ + return; + } + if(mNextSlideCtr < mPicData.count()){ + QString fullPath = mPicData.at(mNextSlideCtr).at(0).toString(); + int fId = mPicData.at(mNextSlideCtr).at(1).toInt(); + PicData pd = picData(fullPath, fId); + setFile(pd); + ++mNextSlideCtr; + }else{ + mNextSlideCtr = 0; + QString fullPath = mPicData.at(mNextSlideCtr).at(0).toString(); + int fId = mPicData.at(mNextSlideCtr).at(1).toInt(); + PicData pd = picData(fullPath, fId); + setFile(pd); + ++mNextSlideCtr; + } +} + void PictureViewer2::showFile(const PicData &file){ if(file.isEmpty()){ return; -- cgit v1.2.3-70-g09d2