Large diffs are not rendered by default.

@@ -0,0 +1,75 @@
// Copyright 2018 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.

#pragma once

#include <array>
#include <memory>
#include <utility>
#include <vector>

#include <QDialog>

class GCMemcard;

class QDialogButtonBox;
class QGroupBox;
class QLabel;
class QLineEdit;
class QPushButton;
class QTableWidget;
class QTimer;

class GCMemcardManager : public QDialog
{
public:
explicit GCMemcardManager(QWidget* parent = nullptr);
~GCMemcardManager();

private:
void CreateWidgets();
void ConnectWidgets();

void UpdateActions();
void UpdateSlotTable(int slot);
void SetSlotFile(int slot, QString path);
void SetSlotFileInteractive(int slot);
void SetActiveSlot(int slot);

void CopyFiles();
void ImportFile();
void DeleteFiles();
void ExportFiles(bool prompt);
void ExportAllFiles();
void FixChecksums();
void DrawIcons();

QPixmap GetBannerFromSaveFile(int file_index);
std::vector<QPixmap> GetIconFromSaveFile(int file_index);

// Actions
QPushButton* m_select_button;
QPushButton* m_copy_button;
QPushButton* m_export_button;
QPushButton* m_export_all_button;
QPushButton* m_import_button;
QPushButton* m_delete_button;
QPushButton* m_fix_checksums_button;

// Slots
static constexpr int SLOT_COUNT = 2;
std::array<std::vector<std::pair<int, std::vector<QPixmap>>>, SLOT_COUNT> m_slot_active_icons;
std::array<std::unique_ptr<GCMemcard>, SLOT_COUNT> m_slot_memcard;
std::array<QGroupBox*, SLOT_COUNT> m_slot_group;
std::array<QLineEdit*, SLOT_COUNT> m_slot_file_edit;
std::array<QPushButton*, SLOT_COUNT> m_slot_file_button;
std::array<QTableWidget*, SLOT_COUNT> m_slot_table;
std::array<QLabel*, SLOT_COUNT> m_slot_stat_label;

int m_active_slot;
int m_current_frame;

QDialogButtonBox* m_button_box;
QTimer* m_timer;
};
@@ -53,6 +53,7 @@
#include "DolphinQt2/Debugger/RegisterWidget.h"
#include "DolphinQt2/Debugger/WatchWidget.h"
#include "DolphinQt2/FIFOPlayerWindow.h"
#include "DolphinQt2/GCMemcardManager.h"
#include "DolphinQt2/Host.h"
#include "DolphinQt2/HotkeyScheduler.h"
#include "DolphinQt2/MainWindow.h"
@@ -234,6 +235,7 @@ void MainWindow::ConnectMenuBar()
connect(m_menu_bar, &MenuBar::ConfigureHotkeys, this, &MainWindow::ShowHotkeyDialog);

// Tools
connect(m_menu_bar, &MenuBar::ShowMemcardManager, this, &MainWindow::ShowMemcardManager);
connect(m_menu_bar, &MenuBar::BootGameCubeIPL, this, &MainWindow::OnBootGameCubeIPL);
connect(m_menu_bar, &MenuBar::ImportNANDBackup, this, &MainWindow::OnImportNANDBackup);
connect(m_menu_bar, &MenuBar::PerformOnlineUpdate, this, &MainWindow::PerformOnlineUpdate);
@@ -1065,3 +1067,10 @@ void MainWindow::OnConnectWiiRemote(int id)
Wiimote::Connect(id, !is_connected);
});
}

void MainWindow::ShowMemcardManager()
{
GCMemcardManager manager(this);

manager.exec();
}
@@ -104,6 +104,7 @@ class MainWindow final : public QMainWindow
void ShowHotkeyDialog();
void ShowNetPlaySetupDialog();
void ShowFIFOPlayer();
void ShowMemcardManager();

void NetPlayInit();
bool NetPlayJoin();
@@ -109,6 +109,11 @@ void MenuBar::AddToolsMenu()
{
QMenu* tools_menu = addMenu(tr("&Tools"));

AddAction(tools_menu, tr("&Memory Card Manager (GC)"), this,
[this] { emit ShowMemcardManager(); });

tools_menu->addSeparator();

AddAction(tools_menu, tr("Import Wii Save..."), this, &MenuBar::ImportWiiSave);
AddAction(tools_menu, tr("Export All Wii Saves"), this, &MenuBar::ExportWiiSaves);

@@ -62,6 +62,7 @@ class MenuBar final : public QMenuBar
void PerformOnlineUpdate(const std::string& region);

// Tools
void ShowMemcardManager();
void BootGameCubeIPL(DiscIO::Region region);
void ShowFIFOPlayer();
void ShowAboutDialog();