diff options
-rw-r--r-- | pictureswidget.cpp | 15 | ||||
-rw-r--r-- | pictureswidget.h | 4 | ||||
-rw-r--r-- | pictureviewer2.cpp | 68 | ||||
-rw-r--r-- | pictureviewer2.h | 18 | ||||
-rw-r--r-- | shemov.cpp | 1 |
5 files changed, 91 insertions, 15 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 907b33f..2d56571 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -27,16 +27,17 @@ #include "mappingtreemodel.h" #include "smglobals.h" -PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleBase(tr("Picture archive")) { +PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent), mWindowTitleBase(tr("Picture archive")), mPicViewerA(0) { //setup gui QSplitter *splitter = new QSplitter; mMappingTree = new MappingTreeWidget; mPictureView = new PictureView; connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureView, SLOT(mappingChanged(int))); - //emit needWindowtitleChange(QString) when mapping selection changes + //change window title when mapping selection changes connect(mMappingTree, SIGNAL(mappingChanged(int)), this, SLOT(constructWindowTitle())); connect(mPictureView, SIGNAL(newFileMappigs()), this, SLOT(setMappingColors())); connect(mPictureView, SIGNAL(editPicsMappings()), this, SLOT(editMappings())); + connect(mPictureView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(showInPicViewer(QModelIndex))); splitter->addWidget(mMappingTree); splitter->addWidget(mPictureView); splitter->setStretchFactor(0, 1); @@ -89,6 +90,16 @@ void PicturesWidget::constructWindowTitle(){ emit needWindowTitleChange(windowTitle); } +void PicturesWidget::showInPicViewer(const QModelIndex &idx){ + if(!idx.isValid()){ + return; + } + mPicViewer->setFile(idx.data(PicFilesModel::FullPathRole).toString()); + if(mPicViewerA){ + mPicViewerA->setChecked(true); + } +} + PictureView::PictureView(QWidget *parent) : QTreeView(parent) { //setup model mModel = new PicFilesModel(QStringList() << tr("Filename") << tr("SizeNum") << tr("Format") << tr("Full Path") << tr("Id") << tr("Added") << tr("Md5Sum") << tr("Size"), this); diff --git a/pictureswidget.h b/pictureswidget.h index 1b7fa09..fd0b5ac 100644 --- a/pictureswidget.h +++ b/pictureswidget.h @@ -26,12 +26,14 @@ class QHideEvent; class QEvent; class HoverWindow; class PictureViewer2; +class QAction; class PicturesWidget : public QWidget { Q_OBJECT public: explicit PicturesWidget(QWidget *parent = 0); PictureView *picView() { return mPictureView; } + void setPicViewerAction(QAction *action) { mPicViewerA = action; } public slots: void showPicViewer(bool toggled); @@ -40,6 +42,7 @@ class PicturesWidget : public QWidget { void setMappingColors(); void editMappings(); void constructWindowTitle(); + void showInPicViewer(const QModelIndex &idx); signals: void needWindowTitleChange(QString); @@ -50,6 +53,7 @@ class PicturesWidget : public QWidget { PictureViewer2 *mPicViewer; MappingEditDialog *mEditDialog; const QString mWindowTitleBase; + QAction *mPicViewerA; }; class PictureView : public QTreeView { diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index 0c2530e..c126c2c 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -10,15 +10,17 @@ #include <QGraphicsScene> #include <QGraphicsPixmapItem> #include <QImage> +#include <QWheelEvent> #include "pictureviewer2.h" -const QString PictureViewer2::mDefaultFile(":/picgone.png"); - -PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) { +PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0), mCurPos(0), mDefaultFile(":/picgone.png") { //behave like QDialog, but don't be one... setWindowFlags(QFlags<Qt::WindowType>(0x1|0x2|0x1000|0x2000|0x10000|0x8000000)); + //initial file list + mFiles = QStringList() << mDefaultFile; + //setup gui mScene = new QGraphicsScene(this); setScene(mScene); @@ -28,10 +30,58 @@ PictureViewer2::PictureViewer2(QWidget *parent) : QGraphicsView(parent), mCur(0) setMinimumSize(mMinimunSize); move(50, 50); setVisible(false); - setFile(); + showFile(mFiles.at(mCurPos)); +} + +void PictureViewer2::addFiles(const QStringList &files, bool clear){ + if(clear){ + mFiles.clear(); + mFiles = files; + mCurPos = 0; + return; + } + foreach(const QString &f, files){ + if(!mFiles.contains(f)){ + mFiles.append(f); + } + } } -void PictureViewer2::setFile(const QString file){ +void PictureViewer2::setFile(const QString &file){ + addFiles(QStringList() << file, true); + showFile(mFiles.at(mCurPos)); +} + +QSize PictureViewer2::sizeHint() const{ + return mMinimunSize; +} + +void PictureViewer2::next(){ + if(mCurPos + 1 >= mFiles.size()){ + return; + } + ++mCurPos; + showFile(mFiles.at(mCurPos)); +} + +void PictureViewer2::previous(){ + if(mCurPos - 1 < 0){ + return; + } + --mCurPos; + showFile(mFiles.at(mCurPos)); +} + +void PictureViewer2::wheelEvent(QWheelEvent *event){ + int steps = event->delta() / 8 / 15; + if(steps < 0){ + next(); + }else{ + previous(); + } +} + +void PictureViewer2::showFile(const QString file){ QPixmap pixmap(file); if(pixmap.isNull()){ return; @@ -45,9 +95,13 @@ void PictureViewer2::setFile(const QString file){ mCur = 0; } mCur = new QGraphicsPixmapItem(pixmap); + float cX = width() - pixmap.width() / 2; + float cY = height() - pixmap.height() / 2; + mCur->setPos(QPointF(cX, cY)); mScene->addItem(mCur); } + void PictureViewer2::setCurPalette(const QPixmap &pic){ QPoint val1 = QPoint(qrand() % pic.width(), qrand() % pic.height()); QPoint val2 = QPoint(qrand() % pic.width(), qrand() % pic.height()); @@ -59,7 +113,3 @@ void PictureViewer2::setCurPalette(const QPixmap &pic){ g.setColorAt(1, c2); setBackgroundBrush(QBrush(g)); } - -QSize PictureViewer2::sizeHint() const{ - return mMinimunSize; -} diff --git a/pictureviewer2.h b/pictureviewer2.h index 7b106bf..6c9035a 100644 --- a/pictureviewer2.h +++ b/pictureviewer2.h @@ -13,16 +13,25 @@ class QGraphicsScene; class QGraphicsPixmapItem; +class QWheelEvent; class PictureViewer2 : public QGraphicsView { Q_OBJECT public: - explicit PictureViewer2(QWidget *parent = 0); //, Qt::WindowFlags f = 0); - void setFiles(const QStringList &files) { mFiles = files; } + explicit PictureViewer2(QWidget *parent = 0); + void addFiles(const QStringList &files, bool clear = true); + void setFile(const QString &file); virtual QSize sizeHint() const; + public slots: + void next(); + void previous(); + + protected: + void wheelEvent(QWheelEvent *event); + private slots: - void setFile(const QString file = mDefaultFile); + void showFile(const QString file); private: void setupDialog(); @@ -32,7 +41,8 @@ class PictureViewer2 : public QGraphicsView { QGraphicsScene *mScene; QSize mMinimunSize; QGraphicsPixmapItem *mCur; - static const QString mDefaultFile; + int mCurPos; + const QString mDefaultFile; }; #endif // PICTUREVIEWER2_H @@ -616,6 +616,7 @@ void SheMov::createActions(){ mTogglePicV2A->setCheckable(true); connect(mTogglePicV2A, SIGNAL(toggled(bool)), mPicWidget, SLOT(showPicViewer(bool))); mTogglePicV2A->setChecked(false); + mPicWidget->setPicViewerAction(mTogglePicV2A); //don't add actions with checkable(true) unless you know what you're doing! mPicActionGroup = new QActionGroup(this); mPicActionGroup->addAction(mDeletePicFromA); |