diff options
-rw-r--r-- | picfilesmodel.cpp | 15 | ||||
-rw-r--r-- | picfilesmodel.h | 3 | ||||
-rw-r--r-- | pictureviewer2.cpp | 63 | ||||
-rw-r--r-- | pictureviewer2.h | 6 |
4 files changed, 81 insertions, 6 deletions
diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index 3eff4cb..ec1b82d 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -305,6 +305,19 @@ void PicFilesModel::allPicIds(){ cur << q.value(0) << q.value(1) << q.value(2); mAllPics << cur; } + mCurrentPics = &mAllPics; +} + +void PicFilesModel::recentPicIds(){ + mRecentPics.clear(); + mCurrentBatch = 0; + QSqlQuery q("SELECT tfilename, cmd5sum, ipicsid FROM pics WHERE dtadded > now() - interval '6 months' ORDER BY random()", mDb); + while(q.next()){ + QList<QVariant> cur; + cur << q.value(0) << q.value(1) << q.value(2); + mRecentPics << cur; + } + mCurrentPics = &mRecentPics; } QList<QList<QVariant> > PicFilesModel::getNextBatch(){ @@ -312,7 +325,7 @@ QList<QList<QVariant> > PicFilesModel::getNextBatch(){ mCurrentBatch = 0; } int start = mCurrentBatch * 100; - QList<QList<QVariant> > res = mAllPics.mid(start, 100); + QList<QList<QVariant> > res = mCurrentPics->mid(start, 100); QList<QList<QVariant> > retval; for(QList<QList<QVariant> >::const_iterator it = res.constBegin(); it != res.constEnd(); ++it){ QList<QVariant> c = *it; diff --git a/picfilesmodel.h b/picfilesmodel.h index c64a70c..8af7bda 100644 --- a/picfilesmodel.h +++ b/picfilesmodel.h @@ -34,6 +34,7 @@ class PicFilesModel : public SmTreeModel { SmTreeItem *findRecursive(SmTreeItem *start, const QVariant &name, const QVariant id) const; QList<MappingData> mappingDataFromFiles(const QList<int> fileIds) const; void allPicIds(); + void recentPicIds(); QList<QList<QVariant> > getNextBatch(); public slots: @@ -47,6 +48,8 @@ class PicFilesModel : public SmTreeModel { QString mMappingsQS; QList<int> mMappingIds; QList<QList<QVariant> > mAllPics; + QList<QList<QVariant> > mRecentPics; + QList<QList<QVariant> > *mCurrentPics; int mCurrentBatch; }; diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 2640c2f..2eb4566 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -61,10 +61,12 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) //picture show mSlideTimer = new QTimer(this); mSlideTimerAll = new QTimer(this); + mSlideTimerRecent = new QTimer(this); mCurTimer = mSlideTimer; mSlideTimerAllRestart = true; connect(mSlideTimer, SIGNAL(timeout()), this, SLOT(next())); connect(mSlideTimerAll, SIGNAL(timeout()), this, SLOT(nextFromAll())); + connect(mSlideTimerRecent, SIGNAL(timeout()), this, SLOT(nextFromRecent())); //models + dialogs mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); @@ -231,6 +233,7 @@ void PictureViewer2::stopSlide(){ mCurTimer->stop(); mSlideStopC->setDefaultTextColor(Qt::darkGreen); mSlideAllC->setDefaultTextColor(mDefaultTextColor); + mSlideRecentC->setDefaultTextColor(mDefaultTextColor); mSlideC->setDefaultTextColor(mDefaultTextColor); mShuffleC->setDefaultTextColor(mDefaultTextColor); mShuffle = false; @@ -256,12 +259,26 @@ void PictureViewer2::startSlideAll(){ mSlideStopC->setDefaultTextColor(mDefaultTextColor); mSlideAllC->setDefaultTextColor(Qt::darkGreen); mSlideC->setDefaultTextColor(mDefaultTextColor); + mSlideRecentC->setDefaultTextColor(mDefaultTextColor); mShuffleC->setDefaultTextColor(mDefaultTextColor); mShuffle = false; mSlideTimerAllRestart = true; mCurTimer->start(5000); } +void PictureViewer2::startSlideRecent(){ + mCurTimer->stop(); + mCurTimer = mSlideTimerRecent; + mSlideStopC->setDefaultTextColor(mDefaultTextColor); + mSlideAllC->setDefaultTextColor(mDefaultTextColor); + mSlideC->setDefaultTextColor(mDefaultTextColor); + mShuffleC->setDefaultTextColor(mDefaultTextColor); + mSlideRecentC->setDefaultTextColor(Qt::darkGreen); + mShuffle = false; + mSlideTimerRecentRestart = true; + mCurTimer->start(5000); +} + void PictureViewer2::toggleSlide(bool slide){ if(slide){ @@ -273,6 +290,7 @@ void PictureViewer2::toggleSlide(bool slide){ void PictureViewer2::slide(bool){ mSlideTimerAll->stop(); + mSlideTimerRecent->stop(); mCurTimer = mSlideTimer; if(mSlideTimer->isActive()){ mSlideTimer->stop(); @@ -285,17 +303,30 @@ void PictureViewer2::slide(bool){ void PictureViewer2::slideThrouhghAll(bool){ mSlideTimer->stop(); + mSlideTimerRecent->stop(); mCurTimer = mSlideTimerAll; mShowMappingItem = true; if(mSlideTimerAll->isActive()){ mSlideTimerAll->stop(); }else{ - mSlideTimer->stop(); mSlideTimerAllRestart = true; mSlideTimerAll->start(5000); } } +void PictureViewer2::slideThrougRecent(bool){ + mSlideTimer->stop(); + mSlideTimerAll->stop(); + mCurTimer = mSlideTimerRecent; + mShowMappingItem = true; + if(mSlideTimerRecent->isActive()){ + mSlideTimerRecent->stop(); + }else{ + mSlideTimerRecentRestart = true; + mSlideTimerRecent->start(5000); + } +} + void PictureViewer2::readSettings(){ QSettings s; mUseGradient = s.value("ui/pvgradient").toBool(); @@ -440,6 +471,8 @@ void PictureViewer2::doControl(QGraphicsItem *item){ startSlide(); }else if(curItem == mSlideAllC){ startSlideAll(); + }else if(curItem == mSlideRecentC){ + startSlideRecent(); } } } @@ -666,7 +699,23 @@ void PictureViewer2::nextFromAll(){ mPicFilesModel->allPicIds(); mSlideTimerAllRestart = false; setNextBatch(); - mSlideTimerAll->start(); + mSlideTimerAll->start(5000); + } + if(mCurPos == mFiles.size()){ + setNextBatch(); + } + mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); + showFile(mFiles.at(mCurPos)); + ++mCurPos; +} + +void PictureViewer2::nextFromRecent(){ + if(mSlideTimerRecentRestart){ + mSlideTimerRecent->stop(); + mPicFilesModel->recentPicIds(); + mSlideTimerRecentRestart = false; + setNextBatch(); + mSlideTimerRecent->start(5000); } if(mCurPos == mFiles.size()){ setNextBatch(); @@ -677,7 +726,7 @@ void PictureViewer2::nextFromAll(){ } void PictureViewer2::constructControlItem(){ - QStringList controls = QStringList() << "Next (>)" << "Previous (<)" << "Skip forward (C->)" << "Skip back (C-<)" << "Shuffle (C-R)" << "Stop Slide <SP>" << "Slide <SP>" << "Slide all <C-SP>"; + QStringList controls = QStringList() << "Next (>)" << "Previous (<)" << "Skip forward (C->)" << "Skip back (C-<)" << "Shuffle (C-R)" << "Stop Slide <SP>" << "Slide <SP>" << "Slide all <C-SP>" << "Slide recent"; QFont f = QFont(); f.setPointSize(14); f.setBold(true); @@ -737,6 +786,10 @@ void PictureViewer2::constructControlItem(){ mSlideAllC->setFont(f); mSlideAllC->setPlainText(controls.at(7)); mSlideAllC->moveBy(textLeftMargin, 10 * textFactor); + mSlideRecentC = new QGraphicsTextItem(mBoundingRectItem); + mSlideRecentC->setFont(f); + mSlideRecentC->setPlainText(controls.at(8)); + mSlideRecentC->moveBy(textLeftMargin, 11 * textFactor); } void PictureViewer2::setGradient(const QPixmap &pic){ @@ -752,14 +805,14 @@ void PictureViewer2::setGradient(const QPixmap &pic){ } void PictureViewer2::setNextBatch(){ - mSlideTimerAll->stop(); + mCurTimer->stop(); mFiles.clear(); QList<QList<QVariant> > data = mPicFilesModel->getNextBatch(); foreach(QList<QVariant> l, data){ addFile(l.value(0).toString(), l.value(1).toInt()); } mCurPos = 0; - mSlideTimerAll->start(); + mCurTimer->start(); } QTextDocument *PictureViewer2::treeToString(const SmTreeItem *root) const{ diff --git a/pictureviewer2.h b/pictureviewer2.h index 31c5bb3..63b020d 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -60,9 +60,11 @@ class PictureViewer2 : public QGraphicsView { void stopSlide(); void startSlide(); void startSlideAll(); + void startSlideRecent(); void toggleSlide(bool slide); void slide(bool); void slideThrouhghAll(bool); + void slideThrougRecent(bool); void readSettings(); void writeSettings(); void shuffle(); @@ -89,6 +91,7 @@ class PictureViewer2 : public QGraphicsView { void constructMappingItem(const PicData &file); void docFromTree(SmTreeItem *start, QTextCursor *cur, int indent); void nextFromAll(); + void nextFromRecent(); private: void constructControlItem(); @@ -108,8 +111,10 @@ class PictureViewer2 : public QGraphicsView { int mCursorOffset; QTimer *mSlideTimer; QTimer *mSlideTimerAll; + QTimer *mSlideTimerRecent; QTimer *mCurTimer; bool mSlideTimerAllRestart; + bool mSlideTimerRecentRestart; const static QString mDefaultFile; PictureViewer2Item *mFnItem; PictureViewer2Item *mMappingItem; @@ -122,6 +127,7 @@ class PictureViewer2 : public QGraphicsView { QGraphicsTextItem *mSlideStopC; QGraphicsTextItem *mSlideC; QGraphicsTextItem *mSlideAllC; + QGraphicsTextItem *mSlideRecentC; bool mUseGradient; QColor mBgColor; QColor mDefaultTextColor; |