diff options
author | Arno <am@disconnect.de> | 2012-03-10 07:29:20 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-03-10 07:29:20 +0100 |
commit | 08c7cc837379ae4f085a6cc0d44a8b58bdb5a030 (patch) | |
tree | 50e3a3a69a2abc68d2cbb18f5e8668dba374a40c | |
parent | 8aae1eea458695a19a7ff36bdffbe59c9e7d4cf2 (diff) | |
download | SheMov-08c7cc837379ae4f085a6cc0d44a8b58bdb5a030.tar.gz SheMov-08c7cc837379ae4f085a6cc0d44a8b58bdb5a030.tar.bz2 SheMov-08c7cc837379ae4f085a6cc0d44a8b58bdb5a030.zip |
Slide show
Implement slide show in Pictureviewer2. Slide over all available files
and wrap around when reaching the end of the list.
Also added some more artwork.
-rw-r--r-- | blue_syringe.png | bin | 0 -> 789 bytes | |||
-rw-r--r-- | catheter_with_bag.png | bin | 0 -> 711 bytes | |||
-rw-r--r-- | chastity_belt_with_cuffs.png | bin | 0 -> 960 bytes | |||
-rw-r--r-- | pictureswidget.cpp | 24 | ||||
-rw-r--r-- | pictureswidget.h | 4 | ||||
-rw-r--r-- | pictureviewer2.cpp | 33 | ||||
-rw-r--r-- | pictureviewer2.h | 7 | ||||
-rw-r--r-- | shemov.cpp | 15 | ||||
-rw-r--r-- | shemov.h | 2 | ||||
-rw-r--r-- | shemov.qrc | 3 |
10 files changed, 83 insertions, 5 deletions
diff --git a/blue_syringe.png b/blue_syringe.png Binary files differnew file mode 100644 index 0000000..ac3110a --- /dev/null +++ b/blue_syringe.png diff --git a/catheter_with_bag.png b/catheter_with_bag.png Binary files differnew file mode 100644 index 0000000..9179408 --- /dev/null +++ b/catheter_with_bag.png diff --git a/chastity_belt_with_cuffs.png b/chastity_belt_with_cuffs.png Binary files differnew file mode 100644 index 0000000..c59e953 --- /dev/null +++ b/chastity_belt_with_cuffs.png diff --git a/pictureswidget.cpp b/pictureswidget.cpp index ac44229..8492dd2 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -170,6 +170,11 @@ void PictureView::setPVData(int replace){ mPV->addFiles(pics, replace); } +void PictureView::setPVAll(){ + PicDataList data = mModel->allFiles(); + mPV->addFiles(data, true); +} + void PictureView::hideEvent(QHideEvent *){ QByteArray pvHeader = header()->saveState(); QSettings s; @@ -253,6 +258,8 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr mDeleteMappingsQ->prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); mAddMappingsQ = new QSqlQuery(mDb); mAddMappingsQ->prepare("INSERT INTO pics_mappings(ipics_id, imapping_id) VALUES(:pid, :id)"); + mAllFilesQ = new QSqlQuery(mDb); + mAllFilesQ->prepare("SELECT pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum, pics.ipicsid FROM pics"); } QList<int> PicFilesModel::mappingIds(const QList<QVariant> &fileIds){ @@ -325,6 +332,23 @@ QList<QVariant> PicFilesModel::dataList(const QModelIndex &idx) const{ return retval; } +QList<QList<QVariant> > PicFilesModel::allFiles() const { + QList<QList<QVariant> > retval; + if(!mAllFilesQ->exec()){ + return retval; + } + while(mAllFilesQ->next()){ + QList<QVariant> data; + data << mAllFilesQ->value(0) << mAllFilesQ->value(1) << mAllFilesQ->value(2); // Filename, size and Mime type + data << Helper::createArchivePath(mAllFilesQ->value(0).toString(), mAllFilesQ->value(4).toString()); // full path; + data << mAllFilesQ->value(5) << mAllFilesQ->value(3) << mAllFilesQ->value(4); //Id, added and md5 + QLocale l; + data << l.toString(mAllFilesQ->value(1).toInt()); + retval << data; + } + return retval; +} + void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){ foreach(QPersistentModelIndex pi, files){ mDeleteFileQ->bindValue(":id", pi.data(IdRole)); diff --git a/pictureswidget.h b/pictureswidget.h index f473140..3f2c41f 100644 --- a/pictureswidget.h +++ b/pictureswidget.h @@ -64,12 +64,14 @@ class PictureView : public QTreeView { PicFilesModel *filesModel() { return mModel; } QSortFilterProxyModel *proxy() { return mProxy; } void setPV(PictureViewer2 *pv) { mPV = pv; } + PictureViewer2 *PV() { return mPV; } public slots: void mappingChanged(int mapping); void deletePics(); void refresh(); void setPVData(int replace = false); + void setPVAll(); protected: virtual void hideEvent(QHideEvent *); @@ -107,6 +109,7 @@ class PicFilesModel : public SmTreeModel { Qt::ItemFlags flags(const QModelIndex &) const { return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } QVariant data(const QModelIndex &index, int role) const; QList<QVariant> dataList(const QModelIndex &idx) const; + QList<QList<QVariant> > allFiles() const; void removeFiles(const QList<QPersistentModelIndex> &files); bool changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds); @@ -120,6 +123,7 @@ class PicFilesModel : public SmTreeModel { QSqlQuery *mCurMappingIdsQ; QSqlQuery *mDeleteMappingsQ; QSqlQuery *mAddMappingsQ; + QSqlQuery *mAllFilesQ; QString mCurMappingIdsQS; int mMappingId; QList<int> mCurMappingsIds; diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 3bcc404..1b797d3 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -11,6 +11,9 @@ #include <QGraphicsPixmapItem> #include <QImage> #include <QWheelEvent> +#include <QContextMenuEvent> +#include <QMenu> +#include <QTimer> #include "pictureviewer2.h" #include "pictureswidget.h" @@ -27,6 +30,10 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) initialData[PicFilesModel::FullPath] = mDefaultFile; mFiles << initialData; + //picture show + mSlideTimer = new QTimer(this); + connect(mSlideTimer, SIGNAL(timeout()), this, SLOT(next())); + //setup gui mScene = new QGraphicsScene(this); setScene(mScene); @@ -64,20 +71,30 @@ QSize PictureViewer2::sizeHint() const{ void PictureViewer2::next(){ if(mCurPos + 1 >= mFiles.size()){ - return; + mCurPos = 0; + }else{ + ++mCurPos; } - ++mCurPos; showFile(mFiles.at(mCurPos)); } void PictureViewer2::previous(){ if(mCurPos - 1 < 0){ - return; + mCurPos = mFiles.size() - 1; + }else{ + --mCurPos; } - --mCurPos; showFile(mFiles.at(mCurPos)); } +void PictureViewer2::slide(){ + if(mSlideTimer->isActive()){ + mSlideTimer->stop(); + }else{ + mSlideTimer->start(5000); + } +} + void PictureViewer2::wheelEvent(QWheelEvent *event){ int steps = event->delta() / 8 / 15; if(steps < 0){ @@ -87,6 +104,14 @@ void PictureViewer2::wheelEvent(QWheelEvent *event){ } } +void PictureViewer2::contextMenuEvent(QContextMenuEvent *e){ + QMenu ctxMenu; + foreach(QAction *a, actions()){ + ctxMenu.addAction(a); + } + ctxMenu.exec(e->globalPos()); +} + void PictureViewer2::showFile(const PicData &file){ QPixmap pixmap(file.at(PicFilesModel::FullPath).toString()); if(pixmap.isNull()){ diff --git a/pictureviewer2.h b/pictureviewer2.h index 21e6454..9610da1 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -15,6 +15,8 @@ class QGraphicsScene; class QGraphicsPixmapItem; class QWheelEvent; +class QContextMenuEvent; +class QTimer; typedef QList<QVariant> PicData; typedef QList<QList<QVariant> > PicDataList; @@ -30,9 +32,11 @@ class PictureViewer2 : public QGraphicsView { public slots: void next(); void previous(); + void slide(); protected: - void wheelEvent(QWheelEvent *event); + virtual void wheelEvent(QWheelEvent *event); + virtual void contextMenuEvent(QContextMenuEvent *e); private slots: void showFile(const PicData &file); @@ -46,6 +50,7 @@ class PictureViewer2 : public QGraphicsView { QSize mMinimunSize; QGraphicsPixmapItem *mCur; int mCurPos; + QTimer *mSlideTimer; const QString mDefaultFile; }; @@ -620,6 +620,7 @@ void SheMov::createActions(){ connect(mPVToggleA, SIGNAL(toggled(bool)), mPicWidget, SLOT(showPicViewer(bool))); mPVToggleA->setChecked(false); mPicWidget->picView()->addAction(mPVToggleA); + mPicWidget->picView()->PV()->addAction(mPVToggleA); QSignalMapper *PVAddMapper = new QSignalMapper(this); mPVAddA = new QAction(QIcon(":/used_tampon.png"), tr("Add selected"), this); connect(mPVAddA, SIGNAL(triggered()), PVAddMapper, SLOT(map())); @@ -630,9 +631,23 @@ void SheMov::createActions(){ PVAddMapper->setMapping(mPVReplaceA, true); mPicWidget->picView()->addAction(mPVReplaceA); connect(PVAddMapper, SIGNAL(mapped(int)), mPicWidget->picView(), SLOT(setPVData(int))); + mPVSelectAllA = new QAction(QIcon(":/blue_syringe.png"), tr("Select all pics"), this); + connect(mPVSelectAllA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(setPVAll())); + mPicWidget->picView()->addAction(mPVSelectAllA); + connect(mPVSelectAllA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(setPVAll())); + mPicWidget->picView()->addAction(mPVSelectAllA); + mPicWidget->picView()->PV()->addAction(mPVSelectAllA); QAction *pvSep2 = new QAction(this); pvSep2->setSeparator(true); mPicWidget->picView()->addAction(pvSep2); + mPVSlideA = new QAction(QIcon(":/chastity_belt_with_cuffs.png"), tr("Slide"), this); + mPVSlideA->setCheckable(true); + connect(mPVSlideA, SIGNAL(triggered()), mPicWidget->picView()->PV(), SLOT(slide())); + mPicWidget->picView()->addAction(mPVSlideA); + mPicWidget->picView()->PV()->addAction(mPVSlideA); + QAction *pvSep3 = new QAction(this); + pvSep3->setSeparator(true); + mPicWidget->picView()->addAction(pvSep3); // refresh mPWRefreshA = new QAction(QIcon(":/huge_bra.png"), tr("Refresh"), this); @@ -175,6 +175,8 @@ class SheMov : public QMainWindow { QAction *mPVToggleA; QAction *mPVAddA; QAction *mPVReplaceA; + QAction *mPVSelectAllA; + QAction *mPVSlideA; QActionGroup *mPicActionGroup; //EndActions @@ -37,5 +37,8 @@ <file>dick_in_cage.png</file> <file>clean_tampon.png</file> <file>used_tampon.png</file> + <file>chastity_belt_with_cuffs.png</file> + <file>catheter_with_bag.png</file> + <file>blue_syringe.png</file> </qresource> </RCC> |