From 44ea51306a30e7a7eb5231d0fd7f5cc5a6883452 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 19 Dec 2020 17:01:20 +1000 Subject: [PATCH] Qt: Add open button to memory card editor --- src/duckstation-qt/memorycardeditordialog.cpp | 31 +++++++++++++ src/duckstation-qt/memorycardeditordialog.h | 1 + src/duckstation-qt/memorycardeditordialog.ui | 42 +++++++++++++++--- .../resources/icons/document-new.png | Bin 0 -> 1226 bytes .../resources/icons/document-new@2x.png | Bin 0 -> 3129 bytes src/duckstation-qt/resources/resources.qrc | 2 + 6 files changed, 71 insertions(+), 5 deletions(-) create mode 100644 src/duckstation-qt/resources/icons/document-new.png create mode 100644 src/duckstation-qt/resources/icons/document-new@2x.png 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 0000000000000000000000000000000000000000..b735f96a42a8e7bbc46c5303d782b7585e300a56 GIT binary patch literal 1226 zcmV;*1U37KP)%$ zB3BY8aDoFIeS!;A-he8ehd1CQ@&>u)Or_vLaN(*@RB+-DY|D|b^|jLOPIFLJDAuf; z5a_C@-BD?#fBo;C-d*^gOkYw{rK?l!sM6JAs=oipf9|+XlPLTMqAn^;L_<_kL@!`| z!Yut=I$V|l+`oVSyS=@=Z>+Uqi~+zo=N+p0#ykppW~=rrtW|op68~kRa3Vr3nG>BQ zu{-Pae){T*N8cjJp=@yi5L^Y=-QE3qe}Dhxcsxc`34#FU+#)(vL>A1&^`Fo$2+Yq| zd9@fOMHnNJp&B5jN*verk;-Q%=&NKR9WK`Zj4?8uP8kk|IOnKTDr8x<=J@J0w7+5O z5!OD%1Vbwj!QC3XiSDkhL9tYfmDD7NEZn{2k9>6 zQ~-%li4YC3#NHJ6oJ3JXqtWmx5ZHuD)F6zi7!zY;j>s7F49&g=Jp)F-4A2>(b5v4t zX5JJO)n2B=sv07KY6GWroNJJ~ZLB*3Ia-`?eFh9cpQG*s$a|;`5WV1%p%=jCJWW$Z zqmdT?AdM^JaRZmPP&Xoqo`CeRK^-&!?J=GNt{SCBX#NK>Kb4zI)&Nu$fbn=twOTEW z{%R`b=`8{~#HKSu1gGa%Gr-6NssYF@{lO^TX=hK6*;DH2Q}8sREXx3>*XtN#yfxrI zl1;1$F+m+ii_Gx@J(FaydM98vitp?WG@luUFjO<|Sm|L}-#mUna=l%11 z)p@A`s}8Ofq|dnz#Ay|mRZ;GM0>&=)-U#4R03ZxQwzs#}@*l@B^?JP&WHlh4l{O-u z0=_0x)+v4V-U>ufR0>sA6RWU3TLZ}R9Do-uUU2*N?d8Uk$%MgR@Wy6k*HycF_wKs^ z6f$+YU5Ym%V66|l%>%2L`=l=gC{hqb5qX{y1aJPO%=spOP4?C`kftfa;jlF7GJtlw zy%D4|1*?m$E3UFa+$4P|K%VE`g;5kO`@p6n+Uazb_o})aWw!Q4^fuJ*V%P1ru?AKb zhha#o)$&HZ`qW%q^RH6iE5hsA>D9U^=GV#Z1<10DFbtPpJ=R*Rwad*5h@wYaSE$z& z~*Jx@sY8qU4`&54LEe5)QD9Q?2b=%c=O?_M*G zV*`*Ri8(zztzBMTZqH`3tvt_b&be4sLshj!a3Yc#V`kRcBnX0Otya6}bULG*ot-(r oY<bA3nVB%JiQ0USHUM1A*Npj4tbmp#T5?07*qoM6N<$g6GCKS^xk5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5447108f1e9cef49d2211e5c69759d6273cb4af4 GIT binary patch literal 3129 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 T#a0Np00000NkvXXu0mjf*RRgQ literal 0 HcmV?d00001 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