diff --git a/src/duckstation-qt/memorycardeditordialog.cpp b/src/duckstation-qt/memorycardeditordialog.cpp index 71c8db808..731de6288 100644 --- a/src/duckstation-qt/memorycardeditordialog.cpp +++ b/src/duckstation-qt/memorycardeditordialog.cpp @@ -77,6 +77,8 @@ void MemoryCardEditorDialog::connectUi() [this](int index) { loadCardFromComboBox(&m_card_b, index); }); connect(m_ui.newCardA, &QPushButton::clicked, [this]() { newCard(&m_card_a); }); 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_ui.saveCardA, &QPushButton::clicked, [this]() { saveCard(&m_card_a); }); connect(m_ui.saveCardB, &QPushButton::clicked, [this]() { saveCard(&m_card_b); }); connect(m_ui.importCardA, &QPushButton::clicked, [this]() { importCard(&m_card_a); }); @@ -258,6 +260,35 @@ void MemoryCardEditorDialog::newCard(Card* card) saveCard(card); } +void MemoryCardEditorDialog::openCard(Card* card) +{ + promptForSave(card); + + QString filename = + QFileDialog::getOpenFileName(this, tr("Select Memory Card"), QString(), tr(MEMORY_CARD_IMAGE_FILTER)); + if (filename.isEmpty()) + return; + + if (!MemoryCardImage::LoadFromFile(&card->data, filename.toUtf8().constData())) + { + QMessageBox::critical(this, tr("Error"), tr("Failed to load memory card image.")); + return; + } + + { + // add to combo box + QFileInfo file(filename); + QSignalBlocker sb(card->path_cb); + card->path_cb->addItem(file.baseName(), QVariant(filename)); + card->path_cb->setCurrentIndex(card->path_cb->count() - 1); + } + + card->filename = filename.toStdString(); + updateCardTable(card); + updateCardBlocksFree(card); + updateButtonState(); +} + void MemoryCardEditorDialog::saveCard(Card* card) { if (card->filename.empty()) diff --git a/src/duckstation-qt/memorycardeditordialog.h b/src/duckstation-qt/memorycardeditordialog.h index d51cb7ea3..d2b239f2c 100644 --- a/src/duckstation-qt/memorycardeditordialog.h +++ b/src/duckstation-qt/memorycardeditordialog.h @@ -52,6 +52,7 @@ private: void updateCardBlocksFree(Card* card); void setCardDirty(Card* card); void newCard(Card* card); + void openCard(Card* card); void saveCard(Card* card); void promptForSave(Card* card); void importCard(Card* card); diff --git a/src/duckstation-qt/memorycardeditordialog.ui b/src/duckstation-qt/memorycardeditordialog.ui index d09e2e945..c79527c81 100644 --- a/src/duckstation-qt/memorycardeditordialog.ui +++ b/src/duckstation-qt/memorycardeditordialog.ui @@ -57,7 +57,7 @@ - + @@ -73,10 +73,25 @@ - + New... + + + :/icons/document-new.png:/icons/document-new.png + + + + + + + Open... + + + + :/icons/document-open.png:/icons/document-open.png + @@ -164,7 +179,7 @@ - + @@ -176,10 +191,25 @@ - + New... + + + :/icons/document-new.png:/icons/document-new.png + + + + + + + Open... + + + + :/icons/document-open.png:/icons/document-open.png + @@ -285,6 +315,8 @@ - + + + diff --git a/src/duckstation-qt/resources/icons/document-new.png b/src/duckstation-qt/resources/icons/document-new.png new file mode 100644 index 000000000..b735f96a4 Binary files /dev/null and b/src/duckstation-qt/resources/icons/document-new.png differ diff --git a/src/duckstation-qt/resources/icons/document-new@2x.png b/src/duckstation-qt/resources/icons/document-new@2x.png new file mode 100644 index 000000000..5447108f1 Binary files /dev/null and b/src/duckstation-qt/resources/icons/document-new@2x.png differ diff --git a/src/duckstation-qt/resources/resources.qrc b/src/duckstation-qt/resources/resources.qrc index 3c23c6016..19dd9559f 100644 --- a/src/duckstation-qt/resources/resources.qrc +++ b/src/duckstation-qt/resources/resources.qrc @@ -35,6 +35,8 @@ icons/debug-step-into.png icons/debug-step-out.png icons/debug-step-over.png + icons/document-new.png + icons/document-new@2x.png icons/document-open.png icons/document-open@2x.png icons/document-save.png