/* 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 PictureViewerGraphicsScene; class BoundingRectItem; class QGraphicsTextItem; 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 { HideAction, MarkAction, DeleteAction }; 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 addFile(const QString &fullPath, int fileId = -1); 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, int fileId = -1); public slots: void next(); void previous(); void skip(int amount); void selectPic(const QString &path); void stopSlide(); void startSlide(); void startSlideAll(); void startSlideRecent(); void toggleSlide(bool slide); void slide(bool); void slideThrouhghAll(bool); void slideThrougRecent(bool); void readSettings(); void writeSettings(); void shuffle(); void initActions(); void copyCurrent(); void deleteCurrent(); void showNewPicsDialog(); void addToNewPics(); void markCurrent(); void clearMarks(); void doControl(QGraphicsItem *item); 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, bool converted = false); void constructMappingItem(const PicData &file); void docFromTree(SmTreeItem *start, QTextCursor *cur, int indent); void nextFromAll(); void nextFromRecent(); private: void constructControlItem(); void setGradient(const QPixmap &pic); void setNextBatch(); QTextDocument *treeToString(const SmTreeItem *root) const; void treeToStringRecursive(const SmTreeItem *parent, QTextCursor *cursor, int indent) const; QPointF getPos(QGraphicsItem *item, int pos, const QPointF &movPos); QString constructWindowTitle() const; PicDataList mFiles; PicDataList mMarkedFiles; PictureViewerGraphicsScene *mScene; QGraphicsPixmapItem *mCur; int mCurPos; int mConfigInfoPos; int mConfigMapPos; int mCursorOffset; QTimer *mSlideTimer; QTimer *mSlideTimerAll; QTimer *mSlideTimerRecent; QTimer *mCurTimer; bool mSlideTimerAllRestart; bool mSlideTimerRecentRestart; const static QString mDefaultFile; PictureViewer2Item *mFnItem; PictureViewer2Item *mMappingItem; BoundingRectItem *mBoundingRectItem; QGraphicsTextItem *mNextC; QGraphicsTextItem *mPreviousC; QGraphicsTextItem *mSkipForwardC; QGraphicsTextItem *mSkipBackwardC; QGraphicsTextItem *mShuffleC; QGraphicsTextItem *mSlideStopC; QGraphicsTextItem *mSlideC; QGraphicsTextItem *mSlideAllC; QGraphicsTextItem *mSlideRecentC; bool mUseGradient; QColor mBgColor; QColor mDefaultTextColor; QPointF mInfoPos; QPointF mMappingPos; QPointF mBoundingPos; QAction *mHideA; QAction *mMarkA; QAction *mDeleteA; MappingTreeModel *mMappingTreeModel; PicFilesModel *mPicFilesModel; PicData mCurPicData; NewPicsDialog *mNewPicsDlg; bool mShowInfoItem; bool mShowMappingItem; bool mShowMarkItem; bool mShuffle; QString mCurrentDir; QString mArchiveDir; }; 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; }; class BoundingRectItem : public QGraphicsItem { public: explicit BoundingRectItem(const QSize &size, QGraphicsItem *parent = 0) : QGraphicsItem(parent), mSize(size) {} QRectF boundingRect() const; virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); private: QSize mSize; }; class PictureViewerGraphicsScene : public QGraphicsScene { Q_OBJECT public: explicit PictureViewerGraphicsScene(QObject *parent = 0) : QGraphicsScene(parent) {} void setCursorOffset(int offset) { mCursorOffset = offset; } signals: void itemClicked(QGraphicsItem *item); protected: virtual void mousePressEvent(QGraphicsSceneMouseEvent *e); private: int mCursorOffset; }; #endif // PICTUREVIEWER2_H