summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--picfilesmodel.cpp28
-rw-r--r--picfilesmodel.h4
-rw-r--r--pictureswidget.cpp1
-rw-r--r--pictureviewer2.cpp83
-rw-r--r--pictureviewer2.h15
-rw-r--r--shemov.cpp21
-rw-r--r--shemov.h2
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;
diff --git a/shemov.cpp b/shemov.cpp
index 2655bd3..e080039 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);
diff --git a/shemov.h b/shemov.h
index 5675aeb..b19ba77 100644
--- a/shemov.h
+++ b/shemov.h
@@ -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;