#ifndef COVEREDIT_H #define COVEREDIT_H #include "./previousvaluehandling.h" #include #include #include #include #include QT_FORWARD_DECLARE_CLASS(QEvent) QT_FORWARD_DECLARE_CLASS(QGraphicsTextItem) QT_FORWARD_DECLARE_CLASS(QGraphicsPixmapItem) QT_FORWARD_DECLARE_CLASS(QGraphicsRectItem) namespace Media { class Tag; class TagValue; DECLARE_ENUM_CLASS(KnownField, unsigned int); } namespace QtGui { DECLARE_ENUM_CLASS(PreviousValueHandling, int); namespace Ui { class PicturePreviewSelection; } class PicturePreviewScene : public QGraphicsScene { Q_OBJECT public: PicturePreviewScene(QObject *parent = nullptr); signals: void displayRequested(); protected: void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent); }; inline PicturePreviewScene::PicturePreviewScene(QObject *parent) : QGraphicsScene(parent) { } class PicturePreview : public QGraphicsView { Q_OBJECT public: PicturePreview(QWidget *parent = nullptr); signals: void displayRequested(); protected: void mousePressEvent(QMouseEvent *mouseEvent); }; inline PicturePreview::PicturePreview(QWidget *parent) : QGraphicsView(parent) { } class PicturePreviewSelection : public QWidget { Q_OBJECT public: explicit PicturePreviewSelection(Media::Tag *tag = nullptr, Media::KnownField field = Media::KnownField::Invalid, QWidget *parent = nullptr); ~PicturePreviewSelection(); Media::Tag *tag() const; Media::KnownField field() const; public slots: void setTagField(Media::Tag *tag, Media::KnownField field, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); void setValue(const Media::TagValue &value, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); void apply(); void clear(); void addOfSelectedType(); void addOfSelectedType(const QString &path); void removeSelected(); void extractSelected(); void displaySelected(); void changeMimeTypeOfSelected(); void setCoverButtonsHidden(bool hideCoverButtons); signals: void pictureChanged(); protected: void changeEvent(QEvent *event); void resizeEvent(QResizeEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); bool eventFilter(QObject *watched, QEvent *event); private slots: void typeSwitched(int index); void updateDescription(int newIndex); void updateDescription(int lastIndex, int newIndex); void updatePreview(int index); void showContextMenu(); private: void setup(PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); std::unique_ptr m_ui; PicturePreviewScene *m_scene; QGraphicsTextItem *m_textItem; QPixmap m_pixmap; QGraphicsPixmapItem *m_pixmapItem; QGraphicsRectItem *m_rectItem; Media::Tag *m_tag; Media::KnownField m_field; QList m_values; int m_currentTypeIndex; }; /*! * \brief Returns the tied tag if one is assigned; returns nullptr otherwise. * * This might have been set initially using the constructor or using the setTagField() method. */ inline Media::Tag *PicturePreviewSelection::tag() const { return m_tag; } /*! * \brief Returns the field. This is commonly KnownField::Cover. */ inline Media::KnownField PicturePreviewSelection::field() const { return m_field; } /*! * \brief Sets the specified \a tag, \a field and \a previousValueHandling. * * If \a tag is nullptr the widget is disabled. The widget will be re-setup. */ inline void PicturePreviewSelection::setTagField(Media::Tag *tag, Media::KnownField field, PreviousValueHandling previousValueHandling) { m_tag = tag; m_field = field; setup(previousValueHandling); } } #endif // COVEREDIT_H