Properly remember the last selected output file filter index.
This commit is contained in:
parent
72a9145a5d
commit
912f9e576e
@ -22,7 +22,7 @@
|
|||||||
#define VER_X264_MAJOR 2
|
#define VER_X264_MAJOR 2
|
||||||
#define VER_X264_MINOR 0
|
#define VER_X264_MINOR 0
|
||||||
#define VER_X264_PATCH 2
|
#define VER_X264_PATCH 2
|
||||||
#define VER_X264_BUILD 243
|
#define VER_X264_BUILD 256
|
||||||
|
|
||||||
#define VER_X264_MINIMUM_REV 2146
|
#define VER_X264_MINIMUM_REV 2146
|
||||||
#define VER_X264_CURRENT_API 120
|
#define VER_X264_CURRENT_API 120
|
||||||
|
@ -191,9 +191,9 @@ AddJobDialog::AddJobDialog(QWidget *parent, OptionsModel *options, bool x64suppo
|
|||||||
m_defaults(new OptionsModel()),
|
m_defaults(new OptionsModel()),
|
||||||
m_options(options),
|
m_options(options),
|
||||||
m_x64supported(x64supported),
|
m_x64supported(x64supported),
|
||||||
initialDir_src(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation)),
|
m_initialDir_src(QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation))),
|
||||||
initialDir_out(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation))
|
m_initialDir_out(QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::MoviesLocation))),
|
||||||
|
m_lastFilterIndex(0)
|
||||||
{
|
{
|
||||||
//Init the dialog, from the .ui file
|
//Init the dialog, from the .ui file
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
@ -206,6 +206,12 @@ AddJobDialog::AddJobDialog(QWidget *parent, OptionsModel *options, bool x64suppo
|
|||||||
setMinimumSize(size());
|
setMinimumSize(size());
|
||||||
setMaximumHeight(height());
|
setMaximumHeight(height());
|
||||||
|
|
||||||
|
//Setup file type filter
|
||||||
|
m_types.clear();
|
||||||
|
m_types << tr("Matroska Files (*.mkv)");
|
||||||
|
m_types << tr("MPEG-4 Part 14 Container (*.mp4)");
|
||||||
|
m_types << tr("H.264 Elementary Stream (*.264)");
|
||||||
|
|
||||||
//Monitor RC mode combobox
|
//Monitor RC mode combobox
|
||||||
connect(cbxRateControlMode, SIGNAL(currentIndexChanged(int)), this, SLOT(modeIndexChanged(int)));
|
connect(cbxRateControlMode, SIGNAL(currentIndexChanged(int)), this, SLOT(modeIndexChanged(int)));
|
||||||
|
|
||||||
@ -254,8 +260,9 @@ AddJobDialog::AddJobDialog(QWidget *parent, OptionsModel *options, bool x64suppo
|
|||||||
//Load directories
|
//Load directories
|
||||||
const QString appDir = x264_data_path();
|
const QString appDir = x264_data_path();
|
||||||
QSettings settings(QString("%1/last.ini").arg(appDir), QSettings::IniFormat);
|
QSettings settings(QString("%1/last.ini").arg(appDir), QSettings::IniFormat);
|
||||||
initialDir_src = settings.value("path/directory_openFrom", initialDir_src).toString();
|
m_initialDir_src = settings.value("path/directory_openFrom", m_initialDir_src).toString();
|
||||||
initialDir_out = settings.value("path/directory_saveTo", initialDir_out).toString();
|
m_initialDir_out = settings.value("path/directory_saveTo", m_initialDir_out).toString();
|
||||||
|
m_lastFilterIndex = settings.value("path/filterIndex", m_lastFilterIndex).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
AddJobDialog::~AddJobDialog(void)
|
AddJobDialog::~AddJobDialog(void)
|
||||||
@ -284,8 +291,8 @@ void AddJobDialog::showEvent(QShowEvent *event)
|
|||||||
QDialog::showEvent(event);
|
QDialog::showEvent(event);
|
||||||
templateSelected();
|
templateSelected();
|
||||||
|
|
||||||
if(!editSource->text().isEmpty()) initialDir_src = QFileInfo(QDir::fromNativeSeparators(editSource->text())).path();
|
if(!editSource->text().isEmpty()) m_initialDir_src = QFileInfo(QDir::fromNativeSeparators(editSource->text())).path();
|
||||||
if(!editOutput->text().isEmpty()) initialDir_out = QFileInfo(QDir::fromNativeSeparators(editOutput->text())).path();
|
if(!editOutput->text().isEmpty()) m_initialDir_out = QFileInfo(QDir::fromNativeSeparators(editOutput->text())).path();
|
||||||
|
|
||||||
if((!editSource->text().isEmpty()) && editOutput->text().isEmpty())
|
if((!editSource->text().isEmpty()) && editOutput->text().isEmpty())
|
||||||
{
|
{
|
||||||
@ -427,8 +434,9 @@ void AddJobDialog::accept(void)
|
|||||||
QSettings settings(QString("%1/last.ini").arg(appDir), QSettings::IniFormat);
|
QSettings settings(QString("%1/last.ini").arg(appDir), QSettings::IniFormat);
|
||||||
if(settings.isWritable())
|
if(settings.isWritable())
|
||||||
{
|
{
|
||||||
settings.setValue("path/directory_openFrom", initialDir_src);
|
settings.setValue("path/directory_saveTo", m_initialDir_out);
|
||||||
settings.setValue("path/directory_saveTo", initialDir_out);
|
settings.setValue("path/directory_openFrom", m_initialDir_src);
|
||||||
|
settings.setValue("path/filterIndex", m_lastFilterIndex);
|
||||||
settings.sync();
|
settings.sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,7 +448,7 @@ void AddJobDialog::browseButtonClicked(void)
|
|||||||
{
|
{
|
||||||
if(QObject::sender() == buttonBrowseSource)
|
if(QObject::sender() == buttonBrowseSource)
|
||||||
{
|
{
|
||||||
QString initDir = VALID_DIR(initialDir_src) ? initialDir_src : QDesktopServices::storageLocation(QDesktopServices::MoviesLocation);
|
QString initDir = VALID_DIR(m_initialDir_src) ? m_initialDir_src : QDesktopServices::storageLocation(QDesktopServices::MoviesLocation);
|
||||||
if(!editSource->text().isEmpty()) initDir = QString("%1/%2").arg(initDir, QFileInfo(QDir::fromNativeSeparators(editSource->text())).fileName());
|
if(!editSource->text().isEmpty()) initDir = QString("%1/%2").arg(initDir, QFileInfo(QDir::fromNativeSeparators(editSource->text())).fileName());
|
||||||
|
|
||||||
QString filePath = QFileDialog::getOpenFileName(this, tr("Open Source File"), initDir, makeFileFilter(), NULL, QFileDialog::DontUseNativeDialog);
|
QString filePath = QFileDialog::getOpenFileName(this, tr("Open Source File"), initDir, makeFileFilter(), NULL, QFileDialog::DontUseNativeDialog);
|
||||||
@ -448,61 +456,31 @@ void AddJobDialog::browseButtonClicked(void)
|
|||||||
{
|
{
|
||||||
editSource->setText(QDir::toNativeSeparators(filePath));
|
editSource->setText(QDir::toNativeSeparators(filePath));
|
||||||
generateOutputFileName(filePath);
|
generateOutputFileName(filePath);
|
||||||
initialDir_src = QFileInfo(filePath).path();
|
m_initialDir_src = QFileInfo(filePath).path();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(QObject::sender() == buttonBrowseOutput)
|
else if(QObject::sender() == buttonBrowseOutput)
|
||||||
{
|
{
|
||||||
QString selectedType; QStringList types;
|
QString initDir = VALID_DIR(m_initialDir_out) ? m_initialDir_out : QDesktopServices::storageLocation(QDesktopServices::MoviesLocation);
|
||||||
types << tr("Matroska Files (*.mkv)");
|
|
||||||
types << tr("MPEG-4 Part 14 Container (*.mp4)");
|
|
||||||
types << tr("H.264 Elementary Stream (*.264)");
|
|
||||||
|
|
||||||
QString initDir = VALID_DIR(initialDir_out) ? initialDir_out : QDesktopServices::storageLocation(QDesktopServices::MoviesLocation);
|
|
||||||
if(!editOutput->text().isEmpty()) initDir = QString("%1/%2").arg(initDir, QFileInfo(QDir::fromNativeSeparators(editOutput->text())).completeBaseName());
|
if(!editOutput->text().isEmpty()) initDir = QString("%1/%2").arg(initDir, QFileInfo(QDir::fromNativeSeparators(editOutput->text())).completeBaseName());
|
||||||
|
int filterIdx = getFilterIndex(QFileInfo(QDir::fromNativeSeparators(editOutput->text())).suffix());
|
||||||
|
QString selectedType = m_types.at((filterIdx >= 0) ? filterIdx : m_lastFilterIndex);
|
||||||
|
|
||||||
QRegExp ext("\\(\\*\\.(.+)\\)");
|
QString filePath = QFileDialog::getSaveFileName(this, tr("Choose Output File"), initDir, m_types.join(";;"), &selectedType, QFileDialog::DontUseNativeDialog | QFileDialog::DontConfirmOverwrite);
|
||||||
for(int i = 0; i < types.count(); i++)
|
|
||||||
{
|
|
||||||
if(ext.lastIndexIn(types.at(i)) >= 0)
|
|
||||||
{
|
|
||||||
if(QFileInfo(initDir).suffix().compare(ext.cap(1), Qt::CaseInsensitive) == 0)
|
|
||||||
{
|
|
||||||
selectedType = types.at(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString filePath = QFileDialog::getSaveFileName(this, tr("Choose Output File"), initDir, types.join(";;"), &selectedType, QFileDialog::DontUseNativeDialog | QFileDialog::DontConfirmOverwrite);
|
|
||||||
|
|
||||||
if(!(filePath.isNull() || filePath.isEmpty()))
|
if(!(filePath.isNull() || filePath.isEmpty()))
|
||||||
{
|
{
|
||||||
QString suffix = QFileInfo(filePath).suffix();
|
if(getFilterIndex(QFileInfo(filePath).suffix()) < 0)
|
||||||
bool hasProperExt = false;
|
|
||||||
for(int i = 0; i < types.count(); i++)
|
|
||||||
{
|
{
|
||||||
if(ext.lastIndexIn(types.at(i)) >= 0)
|
filterIdx = m_types.indexOf(selectedType);
|
||||||
|
if(filterIdx >= 0)
|
||||||
{
|
{
|
||||||
if(suffix.compare(ext.cap(1), Qt::CaseInsensitive) == 0)
|
filePath = QString("%1.%2").arg(filePath, getFilterExt(filterIdx));
|
||||||
{
|
|
||||||
hasProperExt = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!hasProperExt)
|
|
||||||
{
|
|
||||||
if(ext.lastIndexIn(selectedType) >= 0)
|
|
||||||
{
|
|
||||||
if(suffix.compare(ext.cap(1), Qt::CaseInsensitive))
|
|
||||||
{
|
|
||||||
filePath = QString("%1.%2").arg(filePath, ext.cap(1));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
editOutput->setText(QDir::toNativeSeparators(filePath));
|
editOutput->setText(QDir::toNativeSeparators(filePath));
|
||||||
initialDir_out = QFileInfo(filePath).path();
|
m_lastFilterIndex = getFilterIndex(QFileInfo(filePath).suffix());
|
||||||
|
m_initialDir_out = QFileInfo(filePath).path();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -845,18 +823,52 @@ QString AddJobDialog::makeFileFilter(void)
|
|||||||
void AddJobDialog::generateOutputFileName(const QString &filePath)
|
void AddJobDialog::generateOutputFileName(const QString &filePath)
|
||||||
{
|
{
|
||||||
QString name = QFileInfo(filePath).completeBaseName();
|
QString name = QFileInfo(filePath).completeBaseName();
|
||||||
QString path = VALID_DIR(initialDir_out) ? initialDir_out : QFileInfo(filePath).path();
|
QString path = VALID_DIR(m_initialDir_out) ? m_initialDir_out : QFileInfo(filePath).path();
|
||||||
|
QString fext = getFilterExt(m_lastFilterIndex);
|
||||||
|
|
||||||
QString outPath = QString("%1/%2.mkv").arg(path, name);
|
QString outPath = QString("%1/%2.%3").arg(path, name, fext);
|
||||||
|
|
||||||
if(QFileInfo(outPath).exists())
|
if(QFileInfo(outPath).exists())
|
||||||
{
|
{
|
||||||
int i = 2;
|
int i = 2;
|
||||||
while(QFileInfo(outPath).exists())
|
while(QFileInfo(outPath).exists())
|
||||||
{
|
{
|
||||||
outPath = QString("%1/%2 (%3).mkv").arg(path, name, QString::number(i++));
|
outPath = QString("%1/%2 (%3).%4").arg(path, name, QString::number(i++), fext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editOutput->setText(QDir::toNativeSeparators(outPath));
|
editOutput->setText(QDir::toNativeSeparators(outPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AddJobDialog::getFilterIndex(const QString &fileExt)
|
||||||
|
{
|
||||||
|
if(!fileExt.isEmpty())
|
||||||
|
{
|
||||||
|
QRegExp ext("\\(\\*\\.(.+)\\)");
|
||||||
|
for(int i = 0; i < m_types.count(); i++)
|
||||||
|
{
|
||||||
|
if(ext.lastIndexIn(m_types.at(i)) >= 0)
|
||||||
|
{
|
||||||
|
if(fileExt.compare(ext.cap(1), Qt::CaseInsensitive) == 0)
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString AddJobDialog::getFilterExt(int filterIdx)
|
||||||
|
{
|
||||||
|
int index = qBound(0, filterIdx, m_types.count()-1);
|
||||||
|
|
||||||
|
QRegExp ext("\\(\\*\\.(.+)\\)");
|
||||||
|
if(ext.lastIndexIn(m_types.at(index)) >= 0)
|
||||||
|
{
|
||||||
|
return ext.cap(1).toLower();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString::fromLatin1("mkv");
|
||||||
|
}
|
||||||
|
@ -52,8 +52,10 @@ protected:
|
|||||||
|
|
||||||
const bool m_x64supported;
|
const bool m_x64supported;
|
||||||
|
|
||||||
QString initialDir_src;
|
QStringList m_types;
|
||||||
QString initialDir_out;
|
QString m_initialDir_src;
|
||||||
|
QString m_initialDir_out;
|
||||||
|
int m_lastFilterIndex;
|
||||||
|
|
||||||
virtual void showEvent(QShowEvent *event);
|
virtual void showEvent(QShowEvent *event);
|
||||||
virtual bool eventFilter(QObject *o, QEvent *e);
|
virtual bool eventFilter(QObject *o, QEvent *e);
|
||||||
@ -80,4 +82,6 @@ private:
|
|||||||
void updateComboBox(QComboBox *cbox, const QString &text);
|
void updateComboBox(QComboBox *cbox, const QString &text);
|
||||||
QString makeFileFilter(void);
|
QString makeFileFilter(void);
|
||||||
void generateOutputFileName(const QString &filePath);
|
void generateOutputFileName(const QString &filePath);
|
||||||
|
int getFilterIndex(const QString &fileExt);
|
||||||
|
QString getFilterExt(int filterIdx);
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user