diff options
author | Arno <am@disconnect.de> | 2012-03-17 15:15:53 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-03-17 15:15:53 +0100 |
commit | 1e14ae6748f271265dd719ac0766a2da3501a21f (patch) | |
tree | cf1547eb8a55637a8bf1e9a952ce9d07085e0117 | |
parent | e595a9be49615c45f40c57e8385e9fd76bb394e8 (diff) | |
download | SheMov-1e14ae6748f271265dd719ac0766a2da3501a21f.tar.gz SheMov-1e14ae6748f271265dd719ac0766a2da3501a21f.tar.bz2 SheMov-1e14ae6748f271265dd719ac0766a2da3501a21f.zip |
Add keyboard actions to PictureViewer2
Never, ever forget: QVariant() casts to a valid int! Again, this was a
tough one, but maybe I shouldn't drink and program.
PictureViewer2 reacts to Escape and Space. Escape hides it and stops the
slide timer, Space activates the slide timer.
-rw-r--r-- | pictureswidget.cpp | 6 | ||||
-rw-r--r-- | pictureswidget.h | 1 | ||||
-rw-r--r-- | pictureviewer2.cpp | 36 | ||||
-rw-r--r-- | pictureviewer2.h | 8 | ||||
-rw-r--r-- | shemov.cpp | 5 |
5 files changed, 52 insertions, 4 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index b1c144e..b420309 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -87,6 +87,7 @@ void PicturesWidget::constructWindowTitle(){ MappingData selected = mMappingTree->selectedItem(); if(selected.id != -1){ windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.join("/")); + mPictureView->setHoverWinVisible(false); } emit needWindowTitleChange(windowTitle); } @@ -96,6 +97,7 @@ void PicturesWidget::showInPicViewer(const QModelIndex &idx){ if(!real.isValid()){ return; } + PicData pData = mPictureView->filesModel()->dataList(real); mPicViewer->setFile(pData); if(mPicViewerA){ @@ -175,6 +177,10 @@ void PictureView::setPVAll(){ mPV->addFiles(data, true); } +void PictureView::setHoverWinVisible(bool visible) const { + mHoverWin->setVisible(visible); +} + void PictureView::hideEvent(QHideEvent *){ QByteArray pvHeader = header()->saveState(); QSettings s; diff --git a/pictureswidget.h b/pictureswidget.h index 0239560..cdc40b5 100644 --- a/pictureswidget.h +++ b/pictureswidget.h @@ -74,6 +74,7 @@ class PictureView : public QTreeView { void refresh(); void setPVData(int replace = false); void setPVAll(); + void setHoverWinVisible(bool visible) const; protected: virtual void hideEvent(QHideEvent *); diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index d5a6300..a5f250b 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -99,8 +99,8 @@ void PictureViewer2::previous(){ showFile(mFiles.at(mCurPos)); } -void PictureViewer2::slide(){ - if(mSlideTimer->isActive()){ +void PictureViewer2::slide(bool){ + if(mSlideTimer->isActive()){ mSlideTimer->stop(); }else{ mSlideTimer->start(5000); @@ -126,6 +126,22 @@ void PictureViewer2::shuffle(){ std::random_shuffle(mFiles.begin(), mFiles.end()); } +void PictureViewer2::initActions(){ + foreach(QAction *a, actions()){ + //never, ever forget this when casting to int + //an invalid QVariant casts to a valid int! + if(!a->data().isValid()){ + continue; + } + if(a->data().toInt() == HideAction){ + mHideA = a; + } + if(a->data().toInt() == SlideAction){ + mSlideA = a; + } + } +} + void PictureViewer2::wheelEvent(QWheelEvent *event){ int steps = event->delta() / 8 / 15; if(steps < 0){ @@ -143,6 +159,22 @@ void PictureViewer2::contextMenuEvent(QContextMenuEvent *e){ ctxMenu.exec(e->globalPos()); } +void PictureViewer2::keyPressEvent(QKeyEvent *e){ + if(e->key() == Qt::Key_Escape){ + mHideA->toggle(); + } + if(e->key() == Qt::Key_Space){ + mSlideA->toggle(); + } + e->accept(); +} + +void PictureViewer2::hideEvent(QHideEvent *){ + if(mSlideTimer->isActive()){ + mSlideA->toggle(); + } +} + 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 6126930..e18fc18 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -27,6 +27,7 @@ typedef QList<QList<QVariant> > PicDataList; class PictureViewer2 : public QGraphicsView { Q_OBJECT public: + enum AssocActions { SlideAction, HideAction }; explicit PictureViewer2(QWidget *parent = 0); void addFiles(const PicDataList &files, bool clear = true); void setFile(const PicData &file); @@ -35,14 +36,17 @@ class PictureViewer2 : public QGraphicsView { public slots: void next(); void previous(); - void slide(); + void slide(bool); void readSettings(); void writeSettings(); void shuffle(); + void initActions(); protected: virtual void wheelEvent(QWheelEvent *event); virtual void contextMenuEvent(QContextMenuEvent *e); + virtual void keyPressEvent(QKeyEvent *e); + virtual void hideEvent(QHideEvent *); private slots: void showFile(const PicData &data); @@ -63,6 +67,8 @@ class PictureViewer2 : public QGraphicsView { bool mUseGradient; QColor mBgColor; QPointF mInfoPos; + QAction *mSlideA; + QAction *mHideA; }; class PictureViewer2FileinfoItem : public QGraphicsItem { @@ -619,6 +619,7 @@ void SheMov::createActions(){ // viewer actions mPVToggleA = new QAction(QIcon(":/dick_in_cage.png"), tr("Show/Hide Picture Viewer"), this); mPVToggleA->setCheckable(true); + mPVToggleA->setData(PictureViewer2::HideAction); connect(mPVToggleA, SIGNAL(toggled(bool)), mPicWidget, SLOT(showPicViewer(bool))); mPVToggleA->setChecked(false); mPicWidget->picView()->addAction(mPVToggleA); @@ -644,7 +645,8 @@ void SheMov::createActions(){ 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())); + mPVSlideA->setData(PictureViewer2::SlideAction); + connect(mPVSlideA, SIGNAL(toggled(bool)), mPicWidget->picView()->PV(), SLOT(slide(bool))); mPicWidget->picView()->addAction(mPVSlideA); QAction *pv2Sep1 = new QAction(this); pv2Sep1->setSeparator(true); @@ -664,6 +666,7 @@ void SheMov::createActions(){ mPicWidget->setPicViewerAction(mPVToggleA); + mPicWidget->picView()->PV()->initActions(); //don't add actions with checkable(true) unless you know what you're doing! mPicActionGroup = new QActionGroup(this); mPicActionGroup->addAction(mPWDeletePicFromA); |