diff options
-rw-r--r-- | picfilesmodel.cpp | 28 | ||||
-rw-r--r-- | picfilesmodel.h | 4 | ||||
-rw-r--r-- | pictureswidget.cpp | 1 | ||||
-rw-r--r-- | pictureviewer2.cpp | 83 | ||||
-rw-r--r-- | pictureviewer2.h | 15 | ||||
-rw-r--r-- | shemov.cpp | 21 | ||||
-rw-r--r-- | shemov.h | 2 |
7 files changed, 144 insertions, 10 deletions
diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index dfe0f2d..3eff4cb 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -296,6 +296,34 @@ QList<int> PicFilesModel::mappingPIdsFromFiles(QList<int> fileIds) const{ return retval; } +void PicFilesModel::allPicIds(){ + mAllPics.clear(); + mCurrentBatch = 0; + QSqlQuery q("SELECT tfilename, cmd5sum, ipicsid FROM pics ORDER BY random()", mDb); + while(q.next()){ + QList<QVariant> cur; + cur << q.value(0) << q.value(1) << q.value(2); + mAllPics << cur; + } +} + +QList<QList<QVariant> > PicFilesModel::getNextBatch(){ + if(mCurrentBatch * 100 >= mAllPics.count()){ + mCurrentBatch = 0; + } + int start = mCurrentBatch * 100; + QList<QList<QVariant> > res = mAllPics.mid(start, 100); + QList<QList<QVariant> > retval; + for(QList<QList<QVariant> >::const_iterator it = res.constBegin(); it != res.constEnd(); ++it){ + QList<QVariant> c = *it; + QList<QVariant> item; + item << Helper::createArchivePath(c.value(0).toString(), c.value(1).toString()) << c.value(2); + retval << item; + } + ++mCurrentBatch; + return retval; +} + void PicFilesModel::populate(){ SmTreeItem *root = new SmTreeItem(NumFields); QStringList idList; diff --git a/picfilesmodel.h b/picfilesmodel.h index ad28e1a..c64a70c 100644 --- a/picfilesmodel.h +++ b/picfilesmodel.h @@ -33,6 +33,8 @@ 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 allPicIds(); + QList<QList<QVariant> > getNextBatch(); public slots: void populate(); @@ -44,6 +46,8 @@ class PicFilesModel : public SmTreeModel { QString mPopulateQS; QString mMappingsQS; QList<int> mMappingIds; + QList<QList<QVariant> > mAllPics; + int mCurrentBatch; }; #endif // PICFILESMODEL_H diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 59007ca..8e6dc7b 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -213,6 +213,7 @@ void PictureView::setPVData(int replace){ void PictureView::setPVAll(){ PicDataList data = mModel->allFiles(); mPV->addFiles(data, true); + mPV->setSlideSelected(); } void PictureView::setHoverWinVisible(bool visible) const { diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 7033a52..d8cae44 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -56,7 +56,11 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) //picture show mSlideTimer = new QTimer(this); + mSlideTimerAll = new QTimer(this); + mCurTimer = mSlideTimer; + mSlideTimerAllRestart = true; connect(mSlideTimer, SIGNAL(timeout()), this, SLOT(next())); + connect(mSlideTimerAll, SIGNAL(timeout()), this, SLOT(nextFromAll())); //models + dialogs mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); @@ -113,6 +117,11 @@ void PictureViewer2::addFiles(const QStringList &files, bool clear){ addFiles(pd, clear); } +void PictureViewer2::addFile(const QString &fullPath, int fileId){ + mFiles << picData(fullPath, fileId); +} + + void PictureViewer2::addFiles(const QString &dir, bool clear){ QFileInfo fi(dir); if(!fi.isDir()){ @@ -145,7 +154,12 @@ void PictureViewer2::setPixmap(const QPixmap &pm){ setFile(tf.fileName()); } -PicData PictureViewer2::picData(const QString &fullPath){ +void PictureViewer2::setSlideSelected(){ + mCurTimer = mSlideTimer; + mSlideA->setChecked(true); +} + +PicData PictureViewer2::picData(const QString &fullPath, int fileId){ QFileInfo fi(fullPath); if(!fi.exists()){ return PicData(); @@ -155,7 +169,7 @@ PicData PictureViewer2::picData(const QString &fullPath){ retval << fi.fileName() << fi.size(); retval << Helper::mimeType(fullPath); retval << fi.absoluteFilePath(); - retval << -1 << QDateTime(); + retval << fileId << QDateTime(); retval << Helper::md5Sum(fullPath); QLocale l; retval << l.toString(fi.size()); @@ -211,14 +225,39 @@ void PictureViewer2::selectPic(const QString &path){ } } +void PictureViewer2::toggleSlide(bool slide){ + if(slide){ + mCurTimer->start(5000); + }else{ + mCurTimer->stop(); + } +} + void PictureViewer2::slide(bool){ - if(mSlideTimer->isActive()){ + mSlideTimerAll->stop(); + mCurTimer = mSlideTimer; + if(mSlideTimer->isActive()){ mSlideTimer->stop(); }else{ + PicDataList data = mPicFilesModel->allFiles(); + addFiles(data, true); mSlideTimer->start(5000); } } +void PictureViewer2::slideThrouhghAll(bool){ + mSlideTimer->stop(); + mCurTimer = mSlideTimerAll; + mShowMappingItem = true; + if(mSlideTimerAll->isActive()){ + mSlideTimerAll->stop(); + }else{ + mSlideTimer->stop(); + mSlideTimerAllRestart = true; + mSlideTimerAll->start(5000); + } +} + void PictureViewer2::readSettings(){ QSettings s; mUseGradient = s.value("ui/pvgradient").toBool(); @@ -253,9 +292,15 @@ void PictureViewer2::initActions(){ if(a->data().toInt() == HideAction){ mHideA = a; } - if(a->data().toInt() == SlideAction){ + if(a->data().toInt() == SlideSelectedAction){ mSlideA = a; } + if(a->data().toInt() == ToggleSlideAction){ + mToggleSlideA = a; + } + if(a->data().toInt() == SlideAllAction){ + mSlideAllA = a; + } if(a->data().toInt() == MarkAction){ mMarkA = a; } @@ -368,7 +413,7 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ mHideA->toggle(); } if(e->key() == Qt::Key_Space){ - mSlideA->toggle(); + mToggleSlideA->toggle(); } if(e->key() == Qt::Key_M){ markCurrent(); @@ -394,7 +439,6 @@ void PictureViewer2::keyPressEvent(QKeyEvent *e){ void PictureViewer2::showEvent(QShowEvent *e){ mHideA->setChecked(true); - //mSize = size(); QGraphicsView::showEvent(e); } @@ -532,6 +576,22 @@ void PictureViewer2::docFromTree(SmTreeItem *start, QTextCursor *cur, int indent } } +void PictureViewer2::nextFromAll(){ + if(mSlideTimerAllRestart){ + mSlideTimerAll->stop(); + mPicFilesModel->allPicIds(); + mSlideTimerAllRestart = false; + setNextBatch(); + mSlideTimerAll->start(); + } + if(mCurPos == mFiles.size()){ + setNextBatch(); + } + mMarkA->setChecked(mMarkedFiles.contains(mFiles.at(mCurPos))); + showFile(mFiles.at(mCurPos)); + ++mCurPos; +} + void PictureViewer2::setGradient(const QPixmap &pic){ QPoint val1 = QPoint(qrand() % pic.width(), qrand() % pic.height()); QPoint val2 = QPoint(qrand() % pic.width(), qrand() % pic.height()); @@ -544,6 +604,17 @@ void PictureViewer2::setGradient(const QPixmap &pic){ setBackgroundBrush(QBrush(g)); } +void PictureViewer2::setNextBatch(){ + mSlideTimerAll->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(); +} + QTextDocument *PictureViewer2::treeToString(const SmTreeItem *root) const{ QTextDocument *retval = new QTextDocument; retval->setIndentWidth(2); diff --git a/pictureviewer2.h b/pictureviewer2.h index bfc1977..c9a1f2a 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -34,11 +34,12 @@ typedef QList<QList<QVariant> > PicDataList; class PictureViewer2 : public QGraphicsView { Q_OBJECT public: - enum AssocActions { SlideAction, HideAction, MarkAction, DeleteAction, SkipForwardAction, SkipBackwardAction }; + enum AssocActions { ToggleSlideAction, SlideSelectedAction, SlideAllAction, HideAction, MarkAction, DeleteAction, SkipForwardAction, SkipBackwardAction }; explicit PictureViewer2(QWidget *parent = 0); void addFiles(const PicDataList &files, bool clear = true); void addFiles(const QString &dir, bool clear = true); void addFiles(const QStringList &files, bool clear = true); + void addFile(const QString &fullPath, int fileId = -1); void setFile(const PicData &file); void setFile(QString fullPath = mDefaultFile); void setPixmap(const QPixmap &pm); @@ -46,15 +47,18 @@ class PictureViewer2 : public QGraphicsView { void setShowMappingItem(bool show) { mShowMappingItem = show; } void setShowMarkItem(bool show) { mShowMarkItem = show; } void setCurrentDir(const QString &curDir) { mCurrentDir = curDir; } + void setSlideSelected(); const PicDataList marked() { return mMarkedFiles; } - PicData picData(const QString &fullPath); + PicData picData(const QString &fullPath, int fileId = -1); public slots: void next(); void previous(); void skip(int amount); void selectPic(const QString &path); + void toggleSlide(bool slide); void slide(bool); + void slideThrouhghAll(bool); void readSettings(); void writeSettings(); void shuffle(); @@ -79,10 +83,12 @@ class PictureViewer2 : public QGraphicsView { void constructInfoItem(const PicData &file, QSize picSize); void constructMappingItem(const PicData &file); void docFromTree(SmTreeItem *start, QTextCursor *cur, int indent); + void nextFromAll(); private: void setupDialog(); void setGradient(const QPixmap &pic); + void setNextBatch(); QTextDocument *treeToString(const SmTreeItem *root) const; void treeToStringRecursive(const SmTreeItem *parent, QTextCursor *cursor, int indent) const; QPointF getPos(PictureViewer2Item *item, int pos, const QPointF &movPos); @@ -95,6 +101,9 @@ class PictureViewer2 : public QGraphicsView { int mConfigInfoPos; int mConfigMapPos; QTimer *mSlideTimer; + QTimer *mSlideTimerAll; + QTimer *mCurTimer; + bool mSlideTimerAllRestart; const static QString mDefaultFile; PictureViewer2Item *mFnItem; PictureViewer2Item *mMappingItem; @@ -103,6 +112,8 @@ class PictureViewer2 : public QGraphicsView { QPointF mInfoPos; QPointF mMappingPos; QAction *mSlideA; + QAction *mToggleSlideA; + QAction *mSlideAllA; QAction *mHideA; QAction *mMarkA; QAction *mDeleteA; @@ -586,13 +586,30 @@ void SheMov::createActions(){ picViewer->addAction(createSeparator()); // Slide + mPVToggleSlideA = new QAction(QIcon(":/chastity_belt.png"), tr("Slide"), this); + mPVToggleSlideA->setCheckable(true); + mPVToggleSlideA->setChecked(false); + mPVToggleSlideA->setData(PictureViewer2::ToggleSlideAction); + QActionGroup *slideGroup = new QActionGroup(this); + slideGroup->setExclusive(true); + connect(mPVToggleSlideA, SIGNAL(toggled(bool)), picViewer, SLOT(toggleSlide(bool))); + connect(mPVToggleSlideA, SIGNAL(toggled(bool)), this, SLOT(setSlide(bool))); mPVSlideA = new QAction(QIcon(":/chastity_belt_with_cuffs.png"), tr("Slide"), this); mPVSlideA->setCheckable(true); - mPVSlideA->setData(PictureViewer2::SlideAction); + mPVSlideA->setData(PictureViewer2::SlideSelectedAction); + mPVSlideA->setChecked(true); connect(mPVSlideA, SIGNAL(toggled(bool)), picViewer, SLOT(slide(bool))); - connect(mPVSlideA, SIGNAL(toggled(bool)), this, SLOT(setSlide(bool))); + slideGroup->addAction(mPVSlideA); + mPVSlideAllA = new QAction(QIcon(":/nipple_up.png"), tr("Slide all"), this); + mPVSlideAllA->setCheckable(true); + mPVSlideAllA->setData(PictureViewer2::SlideAllAction); + connect(mPVSlideAllA, SIGNAL(triggered(bool)), picViewer, SLOT(slideThrouhghAll(bool))); + slideGroup->addAction(mPVSlideAllA); picViewer->addAction(createSeparator()); + picViewer->addAction(mPVToggleSlideA); picViewer->addAction(mPVSlideA); + picViewer->addAction(mPVSlideAllA); + picViewer->addAction(createSeparator()); mPVSkipForwardA = new QAction(tr("Skip 25 forward"), this); connect(mPVSkipForwardA, SIGNAL(triggered()), this, SLOT(skipForward())); mPVSkipForwardA->setData(PictureViewer2::SkipForwardAction); @@ -139,7 +139,9 @@ class SheMov : public QMainWindow { QAction *mPVClearMarksA; QAction *mPVReplaceA; QAction *mPVSelectAllA; + QAction *mPVToggleSlideA; QAction *mPVSlideA; + QAction *mPVSlideAllA; QAction *mPVShuffleA; QAction *mPVCopyToA; QAction *mPVShowNPDialogA; |