duckstation/src/duckstation-qt/memorycardeditorwindow.h
Stenzek b99ee59224
Qt: Add 'Rename File' to memory card editor
And context menu for ease of use.
2024-10-19 00:03:07 +10:00

118 lines
3.0 KiB
C++

// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
#pragma once
#include "ui_memorycardeditorwindow.h"
#include "ui_memorycardrenamefiledialog.h"
#include "core/memory_card_image.h"
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTableWidget>
class Error;
class MemoryCardEditorWindow : public QWidget
{
Q_OBJECT
public:
MemoryCardEditorWindow();
~MemoryCardEditorWindow();
bool setCardA(const QString& path);
bool setCardB(const QString& path);
static bool createMemoryCard(const QString& path, Error* error);
protected:
void resizeEvent(QResizeEvent* ev);
void closeEvent(QCloseEvent* ev);
private Q_SLOTS:
void onCardASelectionChanged();
void onCardBSelectionChanged();
void onCardContextMenuRequested(const QPoint& pos);
void doCopyFile();
void doDeleteFile();
void doUndeleteFile();
private:
struct Card
{
std::string filename;
MemoryCardImage::DataArray data;
std::vector<MemoryCardImage::FileInfo> files;
u32 blocks_free = 0;
bool dirty = false;
QComboBox* path_cb = nullptr;
QTableWidget* table = nullptr;
QLabel* blocks_free_label = nullptr;
QPushButton* save_button = nullptr;
QPushButton* import_button = nullptr;
QPushButton* import_file_button = nullptr;
QPushButton* format_button = nullptr;
};
void createCardButtons(Card* card, QDialogButtonBox* buttonBox);
void connectCardUi(Card* card, QDialogButtonBox* buttonBox);
void connectUi();
void populateComboBox(QComboBox* cb);
void clearSelection();
void loadCardFromComboBox(Card* card, int index);
bool loadCard(const QString& filename, Card* card);
void updateCardTable(Card* card);
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);
void formatCard(Card* card);
void doRenameSaveFile();
void doExportSaveFile();
void importSaveFile(Card* card);
std::tuple<Card*, const MemoryCardImage::FileInfo*> getSelectedFile();
void updateButtonState();
Ui::MemoryCardEditorDialog m_ui;
QPushButton* m_deleteFile;
QPushButton* m_undeleteFile;
QPushButton* m_renameFile;
QPushButton* m_exportFile;
QPushButton* m_moveLeft;
QPushButton* m_moveRight;
Card m_card_a;
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;
};