GUI: BCP 47: make use of ISO 639-3 languages configurable

Part of the implementation of #3007.
This commit is contained in:
Moritz Bunkus 2021-02-17 18:16:26 +01:00
parent 6a5b4b97db
commit 10e48d0841
No known key found for this signature in database
GPG Key ID: 74AF00ADF2E32C85
9 changed files with 42 additions and 11 deletions

View File

@ -36,7 +36,7 @@
namespace mtx::gui {
static Iso639LanguageList s_iso639Languages, s_commonIso639Languages;
static Iso639LanguageList s_iso639Languages, s_iso639_2Languages, s_commonIso639Languages;
static RegionList s_regions, s_commonRegions;
static CharacterSetList s_characterSets, s_commonCharacterSets;
static QHash<QString, QString> s_iso639_2LanguageCodeToDescription, s_regionToDescription;
@ -209,6 +209,7 @@ App::retranslateUi() {
void
App::reinitializeLanguageLists() {
s_iso639Languages.clear();
s_iso639_2Languages.clear();
s_commonIso639Languages.clear();
s_regions.clear();
s_commonRegions.clear();
@ -237,6 +238,7 @@ App::initializeIso639Languages() {
auto &cfg = Util::Settings::get();
s_iso639Languages.reserve(mtx::iso639::g_languages.size());
s_iso639_2Languages.reserve(mtx::iso639::g_languages.size());
s_commonIso639Languages.reserve(cfg.m_oftenUsedLanguages.size());
for (auto const &language : mtx::iso639::g_languages) {
@ -246,13 +248,16 @@ App::initializeIso639Languages() {
auto isCommon = cfg.m_oftenUsedLanguages.indexOf(languageCode) != -1;
s_iso639Languages.emplace_back(description, languageCode);
if (language.is_part_of_iso639_2)
s_iso639_2Languages.emplace_back(description, languageCode);
if (isCommon)
s_commonIso639Languages.emplace_back(description, languageCode);
s_iso639_2LanguageCodeToDescription[languageCode] = description;
}
std::sort(s_iso639Languages.begin(), s_iso639Languages.end());
std::sort(s_iso639Languages.begin(), s_iso639Languages.end());
std::sort(s_iso639_2Languages.begin(), s_iso639_2Languages.end());
std::sort(s_commonIso639Languages.begin(), s_commonIso639Languages.end());
}
@ -306,6 +311,12 @@ App::iso639Languages() {
return s_iso639Languages;
}
Iso639LanguageList const &
App::iso639_2Languages() {
initializeLanguageLists();
return s_iso639_2Languages;
}
Iso639LanguageList const &
App::commonIso639Languages() {
initializeLanguageLists();

View File

@ -101,6 +101,7 @@ public:
static Jobs::ProgramRunner &programRunner();
static Iso639LanguageList const &iso639Languages();
static Iso639LanguageList const &iso639_2Languages();
static Iso639LanguageList const &commonIso639Languages();
static RegionList const &regions();
static RegionList const &commonRegions();

View File

@ -314,6 +314,13 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbUseISO639_3Languages">
<property name="text">
<string>Enable &amp;ISO 639-3 languages</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="cbOftenUsedLanguagesOnly">
<property name="text">
@ -2200,6 +2207,7 @@
<tabstop>cbGuiWarnBeforeOverwriting</tabstop>
<tabstop>tbOftenUsedXYZ</tabstop>
<tabstop>tbOftenUsedLanguages</tabstop>
<tabstop>cbUseISO639_3Languages</tabstop>
<tabstop>cbOftenUsedLanguagesOnly</tabstop>
<tabstop>tbOftenUsedRegions</tabstop>
<tabstop>cbOftenUsedRegionsOnly</tabstop>

View File

@ -76,10 +76,12 @@ PreferencesDialog::PreferencesDialog(QWidget *parent,
adjustRemoveOldJobsControls();
setupJobRemovalPolicy();
setupCommonLanguages();
setupCommonLanguages(m_cfg.m_useISO639_3Languages);
setupCommonRegions();
setupCommonCharacterSets();
ui->cbUseISO639_3Languages->setChecked(m_cfg.m_useISO639_3Languages);
// Merge page
if (!m_cfg.m_mediaInfoExe.isEmpty())
ui->leMMediaInfoExe->setText(QDir::toNativeSeparators(m_cfg.m_mediaInfoExe));
@ -505,6 +507,8 @@ PreferencesDialog::setupToolTips() {
void
PreferencesDialog::setupConnections() {
connect(ui->cbUseISO639_3Languages, &QCheckBox::toggled, this, &PreferencesDialog::setupCommonLanguages);
connect(ui->pbMEditDefaultAdditionalCommandLineOptions, &QPushButton::clicked, this, &PreferencesDialog::editDefaultAdditionalCommandLineOptions);
connect(ui->pbMBrowseMediaInfoExe, &QPushButton::clicked, this, &PreferencesDialog::browseMediaInfoExe);
@ -575,8 +579,8 @@ PreferencesDialog::setupJobRemovalPolicy() {
}
void
PreferencesDialog::setupCommonLanguages() {
auto &allLanguages = App::iso639Languages();
PreferencesDialog::setupCommonLanguages(bool withISO639_3) {
auto &allLanguages = withISO639_3 ? App::iso639Languages() : App::iso639_2Languages();
ui->tbOftenUsedLanguages->setItems(QList<Util::SideBySideMultiSelect::Item>::fromVector(Util::stdVectorToQVector<Util::SideBySideMultiSelect::Item>(allLanguages)), m_cfg.m_oftenUsedLanguages);
ui->cbOftenUsedLanguagesOnly->setChecked(m_cfg.m_oftenUsedLanguagesOnly && !m_cfg.m_oftenUsedLanguages.isEmpty());
@ -962,6 +966,7 @@ PreferencesDialog::save() {
m_cfg.m_oftenUsedLanguagesOnly = ui->cbOftenUsedLanguagesOnly ->isChecked() && !m_cfg.m_oftenUsedLanguages .isEmpty();
m_cfg.m_oftenUsedRegionsOnly = ui->cbOftenUsedRegionsOnly ->isChecked() && !m_cfg.m_oftenUsedRegions .isEmpty();
m_cfg.m_oftenUsedCharacterSetsOnly = ui->cbOftenUsedCharacterSetsOnly->isChecked() && !m_cfg.m_oftenUsedCharacterSets.isEmpty();
m_cfg.m_useISO639_3Languages = ui->cbUseISO639_3Languages ->isChecked();
// Info tool page
m_cfg.m_defaultInfoJobSettings = ui->wIDefaultJobSettings->settings();

View File

@ -72,6 +72,7 @@ public Q_SLOTS:
void adjustPlaylistControls();
void adjustRemoveOldJobsControls();
void revertDeriveTrackLanguageFromFileNameRegex();
void setupCommonLanguages(bool withISO639_3);
void enableOftendUsedLanguagesOnly();
void enableOftendUsedRegionsOnly();
@ -91,7 +92,6 @@ protected:
void setupDerivingTrackLanguagesFromFileName();
void setupWhenToSetDefaultLanguage();
void setupJobRemovalPolicy();
void setupCommonLanguages();
void setupCommonRegions();
void setupCommonCharacterSets();
void setupProcessPriority();

View File

@ -70,9 +70,11 @@ LanguageComboBox::setup(bool withEmpty,
insertSeparator(commonLanguages.size() + separatorOffset);
}
if (!onlyOftenUsed)
for (auto const &language : App::iso639Languages())
if (!onlyOftenUsed) {
auto &languages = Util::Settings::get().m_useISO639_3Languages ? App::iso639Languages() : App::iso639_2Languages();
for (auto const &language : languages)
addItem(language.first, language.second);
}
view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
Util::fixComboBoxViewWidth(*this);

View File

@ -331,9 +331,10 @@ Settings::load() {
m_oftenUsedRegions = reg.value(s_valOftenUsedRegions).toStringList();
m_oftenUsedCharacterSets = reg.value(s_valOftenUsedCharacterSets).toStringList();
m_oftenUsedLanguagesOnly = reg.value(s_valOftenUsedLanguagesOnly, false).toBool();;
m_oftenUsedRegionsOnly = reg.value(s_valOftenUsedRegionsOnly, false).toBool();;
m_oftenUsedCharacterSetsOnly = reg.value(s_valOftenUsedCharacterSetsOnly, false).toBool();;
m_oftenUsedLanguagesOnly = reg.value(s_valOftenUsedLanguagesOnly, false).toBool();
m_oftenUsedRegionsOnly = reg.value(s_valOftenUsedRegionsOnly, false).toBool();
m_oftenUsedCharacterSetsOnly = reg.value(s_valOftenUsedCharacterSetsOnly, false).toBool();
m_useISO639_3Languages = reg.value(s_valUseISO639_3Languages, false).toBool();
m_scanForPlaylistsPolicy = static_cast<ScanForPlaylistsPolicy>(reg.value(s_valScanForPlaylistsPolicy, static_cast<int>(AskBeforeScanning)).toInt());
m_minimumPlaylistDuration = reg.value(s_valMinimumPlaylistDuration, 120).toUInt();
@ -692,6 +693,7 @@ Settings::save()
reg.setValue(s_valOftenUsedLanguagesOnly, m_oftenUsedLanguagesOnly);
reg.setValue(s_valOftenUsedRegionsOnly, m_oftenUsedRegionsOnly);
reg.setValue(s_valOftenUsedCharacterSetsOnly, m_oftenUsedCharacterSetsOnly);
reg.setValue(s_valUseISO639_3Languages, m_useISO639_3Languages);
reg.setValue(s_valScanForPlaylistsPolicy, static_cast<int>(m_scanForPlaylistsPolicy));
reg.setValue(s_valMinimumPlaylistDuration, m_minimumPlaylistDuration);

View File

@ -157,6 +157,7 @@ public:
QString m_chapterNameTemplate, m_defaultChapterCountry, m_ceTextFileCharacterSet, m_defaultSubtitleCharset, m_defaultAdditionalMergeOptions;
QStringList m_oftenUsedLanguages, m_oftenUsedRegions, m_oftenUsedCharacterSets;
bool m_oftenUsedLanguagesOnly, m_oftenUsedRegionsOnly, m_oftenUsedCharacterSetsOnly;
bool m_useISO639_3Languages;
ProcessPriority m_priority;
double m_probeRangePercentage;
QTabWidget::TabPosition m_tabPosition;

View File

@ -123,6 +123,7 @@ char const * const s_valUiStayOnTop = "uiStayOnTop";
char const * const s_valUiLocale = "uiLocale";
char const * const s_valUniqueOutputFileNames = "uniqueOutputFileNames";
char const * const s_valUseDefaultJobDescription = "useDefaultJobDescription";
char const * const s_valUseISO639_3Languages = "useISO639_3Languages";
char const * const s_valVerbosity = "verbosity";
char const * const s_valVideoPolicy = "videoPolicy";
char const * const s_valVolume = "volume";