tageditor/gui/tagedit.h

138 lines
3.9 KiB
C
Raw Permalink Normal View History

2015-04-22 19:33:53 +02:00
#ifndef QTGUI_TAGEDIT_H
#define QTGUI_TAGEDIT_H
2015-09-06 20:20:00 +02:00
#include "./previousvaluehandling.h"
2015-04-22 19:33:53 +02:00
2016-12-01 22:23:01 +01:00
#include <tagparser/tagvalue.h>
2015-04-22 19:33:53 +02:00
#include <QList>
#include <QMap>
#include <QWidget>
#include <initializer_list>
QT_FORWARD_DECLARE_CLASS(QFormLayout)
QT_FORWARD_DECLARE_CLASS(QVBoxLayout)
2015-04-22 19:33:53 +02:00
2019-07-07 12:00:16 +02:00
#define TAGEDITOR_ENUM_CLASS enum class
2018-03-06 23:10:13 +01:00
namespace TagParser {
2015-04-22 19:33:53 +02:00
class Tag;
class TagValue;
2019-07-07 12:00:16 +02:00
TAGEDITOR_ENUM_CLASS KnownField : unsigned int;
2018-03-07 01:18:01 +01:00
} // namespace TagParser
2019-07-07 12:00:16 +02:00
#undef TAGEDITOR_ENUM_CLASS
2015-04-22 19:33:53 +02:00
namespace QtGui {
class TagFieldEdit;
2018-03-07 01:18:01 +01:00
class TagEdit : public QWidget {
2015-04-22 19:33:53 +02:00
Q_OBJECT
Q_PROPERTY(PreviousValueHandling previousValueHandling READ previousValueHandling WRITE setPreviousValueHandling)
public:
explicit TagEdit(QWidget *parent = nullptr);
2018-03-06 23:10:13 +01:00
const QList<TagParser::Tag *> &tags() const;
TagParser::TagValue value(TagParser::KnownField field, TagParser::TagTextEncoding encoding = TagParser::TagTextEncoding::Utf16LittleEndian) const;
std::int32_t trackNumber() const;
2019-06-01 12:50:09 +02:00
std::int32_t diskNumber() const;
2018-03-06 23:10:13 +01:00
void setTag(TagParser::Tag *tag, bool updateUi = true);
void setTags(const QList<TagParser::Tag *> &tags, bool updateUi = true);
2018-03-07 01:18:01 +01:00
bool setValue(
TagParser::KnownField field, const TagParser::TagValue &value, PreviousValueHandling previousValueHandling = PreviousValueHandling::Clear);
template <class Container = std::initializer_list<TagParser::Tag *>> void setTags(const Container &tags, bool updateUi = true);
2018-03-06 23:10:13 +01:00
bool hasField(TagParser::KnownField field) const;
2015-04-22 19:33:53 +02:00
PreviousValueHandling previousValueHandling() const;
void setPreviousValueHandling(PreviousValueHandling previousValueHandling);
2018-03-06 23:10:13 +01:00
TagFieldEdit *tagFieldEdit(TagParser::KnownField field) const;
2015-04-22 19:33:53 +02:00
QString generateLabel() const;
bool hasAutoCorrectionBeenApplied() const;
2015-04-22 19:33:53 +02:00
2020-03-08 14:04:29 +01:00
public Q_SLOTS:
2015-04-22 19:33:53 +02:00
void clear();
void restore();
void apply();
void invalidate();
void setCoverButtonsHidden(bool hideCoverButtons);
2015-04-22 19:33:53 +02:00
2020-03-09 18:46:08 +01:00
Q_SIGNALS:
2015-04-22 19:33:53 +02:00
void returnPressed();
2018-03-07 01:18:01 +01:00
2015-04-22 19:33:53 +02:00
private:
void setupUi();
void removeEdit(QWidget *edit);
void assignTags();
2018-03-06 23:10:13 +01:00
QList<TagParser::Tag *> m_tags;
2015-04-22 19:33:53 +02:00
QFormLayout *m_layoutLeft;
QVBoxLayout *m_layoutRight;
2018-03-06 23:10:13 +01:00
QMap<TagParser::KnownField, TagFieldEdit *> m_widgets;
2015-04-22 19:33:53 +02:00
PreviousValueHandling m_previousValueHandling;
};
/*!
* \brief Returns the currently assigned tags.
*/
2018-03-06 23:10:13 +01:00
inline const QList<TagParser::Tag *> &TagEdit::tags() const
2015-04-22 19:33:53 +02:00
{
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.
*/
2018-03-07 01:18:01 +01:00
template <class Container> void TagEdit::setTags(const Container &tags, bool updateUi)
2015-04-22 19:33:53 +02:00
{
m_tags.clear();
m_tags.reserve(tags.size());
2018-03-07 01:18:01 +01:00
for (auto *tag : tags) {
2015-04-22 19:33:53 +02:00
m_tags << tag;
}
2018-03-07 01:18:01 +01:00
if (updateUi) {
2015-04-22 19:33:53 +02:00
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.
*/
2018-03-06 23:10:13 +01:00
inline TagFieldEdit *TagEdit::tagFieldEdit(TagParser::KnownField field) const
2015-04-22 19:33:53 +02:00
{
return m_widgets.value(field, nullptr);
}
2018-03-07 01:18:01 +01:00
} // namespace QtGui
2015-04-22 19:33:53 +02:00
#endif // QTGUI_TAGEDIT_H