summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2012-03-08 07:09:09 +0100
committerArno <am@disconnect.de>2012-03-08 07:09:09 +0100
commitea30d012b7777a2aea1c5e957a7d7566eebef391 (patch)
tree88a1ebdcca7a3184781d4ed4ac29b3892df04d6c
parent57f69839e3bab9ab73f15811374099576216282b (diff)
downloadSheMov-ea30d012b7777a2aea1c5e957a7d7566eebef391.tar.gz
SheMov-ea30d012b7777a2aea1c5e957a7d7566eebef391.tar.bz2
SheMov-ea30d012b7777a2aea1c5e957a7d7566eebef391.zip
Show picture on doubleClick in PicturesWidget
Show picture in PictureViewer2 when double clicking an item in pictures widget. Also shuffle some code around.
-rw-r--r--pictureswidget.cpp15
-rw-r--r--pictureswidget.h4
-rw-r--r--pictureviewer2.cpp68
-rw-r--r--pictureviewer2.h18
-rw-r--r--shemov.cpp1
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
diff --git a/shemov.cpp b/shemov.cpp
index 0635db3..abba97f 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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);