1
0
mirror of https://github.com/clementine-player/Clementine synced 2025-02-02 20:36:44 +01:00

Merge pull request #5182 from abika/fix-fetch_edit_dialog

Fix bug in edit tag dialog when fetching (2)
This commit is contained in:
John Maguire 2016-02-11 15:30:51 +00:00
commit 729dc8e281
2 changed files with 27 additions and 19 deletions

View File

@ -102,7 +102,8 @@ EditTagDialog::EditTagDialog(Application* app, QWidget* parent)
connect(widget, SIGNAL(Reset()), SLOT(ResetField())); connect(widget, SIGNAL(Reset()), SLOT(ResetField()));
} }
// Connect the edited signal // Connect the changed signal (emitted when value is changed
// programmatically or non-programmatically)
if (qobject_cast<QLineEdit*>(widget)) { if (qobject_cast<QLineEdit*>(widget)) {
connect(widget, SIGNAL(textChanged(QString)), SLOT(FieldValueEdited())); connect(widget, SIGNAL(textChanged(QString)), SLOT(FieldValueEdited()));
} else if (qobject_cast<QPlainTextEdit*>(widget)) { } else if (qobject_cast<QPlainTextEdit*>(widget)) {
@ -367,7 +368,6 @@ bool EditTagDialog::IsValueModified(const QModelIndexList& sel,
void EditTagDialog::InitFieldValue(const FieldData& field, void EditTagDialog::InitFieldValue(const FieldData& field,
const QModelIndexList& sel) { const QModelIndexList& sel) {
const bool varies = DoesValueVary(sel, field.id_); const bool varies = DoesValueVary(sel, field.id_);
const bool modified = IsValueModified(sel, field.id_);
if (ExtendedEditor* editor = dynamic_cast<ExtendedEditor*>(field.editor_)) { if (ExtendedEditor* editor = dynamic_cast<ExtendedEditor*>(field.editor_)) {
editor->clear(); editor->clear();
@ -379,10 +379,7 @@ void EditTagDialog::InitFieldValue(const FieldData& field,
} }
} }
QFont new_font(font()); UpdateModifiedField(field, sel);
new_font.setBold(modified);
field.label_->setFont(new_font);
field.editor_->setFont(new_font);
} }
void EditTagDialog::UpdateFieldValue(const FieldData& field, void EditTagDialog::UpdateFieldValue(const FieldData& field,
@ -403,9 +400,13 @@ void EditTagDialog::UpdateFieldValue(const FieldData& field,
data_[i.row()].set_value(field.id_, value); data_[i.row()].set_value(field.id_, value);
} }
// Update the boldness UpdateModifiedField(field, sel);
}
void EditTagDialog::UpdateModifiedField(const FieldData& field, const QModelIndexList& sel) {
const bool modified = IsValueModified(sel, field.id_); const bool modified = IsValueModified(sel, field.id_);
// Update the boldness
QFont new_font(font()); QFont new_font(font());
new_font.setBold(modified); new_font.setBold(modified);
field.label_->setFont(new_font); field.label_->setFont(new_font);
@ -430,11 +431,7 @@ void EditTagDialog::SelectionChanged() {
if (sel.isEmpty()) return; if (sel.isEmpty()) return;
// Set the editable fields // Set the editable fields
ignore_edits_ = true; UpdateUI(sel);
for (const FieldData& field : fields_) {
InitFieldValue(field, sel);
}
ignore_edits_ = false;
// If we're editing multiple songs then we have to disable certain tabs // If we're editing multiple songs then we have to disable certain tabs
const bool multiple = sel.count() > 1; const bool multiple = sel.count() > 1;
@ -448,6 +445,14 @@ void EditTagDialog::SelectionChanged() {
} }
} }
void EditTagDialog::UpdateUI(const QModelIndexList& sel){
ignore_edits_ = true;
for (const FieldData& field : fields_) {
InitFieldValue(field, sel);
}
ignore_edits_ = false;
}
static void SetText(QLabel* label, int value, const QString& suffix, static void SetText(QLabel* label, int value, const QString& suffix,
const QString& def = QString()) { const QString& def = QString()) {
label->setText(value <= 0 ? def : (QString::number(value) + " " + suffix)); label->setText(value <= 0 ? def : (QString::number(value) + " " + suffix));
@ -845,18 +850,18 @@ void EditTagDialog::FetchTagSongChosen(const Song& original_song,
return; return;
} }
// Update song data
data_it->current_.set_title(new_metadata.title()); data_it->current_.set_title(new_metadata.title());
data_it->current_.set_artist(new_metadata.artist()); data_it->current_.set_artist(new_metadata.artist());
data_it->current_.set_album(new_metadata.album()); data_it->current_.set_album(new_metadata.album());
data_it->current_.set_track(new_metadata.track()); data_it->current_.set_track(new_metadata.track());
data_it->current_.set_year(new_metadata.year()); data_it->current_.set_year(new_metadata.year());
// Is it currently selected in the UI? // Is it currently being displayed in the UI?
int row = data_it - data_.begin(); if (ui_->song_list->currentRow() == std::distance(data_.begin(), data_it)) {
if (ui_->song_list->item(row)->isSelected()) { // Yes! Additionally update UI
// We need to update view const QModelIndexList sel =
for (const FieldData& field : fields_) ui_->song_list->selectionModel()->selectedIndexes();
InitFieldValue(field, UpdateUI(sel);
ui_->song_list->selectionModel()->selectedIndexes());
} }
} }

View File

@ -127,11 +127,14 @@ signals:
void InitFieldValue(const FieldData& field, const QModelIndexList& sel); void InitFieldValue(const FieldData& field, const QModelIndexList& sel);
void UpdateFieldValue(const FieldData& field, const QModelIndexList& sel); void UpdateFieldValue(const FieldData& field, const QModelIndexList& sel);
void UpdateModifiedField(const FieldData& field, const QModelIndexList& sel);
void ResetFieldValue(const FieldData& field, const QModelIndexList& sel); void ResetFieldValue(const FieldData& field, const QModelIndexList& sel);
void UpdateSummaryTab(const Song& song); void UpdateSummaryTab(const Song& song);
void UpdateStatisticsTab(const Song& song); void UpdateStatisticsTab(const Song& song);
void UpdateUI(const QModelIndexList& sel);
bool SetLoading(const QString& message); bool SetLoading(const QString& message);
void SetSongListVisibility(bool visible); void SetSongListVisibility(bool visible);