GCMemcardCreateNewDialog.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright 2019 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "DolphinQt/GCMemcardCreateNewDialog.h"
  4. #include <QComboBox>
  5. #include <QDialogButtonBox>
  6. #include <QGridLayout>
  7. #include <QLabel>
  8. #include <QPushButton>
  9. #include <QRadioButton>
  10. #include "Common/FileUtil.h"
  11. #include "Common/MsgHandler.h"
  12. #include "Common/Timer.h"
  13. #include "Core/HW/EXI/EXI_DeviceIPL.h"
  14. #include "Core/HW/GCMemcard/GCMemcard.h"
  15. #include "Core/HW/Sram.h"
  16. #include "DolphinQt/QtUtils/DolphinFileDialog.h"
  17. GCMemcardCreateNewDialog::GCMemcardCreateNewDialog(QWidget* parent) : QDialog(parent)
  18. {
  19. m_combobox_size = new QComboBox();
  20. m_combobox_size->addItem(tr("4 Mbit (59 blocks)"), 4);
  21. m_combobox_size->addItem(tr("8 Mbit (123 blocks)"), 8);
  22. m_combobox_size->addItem(tr("16 Mbit (251 blocks)"), 16);
  23. m_combobox_size->addItem(tr("32 Mbit (507 blocks)"), 32);
  24. m_combobox_size->addItem(tr("64 Mbit (1019 blocks)"), 64);
  25. m_combobox_size->addItem(tr("128 Mbit (2043 blocks)"), 128);
  26. m_combobox_size->setCurrentIndex(5);
  27. m_radio_western = new QRadioButton(tr("Western (Windows-1252)"));
  28. // i18n: The translation of this string should be consistent with the translation of the
  29. // string "Western (Windows-1252)". Because of this, you may want to parse "Japanese" as
  30. // "a character encoding which is from Japan / used in Japan" rather than "the Japanese language".
  31. m_radio_shiftjis = new QRadioButton(tr("Japanese (Shift-JIS)"));
  32. m_radio_western->setChecked(true);
  33. auto* card_size_label = new QLabel(tr("Card Size"));
  34. // i18n: Character encoding
  35. auto* card_encoding_label = new QLabel(tr("Encoding"));
  36. auto* button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
  37. button_box->button(QDialogButtonBox::Ok)->setText(tr("Create..."));
  38. auto* layout = new QGridLayout();
  39. layout->addWidget(card_size_label, 0, 0);
  40. layout->addWidget(m_combobox_size, 0, 1);
  41. layout->addWidget(card_encoding_label, 1, 0);
  42. layout->addWidget(m_radio_western, 1, 1);
  43. layout->addWidget(m_radio_shiftjis, 2, 1);
  44. layout->addWidget(button_box, 3, 0, 1, 2, Qt::AlignRight);
  45. setLayout(layout);
  46. connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
  47. connect(button_box, &QDialogButtonBox::accepted, [this] {
  48. if (CreateCard())
  49. accept();
  50. });
  51. setWindowTitle(tr("Create New Memory Card"));
  52. setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
  53. }
  54. GCMemcardCreateNewDialog::~GCMemcardCreateNewDialog() = default;
  55. bool GCMemcardCreateNewDialog::CreateCard()
  56. {
  57. const u16 size = static_cast<u16>(m_combobox_size->currentData().toInt());
  58. const bool is_shift_jis = m_radio_shiftjis->isChecked();
  59. const QString path = DolphinFileDialog::getSaveFileName(
  60. this, tr("Create New Memory Card"), QString::fromStdString(File::GetUserPath(D_GCUSER_IDX)),
  61. tr("GameCube Memory Cards (*.raw *.gcp)") + QStringLiteral(";;") + tr("All Files (*)"));
  62. if (path.isEmpty())
  63. return false;
  64. const CardFlashId flash_id{};
  65. const u32 rtc_bias = 0;
  66. const u32 sram_language = 0;
  67. const u64 format_time =
  68. Common::Timer::GetLocalTimeSinceJan1970() - ExpansionInterface::CEXIIPL::GC_EPOCH;
  69. const std::string p = path.toStdString();
  70. auto memcard = Memcard::GCMemcard::Create(p, flash_id, size, is_shift_jis, rtc_bias,
  71. sram_language, format_time);
  72. if (memcard && memcard->Save())
  73. {
  74. m_card_path = p;
  75. return true;
  76. }
  77. return false;
  78. }
  79. std::string GCMemcardCreateNewDialog::GetMemoryCardPath() const
  80. {
  81. return m_card_path;
  82. }