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