#ifndef QTGUI_TAGFIELDLINEEDIT_H #define QTGUI_TAGFIELDLINEEDIT_H #include "./previousvaluehandling.h" #include #include #include QT_BEGIN_NAMESPACE class QVBoxLayout; class QLabel; QT_END_NAMESPACE namespace Media { class Tag; DECLARE_ENUM(KnownField, unsigned int) DECLARE_ENUM(TagDataType, unsigned int) DECLARE_ENUM(TagTextEncoding, unsigned int) class TagValue; } namespace Widgets { class ButtonOverlay; class ClearLineEdit; class ClearComboBox; class ClearSpinBox; class ClearPlainTextEdit; class IconButton; } namespace QtGui { class PicturePreviewSelection; class TagFieldEdit : public QWidget { Q_OBJECT public: explicit TagFieldEdit(const QList &tags, Media::KnownField field, QWidget *parent = nullptr); const QList &tags() const; Media::KnownField field() const; void setTagField(const QList &tags, Media::KnownField field, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear, bool preventUiUpdate = false); Media::TagValue value(Media::TagTextEncoding encoding, bool includeDescription) const; bool setValue(const Media::TagValue &value, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); bool hasDescription() const; bool canApply(Media::KnownField field) const; public slots: void clear(); void apply(); void restore(); void setCoverButtonsHidden(bool hideCoverButtons); signals: void returnPressed(); protected: virtual bool eventFilter(QObject *obj, QEvent *event); private slots: void handleRestoreButtonClicked(); void handleRestoreButtonDestroyed(QObject *obj = nullptr); private: Media::TagDataType determineDataType(); void setupUi(); Widgets::ClearLineEdit *setupLineEdit(); Widgets::ClearPlainTextEdit *setupPlainTextEdit(); Widgets::ClearComboBox *setupGenreComboBox(); Widgets::ClearSpinBox *setupSpinBox(); QPair &setupPositionInSetSpinBoxes(); PicturePreviewSelection *setupPictureSelection(); QWidget *setupFileSelection(); Widgets::ClearLineEdit *setupDescriptionLineEdit(); QLabel *setupTypeNotSupportedLabel(); void updateValue(PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); void updateValue(Media::Tag *tag, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); void updateValue(const Media::TagValue &value, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear, bool resetRestoreButton = true); Widgets::IconButton *setupRestoreButton(); void showRestoreButton(); void applyAutoCorrection(QString &textValue); void concretizePreviousValueHandling(PreviousValueHandling &previousValueHandling); QVBoxLayout *m_layout; const QList *m_tags; Media::KnownField m_field; Media::TagDataType m_dataType; QList m_widgets; Widgets::ClearLineEdit *m_lineEdit; Widgets::ClearComboBox *m_comboBox; QPair m_spinBoxes; PicturePreviewSelection *m_pictureSelection; Widgets::ClearPlainTextEdit *m_plainTextEdit; Widgets::ClearLineEdit *m_descriptionLineEdit; Widgets::IconButton *m_restoreButton; }; inline const QList &TagFieldEdit::tags() const { return *m_tags; } inline Media::KnownField TagFieldEdit::field() const { return m_field; } } #endif // QTGUI_TAGFIELDLINEEDIT_H