Qt: Add 'Rename File' to memory card editor
And context menu for ease of use.
This commit is contained in:
parent
50d8bb091f
commit
b99ee59224
|
@ -116,6 +116,7 @@ set(SRCS
|
||||||
memorycardeditorwindow.cpp
|
memorycardeditorwindow.cpp
|
||||||
memorycardeditorwindow.h
|
memorycardeditorwindow.h
|
||||||
memorycardeditorwindow.ui
|
memorycardeditorwindow.ui
|
||||||
|
memorycardrenamefiledialog.ui
|
||||||
memorycardsettingswidget.cpp
|
memorycardsettingswidget.cpp
|
||||||
memorycardsettingswidget.h
|
memorycardsettingswidget.h
|
||||||
memoryscannerwindow.cpp
|
memoryscannerwindow.cpp
|
||||||
|
|
|
@ -351,6 +351,9 @@
|
||||||
<QtUi Include="gamecheatcodechoiceeditordialog.ui">
|
<QtUi Include="gamecheatcodechoiceeditordialog.ui">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
</QtUi>
|
</QtUi>
|
||||||
|
<QtUi Include="memorycardrenamefiledialog.ui">
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
</QtUi>
|
||||||
<None Include="translations\duckstation-qt_es-es.ts" />
|
<None Include="translations\duckstation-qt_es-es.ts" />
|
||||||
<None Include="translations\duckstation-qt_tr.ts" />
|
<None Include="translations\duckstation-qt_tr.ts" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -288,6 +288,7 @@
|
||||||
<QtUi Include="gamecheatsettingswidget.ui" />
|
<QtUi Include="gamecheatsettingswidget.ui" />
|
||||||
<QtUi Include="gamepatchdetailswidget.ui" />
|
<QtUi Include="gamepatchdetailswidget.ui" />
|
||||||
<QtUi Include="gamecheatcodechoiceeditordialog.ui" />
|
<QtUi Include="gamecheatcodechoiceeditordialog.ui" />
|
||||||
|
<QtUi Include="memorycardrenamefiledialog.ui" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="duckstation-qt.rc" />
|
<ResourceCompile Include="duckstation-qt.rc" />
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
|
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
#include <QtWidgets/QFileDialog>
|
#include <QtWidgets/QFileDialog>
|
||||||
|
#include <QtWidgets/QMenu>
|
||||||
#include <QtWidgets/QMessageBox>
|
#include <QtWidgets/QMessageBox>
|
||||||
|
|
||||||
static constexpr char MEMORY_CARD_IMAGE_FILTER[] = QT_TRANSLATE_NOOP(
|
static constexpr char MEMORY_CARD_IMAGE_FILTER[] = QT_TRANSLATE_NOOP(
|
||||||
|
@ -23,6 +24,11 @@ static constexpr char MEMORY_CARD_IMPORT_FILTER[] =
|
||||||
QT_TRANSLATE_NOOP("MemoryCardEditorWindow", "All Importable Memory Card Types (*.mcd *.mcr *.mc *.gme)");
|
QT_TRANSLATE_NOOP("MemoryCardEditorWindow", "All Importable Memory Card Types (*.mcd *.mcr *.mc *.gme)");
|
||||||
static constexpr char SINGLE_SAVEFILE_FILTER[] =
|
static constexpr char SINGLE_SAVEFILE_FILTER[] =
|
||||||
TRANSLATE_NOOP("MemoryCardEditorWindow", "Single Save Files (*.mcs);;All Files (*.*)");
|
TRANSLATE_NOOP("MemoryCardEditorWindow", "Single Save Files (*.mcs);;All Files (*.*)");
|
||||||
|
static constexpr std::array<std::pair<ConsoleRegion, const char*>, 3> MEMORY_CARD_FILE_REGION_PREFIXES = {{
|
||||||
|
{ConsoleRegion::NTSC_U, "BA"},
|
||||||
|
{ConsoleRegion::NTSC_J, "BI"},
|
||||||
|
{ConsoleRegion::PAL, "BE"},
|
||||||
|
}};
|
||||||
|
|
||||||
MemoryCardEditorWindow::MemoryCardEditorWindow() : QWidget()
|
MemoryCardEditorWindow::MemoryCardEditorWindow() : QWidget()
|
||||||
{
|
{
|
||||||
|
@ -31,6 +37,7 @@ MemoryCardEditorWindow::MemoryCardEditorWindow() : QWidget()
|
||||||
|
|
||||||
m_deleteFile = m_ui.centerButtonBox->addButton(tr("Delete File"), QDialogButtonBox::ActionRole);
|
m_deleteFile = m_ui.centerButtonBox->addButton(tr("Delete File"), QDialogButtonBox::ActionRole);
|
||||||
m_undeleteFile = m_ui.centerButtonBox->addButton(tr("Undelete File"), QDialogButtonBox::ActionRole);
|
m_undeleteFile = m_ui.centerButtonBox->addButton(tr("Undelete File"), QDialogButtonBox::ActionRole);
|
||||||
|
m_renameFile = m_ui.centerButtonBox->addButton(tr("Rename File"), QDialogButtonBox::ActionRole);
|
||||||
m_exportFile = m_ui.centerButtonBox->addButton(tr("Export File"), QDialogButtonBox::ActionRole);
|
m_exportFile = m_ui.centerButtonBox->addButton(tr("Export File"), QDialogButtonBox::ActionRole);
|
||||||
m_moveLeft = m_ui.centerButtonBox->addButton(tr("<<"), QDialogButtonBox::ActionRole);
|
m_moveLeft = m_ui.centerButtonBox->addButton(tr("<<"), QDialogButtonBox::ActionRole);
|
||||||
m_moveRight = m_ui.centerButtonBox->addButton(tr(">>"), QDialogButtonBox::ActionRole);
|
m_moveRight = m_ui.centerButtonBox->addButton(tr(">>"), QDialogButtonBox::ActionRole);
|
||||||
|
@ -135,7 +142,11 @@ void MemoryCardEditorWindow::connectCardUi(Card* card, QDialogButtonBox* buttonB
|
||||||
void MemoryCardEditorWindow::connectUi()
|
void MemoryCardEditorWindow::connectUi()
|
||||||
{
|
{
|
||||||
connect(m_ui.cardA, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardASelectionChanged);
|
connect(m_ui.cardA, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardASelectionChanged);
|
||||||
|
connect(m_ui.cardA, &QTableWidget::customContextMenuRequested, this,
|
||||||
|
&MemoryCardEditorWindow::onCardContextMenuRequested);
|
||||||
connect(m_ui.cardB, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardBSelectionChanged);
|
connect(m_ui.cardB, &QTableWidget::itemSelectionChanged, this, &MemoryCardEditorWindow::onCardBSelectionChanged);
|
||||||
|
connect(m_ui.cardB, &QTableWidget::customContextMenuRequested, this,
|
||||||
|
&MemoryCardEditorWindow::onCardContextMenuRequested);
|
||||||
connect(m_moveLeft, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
|
connect(m_moveLeft, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
|
||||||
connect(m_moveRight, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
|
connect(m_moveRight, &QPushButton::clicked, this, &MemoryCardEditorWindow::doCopyFile);
|
||||||
connect(m_deleteFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doDeleteFile);
|
connect(m_deleteFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doDeleteFile);
|
||||||
|
@ -149,6 +160,7 @@ void MemoryCardEditorWindow::connectUi()
|
||||||
connect(m_ui.newCardB, &QPushButton::clicked, [this]() { newCard(&m_card_b); });
|
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.openCardA, &QPushButton::clicked, [this]() { openCard(&m_card_a); });
|
||||||
connect(m_ui.openCardB, &QPushButton::clicked, [this]() { openCard(&m_card_b); });
|
connect(m_ui.openCardB, &QPushButton::clicked, [this]() { openCard(&m_card_b); });
|
||||||
|
connect(m_renameFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doRenameSaveFile);
|
||||||
connect(m_exportFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doExportSaveFile);
|
connect(m_exportFile, &QPushButton::clicked, this, &MemoryCardEditorWindow::doExportSaveFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -522,6 +534,33 @@ void MemoryCardEditorWindow::doExportSaveFile()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MemoryCardEditorWindow::doRenameSaveFile()
|
||||||
|
{
|
||||||
|
const auto [card, fi] = getSelectedFile();
|
||||||
|
if (!fi)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const std::string new_name = MemoryCardRenameFileDialog::promptForNewName(this, fi->filename);
|
||||||
|
if (new_name.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
Error error;
|
||||||
|
if (!MemoryCardImage::RenameFile(&card->data, *fi, new_name, &error))
|
||||||
|
{
|
||||||
|
QMessageBox::critical(this, tr("Error"),
|
||||||
|
tr("Failed to rename save file %1:\n%2")
|
||||||
|
.arg(QString::fromStdString(fi->filename))
|
||||||
|
.arg(QString::fromStdString(error.GetDescription())));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearSelection();
|
||||||
|
setCardDirty(card);
|
||||||
|
updateCardTable(card);
|
||||||
|
updateCardBlocksFree(card);
|
||||||
|
updateButtonState();
|
||||||
|
}
|
||||||
|
|
||||||
void MemoryCardEditorWindow::importCard(Card* card)
|
void MemoryCardEditorWindow::importCard(Card* card)
|
||||||
{
|
{
|
||||||
promptForSave(card);
|
promptForSave(card);
|
||||||
|
@ -597,6 +636,35 @@ void MemoryCardEditorWindow::importSaveFile(Card* card)
|
||||||
updateCardBlocksFree(card);
|
updateCardBlocksFree(card);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MemoryCardEditorWindow::onCardContextMenuRequested(const QPoint& pos)
|
||||||
|
{
|
||||||
|
QTableWidget* table = qobject_cast<QTableWidget*>(sender());
|
||||||
|
if (!table)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const auto& [card, fi] = getSelectedFile();
|
||||||
|
if (!card)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QMenu menu(table);
|
||||||
|
QAction* action = menu.addAction(tr("Delete File"));
|
||||||
|
action->setEnabled(fi && !fi->deleted);
|
||||||
|
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doDeleteFile);
|
||||||
|
action = menu.addAction(tr("Undelete File"));
|
||||||
|
action->setEnabled(fi && fi->deleted);
|
||||||
|
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doUndeleteFile);
|
||||||
|
action = menu.addAction(tr("Rename File"));
|
||||||
|
action->setEnabled(fi != nullptr);
|
||||||
|
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doRenameSaveFile);
|
||||||
|
action = menu.addAction(tr("Export File"));
|
||||||
|
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doExportSaveFile);
|
||||||
|
action = menu.addAction(tr("Copy File"));
|
||||||
|
action->setEnabled(fi && !m_card_a.filename.empty() && !m_card_b.filename.empty());
|
||||||
|
connect(action, &QAction::triggered, this, &MemoryCardEditorWindow::doCopyFile);
|
||||||
|
|
||||||
|
menu.exec(table->mapToGlobal(pos));
|
||||||
|
}
|
||||||
|
|
||||||
std::tuple<MemoryCardEditorWindow::Card*, const MemoryCardImage::FileInfo*> MemoryCardEditorWindow::getSelectedFile()
|
std::tuple<MemoryCardEditorWindow::Card*, const MemoryCardImage::FileInfo*> MemoryCardEditorWindow::getSelectedFile()
|
||||||
{
|
{
|
||||||
QList<QTableWidgetSelectionRange> sel = m_card_a.table->selectedRanges();
|
QList<QTableWidgetSelectionRange> sel = m_card_a.table->selectedRanges();
|
||||||
|
@ -629,8 +697,115 @@ void MemoryCardEditorWindow::updateButtonState()
|
||||||
m_deleteFile->setEnabled(has_selection);
|
m_deleteFile->setEnabled(has_selection);
|
||||||
m_undeleteFile->setEnabled(is_deleted);
|
m_undeleteFile->setEnabled(is_deleted);
|
||||||
m_exportFile->setEnabled(has_selection);
|
m_exportFile->setEnabled(has_selection);
|
||||||
|
m_renameFile->setEnabled(has_selection);
|
||||||
m_moveLeft->setEnabled(both_cards_present && has_selection && is_card_b);
|
m_moveLeft->setEnabled(both_cards_present && has_selection && is_card_b);
|
||||||
m_moveRight->setEnabled(both_cards_present && has_selection && !is_card_b);
|
m_moveRight->setEnabled(both_cards_present && has_selection && !is_card_b);
|
||||||
m_ui.buttonBoxA->setEnabled(card_a_present);
|
m_ui.buttonBoxA->setEnabled(card_a_present);
|
||||||
m_ui.buttonBoxB->setEnabled(card_b_present);
|
m_ui.buttonBoxB->setEnabled(card_b_present);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MemoryCardRenameFileDialog::MemoryCardRenameFileDialog(QWidget* parent, std::string_view old_name) : QDialog(parent)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
setupAdditionalUi();
|
||||||
|
|
||||||
|
const QString original_name = QtUtils::StringViewToQString(old_name);
|
||||||
|
m_ui.originalName->setText(original_name);
|
||||||
|
m_ui.fullFilename->setText(original_name);
|
||||||
|
updateSimplifiedFieldsFromFullName();
|
||||||
|
}
|
||||||
|
|
||||||
|
MemoryCardRenameFileDialog::~MemoryCardRenameFileDialog() = default;
|
||||||
|
|
||||||
|
std::string MemoryCardRenameFileDialog::promptForNewName(QWidget* parent, std::string_view old_name)
|
||||||
|
{
|
||||||
|
MemoryCardRenameFileDialog dlg(parent, old_name);
|
||||||
|
|
||||||
|
std::string ret;
|
||||||
|
if (dlg.exec() != 1)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
ret = dlg.m_ui.fullFilename->text().toStdString();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryCardRenameFileDialog::setupAdditionalUi()
|
||||||
|
{
|
||||||
|
m_ui.icon->setPixmap(QIcon::fromTheme(QStringLiteral("memcard-line")).pixmap(32, 32));
|
||||||
|
|
||||||
|
for (const auto& [region, prefix] : MEMORY_CARD_FILE_REGION_PREFIXES)
|
||||||
|
{
|
||||||
|
m_ui.region->addItem(QtUtils::GetIconForRegion(region), Settings::GetConsoleRegionDisplayName(region),
|
||||||
|
QVariant(QString::fromUtf8(prefix)));
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_ui.region, &QComboBox::currentIndexChanged, this,
|
||||||
|
&MemoryCardRenameFileDialog::updateFullNameFromSimplifiedFields);
|
||||||
|
connect(m_ui.serial, &QLineEdit::textChanged, this, &MemoryCardRenameFileDialog::updateFullNameFromSimplifiedFields);
|
||||||
|
connect(m_ui.filename, &QLineEdit::textChanged, this,
|
||||||
|
&MemoryCardRenameFileDialog::updateFullNameFromSimplifiedFields);
|
||||||
|
|
||||||
|
connect(m_ui.fullFilename, &QLineEdit::textChanged, this,
|
||||||
|
&MemoryCardRenameFileDialog::updateSimplifiedFieldsFromFullName);
|
||||||
|
|
||||||
|
connect(m_ui.buttonBox, &QDialogButtonBox::accepted, this, &MemoryCardRenameFileDialog::accept);
|
||||||
|
connect(m_ui.buttonBox, &QDialogButtonBox::rejected, this, &MemoryCardRenameFileDialog::reject);
|
||||||
|
|
||||||
|
m_ui.fullFilename->setFocus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryCardRenameFileDialog::updateSimplifiedFieldsFromFullName()
|
||||||
|
{
|
||||||
|
const QString full_name = m_ui.fullFilename->text();
|
||||||
|
|
||||||
|
const QString region = full_name.mid(0, MemoryCardImage::FILE_REGION_LENGTH);
|
||||||
|
const QString serial = full_name.mid(MemoryCardImage::FILE_REGION_LENGTH, MemoryCardImage::FILE_SERIAL_LENGTH);
|
||||||
|
const QString filename = full_name.mid(MemoryCardImage::FILE_REGION_LENGTH + MemoryCardImage::FILE_SERIAL_LENGTH);
|
||||||
|
|
||||||
|
{
|
||||||
|
QSignalBlocker sb(m_ui.region);
|
||||||
|
|
||||||
|
while (m_ui.region->count() > static_cast<int>(MEMORY_CARD_FILE_REGION_PREFIXES.size()))
|
||||||
|
m_ui.region->removeItem(m_ui.region->count() - 1);
|
||||||
|
|
||||||
|
const std::string regionStr = region.toStdString();
|
||||||
|
size_t i;
|
||||||
|
for (i = 0; i < MEMORY_CARD_FILE_REGION_PREFIXES.size(); i++)
|
||||||
|
{
|
||||||
|
if (regionStr == MEMORY_CARD_FILE_REGION_PREFIXES[i].second)
|
||||||
|
{
|
||||||
|
m_ui.region->setCurrentIndex(static_cast<int>(i));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (i == MEMORY_CARD_FILE_REGION_PREFIXES.size())
|
||||||
|
{
|
||||||
|
m_ui.region->addItem(tr("Unknown (%1)").arg(region), region);
|
||||||
|
m_ui.region->setCurrentIndex(m_ui.region->count() - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QSignalBlocker sb(m_ui.serial);
|
||||||
|
m_ui.serial->setText(serial);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QSignalBlocker sb(m_ui.filename);
|
||||||
|
m_ui.filename->setText(filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryCardRenameFileDialog::updateFullNameFromSimplifiedFields()
|
||||||
|
{
|
||||||
|
const QString region = m_ui.region->currentData().toString();
|
||||||
|
const QString serial = m_ui.serial->text()
|
||||||
|
.left(MemoryCardImage::FILE_SERIAL_LENGTH)
|
||||||
|
.leftJustified(MemoryCardImage::FILE_SERIAL_LENGTH, QChar(' '));
|
||||||
|
const QString filename = m_ui.filename->text()
|
||||||
|
.left(MemoryCardImage::FILE_FILENAME_LENGTH)
|
||||||
|
.leftJustified(MemoryCardImage::FILE_FILENAME_LENGTH, QChar(' '));
|
||||||
|
|
||||||
|
const QSignalBlocker sb(m_ui.fullFilename);
|
||||||
|
m_ui.fullFilename->setText(QStringLiteral("%1%2%3").arg(region).arg(serial).arg(filename));
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "ui_memorycardeditorwindow.h"
|
#include "ui_memorycardeditorwindow.h"
|
||||||
|
#include "ui_memorycardrenamefiledialog.h"
|
||||||
|
|
||||||
#include "core/memory_card_image.h"
|
#include "core/memory_card_image.h"
|
||||||
|
|
||||||
|
@ -36,6 +37,7 @@ protected:
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onCardASelectionChanged();
|
void onCardASelectionChanged();
|
||||||
void onCardBSelectionChanged();
|
void onCardBSelectionChanged();
|
||||||
|
void onCardContextMenuRequested(const QPoint& pos);
|
||||||
void doCopyFile();
|
void doCopyFile();
|
||||||
void doDeleteFile();
|
void doDeleteFile();
|
||||||
void doUndeleteFile();
|
void doUndeleteFile();
|
||||||
|
@ -76,6 +78,7 @@ private:
|
||||||
void importCard(Card* card);
|
void importCard(Card* card);
|
||||||
void formatCard(Card* card);
|
void formatCard(Card* card);
|
||||||
|
|
||||||
|
void doRenameSaveFile();
|
||||||
void doExportSaveFile();
|
void doExportSaveFile();
|
||||||
void importSaveFile(Card* card);
|
void importSaveFile(Card* card);
|
||||||
|
|
||||||
|
@ -85,6 +88,7 @@ private:
|
||||||
Ui::MemoryCardEditorDialog m_ui;
|
Ui::MemoryCardEditorDialog m_ui;
|
||||||
QPushButton* m_deleteFile;
|
QPushButton* m_deleteFile;
|
||||||
QPushButton* m_undeleteFile;
|
QPushButton* m_undeleteFile;
|
||||||
|
QPushButton* m_renameFile;
|
||||||
QPushButton* m_exportFile;
|
QPushButton* m_exportFile;
|
||||||
QPushButton* m_moveLeft;
|
QPushButton* m_moveLeft;
|
||||||
QPushButton* m_moveRight;
|
QPushButton* m_moveRight;
|
||||||
|
@ -92,3 +96,22 @@ private:
|
||||||
Card m_card_a;
|
Card m_card_a;
|
||||||
Card m_card_b;
|
Card m_card_b;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MemoryCardRenameFileDialog final : public QDialog
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
MemoryCardRenameFileDialog(QWidget* parent, std::string_view old_name);
|
||||||
|
~MemoryCardRenameFileDialog() override;
|
||||||
|
|
||||||
|
static std::string promptForNewName(QWidget* parent, std::string_view old_name);
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void updateSimplifiedFieldsFromFullName();
|
||||||
|
void updateFullNameFromSimplifiedFields();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void setupAdditionalUi();
|
||||||
|
|
||||||
|
Ui::MemoryCardRenameFileDialog m_ui;
|
||||||
|
};
|
||||||
|
|
|
@ -14,17 +14,20 @@
|
||||||
<string>Memory Card Editor</string>
|
<string>Memory Card Editor</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset resource="resources/resources.qrc">
|
<iconset resource="resources/duckstation-qt.qrc">
|
||||||
<normaloff>:/icons/duck.png</normaloff>:/icons/duck.png</iconset>
|
<normaloff>:/icons/duck.png</normaloff>:/icons/duck.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QTableWidget" name="cardA">
|
<widget class="QTableWidget" name="cardA">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
<property name="selectionMode">
|
<property name="selectionMode">
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
<enum>QAbstractItemView::SelectionMode::SingleSelection</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="selectionBehavior">
|
<property name="selectionBehavior">
|
||||||
<enum>QAbstractItemView::SelectRows</enum>
|
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -82,7 +85,7 @@
|
||||||
<string>New...</string>
|
<string>New...</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources/resources.qrc">
|
<iconset resource="resources/duckstation-qt.qrc">
|
||||||
<normaloff>:/icons/document-new.png</normaloff>:/icons/document-new.png</iconset>
|
<normaloff>:/icons/document-new.png</normaloff>:/icons/document-new.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -93,7 +96,7 @@
|
||||||
<string>Open...</string>
|
<string>Open...</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources/resources.qrc">
|
<iconset resource="resources/duckstation-qt.qrc">
|
||||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -112,7 +115,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QDialogButtonBox" name="buttonBoxB">
|
<widget class="QDialogButtonBox" name="buttonBoxB">
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::NoButton</set>
|
<set>QDialogButtonBox::StandardButton::NoButton</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -130,7 +133,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QDialogButtonBox" name="buttonBoxA">
|
<widget class="QDialogButtonBox" name="buttonBoxA">
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::NoButton</set>
|
<set>QDialogButtonBox::StandardButton::NoButton</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -154,7 +157,7 @@
|
||||||
<string>New...</string>
|
<string>New...</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources/resources.qrc">
|
<iconset resource="resources/duckstation-qt.qrc">
|
||||||
<normaloff>:/icons/document-new.png</normaloff>:/icons/document-new.png</iconset>
|
<normaloff>:/icons/document-new.png</normaloff>:/icons/document-new.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -165,7 +168,7 @@
|
||||||
<string>Open...</string>
|
<string>Open...</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="icon">
|
<property name="icon">
|
||||||
<iconset resource="resources/resources.qrc">
|
<iconset resource="resources/duckstation-qt.qrc">
|
||||||
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
<normaloff>:/icons/document-open.png</normaloff>:/icons/document-open.png</iconset>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -174,11 +177,14 @@
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="3">
|
<item row="1" column="3">
|
||||||
<widget class="QTableWidget" name="cardB">
|
<widget class="QTableWidget" name="cardB">
|
||||||
|
<property name="contextMenuPolicy">
|
||||||
|
<enum>Qt::ContextMenuPolicy::CustomContextMenu</enum>
|
||||||
|
</property>
|
||||||
<property name="selectionMode">
|
<property name="selectionMode">
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
<enum>QAbstractItemView::SelectionMode::SingleSelection</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="selectionBehavior">
|
<property name="selectionBehavior">
|
||||||
<enum>QAbstractItemView::SelectRows</enum>
|
<enum>QAbstractItemView::SelectionBehavior::SelectRows</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
@ -217,17 +223,17 @@
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QDialogButtonBox" name="centerButtonBox">
|
<widget class="QDialogButtonBox" name="centerButtonBox">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Orientation::Vertical</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="standardButtons">
|
<property name="standardButtons">
|
||||||
<set>QDialogButtonBox::NoButton</set>
|
<set>QDialogButtonBox::StandardButton::NoButton</set>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="resources/resources.qrc"/>
|
<include location="resources/duckstation-qt.qrc"/>
|
||||||
</resources>
|
</resources>
|
||||||
<connections/>
|
<connections/>
|
||||||
</ui>
|
</ui>
|
||||||
|
|
|
@ -0,0 +1,137 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MemoryCardRenameFileDialog</class>
|
||||||
|
<widget class="QDialog" name="MemoryCardRenameFileDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>438</width>
|
||||||
|
<height>232</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Rename Memory Card File</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QFormLayout" name="formLayout">
|
||||||
|
<item row="0" column="0" colspan="2">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>10</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="icon">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>32</width>
|
||||||
|
<height>32</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_4">
|
||||||
|
<property name="text">
|
||||||
|
<string><html><head/><body><p><span style=" font-weight:700;">WARNING: </span>Renaming memory card files may result in saves becoming inaccessible or corrupted. Be sure to make backups first.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="textFormat">
|
||||||
|
<enum>Qt::TextFormat::RichText</enum>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="originalNameLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Original Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="originalName">
|
||||||
|
<property name="readOnly">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QLabel" name="regionLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Region:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QComboBox" name="region"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="serialLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Serial:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QLineEdit" name="serial"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLabel" name="filenameLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>File Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLineEdit" name="filename"/>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QLabel" name="fullFilenameLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>Full File Name:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1">
|
||||||
|
<widget class="QLineEdit" name="fullFilename"/>
|
||||||
|
</item>
|
||||||
|
<item row="6" column="0" colspan="2">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Orientation::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="2">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in New Issue