/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef PICTUREVIEWER2_H #define PICTUREVIEWER2_H #include #include #include #include #include class QGraphicsScene; class QGraphicsPixmapItem; class QWheelEvent; class QContextMenuEvent; class QTimer; class QTextDocument; class QTextCursor; class PictureViewer2Item; class QGraphicsItem; class SmTreeItem; class MappingTreeModel; class PicFilesModel; class NewPicsDialog; typedef QList PicData; typedef QList > PicDataList; class PictureViewer2 : public QGraphicsView { Q_OBJECT public: enum AssocActions { SlideAction, 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 setFile(const PicData &file); void setFile(QString fullPath = mDefaultFile); void setPixmap(const QPixmap &pm); void setShowInfoItem(bool show) { mShowInfoItem = show; } void setShowMappingItem(bool show) { mShowMappingItem = show; } void setShowMarkItem(bool show) { mShowMarkItem = show; } void setCurrentDir(const QString &curDir) { mCurrentDir = curDir; } const PicDataList marked() { return mMarkedFiles; } PicData picData(const QString &fullPath); public slots: void next(); void previous(); void skip(int amount); void selectPic(const QString &path); void slide(bool); void readSettings(); void writeSettings(); void shuffle(); void initActions(); void copyCurrent(); void deleteCurrent(); void showNewPicsDialog(); void addToNewPics(); void markCurrent(); void clearMarks(); protected: virtual void wheelEvent(QWheelEvent *event); virtual void contextMenuEvent(QContextMenuEvent *e); virtual void keyPressEvent(QKeyEvent *e); virtual void showEvent(QShowEvent *e); virtual void hideEvent(QHideEvent *e); virtual void resizeEvent(QResizeEvent *event); private slots: void showFile(const PicData &data); void constructInfoItem(const PicData &file, QSize picSize); void constructMappingItem(const PicData &file); void docFromTree(SmTreeItem *start, QTextCursor *cur, int indent); private: void setupDialog(); void setGradient(const QPixmap &pic); 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); QString constructWindowTitle() const; PicDataList mFiles; PicDataList mMarkedFiles; QGraphicsScene *mScene; QGraphicsPixmapItem *mCur; int mCurPos; int mConfigInfoPos; int mConfigMapPos; QTimer *mSlideTimer; const static QString mDefaultFile; PictureViewer2Item *mFnItem; PictureViewer2Item *mMappingItem; bool mUseGradient; QColor mBgColor; QPointF mInfoPos; QPointF mMappingPos; QAction *mSlideA; QAction *mHideA; QAction *mMarkA; QAction *mDeleteA; QAction *mSkipForwardA; QAction *mSkipBackwardA; MappingTreeModel *mMappingTreeModel; PicFilesModel *mPicFilesModel; PicData mCurPicData; NewPicsDialog *mNewPicsDlg; bool mShowInfoItem; bool mShowMappingItem; bool mShowMarkItem; QString mCurrentDir; }; class PictureViewer2Item : public QGraphicsItem { public: explicit PictureViewer2Item(const PicData &data, const int numSelected, const QSize &picSize = QSize(), QGraphicsItem *parent = 0); explicit PictureViewer2Item(QTextDocument *doc, QGraphicsItem *parent = 0); ~PictureViewer2Item(); QRectF boundingRect() const; void appendText(const QString &text); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private: QStringList mTextList; QTextDocument *mDoc; }; #endif // PICTUREVIEWER2_H