mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2025-02-26 08:22:31 +00:00
GUI: prefs: remember 10 recently used "fixed/relative output directories"
Inspired by the feature requested in #2468.
This commit is contained in:
parent
f097b1feb4
commit
0aee0cc2a6
4
NEWS.md
4
NEWS.md
@ -7,6 +7,10 @@
|
||||
* mkvextract: WAV extractor: mkvextract will now write W64 files instead of
|
||||
WAV files if the file name extension is `.w64` or if the final file size is
|
||||
bigger than 4 GB, the file size limit for WAV files. Implements #2458.
|
||||
* MKVToolNix GUI: preferences: the ten most recently used values for the
|
||||
"relative output directory" and "fixed output directory" settings are now
|
||||
saved. The corresponding settings have been changed into combo boxes
|
||||
allowing quick access to those recent values.
|
||||
|
||||
## Bug fixes
|
||||
|
||||
|
@ -1010,7 +1010,11 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="leMAutoSetRelativeDirectory"/>
|
||||
<widget class="QComboBox" name="cbMAutoSetRelativeDirectory">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
@ -1040,7 +1044,17 @@
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="leMAutoSetFixedDirectory"/>
|
||||
<widget class="QComboBox" name="cbMAutoSetFixedDirectory">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pbMBrowseAutoSetFixedDirectory">
|
||||
@ -1994,9 +2008,9 @@
|
||||
<tabstop>rbMAutoSetSameDirectory</tabstop>
|
||||
<tabstop>rbMAutoSetPreviousDirectory</tabstop>
|
||||
<tabstop>rbMAutoSetRelativeDirectory</tabstop>
|
||||
<tabstop>leMAutoSetRelativeDirectory</tabstop>
|
||||
<tabstop>cbMAutoSetRelativeDirectory</tabstop>
|
||||
<tabstop>rbMAutoSetFixedDirectory</tabstop>
|
||||
<tabstop>leMAutoSetFixedDirectory</tabstop>
|
||||
<tabstop>cbMAutoSetFixedDirectory</tabstop>
|
||||
<tabstop>pbMBrowseAutoSetFixedDirectory</tabstop>
|
||||
<tabstop>cbMUniqueOutputFileNames</tabstop>
|
||||
<tabstop>cbMAutoClearOutputFileName</tabstop>
|
||||
|
@ -585,11 +585,19 @@ PreferencesDialog::setupOutputFileNamePolicy() {
|
||||
: Util::Settings::ToRelativeOfFirstInputFile == m_cfg.m_outputFileNamePolicy ? ui->rbMAutoSetRelativeDirectory
|
||||
: ui->rbMAutoSetSameDirectory;
|
||||
|
||||
auto dFixed = QDir::toNativeSeparators(m_cfg.m_fixedOutputDir.path());
|
||||
auto dRelative = QDir::toNativeSeparators(m_cfg.m_relativeOutputDir.path());
|
||||
|
||||
m_cfg.m_mergeLastFixedOutputDirs.add(dFixed);
|
||||
m_cfg.m_mergeLastRelativeOutputDirs.add(dRelative);
|
||||
|
||||
ui->cbMAutoSetOutputFileName->setChecked(isChecked);
|
||||
ui->cbMAutoDestinationOnlyForVideoFiles->setChecked(m_cfg.m_autoDestinationOnlyForVideoFiles);
|
||||
rbToCheck->setChecked(true);
|
||||
ui->leMAutoSetRelativeDirectory->setText(QDir::toNativeSeparators(m_cfg.m_relativeOutputDir.path()));
|
||||
ui->leMAutoSetFixedDirectory->setText(QDir::toNativeSeparators(m_cfg.m_fixedOutputDir.path()));
|
||||
ui->cbMAutoSetRelativeDirectory->addItems(m_cfg.m_mergeLastRelativeOutputDirs.items());
|
||||
ui->cbMAutoSetRelativeDirectory->setCurrentText(dRelative);
|
||||
ui->cbMAutoSetFixedDirectory->addItems(m_cfg.m_mergeLastFixedOutputDirs.items());
|
||||
ui->cbMAutoSetFixedDirectory->setCurrentText(dFixed);
|
||||
ui->cbMUniqueOutputFileNames->setChecked(m_cfg.m_uniqueOutputFileNames);
|
||||
ui->cbMAutoClearOutputFileName->setChecked(m_cfg.m_autoClearOutputFileName);
|
||||
|
||||
@ -829,11 +837,14 @@ PreferencesDialog::save() {
|
||||
: ui->rbMAutoSetPreviousDirectory->isChecked() ? Util::Settings::ToPreviousDirectory
|
||||
: Util::Settings::ToSameAsFirstInputFile;
|
||||
m_cfg.m_autoDestinationOnlyForVideoFiles = ui->cbMAutoDestinationOnlyForVideoFiles->isChecked();
|
||||
m_cfg.m_relativeOutputDir = ui->leMAutoSetRelativeDirectory->text();
|
||||
m_cfg.m_fixedOutputDir = ui->leMAutoSetFixedDirectory->text();
|
||||
m_cfg.m_relativeOutputDir = ui->cbMAutoSetRelativeDirectory->currentText();
|
||||
m_cfg.m_fixedOutputDir = ui->cbMAutoSetFixedDirectory->currentText();
|
||||
m_cfg.m_uniqueOutputFileNames = ui->cbMUniqueOutputFileNames->isChecked();
|
||||
m_cfg.m_autoClearOutputFileName = ui->cbMAutoClearOutputFileName->isChecked();
|
||||
|
||||
m_cfg.m_mergeLastFixedOutputDirs.add(QDir::toNativeSeparators(m_cfg.m_fixedOutputDir.path()));
|
||||
m_cfg.m_mergeLastRelativeOutputDirs.add(QDir::toNativeSeparators(m_cfg.m_relativeOutputDir.path()));
|
||||
|
||||
m_cfg.m_enableMuxingTracksByLanguage = ui->cbMEnableMuxingTracksByLanguage->isChecked();
|
||||
m_cfg.m_enableMuxingAllVideoTracks = ui->cbMEnableMuxingAllVideoTracks->isChecked();
|
||||
m_cfg.m_enableMuxingAllAudioTracks = ui->cbMEnableMuxingAllAudioTracks->isChecked();
|
||||
@ -900,15 +911,15 @@ PreferencesDialog::enableOutputFileNameControls() {
|
||||
bool fixedSelected = ui->rbMAutoSetFixedDirectory->isChecked();
|
||||
|
||||
Util::enableWidgets(QList<QWidget *>{} << ui->gbDestinationDirectory << ui->cbMUniqueOutputFileNames << ui->cbMAutoDestinationOnlyForVideoFiles, isChecked);
|
||||
Util::enableWidgets(QList<QWidget *>{} << ui->leMAutoSetFixedDirectory << ui->pbMBrowseAutoSetFixedDirectory, isChecked && fixedSelected);
|
||||
ui->leMAutoSetRelativeDirectory->setEnabled(isChecked && relativeSelected);
|
||||
Util::enableWidgets(QList<QWidget *>{} << ui->cbMAutoSetFixedDirectory << ui->pbMBrowseAutoSetFixedDirectory, isChecked && fixedSelected);
|
||||
ui->cbMAutoSetRelativeDirectory->setEnabled(isChecked && relativeSelected);
|
||||
}
|
||||
|
||||
void
|
||||
PreferencesDialog::browseFixedOutputDirectory() {
|
||||
auto dir = Util::getExistingDirectory(this, QY("Select destination directory"), ui->leMAutoSetFixedDirectory->text());
|
||||
auto dir = Util::getExistingDirectory(this, QY("Select destination directory"), ui->cbMAutoSetFixedDirectory->currentText());
|
||||
if (!dir.isEmpty())
|
||||
ui->leMAutoSetFixedDirectory->setText(dir);
|
||||
ui->cbMAutoSetFixedDirectory->setCurrentText(dir);
|
||||
}
|
||||
|
||||
void
|
||||
|
62
src/mkvtoolnix-gui/util/recently_used_strings.cpp
Normal file
62
src/mkvtoolnix-gui/util/recently_used_strings.cpp
Normal file
@ -0,0 +1,62 @@
|
||||
#include "common/common_pch.h"
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
#include "mkvtoolnix-gui/util/recently_used_strings.h"
|
||||
|
||||
namespace mtx { namespace gui { namespace Util {
|
||||
|
||||
class RecentlyUsedStringsPrivate {
|
||||
friend class RecentlyUsedStrings;
|
||||
|
||||
int m_numItems{};
|
||||
QStringList m_items;
|
||||
|
||||
explicit RecentlyUsedStringsPrivate(int numItems)
|
||||
: m_numItems{numItems}
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
RecentlyUsedStrings::RecentlyUsedStrings(int numItems)
|
||||
: p_ptr{new RecentlyUsedStringsPrivate{numItems}}
|
||||
{
|
||||
}
|
||||
|
||||
RecentlyUsedStrings::~RecentlyUsedStrings() {
|
||||
}
|
||||
|
||||
QStringList
|
||||
RecentlyUsedStrings::items()
|
||||
const {
|
||||
return p_func()->m_items;
|
||||
}
|
||||
|
||||
void
|
||||
RecentlyUsedStrings::setItems(QStringList const &newItems) {
|
||||
p_func()->m_items = newItems;
|
||||
clamp();
|
||||
}
|
||||
|
||||
void
|
||||
RecentlyUsedStrings::add(QString const &item) {
|
||||
remove(item);
|
||||
p_func()->m_items.prepend(item);
|
||||
clamp();
|
||||
}
|
||||
|
||||
void
|
||||
RecentlyUsedStrings::remove(QString const &item) {
|
||||
p_func()->m_items.removeAll(item);
|
||||
}
|
||||
|
||||
void
|
||||
RecentlyUsedStrings::clamp() {
|
||||
auto p = p_func();
|
||||
auto size = p->m_items.size();
|
||||
|
||||
if (size > p->m_numItems)
|
||||
p->m_items.erase(p->m_items.begin() + p->m_numItems, p->m_items.end());
|
||||
}
|
||||
|
||||
}}}
|
32
src/mkvtoolnix-gui/util/recently_used_strings.h
Normal file
32
src/mkvtoolnix-gui/util/recently_used_strings.h
Normal file
@ -0,0 +1,32 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/common_pch.h"
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
namespace mtx { namespace gui { namespace Util {
|
||||
|
||||
class RecentlyUsedStringsPrivate;
|
||||
class RecentlyUsedStrings {
|
||||
protected:
|
||||
MTX_DECLARE_PRIVATE(RecentlyUsedStringsPrivate);
|
||||
|
||||
std::unique_ptr<RecentlyUsedStringsPrivate> const p_ptr;
|
||||
|
||||
explicit RecentlyUsedStrings(RecentlyUsedStringsPrivate &p);
|
||||
|
||||
public:
|
||||
RecentlyUsedStrings(int numEntries);
|
||||
virtual ~RecentlyUsedStrings();
|
||||
|
||||
QStringList items() const;
|
||||
void setItems(QStringList const &newItems);
|
||||
|
||||
void add(QString const &entry);
|
||||
void remove(QString const &entry);
|
||||
|
||||
protected:
|
||||
void clamp();
|
||||
};
|
||||
|
||||
}}}
|
@ -314,7 +314,13 @@ Settings::load() {
|
||||
reg.beginGroup(s_grpUpdates);
|
||||
m_checkForUpdates = reg.value(s_valCheckForUpdates, true).toBool();
|
||||
m_lastUpdateCheck = reg.value(s_valLastUpdateCheck, QDateTime{}).toDateTime();
|
||||
|
||||
reg.endGroup(); // settings.updates
|
||||
|
||||
m_mergeLastFixedOutputDirs .setItems(reg.value(s_valMergeLastFixedOutputDirs).toStringList());
|
||||
m_mergeLastOutputDirs .setItems(reg.value(s_valMergeLastOutputDirs).toStringList());
|
||||
m_mergeLastRelativeOutputDirs.setItems(reg.value(s_valMergeLastRelativeOutputDirs).toStringList());
|
||||
|
||||
reg.endGroup(); // settings
|
||||
|
||||
loadDefaults(reg, guiVersion);
|
||||
@ -593,6 +599,9 @@ Settings::save()
|
||||
reg.setValue(s_valMergePredefinedTrackNames, m_mergePredefinedTrackNames);
|
||||
reg.setValue(s_valMergePredefinedSplitSizes, m_mergePredefinedSplitSizes);
|
||||
reg.setValue(s_valMergePredefinedSplitDurations, m_mergePredefinedSplitDurations);
|
||||
reg.setValue(s_valMergeLastFixedOutputDirs, m_mergeLastFixedOutputDirs.items());
|
||||
reg.setValue(s_valMergeLastOutputDirs, m_mergeLastOutputDirs.items());
|
||||
reg.setValue(s_valMergeLastRelativeOutputDirs, m_mergeLastRelativeOutputDirs.items());
|
||||
reg.setValue(s_valMergeTrackPropertiesLayout, static_cast<int>(m_mergeTrackPropertiesLayout));
|
||||
reg.setValue(s_valMergeAddingAppendingFilesPolicy, static_cast<int>(m_mergeAddingAppendingFilesPolicy));
|
||||
reg.setValue(s_valMergeLastAddingAppendingDecision, static_cast<int>(m_mergeLastAddingAppendingDecision));
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include "common/translation.h"
|
||||
#include "mkvtoolnix-gui/info/job_settings.h"
|
||||
#include "mkvtoolnix-gui/merge/enums.h"
|
||||
#include "mkvtoolnix-gui/util/recently_used_strings.h"
|
||||
|
||||
class QSettings;
|
||||
class QSplitter;
|
||||
@ -158,6 +159,7 @@ public:
|
||||
HeaderEditorDroppedFilesPolicy m_headerEditorDroppedFilesPolicy;
|
||||
TrackPropertiesLayout m_mergeTrackPropertiesLayout;
|
||||
MergeMissingAudioTrackPolicy m_mergeWarnMissingAudioTrack;
|
||||
RecentlyUsedStrings m_mergeLastRelativeOutputDirs{10}, m_mergeLastFixedOutputDirs{10}, m_mergeLastOutputDirs{10};
|
||||
|
||||
OutputFileNamePolicy m_outputFileNamePolicy;
|
||||
bool m_autoDestinationOnlyForVideoFiles;
|
||||
|
@ -64,6 +64,9 @@ char const * const s_valMergeAlwaysAddDroppedFiles = "mergeAlwaysAddDro
|
||||
char const * const s_valMergeAlwaysShowOutputFileControls = "mergeAlwaysShowOutputFileControls";
|
||||
char const * const s_valMergeEnableDialogNormGainRemoval = "mergeEnableDialogNormGainRemoval";
|
||||
char const * const s_valMergeLastAddingAppendingDecision = "mergeLastAddingAppendingDecision";
|
||||
char const * const s_valMergeLastFixedOutputDirs = "mergeLastFixedOutputDirs";
|
||||
char const * const s_valMergeLastOutputDirs = "mergeLastOutputDirs";
|
||||
char const * const s_valMergeLastRelativeOutputDirs = "mergeLastRelativeOutputDirs";
|
||||
char const * const s_valMergePredefinedSplitDurations = "mergePredefinedSplitDurations";
|
||||
char const * const s_valMergePredefinedSplitSizes = "mergePredefinedSplitSizes";
|
||||
char const * const s_valMergePredefinedTrackNames = "mergePredefinedTrackNames";
|
||||
|
Loading…
Reference in New Issue
Block a user