diff options
author | Arno <arno@disconnect.de> | 2016-03-29 20:29:26 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-03-29 20:29:26 +0200 |
commit | aba573026ec3ca79e30d0350a645d91169421443 (patch) | |
tree | e7bbb974bbd72749d51556f20aae135b16ea3d47 | |
parent | bc11672a2bc4140f67476b79fc6b427f4a5cc4ec (diff) | |
download | SheMov-aba573026ec3ca79e30d0350a645d91169421443.tar.gz SheMov-aba573026ec3ca79e30d0350a645d91169421443.tar.bz2 SheMov-aba573026ec3ca79e30d0350a645d91169421443.zip |
Make the SlideDialog do somethin
Well, implement functionality. Seems to work as intended.
-rw-r--r-- | picfilesmodel.cpp | 41 | ||||
-rw-r--r-- | picfilesmodel.h | 4 | ||||
-rw-r--r-- | pictureviewer2.cpp | 66 | ||||
-rw-r--r-- | pictureviewer2.h | 17 | ||||
-rw-r--r-- | shemov.cpp | 2 |
5 files changed, 125 insertions, 5 deletions
diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index 482af09..11d8f43 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -301,6 +301,47 @@ QList<int> PicFilesModel::mappingPIdsFromFiles(QList<int> fileIds) const{ return retval; } +void PicFilesModel::selectFromAll(){ + mAllPics.clear(); + QSqlQuery q("SELECT tfilename, cmd5sum, ipicsid FROM pics", mDb); + while(q.next()){ + QList<QVariant> cur; + cur << q.value(0) << q.value(1) << q.value(2); + mAllPics << cur; + } + mCurrentPics = &mAllPics; +} + +void PicFilesModel::selectFromRecent(int days){ + mAllPics.clear(); + QString qTempl = QString("SELECT tfilename, cmd5sum, ipicsid FROM pics WHERE dtadded > now() - interval '%1 days'").arg(QString::number(days)); + QSqlQuery q(qTempl, mDb); + while(q.next()){ + QList<QVariant> cur; + cur << q.value(0) << q.value(1) << q.value(2); + mAllPics << cur; + } + mCurrentPics = &mAllPics; +} + +void PicFilesModel::selectFromSelection(QList<QVariant> ids){ + mAllPics.clear(); + QStringList idQS; + foreach (QVariant i, ids){ + idQS << QString::number(i.toInt()); + } + QString inPart = idQS.join(','); + QString qTempl = QString("SELECT tfilename, cmd5sum, ipicsid FROM pics, pics_mappings WHERE pics_mappings.imappings_parents_id IN (%1) AND pics_mappings.ipics_id = pics.ipicsid").arg(inPart); + QSqlQuery q(qTempl, mDb); + while(q.next()){ + QList<QVariant> cur; + cur << q.value(0) << q.value(1) << q.value(2); + mAllPics << cur; + } + mCurrentPics = &mAllPics; +} + +// delete this func once the one above works void PicFilesModel::allPicIds(){ mAllPics.clear(); mCurrentBatch = 0; diff --git a/picfilesmodel.h b/picfilesmodel.h index 8af7bda..6e68a74 100644 --- a/picfilesmodel.h +++ b/picfilesmodel.h @@ -33,9 +33,13 @@ class PicFilesModel : public SmTreeModel { SmTreeItem *mappingTreeFromFile(int fileId) const; SmTreeItem *findRecursive(SmTreeItem *start, const QVariant &name, const QVariant id) const; QList<MappingData> mappingDataFromFiles(const QList<int> fileIds) const; + void selectFromAll(); + void selectFromRecent(int days); + void selectFromSelection(QList<QVariant> ids); void allPicIds(); void recentPicIds(); QList<QList<QVariant> > getNextBatch(); + QList<QList<QVariant> > allPics() const { return mAllPics; } public slots: void populate(); diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index ead82ea..d95602a 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -32,16 +32,17 @@ #include <QFile> #include <QTemporaryFile> #include <QMessageBox> -#include <QCheckBox> #include <QRadioButton> #include <QGroupBox> -#include <QSpinBox> #include <QPushButton> #include <QVBoxLayout> #include <QHBoxLayout> #include <QLabel> #include <QGridLayout> +#include <random> +#include <chrono> + #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<QVariant> 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<QVariant> 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; diff --git a/pictureviewer2.h b/pictureviewer2.h index 730296f..f8e7a06 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -14,6 +14,8 @@ #include <QGraphicsItem> #include <QStaticText> #include <QDialog> +#include <QSpinBox> +#include <QCheckBox> class PictureViewerGraphicsScene; class BoundingRectItem; @@ -36,6 +38,7 @@ class QLabel; class QPushButton; class QSpinBox; class MappingEditWidget; +class PictureViewerSlideDlg; typedef QList<QVariant> PicData; typedef QList<QList<QVariant> > PicDataList; @@ -83,6 +86,7 @@ class PictureViewer2 : public QGraphicsView { void markCurrent(); void clearMarks(); void doControl(QGraphicsItem *item); + void showSlide(); void doSlide(); protected: @@ -94,6 +98,7 @@ class PictureViewer2 : public QGraphicsView { virtual void resizeEvent(QResizeEvent *event); private slots: + void nextSlide(); void showFile(const PicData &data); void constructInfoItem(const PicData &file, QSize picSize, bool converted = false); void constructMappingItem(const PicData &file); @@ -104,6 +109,7 @@ class PictureViewer2 : public QGraphicsView { private: void constructControlItem(); void setGradient(const QPixmap &pic); + void showNext(); void setNextBatch(); QTextDocument *treeToString(const SmTreeItem *root) const; void treeToStringRecursive(const SmTreeItem *parent, QTextCursor *cursor, int indent) const; @@ -113,10 +119,17 @@ class PictureViewer2 : public QGraphicsView { PicDataList mMarkedFiles; PictureViewerGraphicsScene *mScene; QGraphicsPixmapItem *mCur; + PictureViewerSlideDlg *mSlideDlg; + QList<QList<QVariant> > mPicData; + //QStringList mFullPaths; + int mTotal; + int mNextSlideCtr; + int mCurPos; int mConfigInfoPos; int mConfigMapPos; int mCursorOffset; + QTimer *mTimer; QTimer *mSlideTimer; QTimer *mSlideTimerAll; QTimer *mSlideTimerRecent; @@ -162,6 +175,10 @@ class PictureViewerSlideDlg : public QDialog { public: enum SlideResult { SlideAll, SlideRecent, SlideSelection, NoSlide }; explicit PictureViewerSlideDlg(QWidget *parent = 0, Qt::WindowFlags f = 0); + int result() const { return mSlideResult; } + int days() const { return mRecentDays->value(); } + bool shuffle() const { return mShuffle->isChecked(); } + MappingEditWidget *mappingEditWidget() const { return mMappingEditWidget; } private slots: void slideAllToggled(bool checked); @@ -516,7 +516,7 @@ void SheMov::createActions(){ mPVSlideDlgA = new QAction(QIcon(":/hourglass_figure.png"), tr("Show slide dialog..."), this); mPVSlideDlgA->setData(PictureViewer2::SlideAction); mPicWidget->picView()->addAction(mPVSlideDlgA); - connect(mPVSlideDlgA, SIGNAL(triggered()), picViewer, SLOT(doSlide())); + connect(mPVSlideDlgA, SIGNAL(triggered()), picViewer, SLOT(showSlide())); mPicWidget->picView()->addAction(createSeparator()); // Show/Hide Picture Viewer |