#ifndef QTGUI_TAGEDIT_H #define QTGUI_TAGEDIT_H #include "./previousvaluehandling.h" #include #include #include #include #include QT_FORWARD_DECLARE_CLASS(QFormLayout) QT_FORWARD_DECLARE_CLASS(QVBoxLayout) #define TAGEDITOR_ENUM_CLASS enum class namespace TagParser { class Tag; class TagValue; TAGEDITOR_ENUM_CLASS KnownField : unsigned int; } // namespace TagParser #undef TAGEDITOR_ENUM_CLASS namespace QtGui { class TagFieldEdit; class TagEdit : public QWidget { Q_OBJECT Q_PROPERTY(PreviousValueHandling previousValueHandling READ previousValueHandling WRITE setPreviousValueHandling) public: explicit TagEdit(QWidget *parent = nullptr); const QList &tags() const; TagParser::TagValue value(TagParser::KnownField field, TagParser::TagTextEncoding encoding = TagParser::TagTextEncoding::Utf16LittleEndian) const; std::int32_t trackNumber() const; std::int32_t diskNumber() const; void setTag(TagParser::Tag *tag, bool updateUi = true); void setTags(const QList &tags, bool updateUi = true); bool setValue( TagParser::KnownField field, const TagParser::TagValue &value, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear); template > void setTags(const Container &tags, bool updateUi = true); bool hasField(TagParser::KnownField field) const; PreviousValueHandling previousValueHandling() const; void setPreviousValueHandling(PreviousValueHandling previousValueHandling); TagFieldEdit *tagFieldEdit(TagParser::KnownField field) const; QString generateLabel() const; bool hasAutoCorrectionBeenApplied() const; public Q_SLOTS: void clear(); void restore(); void apply(); void invalidate(); void setCoverButtonsHidden(bool hideCoverButtons); Q_SIGNALS: void returnPressed(); private: void setupUi(); void removeEdit(QWidget *edit); void assignTags(); QList m_tags; QFormLayout *m_layoutLeft; QVBoxLayout *m_layoutRight; QMap m_widgets; PreviousValueHandling m_previousValueHandling; }; /*! * \brief Returns the currently assigned tags. */ inline const QList &TagEdit::tags() const { return m_tags; } /*! * \brief Assigns the specified \a tags to the edit. * \param updateUi Specifies whether the UI of should be updated. * \remarks The TagEdit object does not take ownership. */ template void TagEdit::setTags(const Container &tags, bool updateUi) { m_tags.clear(); m_tags.reserve(tags.size()); for (auto *tag : tags) { m_tags << tag; } if (updateUi) { setupUi(); } else { assignTags(); } } /*! * \brief Returns the "previous value handling". * * The "previous value handling" defines what happens which the current input * when the setTag() or the setTags() method is called. * * The setValue() method will not care about this setting but allows to specify * a "previous value handling", too. * * \sa setPreviousValueHandling() */ inline PreviousValueHandling TagEdit::previousValueHandling() const { return m_previousValueHandling; } /*! * \brief Sets the "previous value handling". * \sa previousValueHandling() */ inline void TagEdit::setPreviousValueHandling(PreviousValueHandling previousValueHandling) { m_previousValueHandling = previousValueHandling; } /*! * \brief Returns the TagFieldEdit object for the specified \a field. * \returns Returns a pointer to the object (ownership remains by the TagEdit object) or - if * there is no TagFieldEdit object - nullptr. */ inline TagFieldEdit *TagEdit::tagFieldEdit(TagParser::KnownField field) const { return m_widgets.value(field, nullptr); } } // namespace QtGui #endif // QTGUI_TAGEDIT_H