Improve coding style in TagFieldEdit and PicturePreviewSelection

This commit is contained in:
Martchus 2018-07-14 22:59:10 +02:00
parent 2a5d71cf87
commit 204c7cb80b
2 changed files with 121 additions and 130 deletions

View File

@ -151,68 +151,66 @@ void PicturePreviewSelection::setup(PreviousValueHandling previousValueHandling)
previousValueHandling = PreviousValueHandling::Update;
}
m_currentTypeIndex = 0;
if (m_tag) {
if (m_field == KnownField::Cover && (m_tag->type() == TagType::Id3v2Tag || m_tag->type() == TagType::VorbisComment)) {
m_ui->switchTypeComboBox->setHidden(false);
m_ui->switchTypeLabel->setHidden(false);
if (!m_ui->switchTypeComboBox->count()) {
m_ui->switchTypeComboBox->addItems(QStringList()
<< tr("Other") << tr("32x32 File icon") << tr("Other file icon") << tr("Cover (front)") << tr("Cover (back)")
<< tr("Leaflet page") << tr("Media (e. g. label side of CD)") << tr("Lead artist/performer/soloist") << tr("Artist/performer")
<< tr("Conductor") << tr("Band/Orchestra") << tr("Composer") << tr("Lyricist/text writer") << tr("Recording Location")
<< tr("During recording") << tr("During performance") << tr("Movie/video screen capture") << tr("A bright coloured fish")
<< tr("Illustration") << tr("Band/artist logotype") << tr("Publisher/Studio logotype"));
}
int first;
switch (m_tag->type()) {
case TagType::Id3v2Tag:
first = fetchId3v2CoverValues(
static_cast<Id3v2Tag *>(m_tag), m_field, m_values, m_ui->switchTypeComboBox->count(), previousValueHandling);
break;
case TagType::VorbisComment:
case TagType::OggVorbisComment:
first = fetchId3v2CoverValues(
static_cast<VorbisComment *>(m_tag), m_field, m_values, m_ui->switchTypeComboBox->count(), previousValueHandling);
break;
default:
first = 0;
}
if (first >= 0) {
m_ui->switchTypeComboBox->setCurrentIndex(first);
}
m_currentTypeIndex = m_ui->switchTypeComboBox->currentIndex();
connect(m_ui->switchTypeComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&PicturePreviewSelection::typeSwitched);
} else {
m_ui->switchTypeComboBox->setHidden(true);
m_ui->switchTypeLabel->setHidden(true);
m_currentTypeIndex = 0;
const TagValue &value = m_tag->value(m_field);
if (previousValueHandling == PreviousValueHandling::Clear || !value.isEmpty()) {
if (m_values.size()) {
if (previousValueHandling != PreviousValueHandling::Keep || m_values[0].isEmpty()) {
m_values[0] = value;
}
} else {
m_values << value;
}
}
if (!m_tag) {
setEnabled(false);
return;
}
if (m_field == KnownField::Cover && (m_tag->type() == TagType::Id3v2Tag || m_tag->type() == TagType::VorbisComment)) {
m_ui->switchTypeComboBox->setHidden(false);
m_ui->switchTypeLabel->setHidden(false);
if (!m_ui->switchTypeComboBox->count()) {
m_ui->switchTypeComboBox->addItems(QStringList({ tr("Other"), tr("32x32 File icon"), tr("Other file icon"), tr("Cover (front)"),
tr("Cover (back)"), tr("Leaflet page"), tr("Media (e. g. label side of CD)"), tr("Lead artist/performer/soloist"),
tr("Artist/performer"), tr("Conductor"), tr("Band/Orchestra"), tr("Composer"), tr("Lyricist/text writer"), tr("Recording Location"),
tr("During recording"), tr("During performance"), tr("Movie/video screen capture"), tr("A bright coloured fish"), tr("Illustration"),
tr("Band/artist logotype"), tr("Publisher/Studio logotype") }));
}
int first;
switch (m_tag->type()) {
case TagType::Id3v2Tag:
first
= fetchId3v2CoverValues(static_cast<Id3v2Tag *>(m_tag), m_field, m_values, m_ui->switchTypeComboBox->count(), previousValueHandling);
break;
case TagType::VorbisComment:
case TagType::OggVorbisComment:
first = fetchId3v2CoverValues(
static_cast<VorbisComment *>(m_tag), m_field, m_values, m_ui->switchTypeComboBox->count(), previousValueHandling);
break;
default:
first = 0;
}
if (first >= 0) {
m_ui->switchTypeComboBox->setCurrentIndex(first);
}
m_currentTypeIndex = m_ui->switchTypeComboBox->currentIndex();
connect(m_ui->switchTypeComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
&PicturePreviewSelection::typeSwitched);
} else {
m_ui->switchTypeComboBox->setHidden(true);
m_ui->switchTypeLabel->setHidden(true);
m_currentTypeIndex = 0;
const TagValue &value = m_tag->value(m_field);
if (previousValueHandling == PreviousValueHandling::Clear || !value.isEmpty()) {
if (m_values.size()) {
m_values.erase(m_values.begin() + 1, m_values.end());
if (previousValueHandling != PreviousValueHandling::Keep || m_values[0].isEmpty()) {
m_values[0] = value;
}
} else {
m_values << TagValue();
m_values << value;
}
}
bool hideDesc = !m_tag->supportsDescription(m_field);
m_ui->descriptionLineEdit->setHidden(hideDesc);
m_ui->descriptionLabel->setHidden(hideDesc);
updatePreview(m_currentTypeIndex);
updateDescription(m_currentTypeIndex);
setEnabled(true);
} else {
m_currentTypeIndex = 0;
setEnabled(false);
if (m_values.size()) {
m_values.erase(m_values.begin() + 1, m_values.end());
} else {
m_values << TagValue();
}
}
const auto hideDesc = !m_tag->supportsDescription(m_field);
m_ui->descriptionLineEdit->setHidden(hideDesc);
m_ui->descriptionLabel->setHidden(hideDesc);
updatePreview(m_currentTypeIndex);
updateDescription(m_currentTypeIndex);
setEnabled(true);
}
/*!

View File

@ -92,8 +92,8 @@ void TagFieldEdit::setTagField(
m_field = field;
uiRebuildingRequired = true;
}
if (tags.size()) {
TagDataType proposedDataType = determineDataType();
if (!tags.empty()) {
const auto proposedDataType = determineDataType();
if (proposedDataType != m_dataType) {
m_dataType = proposedDataType;
uiRebuildingRequired = true;
@ -154,7 +154,8 @@ TagValue TagFieldEdit::value(TagTextEncoding encoding, bool includeDescription)
break;
default:;
}
if (m_descriptionLineEdit && includeDescription) { // setup description line edit
// setup description line edit
if (m_descriptionLineEdit && includeDescription) {
value.setDescription(Utility::qstringToString(m_descriptionLineEdit->text(), encoding), encoding);
}
return value;
@ -179,7 +180,7 @@ bool TagFieldEdit::setValue(const TagValue &value, PreviousValueHandling previou
*/
bool TagFieldEdit::hasDescription() const
{
for (const Tag *tag : tags()) {
for (const Tag *const tag : tags()) {
if (tag->supportsDescription(m_field)) {
return true;
}
@ -192,7 +193,7 @@ bool TagFieldEdit::hasDescription() const
*/
bool TagFieldEdit::canApply(KnownField field) const
{
for (const Tag *tag : tags()) {
for (const Tag *const tag : tags()) {
switch (tag->type()) {
case TagType::Id3v1Tag:
if (Settings::values().tagPocessing.creationSettings.id3v1usage == TagUsage::Never) {
@ -229,7 +230,7 @@ void TagFieldEdit::setCoverButtonsHidden(bool hideCoverButtons)
TagDataType TagFieldEdit::determineDataType()
{
TagDataType proposedDataType = TagDataType::Undefined;
for (Tag *tag : tags()) {
for (const Tag *const tag : tags()) {
TagDataType type = tag->proposedDataType(m_field);
if (proposedDataType == TagDataType::Undefined) {
proposedDataType = type;
@ -340,33 +341,29 @@ ClearComboBox *TagFieldEdit::setupGenreComboBox()
if (QLineEdit *lineEdit = m_comboBox->lineEdit()) {
lineEdit->setPlaceholderText(tr("empty"));
}
m_comboBox->addItems(QStringList()
<< QString() << tr("Blues") << tr("A capella") << tr("Abstract") << tr("Acid") << tr("Acid Jazz") << tr("Acid Punk") << tr("Acoustic")
<< tr("Alternative") << tr("Alternative Rock") << tr("Ambient") << tr("Anime") << tr("Art Rock") << tr("Audio Theatre") << tr("Audiobook")
<< tr("Avantgarde") << tr("Ballad") << tr("Baroque") << tr("Bass") << tr("Beat") << tr("Bebop") << tr("Bhangra") << tr("Big Band")
<< tr("Big Beat") << tr("Black Metal") << tr("Bluegrass") << tr("Booty Bass") << tr("Breakbeat") << tr("BritPop") << tr("Cabaret")
<< tr("Celtic") << tr("Chamber Music") << tr("Chanson") << tr("Chillout") << tr("Chorus") << tr("Christian Gangsta Rap")
<< tr("Christian Rap") << tr("Christian Rock") << tr("Classic Rock") << tr("Classical") << tr("Club") << tr("Club-House") << tr("Comedy")
<< tr("Contemporary Christian") << tr("Country") << tr("Crossover") << tr("Cult") << tr("Dance") << tr("Dance Hall") << tr("Darkwave")
<< tr("Death Metal") << tr("Disco") << tr("Downtempo") << tr("Dream") << tr("Drum & Bass") << tr("Drum Solo") << tr("Dub") << tr("Dubstep")
<< tr("Duet") << tr("Easy Listening") << tr("EBM") << tr("Eclectic") << tr("Electro") << tr("Electroclash") << tr("Electronic") << tr("Emo")
<< tr("Ethnic") << tr("Euro-House") << tr("Euro-Techno") << tr("Eurodance") << tr("Experimental") << tr("Fast Fusion") << tr("Folk")
<< tr("Folk-Rock") << tr("Folklore") << tr("Freestyle") << tr("Funk") << tr("Fusion") << tr("G-Funk") << tr("Game") << tr("Gangsta")
<< tr("Garage") << tr("Garage Rock") << tr("Global") << tr("Goa") << tr("Gospel") << tr("Gothic") << tr("Gothic Rock") << tr("Grunge")
<< tr("Hard Rock") << tr("Hardcore Techno") << tr("Heavy Metal") << tr("Hip-Hop") << tr("House") << tr("Humour") << tr("IDM")
<< tr("Illbient") << tr("Indie") << tr("Indie Rock") << tr("Industrial") << tr("Industro-Goth") << tr("Instrumental")
<< tr("Instrumental Pop") << tr("Instrumental Rock") << tr("Jam Band") << tr("Jazz") << tr("Jazz & Funk") << tr("Jpop") << tr("Jungle")
<< tr("Krautrock") << tr("Latin") << tr("Leftfield") << tr("Lo-Fi") << tr("Lounge") << tr("Math Rock") << tr("Meditative") << tr("Merengue")
<< tr("Metal") << tr("Musical") << tr("National Folk") << tr("Native US") << tr("Negerpunk") << tr("Neoclassical")
<< tr("Neue Deutsche Welle") << tr("New Age") << tr("New Romantic") << tr("New Wave") << tr("Noise") << tr("Nu-Breakz") << tr("Oldies")
<< tr("Opera") << tr("Podcast") << tr("Polka") << tr("Polsk Punk") << tr("Pop") << tr("Pop-Folk") << tr("Pop/Funk") << tr("Porn Groove")
<< tr("Post-Punk") << tr("Post-Rock") << tr("Power Ballad") << tr("Pranks") << tr("Primus") << tr("Progressive Rock") << tr("Psychedelic")
<< tr("Psychedelic Rock") << tr("Psytrance") << tr("Punk") << tr("Punk Rock") << tr("Rap") << tr("Rave") << tr("Reggae") << tr("Retro")
<< tr("Revival") << tr("Rhythmic Soul") << tr("Rock") << tr("Rock & Roll") << tr("Salsa") << tr("Samba") << tr("Satire") << tr("Shoegaze")
<< tr("Showtunes") << tr("Ska") << tr("Slow Jam") << tr("Slow Rock") << tr("Sonata") << tr("Soul") << tr("Sound Clip") << tr("Soundtrack")
<< tr("Southern Rock") << tr("Space") << tr("Space Rock") << tr("Speech") << tr("Swing") << tr("Symphonic Rock") << tr("Symphony")
<< tr("Synthpop") << tr("Tango") << tr("Techno") << tr("Techno-Industrial") << tr("Terror") << tr("Thrash Metal") << tr("Top 40")
<< tr("Trailer") << tr("Trance") << tr("Tribal") << tr("Trip-Hop") << tr("Trop Rock") << tr("Vocal") << tr("World Music"));
m_comboBox->addItems(QStringList({ QString(), tr("Blues"), tr("A capella"), tr("Abstract"), tr("Acid"), tr("Acid Jazz"), tr("Acid Punk"),
tr("Acoustic"), tr("Alternative"), tr("Alternative Rock"), tr("Ambient"), tr("Anime"), tr("Art Rock"), tr("Audio Theatre"), tr("Audiobook"),
tr("Avantgarde"), tr("Ballad"), tr("Baroque"), tr("Bass"), tr("Beat"), tr("Bebop"), tr("Bhangra"), tr("Big Band"), tr("Big Beat"),
tr("Black Metal"), tr("Bluegrass"), tr("Booty Bass"), tr("Breakbeat"), tr("BritPop"), tr("Cabaret"), tr("Celtic"), tr("Chamber Music"),
tr("Chanson"), tr("Chillout"), tr("Chorus"), tr("Christian Gangsta Rap"), tr("Christian Rap"), tr("Christian Rock"), tr("Classic Rock"),
tr("Classical"), tr("Club"), tr("Club-House"), tr("Comedy"), tr("Contemporary Christian"), tr("Country"), tr("Crossover"), tr("Cult"),
tr("Dance"), tr("Dance Hall"), tr("Darkwave"), tr("Death Metal"), tr("Disco"), tr("Downtempo"), tr("Dream"), tr("Drum & Bass"),
tr("Drum Solo"), tr("Dub"), tr("Dubstep"), tr("Duet"), tr("Easy Listening"), tr("EBM"), tr("Eclectic"), tr("Electro"), tr("Electroclash"),
tr("Electronic"), tr("Emo"), tr("Ethnic"), tr("Euro-House"), tr("Euro-Techno"), tr("Eurodance"), tr("Experimental"), tr("Fast Fusion"),
tr("Folk"), tr("Folk-Rock"), tr("Folklore"), tr("Freestyle"), tr("Funk"), tr("Fusion"), tr("G-Funk"), tr("Game"), tr("Gangsta"), tr("Garage"),
tr("Garage Rock"), tr("Global"), tr("Goa"), tr("Gospel"), tr("Gothic"), tr("Gothic Rock"), tr("Grunge"), tr("Hard Rock"),
tr("Hardcore Techno"), tr("Heavy Metal"), tr("Hip-Hop"), tr("House"), tr("Humour"), tr("IDM"), tr("Illbient"), tr("Indie"), tr("Indie Rock"),
tr("Industrial"), tr("Industro-Goth"), tr("Instrumental"), tr("Instrumental Pop"), tr("Instrumental Rock"), tr("Jam Band"), tr("Jazz"),
tr("Jazz & Funk"), tr("Jpop"), tr("Jungle"), tr("Krautrock"), tr("Latin"), tr("Leftfield"), tr("Lo-Fi"), tr("Lounge"), tr("Math Rock"),
tr("Meditative"), tr("Merengue"), tr("Metal"), tr("Musical"), tr("National Folk"), tr("Native US"), tr("Negerpunk"), tr("Neoclassical"),
tr("Neue Deutsche Welle"), tr("New Age"), tr("New Romantic"), tr("New Wave"), tr("Noise"), tr("Nu-Breakz"), tr("Oldies"), tr("Opera"),
tr("Podcast"), tr("Polka"), tr("Polsk Punk"), tr("Pop"), tr("Pop-Folk"), tr("Pop/Funk"), tr("Porn Groove"), tr("Post-Punk"), tr("Post-Rock"),
tr("Power Ballad"), tr("Pranks"), tr("Primus"), tr("Progressive Rock"), tr("Psychedelic"), tr("Psychedelic Rock"), tr("Psytrance"),
tr("Punk"), tr("Punk Rock"), tr("Rap"), tr("Rave"), tr("Reggae"), tr("Retro"), tr("Revival"), tr("Rhythmic Soul"), tr("Rock"),
tr("Rock & Roll"), tr("Salsa"), tr("Samba"), tr("Satire"), tr("Shoegaze"), tr("Showtunes"), tr("Ska"), tr("Slow Jam"), tr("Slow Rock"),
tr("Sonata"), tr("Soul"), tr("Sound Clip"), tr("Soundtrack"), tr("Southern Rock"), tr("Space"), tr("Space Rock"), tr("Speech"), tr("Swing"),
tr("Symphonic Rock"), tr("Symphony"), tr("Synthpop"), tr("Tango"), tr("Techno"), tr("Techno-Industrial"), tr("Terror"), tr("Thrash Metal"),
tr("Top 40"), tr("Trailer"), tr("Trance"), tr("Tribal"), tr("Trip-Hop"), tr("Trop Rock"), tr("Vocal"), tr("World Music") }));
m_comboBox->setCurrentIndex(0);
m_comboBox->setClearButtonEnabled(true);
m_comboBox->insertCustomButton(0, setupRestoreButton());
@ -402,7 +399,7 @@ ClearSpinBox *TagFieldEdit::setupSpinBox()
*/
QPair<Widgets::ClearSpinBox *, Widgets::ClearSpinBox *> &TagFieldEdit::setupPositionInSetSpinBoxes()
{
QHBoxLayout *subLayout = new QHBoxLayout;
auto *const subLayout = new QHBoxLayout;
m_spinBoxes.first = new ClearSpinBox(this);
m_spinBoxes.first->setPlaceholderText(tr("empty"));
@ -415,7 +412,7 @@ QPair<Widgets::ClearSpinBox *, Widgets::ClearSpinBox *> &TagFieldEdit::setupPosi
subLayout->addWidget(m_spinBoxes.first);
m_widgets << m_spinBoxes.first;
QLabel *label = new QLabel(tr("of"), this);
auto *const label = new QLabel(tr("of"), this);
subLayout->addWidget(label);
m_widgets << label;
@ -461,7 +458,7 @@ QWidget *TagFieldEdit::setupFileSelection()
*/
ClearLineEdit *TagFieldEdit::setupDescriptionLineEdit()
{
QLabel *label = new QLabel(tr("Description"), this);
auto *const label = new QLabel(tr("Description"), this);
m_layout->addWidget(label);
m_widgets << label;
@ -481,7 +478,7 @@ ClearLineEdit *TagFieldEdit::setupDescriptionLineEdit()
*/
QLabel *TagFieldEdit::setupTypeNotSupportedLabel()
{
QLabel *label = new QLabel(tr("editing widget for field type not supported"), this);
auto *const label = new QLabel(tr("editing widget for field type not supported"), this);
m_layout->addWidget(label);
m_widgets << label;
return label;
@ -528,11 +525,7 @@ void TagFieldEdit::updateValue(PreviousValueHandling previousValueHandling)
*/
void TagFieldEdit::updateValue(Tag *tag, PreviousValueHandling previousValueHandling)
{
if (tag) {
updateValue(tag->value(m_field), previousValueHandling);
} else {
updateValue(TagValue::empty(), previousValueHandling);
}
updateValue(tag ? tag->value(m_field) : TagValue::empty(), previousValueHandling);
if (m_pictureSelection) {
m_pictureSelection->setTagField(tag, m_field, previousValueHandling);
}
@ -629,17 +622,17 @@ void TagFieldEdit::updateValue(const TagValue &value, PreviousValueHandling prev
m_restoreButton->setVisible((!updated && m_restoreButton->isVisible()) || m_tags->size() > 1);
}
const initializer_list<ButtonOverlay *> widgets = { m_lineEdit, m_comboBox, m_spinBoxes.first, m_spinBoxes.second };
bool canApply = this->canApply(m_field);
if (conversionError || !canApply) {
const auto canApplyField = canApply(m_field);
if (conversionError || !canApplyField) {
const QPixmap pixmap(QIcon(QStringLiteral(":/qtutilities/icons/hicolor/48x48/actions/edit-error.png")).pixmap(16));
QString text;
if (conversionError) {
text = tr("The value of this field could not be read from the file because it couldn't be converted properly.");
if (!canApply) {
if (!canApplyField) {
text += QChar('\n');
}
}
if (!canApply) {
if (!canApplyField) {
text += tr("The field can not be applied when saving the file and will be lost.");
}
for (ButtonOverlay *overlay : widgets) {
@ -696,16 +689,17 @@ void TagFieldEdit::applyAutoCorrection(QString &textValue)
return (item.id().toInt(&ok) == static_cast<int>(this->field())) && ok;
});
// if current field is in the list of auto correction fields and auto correction should be applied
if (i != fields.constEnd() && i->isChecked()) {
if (settings.trimWhitespaces) {
textValue = textValue.trimmed();
}
if (settings.fixUmlauts) {
textValue = Utility::fixUmlauts(textValue);
}
if (settings.formatNames) {
textValue = Utility::formatName(textValue);
}
if (i == fields.constEnd() || !i->isChecked()) {
return;
}
if (settings.trimWhitespaces) {
textValue = textValue.trimmed();
}
if (settings.fixUmlauts) {
textValue = Utility::fixUmlauts(textValue);
}
if (settings.formatNames) {
textValue = Utility::formatName(textValue);
}
}
@ -730,6 +724,7 @@ void TagFieldEdit::concretizePreviousValueHandling(PreviousValueHandling &previo
default:
previousValueHandling = PreviousValueHandling::Update;
}
break;
default:;
}
}
@ -775,7 +770,7 @@ void TagFieldEdit::clear()
*/
void TagFieldEdit::apply()
{
for (Tag *tag : *m_tags) {
for (Tag *const tag : *m_tags) {
if (m_dataType == TagDataType::Picture) {
if (m_pictureSelection) {
m_pictureSelection->apply();
@ -797,15 +792,14 @@ bool TagFieldEdit::eventFilter(QObject *obj, QEvent *event)
{
switch (event->type()) {
case QEvent::KeyRelease: {
auto *keyEvent = static_cast<QKeyEvent *>(event);
int key = keyEvent->key();
switch (key) {
auto *const keyEvent = static_cast<QKeyEvent *>(event);
switch (keyEvent->key()) {
case Qt::Key_Return:
emit returnPressed();
break;
case Qt::Key_Shift:
if (keyEvent->modifiers() & Qt::ControlModifier) {
if (QLineEdit *le = qobject_cast<QLineEdit *>(obj)) {
if (auto *const le = qobject_cast<QLineEdit *>(obj)) {
le->setText(Utility::formatName(le->text()));
return true;
}
@ -825,20 +819,19 @@ bool TagFieldEdit::eventFilter(QObject *obj, QEvent *event)
*/
void TagFieldEdit::handleRestoreButtonClicked()
{
if (tags().size()) {
QMenu menu;
int i = 0;
for (Tag *tag : tags()) {
++i;
QAction *action = menu.addAction(tr("restore to value from %1 (%2)").arg(tag->typeName()).arg(i));
connect(action, &QAction::triggered,
std::bind(static_cast<void (TagFieldEdit::*)(Tag *, PreviousValueHandling)>(&TagFieldEdit::updateValue), this, tag,
PreviousValueHandling::Clear));
}
menu.exec(QCursor::pos());
} else {
if (tags().empty()) {
restore();
return;
}
QMenu menu;
int i = 0;
for (Tag *const tag : tags()) {
const auto *const action = menu.addAction(tr("restore to value from %1 (%2)").arg(tag->typeName()).arg(++i));
connect(action, &QAction::triggered,
std::bind(static_cast<void (TagFieldEdit::*)(Tag *, PreviousValueHandling)>(&TagFieldEdit::updateValue), this, tag,
PreviousValueHandling::Clear));
}
menu.exec(QCursor::pos());
}
/*!