diff --git a/src/duckstation-qt/CMakeLists.txt b/src/duckstation-qt/CMakeLists.txt
index d8fa32b9b..7f66e472c 100644
--- a/src/duckstation-qt/CMakeLists.txt
+++ b/src/duckstation-qt/CMakeLists.txt
@@ -116,9 +116,9 @@ set(SRCS
mainwindow.cpp
mainwindow.h
mainwindow.ui
- memorycardeditordialog.cpp
- memorycardeditordialog.h
- memorycardeditordialog.ui
+ memorycardeditorwindow.cpp
+ memorycardeditorwindow.h
+ memorycardeditorwindow.ui
memorycardsettingswidget.cpp
memorycardsettingswidget.h
memoryviewwidget.cpp
diff --git a/src/duckstation-qt/duckstation-qt.vcxproj b/src/duckstation-qt/duckstation-qt.vcxproj
index 9838684bc..5b62a3d88 100644
--- a/src/duckstation-qt/duckstation-qt.vcxproj
+++ b/src/duckstation-qt/duckstation-qt.vcxproj
@@ -41,7 +41,7 @@
-
+
Create
@@ -64,7 +64,7 @@
-
+
@@ -146,7 +146,7 @@
Document
-
+
Document
@@ -263,7 +263,7 @@
-
+
diff --git a/src/duckstation-qt/duckstation-qt.vcxproj.filters b/src/duckstation-qt/duckstation-qt.vcxproj.filters
index 90e5ee721..e68a43847 100644
--- a/src/duckstation-qt/duckstation-qt.vcxproj.filters
+++ b/src/duckstation-qt/duckstation-qt.vcxproj.filters
@@ -27,7 +27,7 @@
-
+
@@ -162,7 +162,7 @@
moc
-
+
moc
@@ -229,7 +229,7 @@
-
+
@@ -267,7 +267,7 @@
-
+
diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp
index 54840fce5..f13e3badb 100644
--- a/src/duckstation-qt/mainwindow.cpp
+++ b/src/duckstation-qt/mainwindow.cpp
@@ -13,7 +13,7 @@
#include "gamelistwidget.h"
#include "generalsettingswidget.h"
#include "logwindow.h"
-#include "memorycardeditordialog.h"
+#include "memorycardeditorwindow.h"
#include "qthost.h"
#include "qtutils.h"
#include "settingswindow.h"
@@ -740,6 +740,13 @@ void MainWindow::destroySubWindows()
m_debugger_window = nullptr;
}
+ if (m_memory_card_editor_window)
+ {
+ m_memory_card_editor_window->close();
+ m_memory_card_editor_window->deleteLater();
+ m_memory_card_editor_window = nullptr;
+ }
+
if (m_controller_settings_window)
{
m_controller_settings_window->close();
@@ -2342,6 +2349,7 @@ void MainWindow::doSettings(const char* category /* = nullptr */)
else
{
dlg->raise();
+ dlg->activateWindow();
dlg->setFocus();
}
@@ -2362,6 +2370,7 @@ void MainWindow::doControllerSettings(
else
{
m_controller_settings_window->raise();
+ m_controller_settings_window->activateWindow();
m_controller_settings_window->setFocus();
}
@@ -2682,25 +2691,26 @@ void MainWindow::openMemoryCardEditor(const QString& card_a_path, const QString&
tr("Memory card '%1' does not exist. Do you want to create an empty memory card?").arg(card_path),
QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
{
- if (!MemoryCardEditorDialog::createMemoryCard(card_path))
+ if (!MemoryCardEditorWindow::createMemoryCard(card_path))
QMessageBox::critical(this, tr("Memory Card Not Found"),
tr("Failed to create memory card '%1'").arg(card_path));
}
}
}
- if (!m_memory_card_editor_dialog)
+ if (!m_memory_card_editor_window)
{
- m_memory_card_editor_dialog = new MemoryCardEditorDialog(this);
- m_memory_card_editor_dialog->setModal(false);
+ m_memory_card_editor_window = new MemoryCardEditorWindow();
+ m_memory_card_editor_window->show();
}
- m_memory_card_editor_dialog->show();
- m_memory_card_editor_dialog->activateWindow();
+ m_memory_card_editor_window->raise();
+ m_memory_card_editor_window->activateWindow();
+ m_memory_card_editor_window->setFocus();
if (!card_a_path.isEmpty())
{
- if (!m_memory_card_editor_dialog->setCardA(card_a_path))
+ if (!m_memory_card_editor_window->setCardA(card_a_path))
{
QMessageBox::critical(
this, tr("Memory Card Not Found"),
@@ -2709,7 +2719,7 @@ void MainWindow::openMemoryCardEditor(const QString& card_a_path, const QString&
}
if (!card_b_path.isEmpty())
{
- if (!m_memory_card_editor_dialog->setCardB(card_b_path))
+ if (!m_memory_card_editor_window->setCardB(card_b_path))
{
QMessageBox::critical(
this, tr("Memory Card Not Found"),
diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h
index cc98935a3..4f165f741 100644
--- a/src/duckstation-qt/mainwindow.h
+++ b/src/duckstation-qt/mainwindow.h
@@ -27,7 +27,7 @@ class QProgressBar;
class GameListWidget;
class EmuThread;
class AutoUpdaterDialog;
-class MemoryCardEditorDialog;
+class MemoryCardEditorWindow;
class CheatManagerDialog;
class DebuggerWindow;
class MainWindow;
@@ -284,7 +284,7 @@ private:
ControllerSettingsWindow* m_controller_settings_window = nullptr;
AutoUpdaterDialog* m_auto_updater_dialog = nullptr;
- MemoryCardEditorDialog* m_memory_card_editor_dialog = nullptr;
+ MemoryCardEditorWindow* m_memory_card_editor_window = nullptr;
CheatManagerDialog* m_cheat_manager_dialog = nullptr;
DebuggerWindow* m_debugger_window = nullptr;
diff --git a/src/duckstation-qt/memorycardeditordialog.cpp b/src/duckstation-qt/memorycardeditorwindow.cpp
similarity index 88%
rename from src/duckstation-qt/memorycardeditordialog.cpp
rename to src/duckstation-qt/memorycardeditorwindow.cpp
index 0f928ebf3..6d39222d6 100644
--- a/src/duckstation-qt/memorycardeditordialog.cpp
+++ b/src/duckstation-qt/memorycardeditorwindow.cpp
@@ -1,7 +1,7 @@
-// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin
+// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
-#include "memorycardeditordialog.h"
+#include "memorycardeditorwindow.h"
#include "common/file_system.h"
#include "common/path.h"
#include "common/string_util.h"
@@ -19,7 +19,7 @@ static constexpr char MEMORY_CARD_IMPORT_FILTER[] =
static constexpr char SINGLE_SAVEFILE_FILTER[] =
TRANSLATE_NOOP("MemoryCardEditorDialog", "Single Save Files (*.mcs);;All Files (*.*)");
-MemoryCardEditorDialog::MemoryCardEditorDialog(QWidget* parent) : QDialog(parent)
+MemoryCardEditorWindow::MemoryCardEditorWindow() : QWidget()
{
m_ui.setupUi(this);
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -53,9 +53,9 @@ MemoryCardEditorDialog::MemoryCardEditorDialog(QWidget* parent) : QDialog(parent
m_ui.openCardB->setToolTip(open_card_hover_text);
}
-MemoryCardEditorDialog::~MemoryCardEditorDialog() = default;
+MemoryCardEditorWindow::~MemoryCardEditorWindow() = default;
-bool MemoryCardEditorDialog::setCardA(const QString& path)
+bool MemoryCardEditorWindow::setCardA(const QString& path)
{
int index = m_ui.cardAPath->findData(QVariant(QDir::toNativeSeparators(path)));
if (index < 0)
@@ -73,7 +73,7 @@ bool MemoryCardEditorDialog::setCardA(const QString& path)
return true;
}
-bool MemoryCardEditorDialog::setCardB(const QString& path)
+bool MemoryCardEditorWindow::setCardB(const QString& path)
{
int index = m_ui.cardBPath->findData(QVariant(QDir::toNativeSeparators(path)));
if (index < 0)
@@ -91,7 +91,7 @@ bool MemoryCardEditorDialog::setCardB(const QString& path)
return true;
}
-bool MemoryCardEditorDialog::createMemoryCard(const QString& path)
+bool MemoryCardEditorWindow::createMemoryCard(const QString& path)
{
MemoryCardImage::DataArray data;
MemoryCardImage::Format(&data);
@@ -99,19 +99,19 @@ bool MemoryCardEditorDialog::createMemoryCard(const QString& path)
return MemoryCardImage::SaveToFile(data, path.toUtf8().constData());
}
-void MemoryCardEditorDialog::resizeEvent(QResizeEvent* ev)
+void MemoryCardEditorWindow::resizeEvent(QResizeEvent* ev)
{
QtUtils::ResizeColumnsForTableView(m_card_a.table, {32, -1, 155, 45});
QtUtils::ResizeColumnsForTableView(m_card_b.table, {32, -1, 155, 45});
}
-void MemoryCardEditorDialog::closeEvent(QCloseEvent* ev)
+void MemoryCardEditorWindow::closeEvent(QCloseEvent* ev)
{
m_card_a.path_cb->setCurrentIndex(0);
m_card_b.path_cb->setCurrentIndex(0);
}
-void MemoryCardEditorDialog::createCardButtons(Card* card, QDialogButtonBox* buttonBox)
+void MemoryCardEditorWindow::createCardButtons(Card* card, QDialogButtonBox* buttonBox)
{
card->format_button = buttonBox->addButton(tr("Format Card"), QDialogButtonBox::ActionRole);
card->import_file_button = buttonBox->addButton(tr("Import File..."), QDialogButtonBox::ActionRole);
@@ -119,7 +119,7 @@ void MemoryCardEditorDialog::createCardButtons(Card* card, QDialogButtonBox* but
card->save_button = buttonBox->addButton(tr("Save"), QDialogButtonBox::ActionRole);
}
-void MemoryCardEditorDialog::connectCardUi(Card* card, QDialogButtonBox* buttonBox)
+void MemoryCardEditorWindow::connectCardUi(Card* card, QDialogButtonBox* buttonBox)
{
connect(card->save_button, &QPushButton::clicked, [this, card] { saveCard(card); });
connect(card->format_button, &QPushButton::clicked, [this, card] { formatCard(card); });
@@ -127,14 +127,14 @@ void MemoryCardEditorDialog::connectCardUi(Card* card, QDialogButtonBox* buttonB
connect(card->import_button, &QPushButton::clicked, [this, card] { importCard(card); });
}
-void MemoryCardEditorDialog::connectUi()
+void MemoryCardEditorWindow::connectUi()
{
- connect(m_ui.cardA, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorDialog::onCardASelectionChanged);
- connect(m_ui.cardB, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorDialog::onCardBSelectionChanged);
- connect(m_moveLeft, &QPushButton::clicked, this, &MemoryCardEditorDialog::doCopyFile);
- connect(m_moveRight, &QPushButton::clicked, this, &MemoryCardEditorDialog::doCopyFile);
- connect(m_deleteFile, &QPushButton::clicked, this, &MemoryCardEditorDialog::doDeleteFile);
- connect(m_undeleteFile, &QPushButton::clicked, this, &MemoryCardEditorDialog::doUndeleteFile);
+ connect(m_ui.cardA, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardASelectionChanged);
+ connect(m_ui.cardB, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardBSelectionChanged);
+ connect(m_moveLeft, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
+ connect(m_moveRight, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
+ connect(m_deleteFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doDeleteFile);
+ connect(m_undeleteFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doUndeleteFile);
connect(m_ui.cardAPath, QOverload::of(&QComboBox::currentIndexChanged),
[this](int index) { loadCardFromComboBox(&m_card_a, index); });
@@ -144,10 +144,10 @@ void MemoryCardEditorDialog::connectUi()
connect(m_ui.newCardB, &QPushButton::clicked, [this]() { newCard(&m_card_b); });
connect(m_ui.openCardA, &QPushButton::clicked, [this]() { openCard(&m_card_a); });
connect(m_ui.openCardB, &QPushButton::clicked, [this]() { openCard(&m_card_b); });
- connect(m_exportFile, &QPushButton::clicked, this, &MemoryCardEditorDialog::doExportSaveFile);
+ connect(m_exportFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doExportSaveFile);
}
-void MemoryCardEditorDialog::populateComboBox(QComboBox* cb)
+void MemoryCardEditorWindow::populateComboBox(QComboBox* cb)
{
QSignalBlocker sb(cb);
@@ -169,12 +169,12 @@ void MemoryCardEditorDialog::populateComboBox(QComboBox* cb)
}
}
-void MemoryCardEditorDialog::loadCardFromComboBox(Card* card, int index)
+void MemoryCardEditorWindow::loadCardFromComboBox(Card* card, int index)
{
loadCard(card->path_cb->itemData(index).toString(), card);
}
-void MemoryCardEditorDialog::onCardASelectionChanged()
+void MemoryCardEditorWindow::onCardASelectionChanged()
{
{
QSignalBlocker cb(m_card_b.table);
@@ -184,7 +184,7 @@ void MemoryCardEditorDialog::onCardASelectionChanged()
updateButtonState();
}
-void MemoryCardEditorDialog::onCardBSelectionChanged()
+void MemoryCardEditorWindow::onCardBSelectionChanged()
{
{
QSignalBlocker cb(m_card_a.table);
@@ -194,7 +194,7 @@ void MemoryCardEditorDialog::onCardBSelectionChanged()
updateButtonState();
}
-void MemoryCardEditorDialog::clearSelection()
+void MemoryCardEditorWindow::clearSelection()
{
{
QSignalBlocker cb(m_card_a.table);
@@ -209,7 +209,7 @@ void MemoryCardEditorDialog::clearSelection()
updateButtonState();
}
-bool MemoryCardEditorDialog::loadCard(const QString& filename, Card* card)
+bool MemoryCardEditorWindow::loadCard(const QString& filename, Card* card)
{
promptForSave(card);
@@ -250,7 +250,7 @@ static void setCardTableItemProperties(QTableWidgetItem* item, const MemoryCardI
}
}
-void MemoryCardEditorDialog::updateCardTable(Card* card)
+void MemoryCardEditorWindow::updateCardTable(Card* card)
{
card->table->setRowCount(0);
@@ -289,20 +289,20 @@ void MemoryCardEditorDialog::updateCardTable(Card* card)
}
}
-void MemoryCardEditorDialog::updateCardBlocksFree(Card* card)
+void MemoryCardEditorWindow::updateCardBlocksFree(Card* card)
{
card->blocks_free = MemoryCardImage::GetFreeBlockCount(card->data);
card->blocks_free_label->setText(
tr("%n block(s) free%1", "", card->blocks_free).arg(card->dirty ? QStringLiteral(" (*)") : QString()));
}
-void MemoryCardEditorDialog::setCardDirty(Card* card)
+void MemoryCardEditorWindow::setCardDirty(Card* card)
{
card->dirty = true;
card->save_button->setEnabled(true);
}
-void MemoryCardEditorDialog::newCard(Card* card)
+void MemoryCardEditorWindow::newCard(Card* card)
{
promptForSave(card);
@@ -328,7 +328,7 @@ void MemoryCardEditorDialog::newCard(Card* card)
saveCard(card);
}
-void MemoryCardEditorDialog::openCard(Card* card)
+void MemoryCardEditorWindow::openCard(Card* card)
{
promptForSave(card);
@@ -357,7 +357,7 @@ void MemoryCardEditorDialog::openCard(Card* card)
updateButtonState();
}
-void MemoryCardEditorDialog::saveCard(Card* card)
+void MemoryCardEditorWindow::saveCard(Card* card)
{
if (card->filename.empty())
return;
@@ -374,7 +374,7 @@ void MemoryCardEditorDialog::saveCard(Card* card)
updateCardBlocksFree(card);
}
-void MemoryCardEditorDialog::promptForSave(Card* card)
+void MemoryCardEditorWindow::promptForSave(Card* card)
{
if (card->filename.empty() || !card->dirty)
return;
@@ -390,7 +390,7 @@ void MemoryCardEditorDialog::promptForSave(Card* card)
saveCard(card);
}
-void MemoryCardEditorDialog::doCopyFile()
+void MemoryCardEditorWindow::doCopyFile()
{
const auto [src, fi] = getSelectedFile();
if (!fi)
@@ -440,7 +440,7 @@ void MemoryCardEditorDialog::doCopyFile()
updateButtonState();
}
-void MemoryCardEditorDialog::doDeleteFile()
+void MemoryCardEditorWindow::doDeleteFile()
{
const auto [card, fi] = getSelectedFile();
if (!fi)
@@ -459,7 +459,7 @@ void MemoryCardEditorDialog::doDeleteFile()
updateButtonState();
}
-void MemoryCardEditorDialog::doUndeleteFile()
+void MemoryCardEditorWindow::doUndeleteFile()
{
const auto [card, fi] = getSelectedFile();
if (!fi)
@@ -481,7 +481,7 @@ void MemoryCardEditorDialog::doUndeleteFile()
updateButtonState();
}
-void MemoryCardEditorDialog::doExportSaveFile()
+void MemoryCardEditorWindow::doExportSaveFile()
{
QString filename = QDir::toNativeSeparators(
QFileDialog::getSaveFileName(this, tr("Select Single Savefile"), QString(), tr(SINGLE_SAVEFILE_FILTER)));
@@ -502,7 +502,7 @@ void MemoryCardEditorDialog::doExportSaveFile()
}
}
-void MemoryCardEditorDialog::importCard(Card* card)
+void MemoryCardEditorWindow::importCard(Card* card)
{
promptForSave(card);
@@ -527,7 +527,7 @@ void MemoryCardEditorDialog::importCard(Card* card)
updateButtonState();
}
-void MemoryCardEditorDialog::formatCard(Card* card)
+void MemoryCardEditorWindow::formatCard(Card* card)
{
promptForSave(card);
@@ -550,7 +550,7 @@ void MemoryCardEditorDialog::formatCard(Card* card)
updateButtonState();
}
-void MemoryCardEditorDialog::importSaveFile(Card* card)
+void MemoryCardEditorWindow::importSaveFile(Card* card)
{
QString filename =
QFileDialog::getOpenFileName(this, tr("Select Import Save File"), QString(), tr(SINGLE_SAVEFILE_FILTER));
@@ -571,7 +571,7 @@ void MemoryCardEditorDialog::importSaveFile(Card* card)
updateCardBlocksFree(card);
}
-std::tuple MemoryCardEditorDialog::getSelectedFile()
+std::tuple MemoryCardEditorWindow::getSelectedFile()
{
QList sel = m_card_a.table->selectedRanges();
Card* card = &m_card_a;
@@ -591,7 +591,7 @@ std::tuple Memo
return std::tuple(card, &card->files[index]);
}
-void MemoryCardEditorDialog::updateButtonState()
+void MemoryCardEditorWindow::updateButtonState()
{
const auto [selected_card, selected_file] = getSelectedFile();
const bool is_card_b = (selected_card == &m_card_b);
diff --git a/src/duckstation-qt/memorycardeditordialog.h b/src/duckstation-qt/memorycardeditorwindow.h
similarity index 90%
rename from src/duckstation-qt/memorycardeditordialog.h
rename to src/duckstation-qt/memorycardeditorwindow.h
index e1582435d..e204565f3 100644
--- a/src/duckstation-qt/memorycardeditordialog.h
+++ b/src/duckstation-qt/memorycardeditorwindow.h
@@ -1,9 +1,12 @@
-// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin
+// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin
// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0)
#pragma once
+
+#include "ui_memorycardeditorwindow.h"
+
#include "core/memory_card_image.h"
-#include "ui_memorycardeditordialog.h"
+
#include
#include
#include
@@ -11,13 +14,13 @@
#include
#include
-class MemoryCardEditorDialog : public QDialog
+class MemoryCardEditorWindow : public QWidget
{
Q_OBJECT
public:
- MemoryCardEditorDialog(QWidget* parent);
- ~MemoryCardEditorDialog();
+ MemoryCardEditorWindow();
+ ~MemoryCardEditorWindow();
bool setCardA(const QString& path);
bool setCardB(const QString& path);
diff --git a/src/duckstation-qt/memorycardeditordialog.ui b/src/duckstation-qt/memorycardeditorwindow.ui
similarity index 96%
rename from src/duckstation-qt/memorycardeditordialog.ui
rename to src/duckstation-qt/memorycardeditorwindow.ui
index ad3958c0a..c87a8cc2c 100644
--- a/src/duckstation-qt/memorycardeditordialog.ui
+++ b/src/duckstation-qt/memorycardeditorwindow.ui
@@ -1,7 +1,7 @@
MemoryCardEditorDialog
-
+
0
@@ -13,6 +13,10 @@
Memory Card Editor
+
+
+ :/icons/duck.png:/icons/duck.png
+
-