@@ -51,6 +51,7 @@

#include "DolphinQt/AboutDialog.h"
#include "DolphinQt/Host.h"
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/QtUtils/ParallelProgressDialog.h"
#include "DolphinQt/Settings.h"
@@ -1029,8 +1030,8 @@ void MenuBar::UpdateToolsMenu(bool emulation_started)

void MenuBar::InstallWAD()
{
QString wad_file = QFileDialog::getOpenFileName(this, tr("Select a title to install to NAND"),
QString(), tr("WAD files (*.wad)"));
QString wad_file = DolphinFileDialog::getOpenFileName(
this, tr("Select a title to install to NAND"), QString(), tr("WAD files (*.wad)"));

if (wad_file.isEmpty())
return;
@@ -1049,9 +1050,10 @@ void MenuBar::InstallWAD()

void MenuBar::ImportWiiSave()
{
QString file = QFileDialog::getOpenFileName(this, tr("Select the save file"), QDir::currentPath(),
tr("Wii save files (*.bin);;"
"All Files (*)"));
QString file =
DolphinFileDialog::getOpenFileName(this, tr("Select the save file"), QDir::currentPath(),
tr("Wii save files (*.bin);;"
"All Files (*)"));

if (file.isEmpty())
return;
@@ -1093,7 +1095,7 @@ void MenuBar::ImportWiiSave()

void MenuBar::ExportWiiSaves()
{
const QString export_dir = QFileDialog::getExistingDirectory(
const QString export_dir = DolphinFileDialog::getExistingDirectory(
this, tr("Select Export Directory"), QString::fromStdString(File::GetUserPath(D_USER_IDX)),
QFileDialog::ShowDirsOnly);
if (export_dir.isEmpty())
@@ -1482,7 +1484,7 @@ void MenuBar::SaveSymbolMap()

void MenuBar::LoadOtherSymbolMap()
{
const QString file = QFileDialog::getOpenFileName(
const QString file = DolphinFileDialog::getOpenFileName(
this, tr("Load map file"), QString::fromStdString(File::GetUserPath(D_MAPS_IDX)),
tr("Dolphin Map File (*.map)"));

@@ -1498,7 +1500,7 @@ void MenuBar::LoadOtherSymbolMap()

void MenuBar::LoadBadSymbolMap()
{
const QString file = QFileDialog::getOpenFileName(
const QString file = DolphinFileDialog::getOpenFileName(
this, tr("Load map file"), QString::fromStdString(File::GetUserPath(D_MAPS_IDX)),
tr("Dolphin Map File (*.map)"));

@@ -1515,7 +1517,7 @@ void MenuBar::LoadBadSymbolMap()
void MenuBar::SaveSymbolMapAs()
{
const std::string& title_id_str = SConfig::GetInstance().m_debugger_game_id;
const QString file = QFileDialog::getSaveFileName(
const QString file = DolphinFileDialog::getSaveFileName(
this, tr("Save map file"),
QString::fromStdString(File::GetUserPath(D_MAPS_IDX) + "/" + title_id_str + ".map"),
tr("Dolphin Map File (*.map)"));
@@ -1568,8 +1570,8 @@ void MenuBar::CreateSignatureFile()
this, tr("Input"), tr("Only export symbols with prefix:\n(Blank for all symbols)"),
QLineEdit::Normal, QString{}, nullptr, Qt::WindowCloseButtonHint);

const QString file = QFileDialog::getSaveFileName(this, tr("Save signature file"),
QDir::homePath(), GetSignatureSelector());
const QString file = DolphinFileDialog::getSaveFileName(this, tr("Save signature file"),
QDir::homePath(), GetSignatureSelector());
if (file.isEmpty())
return;

@@ -1593,8 +1595,8 @@ void MenuBar::AppendSignatureFile()
this, tr("Input"), tr("Only append symbols with prefix:\n(Blank for all symbols)"),
QLineEdit::Normal, QString{}, nullptr, Qt::WindowCloseButtonHint);

const QString file = QFileDialog::getSaveFileName(this, tr("Append signature to"),
QDir::homePath(), GetSignatureSelector());
const QString file = DolphinFileDialog::getSaveFileName(this, tr("Append signature to"),
QDir::homePath(), GetSignatureSelector());
if (file.isEmpty())
return;

@@ -1616,8 +1618,8 @@ void MenuBar::AppendSignatureFile()

void MenuBar::ApplySignatureFile()
{
const QString file = QFileDialog::getOpenFileName(this, tr("Apply signature file"),
QDir::homePath(), GetSignatureSelector());
const QString file = DolphinFileDialog::getOpenFileName(this, tr("Apply signature file"),
QDir::homePath(), GetSignatureSelector());

if (file.isEmpty())
return;
@@ -1633,18 +1635,18 @@ void MenuBar::ApplySignatureFile()

void MenuBar::CombineSignatureFiles()
{
const QString priorityFile = QFileDialog::getOpenFileName(
const QString priorityFile = DolphinFileDialog::getOpenFileName(
this, tr("Choose priority input file"), QDir::homePath(), GetSignatureSelector());
if (priorityFile.isEmpty())
return;

const QString secondaryFile = QFileDialog::getOpenFileName(
const QString secondaryFile = DolphinFileDialog::getOpenFileName(
this, tr("Choose secondary input file"), QDir::homePath(), GetSignatureSelector());
if (secondaryFile.isEmpty())
return;

const QString saveFile = QFileDialog::getSaveFileName(this, tr("Save combined output file as"),
QDir::homePath(), GetSignatureSelector());
const QString saveFile = DolphinFileDialog::getSaveFileName(
this, tr("Save combined output file as"), QDir::homePath(), GetSignatureSelector());
if (saveFile.isEmpty())
return;

@@ -0,0 +1,39 @@
// Copyright 2021 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "DolphinFileDialog.h"

#include <QFileDialog>
#include <QObject>

QString DolphinFileDialog::getExistingDirectory(QWidget* parent, const QString& caption,
const QString& dir, QFileDialog::Options options)
{
const HotkeyDisabler disabler;
return QFileDialog::getExistingDirectory(parent, caption, dir, options);
}

QString DolphinFileDialog::getSaveFileName(QWidget* parent, const QString& caption,
const QString& dir, const QString& filter,
QString* selectedFilter, QFileDialog::Options options)
{
const HotkeyDisabler disabler;
return QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options);
}

QString DolphinFileDialog::getOpenFileName(QWidget* parent, const QString& caption,
const QString& dir, const QString& filter,
QString* selectedFilter, QFileDialog::Options options)
{
const HotkeyDisabler disabler;
return QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options);
}

QStringList DolphinFileDialog::getOpenFileNames(QWidget* parent, const QString& caption,
const QString& dir, const QString& filter,
QString* selectedFilter,
QFileDialog::Options options)
{
const HotkeyDisabler disabler;
return QFileDialog::getOpenFileNames(parent, caption, dir, filter, selectedFilter, options);
}
@@ -0,0 +1,40 @@
// Copyright 2021 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "Core/HotkeyManager.h"

#include <QFileDialog>
#include <QObject>
#include <QString>

namespace DolphinFileDialog
{
class HotkeyDisabler final
{
public:
HotkeyDisabler() { HotkeyManagerEmu::Enable(false); }
~HotkeyDisabler() { HotkeyManagerEmu::Enable(true); }
};

QString getExistingDirectory(QWidget* parent = nullptr, const QString& caption = QString(),
const QString& dir = QString(),
QFileDialog::Options options = QFileDialog::ShowDirsOnly);

QString getOpenFileName(QWidget* parent = nullptr, const QString& caption = QString(),
const QString& dir = QString(), const QString& filter = QString(),
QString* selectedFilter = nullptr,
QFileDialog::Options options = QFileDialog::Options());

QStringList getOpenFileNames(QWidget* parent = nullptr, const QString& caption = QString(),
const QString& dir = QString(), const QString& filter = QString(),
QString* selectedFilter = nullptr,
QFileDialog::Options options = QFileDialog::Options());

QString getSaveFileName(QWidget* parent = nullptr, const QString& caption = QString(),
const QString& dir = QString(), const QString& filter = QString(),
QString* selectedFilter = nullptr,
QFileDialog::Options options = QFileDialog::Options());

} // namespace DolphinFileDialog
@@ -32,6 +32,7 @@

#include "DolphinQt/Config/Mapping/MappingWindow.h"
#include "DolphinQt/GCMemcardManager.h"
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/Settings.h"
#include "DolphinQt/Settings/BroadbandAdapterSettingsDialog.h"
@@ -292,7 +293,7 @@ void GameCubePane::OnConfigPressed(int slot)
qFatal("unknown settings pressed");
}

QString filename = QFileDialog::getSaveFileName(
QString filename = DolphinFileDialog::getSaveFileName(
this, tr("Choose a file to open"), QString::fromStdString(File::GetUserPath(D_GCUSER_IDX)),
filter, 0, QFileDialog::DontConfirmOverwrite);

@@ -390,7 +391,7 @@ void GameCubePane::OnConfigPressed(int slot)

void GameCubePane::BrowseGBABios()
{
QString file = QDir::toNativeSeparators(QFileDialog::getOpenFileName(
QString file = QDir::toNativeSeparators(DolphinFileDialog::getOpenFileName(
this, tr("Select GBA BIOS"), QString::fromStdString(File::GetUserPath(F_GBABIOS_IDX)),
tr("All Files (*)")));
if (!file.isEmpty())
@@ -419,9 +420,9 @@ void GameCubePane::SaveRomPathChanged()

void GameCubePane::BrowseGBASaves()
{
QString dir = QDir::toNativeSeparators(
QFileDialog::getExistingDirectory(this, tr("Select GBA Saves Path"),
QString::fromStdString(File::GetUserPath(D_GBASAVES_IDX))));
QString dir = QDir::toNativeSeparators(DolphinFileDialog::getExistingDirectory(
this, tr("Select GBA Saves Path"),
QString::fromStdString(File::GetUserPath(D_GBASAVES_IDX))));
if (!dir.isEmpty())
{
m_gba_saves_edit->setText(dir);
@@ -547,7 +548,7 @@ std::string GameCubePane::GetOpenGBARom(std::string_view title)
if (!title.empty())
caption += QStringLiteral(": %1").arg(QString::fromStdString(std::string(title)));
return QDir::toNativeSeparators(
QFileDialog::getOpenFileName(
DolphinFileDialog::getOpenFileName(
nullptr, caption, QString(),
tr("Game Boy Advance ROMs (*.gba *.gbc *.gb *.7z *.zip *.agb *.mb *.rom *.bin);;"
"All Files (*)")))
@@ -3,7 +3,6 @@

#include <QCheckBox>
#include <QDir>
#include <QFileDialog>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
@@ -17,6 +16,7 @@
#include "Core/Config/MainSettings.h"
#include "Core/Config/UISettings.h"

#include "DolphinQt/QtUtils/DolphinFileDialog.h"
#include "DolphinQt/Settings.h"
#include "DolphinQt/Settings/PathPane.h"

@@ -34,25 +34,25 @@ PathPane::PathPane(QWidget* parent) : QWidget(parent)
void PathPane::Browse()
{
QString dir = QDir::toNativeSeparators(
QFileDialog::getExistingDirectory(this, tr("Select a Directory"), QDir::currentPath()));
DolphinFileDialog::getExistingDirectory(this, tr("Select a Directory"), QDir::currentPath()));
if (!dir.isEmpty())
Settings::Instance().AddPath(dir);
}

void PathPane::BrowseDefaultGame()
{
QString file = QDir::toNativeSeparators(
QFileDialog::getOpenFileName(this, tr("Select a Game"), Settings::Instance().GetDefaultGame(),
tr("All GC/Wii files (*.elf *.dol *.gcm *.iso *.tgc *.wbfs "
"*.ciso *.gcz *.wia *.rvz *.wad *.m3u);;All Files (*)")));
QString file = QDir::toNativeSeparators(DolphinFileDialog::getOpenFileName(
this, tr("Select a Game"), Settings::Instance().GetDefaultGame(),
tr("All GC/Wii files (*.elf *.dol *.gcm *.iso *.tgc *.wbfs "
"*.ciso *.gcz *.wia *.rvz *.wad *.m3u);;All Files (*)")));

if (!file.isEmpty())
Settings::Instance().SetDefaultGame(file);
}

void PathPane::BrowseWiiNAND()
{
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(
QString dir = QDir::toNativeSeparators(DolphinFileDialog::getExistingDirectory(
this, tr("Select Wii NAND Root"), QString::fromStdString(Config::Get(Config::MAIN_FS_PATH))));
if (!dir.isEmpty())
{
@@ -63,7 +63,7 @@ void PathPane::BrowseWiiNAND()

void PathPane::BrowseDump()
{
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(
QString dir = QDir::toNativeSeparators(DolphinFileDialog::getExistingDirectory(
this, tr("Select Dump Path"), QString::fromStdString(Config::Get(Config::MAIN_DUMP_PATH))));
if (!dir.isEmpty())
{
@@ -74,7 +74,7 @@ void PathPane::BrowseDump()

void PathPane::BrowseLoad()
{
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(
QString dir = QDir::toNativeSeparators(DolphinFileDialog::getExistingDirectory(
this, tr("Select Load Path"), QString::fromStdString(Config::Get(Config::MAIN_LOAD_PATH))));
if (!dir.isEmpty())
{
@@ -85,7 +85,7 @@ void PathPane::BrowseLoad()

void PathPane::BrowseResourcePack()
{
QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(
QString dir = QDir::toNativeSeparators(DolphinFileDialog::getExistingDirectory(
this, tr("Select Resource Pack Path"),
QString::fromStdString(Config::Get(Config::MAIN_RESOURCEPACK_PATH))));
if (!dir.isEmpty())
@@ -97,7 +97,7 @@ void PathPane::BrowseResourcePack()

void PathPane::BrowseSDCard()
{
QString file = QDir::toNativeSeparators(QFileDialog::getOpenFileName(
QString file = QDir::toNativeSeparators(DolphinFileDialog::getOpenFileName(
this, tr("Select a SD Card Image"), QString::fromStdString(Config::Get(Config::MAIN_SD_PATH)),
tr("SD Card Image (*.raw);;"
"All Files (*)")));