tageditor/gui/settingsdialog.cpp

710 lines
25 KiB
C++
Raw Permalink Normal View History

2015-09-06 20:20:00 +02:00
#include "./settingsdialog.h"
#include "./notificationlabel.h"
2015-04-22 19:33:53 +02:00
2015-09-06 20:20:00 +02:00
#include "../application/knownfieldmodel.h"
2018-03-07 01:18:01 +01:00
#include "../application/settings.h"
2016-05-26 02:15:41 +02:00
#include "../application/targetlevelmodel.h"
2015-04-22 19:33:53 +02:00
#include "ui_editorautocorrectionoptionpage.h"
#include "ui_editordbqueryoptionpage.h"
2018-03-07 01:18:01 +01:00
#include "ui_editorfieldsoptionpage.h"
#include "ui_editorgeneraloptionpage.h"
#include "ui_editortempoptionpage.h"
#include "ui_filebrowsergeneraloptionpage.h"
#include "ui_filelayout.h"
#include "ui_id3v1optionpage.h"
#include "ui_id3v2optionpage.h"
2018-03-07 01:18:01 +01:00
#include "ui_infooptionpage.h"
#include "ui_tagprocessinggeneraloptionpage.h"
#include "ui_tagprocessingtargetsoptionpage.h"
2015-04-22 19:33:53 +02:00
#include <tagparser/backuphelper.h>
2018-03-07 01:18:01 +01:00
#include <tagparser/mediafileinfo.h>
2015-04-22 19:33:53 +02:00
#include <qtutilities/settingsdialog/optioncategory.h>
#include <qtutilities/settingsdialog/optioncategorymodel.h>
#include <qtutilities/settingsdialog/qtsettings.h>
2015-04-22 19:33:53 +02:00
#include <QFileDialog>
2015-11-21 01:13:45 +01:00
#include <functional>
using namespace std;
using namespace std::placeholders;
2015-04-22 19:33:53 +02:00
using namespace Settings;
2018-03-06 23:10:13 +01:00
using namespace TagParser;
2019-06-10 22:49:46 +02:00
using namespace QtUtilities;
2015-04-22 19:33:53 +02:00
namespace QtGui {
// FileBrowserGeneralOptionPage
2018-03-07 01:18:01 +01:00
FileBrowserGeneralOptionPage::FileBrowserGeneralOptionPage(QWidget *parentWidget)
: FileBrowserGeneralOptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
FileBrowserGeneralOptionPage::~FileBrowserGeneralOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool FileBrowserGeneralOptionPage::apply()
{
2016-10-24 20:15:10 +02:00
auto &settings = values().fileBrowser;
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
settings.hideBackupFiles = ui()->hideBackupFilesCheckBox->isChecked();
settings.readOnly = ui()->readOnlyCheckBox->isChecked();
2015-04-22 19:33:53 +02:00
}
return true;
}
void FileBrowserGeneralOptionPage::reset()
{
2016-10-24 20:15:10 +02:00
const auto &settings = values().fileBrowser;
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
ui()->hideBackupFilesCheckBox->setChecked(settings.hideBackupFiles);
ui()->readOnlyCheckBox->setChecked(settings.readOnly);
2015-04-22 19:33:53 +02:00
}
}
// EditorGeneralOptionPage
2018-03-07 01:18:01 +01:00
EditorGeneralOptionPage::EditorGeneralOptionPage(QWidget *parentWidget)
: EditorGeneralOptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
EditorGeneralOptionPage::~EditorGeneralOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool EditorGeneralOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().editor;
2018-03-07 01:18:01 +01:00
if (ui()->disableAdoptRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.adoptFields = AdoptFields::Never;
2018-03-07 01:18:01 +01:00
} else if (ui()->enableWithinDirRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.adoptFields = AdoptFields::WithinDirectory;
2018-03-07 01:18:01 +01:00
} else if (ui()->enableForAllRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.adoptFields = AdoptFields::Always;
2015-04-22 19:33:53 +02:00
}
2018-03-07 01:18:01 +01:00
if (ui()->multipleTagsOneEditorRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.multipleTagHandling = MultipleTagHandling::SingleEditorPerTarget;
2018-03-07 01:18:01 +01:00
} else if (ui()->multipleTagsSeparateEditorsRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.multipleTagHandling = MultipleTagHandling::SeparateEditors;
2015-04-22 19:33:53 +02:00
}
2016-10-24 20:15:10 +02:00
settings.saveAndShowNextOnEnter = ui()->nextWhenPressingEnterCheckBox->isChecked();
settings.askBeforeDeleting = ui()->askBeforeDeletingCheckBox->isChecked();
settings.hideTagSelectionComboBox = ui()->hideTagSelectionComboBoxCheckBox->isChecked();
settings.hideCoverButtons = ui()->hideCoverButtonsCheckBox->isChecked();
2015-04-22 19:33:53 +02:00
}
return true;
}
void EditorGeneralOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().editor;
2018-03-07 01:18:01 +01:00
switch (settings.adoptFields) {
2015-04-22 19:33:53 +02:00
case AdoptFields::Never:
ui()->disableAdoptRadioButton->setChecked(true);
break;
case AdoptFields::WithinDirectory:
ui()->enableWithinDirRadioButton->setChecked(true);
break;
case AdoptFields::Always:
ui()->enableForAllRadioButton->setChecked(true);
break;
}
2018-03-07 01:18:01 +01:00
switch (settings.multipleTagHandling) {
2015-04-22 19:33:53 +02:00
case MultipleTagHandling::SingleEditorPerTarget:
ui()->multipleTagsOneEditorRadioButton->setChecked(true);
break;
case MultipleTagHandling::SeparateEditors:
ui()->multipleTagsSeparateEditorsRadioButton->setChecked(true);
break;
}
2016-10-24 20:15:10 +02:00
ui()->nextWhenPressingEnterCheckBox->setChecked(settings.saveAndShowNextOnEnter);
ui()->askBeforeDeletingCheckBox->setChecked(settings.askBeforeDeleting);
ui()->hideTagSelectionComboBoxCheckBox->setChecked(settings.hideTagSelectionComboBox);
ui()->hideCoverButtonsCheckBox->setChecked(settings.hideCoverButtons);
2015-04-22 19:33:53 +02:00
}
}
// EditorTempOptionPage
2018-03-07 01:18:01 +01:00
EditorTempOptionPage::EditorTempOptionPage(QWidget *parentWindow)
: EditorTempOptionPageBase(parentWindow)
{
}
2015-04-22 19:33:53 +02:00
EditorTempOptionPage::~EditorTempOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool EditorTempOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2018-07-10 16:35:50 +02:00
values().editor.backupDirectory = ui()->directoryWidget->lineEdit()->text().toStdString();
2015-04-22 19:33:53 +02:00
}
return true;
}
void EditorTempOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2018-07-10 16:35:50 +02:00
ui()->directoryWidget->lineEdit()->setText(QString::fromStdString(values().editor.backupDirectory));
2015-04-22 19:33:53 +02:00
}
}
QWidget *EditorTempOptionPage::setupWidget()
{
2016-04-04 14:51:14 +02:00
auto *widget = EditorTempOptionPageBase::setupWidget();
2018-03-07 01:18:01 +01:00
ui()->notificationLabel->setText(QCoreApplication::translate(
"QtGui::EditorTempOptionPage", "To avoid unnecessary copying this directory should be on the same partition as the files you want to edit."));
2016-03-22 23:01:50 +01:00
ui()->notificationLabel->setNotificationType(NotificationType::Information);
2015-04-22 19:33:53 +02:00
return widget;
}
// EditorFieldsOptionPage
2018-03-07 01:18:01 +01:00
EditorFieldsOptionPage::EditorFieldsOptionPage(QWidget *parentWidget)
: EditorFieldsOptionPageBase(parentWidget)
, m_model(nullptr)
{
}
2015-04-22 19:33:53 +02:00
EditorFieldsOptionPage::~EditorFieldsOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool EditorFieldsOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown() && m_model) {
2016-10-24 20:15:10 +02:00
values().editor.fields.setItems(m_model->items());
2015-04-22 19:33:53 +02:00
}
return true;
}
void EditorFieldsOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown() && m_model) {
2016-10-24 20:15:10 +02:00
m_model->setItems(values().editor.fields.items());
2015-04-22 19:33:53 +02:00
}
}
QWidget *EditorFieldsOptionPage::setupWidget()
{
2016-04-04 14:51:14 +02:00
auto *w = EditorFieldsOptionPageBase::setupWidget();
2018-03-07 01:18:01 +01:00
if (!m_model) {
2015-04-22 19:33:53 +02:00
m_model = new KnownFieldModel(w);
}
ui()->fieldsListView->setModel(m_model);
return w;
}
// EditorAutoCorrectionOptionPage
2018-03-07 01:18:01 +01:00
EditorAutoCorrectionOptionPage::EditorAutoCorrectionOptionPage(QWidget *parentWidget)
: EditorAutoCorrectionOptionPageBase(parentWidget)
, m_model(nullptr)
{
}
2015-04-22 19:33:53 +02:00
EditorAutoCorrectionOptionPage::~EditorAutoCorrectionOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool EditorAutoCorrectionOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().editor.autoCompletition;
settings.insertTitleFromFilename = ui()->insertTitleFromFilenameCheckBox->isChecked();
settings.trimWhitespaces = ui()->trimWhitespacesCheckBox->isChecked();
settings.formatNames = ui()->formatNamesCheckBox->isChecked();
settings.fixUmlauts = ui()->fixUmlautsCheckBox->isChecked();
auto &subst = settings.customSubstitution;
subst.enabled = ui()->customSubstitutionGroupBox->isChecked();
subst.regex = QRegularExpression(ui()->regularExpressionLineEdit->text());
subst.replacement = ui()->replacementLineEdit->text();
2018-03-07 01:18:01 +01:00
if (m_model) {
2016-10-24 20:15:10 +02:00
settings.fields.setItems(m_model->items());
2015-04-22 19:33:53 +02:00
}
}
return true;
}
void EditorAutoCorrectionOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().editor.autoCompletition;
ui()->insertTitleFromFilenameCheckBox->setChecked(settings.insertTitleFromFilename);
ui()->trimWhitespacesCheckBox->setChecked(settings.trimWhitespaces);
ui()->formatNamesCheckBox->setChecked(settings.formatNames);
ui()->fixUmlautsCheckBox->setChecked(settings.fixUmlauts);
const auto &subst = settings.customSubstitution;
ui()->customSubstitutionGroupBox->setChecked(subst.enabled);
ui()->regularExpressionLineEdit->setText(subst.regex.pattern());
ui()->replacementLineEdit->setText(subst.replacement);
2018-03-07 01:18:01 +01:00
if (m_model) {
2016-10-24 20:15:10 +02:00
m_model->setItems(settings.fields.items());
2015-04-22 19:33:53 +02:00
}
}
}
QWidget *EditorAutoCorrectionOptionPage::setupWidget()
{
2016-04-04 14:51:14 +02:00
auto *w = EditorAutoCorrectionOptionPageBase::setupWidget();
2018-03-07 01:18:01 +01:00
if (!m_model) {
2015-04-22 19:33:53 +02:00
m_model = new KnownFieldModel(w);
}
ui()->fieldsListView->setModel(m_model);
return w;
}
// EditorDbQueryOptionsPage
2018-03-07 01:18:01 +01:00
EditorDbQueryOptionsPage::EditorDbQueryOptionsPage(QWidget *parentWidget)
: EditorDbQueryOptionsPageBase(parentWidget)
{
}
EditorDbQueryOptionsPage::~EditorDbQueryOptionsPage()
2018-03-07 01:18:01 +01:00
{
}
bool EditorDbQueryOptionsPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().dbQuery;
settings.musicBrainzUrl = ui()->musicBrainzUrlLineEdit->text();
2019-04-16 23:08:54 +02:00
settings.lyricsWikiaUrl = ui()->lyricWikiUrlLineEdit->text();
2016-10-24 20:15:10 +02:00
settings.coverArtArchiveUrl = ui()->coverArtArchiveUrlLineEdit->text();
}
return true;
}
void EditorDbQueryOptionsPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().dbQuery;
ui()->musicBrainzUrlLineEdit->setText(settings.musicBrainzUrl);
2019-04-16 23:08:54 +02:00
ui()->lyricWikiUrlLineEdit->setText(settings.lyricsWikiaUrl);
2016-10-24 20:15:10 +02:00
ui()->coverArtArchiveUrlLineEdit->setText(settings.coverArtArchiveUrl);
}
}
2015-04-22 19:33:53 +02:00
// InfoOptionPage
2018-03-07 01:18:01 +01:00
InfoOptionPage::InfoOptionPage(QWidget *parentWidget)
: InfoOptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
InfoOptionPage::~InfoOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool InfoOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().editor;
settings.forceFullParse = ui()->forceFullParseCheckBox->isChecked();
#ifndef TAGEDITOR_NO_WEBVIEW
2016-10-24 20:15:10 +02:00
settings.noWebView = ui()->noWebViewCheckBox->isChecked();
#endif
2015-04-22 19:33:53 +02:00
}
return true;
}
void InfoOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().editor;
ui()->forceFullParseCheckBox->setChecked(settings.forceFullParse);
#ifdef TAGEDITOR_NO_WEBVIEW
ui()->noWebViewCheckBox->setChecked(true);
ui()->noWebViewCheckBox->setEnabled(false);
#else
2016-10-24 20:15:10 +02:00
ui()->noWebViewCheckBox->setChecked(settings.noWebView);
#endif
2015-04-22 19:33:53 +02:00
}
}
// TagProcessingGeneralOptionPage
2018-03-07 01:18:01 +01:00
TagProcessingGeneralOptionPage::TagProcessingGeneralOptionPage(QWidget *parentWidget)
: TagProcessingGeneralOptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
TagProcessingGeneralOptionPage::~TagProcessingGeneralOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool TagProcessingGeneralOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().tagPocessing;
2018-03-07 01:18:01 +01:00
if (ui()->latin1RadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredEncoding = TagTextEncoding::Latin1;
2018-03-07 01:18:01 +01:00
} else if (ui()->utf8RadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredEncoding = TagTextEncoding::Utf8;
2018-03-07 01:18:01 +01:00
} else if (ui()->utf16leRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredEncoding = TagTextEncoding::Utf16LittleEndian;
2018-03-07 01:18:01 +01:00
} else if (ui()->utf16beRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredEncoding = TagTextEncoding::Utf16BigEndian;
2018-03-07 01:18:01 +01:00
} else if (ui()->autoRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredEncoding = TagTextEncoding::Unspecified;
2015-04-22 19:33:53 +02:00
}
2018-03-07 01:18:01 +01:00
if (ui()->ignoreUnsupportedRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.unsupportedFieldHandling = UnsupportedFieldHandling::Ignore;
2018-03-07 01:18:01 +01:00
} else if (ui()->discardUnsupportedRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.unsupportedFieldHandling = UnsupportedFieldHandling::Discard;
2015-04-22 19:33:53 +02:00
}
2016-10-24 20:15:10 +02:00
settings.autoTagManagement = ui()->autoTagManagementCheckBox->isChecked();
settings.preserveModificationTime = ui()->preserveModificationTimeCheckBox->isChecked();
settings.preserveMuxingApp = ui()->preserveMuxingAppCheckBox->isChecked();
settings.preserveWritingApp = ui()->preserveWritingAppCheckBox->isChecked();
settings.convertTotalFields = ui()->convertTotalFieldsCheckBox->isChecked();
2015-04-22 19:33:53 +02:00
}
return true;
}
void TagProcessingGeneralOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().tagPocessing;
2018-03-07 01:18:01 +01:00
switch (settings.preferredEncoding) {
2015-04-22 19:33:53 +02:00
case TagTextEncoding::Latin1:
ui()->latin1RadioButton->setChecked(true);
break;
case TagTextEncoding::Utf8:
ui()->utf8RadioButton->setChecked(true);
break;
case TagTextEncoding::Utf16LittleEndian:
ui()->utf16leRadioButton->setChecked(true);
break;
case TagTextEncoding::Utf16BigEndian:
ui()->utf16beRadioButton->setChecked(true);
break;
case TagTextEncoding::Unspecified:
ui()->autoRadioButton->setChecked(true);
break;
}
2018-03-07 01:18:01 +01:00
switch (settings.unsupportedFieldHandling) {
2015-04-22 19:33:53 +02:00
case UnsupportedFieldHandling::Ignore:
ui()->ignoreUnsupportedRadioButton->setChecked(true);
break;
case UnsupportedFieldHandling::Discard:
ui()->discardUnsupportedRadioButton->setChecked(true);
break;
}
2016-10-24 20:15:10 +02:00
ui()->autoTagManagementCheckBox->setChecked(settings.autoTagManagement);
ui()->preserveModificationTimeCheckBox->setChecked(settings.preserveModificationTime);
ui()->preserveMuxingAppCheckBox->setChecked(settings.preserveMuxingApp);
ui()->preserveWritingAppCheckBox->setChecked(settings.preserveWritingApp);
ui()->convertTotalFieldsCheckBox->setChecked(settings.convertTotalFields);
2015-04-22 19:33:53 +02:00
}
}
// Id3v1OptionPage
2018-03-07 01:18:01 +01:00
Id3v1OptionPage::Id3v1OptionPage(QWidget *parentWidget)
: Id3v1OptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
Id3v1OptionPage::~Id3v1OptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool Id3v1OptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
auto &settings = values().tagPocessing.creationSettings;
2018-03-07 01:18:01 +01:00
if (ui()->alwaysCreateRadioButton->isChecked()) {
settings.id3v1usage = TagUsage::Always;
2018-03-07 01:18:01 +01:00
} else if (ui()->keepExistingRadioButton->isChecked()) {
settings.id3v1usage = TagUsage::KeepExisting;
2018-03-07 01:18:01 +01:00
} else if (ui()->removeExistingRadioButton->isChecked()) {
settings.id3v1usage = TagUsage::Never;
2015-04-22 19:33:53 +02:00
}
}
return true;
}
void Id3v1OptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
const auto &settings = values().tagPocessing.creationSettings;
switch (settings.id3v1usage) {
2015-04-22 19:33:53 +02:00
case TagUsage::Always:
ui()->alwaysCreateRadioButton->setChecked(true);
break;
case TagUsage::KeepExisting:
ui()->keepExistingRadioButton->setChecked(true);
break;
case TagUsage::Never:
ui()->removeExistingRadioButton->setChecked(true);
break;
}
}
}
// Id3v2OptionPage
2018-03-07 01:18:01 +01:00
Id3v2OptionPage::Id3v2OptionPage(QWidget *parentWidget)
: Id3v2OptionPageBase(parentWidget)
{
}
2015-04-22 19:33:53 +02:00
Id3v2OptionPage::~Id3v2OptionPage()
2018-03-07 01:18:01 +01:00
{
}
2015-04-22 19:33:53 +02:00
bool Id3v2OptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
auto &settings = values().tagPocessing.creationSettings;
2018-03-07 01:18:01 +01:00
if (ui()->alwaysCreateRadioButton->isChecked()) {
settings.id3v2usage = TagUsage::Always;
2018-03-07 01:18:01 +01:00
} else if (ui()->keepExistingRadioButton->isChecked()) {
settings.id3v2usage = TagUsage::KeepExisting;
2018-03-07 01:18:01 +01:00
} else if (ui()->removeExistingRadioButton->isChecked()) {
settings.id3v2usage = TagUsage::Never;
2015-04-22 19:33:53 +02:00
}
2018-03-07 01:18:01 +01:00
if (ui()->version230radioButton->isChecked()) {
settings.id3v2MajorVersion = 3;
2018-03-07 01:18:01 +01:00
} else if (ui()->version240radioButton->isChecked()) {
settings.id3v2MajorVersion = 4;
2018-03-07 01:18:01 +01:00
} else if (ui()->version220radioButton->isChecked()) {
settings.id3v2MajorVersion = 2;
2015-04-22 19:33:53 +02:00
}
settings.setFlag(TagCreationFlags::KeepExistingId3v2Version, ui()->keepExistingVersionCheckBox->isChecked());
settings.setFlag(TagCreationFlags::MergeMultipleSuccessiveId3v2Tags, ui()->mergeRadioButton->isChecked());
2015-04-22 19:33:53 +02:00
}
return true;
}
void Id3v2OptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
const auto &settings = values().tagPocessing.creationSettings;
switch (settings.id3v2usage) {
2015-04-22 19:33:53 +02:00
case TagUsage::Always:
ui()->alwaysCreateRadioButton->setChecked(true);
break;
case TagUsage::KeepExisting:
ui()->keepExistingRadioButton->setChecked(true);
break;
case TagUsage::Never:
ui()->removeExistingRadioButton->setChecked(true);
break;
}
switch (settings.id3v2MajorVersion) {
2015-04-22 19:33:53 +02:00
case 3:
ui()->version230radioButton->setChecked(true);
break;
case 4:
ui()->version240radioButton->setChecked(true);
break;
case 2:
ui()->version220radioButton->setChecked(true);
break;
}
ui()->keepExistingVersionCheckBox->setChecked(settings.flags & TagCreationFlags::KeepExistingId3v2Version);
if (settings.flags & TagCreationFlags::MergeMultipleSuccessiveId3v2Tags) {
2015-04-22 19:33:53 +02:00
ui()->mergeRadioButton->setChecked(true);
} else {
ui()->keepSeparateRadioButton->setChecked(true);
}
}
}
2016-05-26 02:15:41 +02:00
// TagProcessingTargetsOptionPage
2018-03-07 01:18:01 +01:00
TagProcessingTargetsOptionPage::TagProcessingTargetsOptionPage(QWidget *parentWidget)
: TagProcessingTargetsOptionPageBase(parentWidget)
, m_model(nullptr)
{
}
2016-05-26 02:15:41 +02:00
TagProcessingTargetsOptionPage::~TagProcessingTargetsOptionPage()
2018-03-07 01:18:01 +01:00
{
}
2016-05-26 02:15:41 +02:00
bool TagProcessingTargetsOptionPage::apply()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown() && m_model) {
2016-10-24 20:15:10 +02:00
values().editor.defaultTargets.setItems(m_model->items());
2016-05-26 02:15:41 +02:00
}
return true;
}
void TagProcessingTargetsOptionPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown() && m_model) {
2016-10-24 20:15:10 +02:00
m_model->setItems(values().editor.defaultTargets.items());
2016-05-26 02:15:41 +02:00
}
}
QWidget *TagProcessingTargetsOptionPage::setupWidget()
{
auto *w = TagProcessingTargetsOptionPageBase::setupWidget();
2018-03-07 01:18:01 +01:00
if (!m_model) {
2016-05-26 02:15:41 +02:00
m_model = new TargetLevelModel(w);
}
ui()->targetsToBeAddedListView->setModel(m_model);
return w;
}
2015-11-21 01:13:45 +01:00
// FileLayoutPage
2018-03-07 01:18:01 +01:00
FileLayoutPage::FileLayoutPage(QWidget *parentWidget)
: FileLayoutPageBase(parentWidget)
{
}
2015-11-21 01:13:45 +01:00
FileLayoutPage::~FileLayoutPage()
2018-03-07 01:18:01 +01:00
{
}
2015-11-21 01:13:45 +01:00
bool FileLayoutPage::apply()
{
2016-04-04 14:51:14 +02:00
// error handling
errors().clear();
bool ok = true;
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
auto &settings = values().tagPocessing.fileLayout;
settings.forceRewrite = ui()->forceRewriteCheckBox->isChecked();
2018-03-07 01:18:01 +01:00
if (ui()->minPaddingSpinBox->value() > ui()->maxPaddingSpinBox->value()) {
2016-04-04 14:51:14 +02:00
errors() << QCoreApplication::translate("QtGui::FileLayoutPage", "Minimum padding must be less or equal than maximum padding.");
ok = false;
} else {
2016-10-24 20:15:10 +02:00
settings.maxPadding = static_cast<size_t>(ui()->maxPaddingSpinBox->value());
settings.minPadding = static_cast<size_t>(ui()->minPaddingSpinBox->value());
2015-11-21 01:13:45 +01:00
}
2016-10-24 20:15:10 +02:00
settings.preferredPadding = static_cast<size_t>(ui()->preferredPaddingSpinBox->value());
2018-03-07 01:18:01 +01:00
if (ui()->tagPosBeforeDataRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredTagPosition = ElementPosition::BeforeData;
2018-03-07 01:18:01 +01:00
} else if (ui()->tagPosAfterDataRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredTagPosition = ElementPosition::AfterData;
2018-03-07 01:18:01 +01:00
} else if (ui()->tagPosKeepRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredTagPosition = ElementPosition::Keep;
2015-11-21 01:13:45 +01:00
}
2016-10-24 20:15:10 +02:00
settings.forceTagPosition = ui()->tagPosForceCheckBox->isChecked();
2018-03-07 01:18:01 +01:00
if (ui()->indexPosBeforeDataRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredIndexPosition = ElementPosition::BeforeData;
2018-03-07 01:18:01 +01:00
} else if (ui()->indexPosAfterDataRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredIndexPosition = ElementPosition::AfterData;
2018-03-07 01:18:01 +01:00
} else if (ui()->indexPosKeepRadioButton->isChecked()) {
2016-10-24 20:15:10 +02:00
settings.preferredIndexPosition = ElementPosition::Keep;
2015-11-26 19:25:59 +01:00
}
2016-10-24 20:15:10 +02:00
settings.forceIndexPosition = ui()->indexPosForceCheckBox->isChecked();
2015-11-21 01:13:45 +01:00
}
2016-04-04 14:51:14 +02:00
return ok;
2015-11-21 01:13:45 +01:00
}
void FileLayoutPage::reset()
{
2018-03-07 01:18:01 +01:00
if (hasBeenShown()) {
2016-10-24 20:15:10 +02:00
const auto &settings = values().tagPocessing.fileLayout;
ui()->forceRewriteCheckBox->setChecked(settings.forceRewrite);
ui()->maxPaddingSpinBox->setValue(static_cast<int>(settings.maxPadding));
ui()->minPaddingSpinBox->setValue(static_cast<int>(settings.minPadding));
ui()->preferredPaddingSpinBox->setValue(static_cast<int>(settings.preferredPadding));
2018-03-07 01:18:01 +01:00
switch (settings.preferredTagPosition) {
2015-11-26 19:25:59 +01:00
case ElementPosition::BeforeData:
ui()->tagPosBeforeDataRadioButton->setChecked(true);
break;
case ElementPosition::AfterData:
ui()->tagPosAfterDataRadioButton->setChecked(true);
break;
case ElementPosition::Keep:
ui()->tagPosKeepRadioButton->setChecked(true);
break;
}
2016-10-24 20:15:10 +02:00
ui()->tagPosForceCheckBox->setChecked(settings.forceTagPosition);
2018-03-07 01:18:01 +01:00
switch (settings.preferredIndexPosition) {
2015-11-26 19:25:59 +01:00
case ElementPosition::BeforeData:
ui()->indexPosBeforeDataRadioButton->setChecked(true);
break;
case ElementPosition::AfterData:
ui()->indexPosAfterDataRadioButton->setChecked(true);
2015-11-21 01:13:45 +01:00
break;
2015-11-26 19:25:59 +01:00
case ElementPosition::Keep:
ui()->indexPosKeepRadioButton->setChecked(true);
2015-11-21 01:13:45 +01:00
break;
}
2016-10-24 20:15:10 +02:00
ui()->indexPosForceCheckBox->setChecked(settings.forceIndexPosition);
2015-11-21 01:13:45 +01:00
}
}
QWidget *FileLayoutPage::setupWidget()
{
2016-04-04 14:51:14 +02:00
auto *widget = FileLayoutPageBase::setupWidget();
2015-11-21 01:13:45 +01:00
ui()->preferredTagPosLabel->setNotificationType(NotificationType::Warning);
2018-03-07 01:18:01 +01:00
ui()->preferredTagPosLabel->setText(QApplication::translate(
"QtGui::FileLayoutPage", "These options might be ignored if not supported by either the format or the implementation."));
QObject::connect(
ui()->minPaddingSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui()->maxPaddingSpinBox, &QSpinBox::setMinimum);
QObject::connect(
ui()->minPaddingSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui()->preferredPaddingSpinBox, &QSpinBox::setMinimum);
QObject::connect(
ui()->maxPaddingSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui()->minPaddingSpinBox, &QSpinBox::setMaximum);
QObject::connect(
ui()->maxPaddingSpinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), ui()->preferredPaddingSpinBox, &QSpinBox::setMaximum);
2015-11-21 01:13:45 +01:00
return widget;
}
2018-03-07 01:18:01 +01:00
SettingsDialog::SettingsDialog(QWidget *parent)
2019-06-10 22:49:46 +02:00
: QtUtilities::SettingsDialog(parent)
2015-04-22 19:33:53 +02:00
{
// setup categories
2019-06-10 22:49:46 +02:00
QList<OptionCategory *> categories;
OptionCategory *category;
2015-04-22 19:33:53 +02:00
2019-06-10 22:49:46 +02:00
category = new OptionCategory(this);
2015-04-22 19:33:53 +02:00
category->setDisplayName(tr("Tag processing"));
category->assignPages(
{ new TagProcessingGeneralOptionPage, new Id3v1OptionPage, new Id3v2OptionPage, new TagProcessingTargetsOptionPage, new FileLayoutPage });
category->setIcon(QIcon::fromTheme(QStringLiteral("tag"), QIcon(QStringLiteral(":/tageditor/icons/hicolor/32x32/settingscategories/tag.svg"))));
2015-04-22 19:33:53 +02:00
categories << category;
2019-06-10 22:49:46 +02:00
category = new OptionCategory(this);
2015-04-22 19:33:53 +02:00
category->setDisplayName(tr("Editor"));
category->setIcon(QIcon::fromTheme(
QStringLiteral("document-edit"), QIcon(QStringLiteral(":/tageditor/icons/hicolor/32x32/settingscategories/document-edit.svg"))));
category->assignPages({ new EditorGeneralOptionPage, new EditorTempOptionPage(this), new EditorFieldsOptionPage, new InfoOptionPage,
new EditorAutoCorrectionOptionPage, new EditorDbQueryOptionsPage });
2015-04-22 19:33:53 +02:00
categories << category;
2019-06-10 22:49:46 +02:00
category = new OptionCategory(this);
2015-04-22 19:33:53 +02:00
category->setDisplayName(tr("File browser"));
2018-03-07 01:18:01 +01:00
category->setIcon(QIcon::fromTheme(
QStringLiteral("view-list-tree"), QIcon(QStringLiteral(":/tageditor/icons/hicolor/32x32/settingscategories/view-list-tree.svg"))));
category->assignPages({ new FileBrowserGeneralOptionPage });
2015-04-22 19:33:53 +02:00
categories << category;
2016-04-04 14:51:14 +02:00
2016-10-24 20:15:10 +02:00
categories << values().qt.category();
2016-04-04 14:51:14 +02:00
2015-04-22 19:33:53 +02:00
categoryModel()->setCategories(categories);
setMinimumSize(800, 450);
2018-03-07 01:18:01 +01:00
setWindowIcon(QIcon::fromTheme(
QStringLiteral("preferences-other"), QIcon(QStringLiteral(":/tageditor/icons/hicolor/32x32/settingscategories/preferences-other.svg"))));
2016-08-14 22:49:47 +02:00
2023-03-26 21:48:25 +02:00
connect(this, &SettingsDialog::applied, std::bind(&QtSettings::apply, &::Settings::values().qt));
2015-04-22 19:33:53 +02:00
}
SettingsDialog::~SettingsDialog()
2018-03-07 01:18:01 +01:00
{
2015-04-22 19:33:53 +02:00
}
2018-03-07 01:18:01 +01:00
} // namespace QtGui
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, FileBrowserGeneralOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, EditorGeneralOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, EditorTempOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, EditorFieldsOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, EditorAutoCorrectionOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, EditorDbQueryOptionsPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, InfoOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, TagProcessingGeneralOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, Id3v1OptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, Id3v2OptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, TagProcessingTargetsOptionPage)
INSTANTIATE_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, FileLayoutPage)