diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj
index 3b73722692..10336986de 100644
--- a/rpcs3/rpcs3.vcxproj
+++ b/rpcs3/rpcs3.vcxproj
@@ -442,7 +442,12 @@
true
true
-
+
+ true
+ true
+ true
+
+
true
true
true
@@ -562,7 +567,12 @@
true
true
-
+
+ true
+ true
+ true
+
+
true
true
true
@@ -692,7 +702,12 @@
true
true
-
+
+ true
+ true
+ true
+
+
true
true
true
@@ -812,7 +827,12 @@
true
true
-
+
+ true
+ true
+ true
+
+
true
true
true
@@ -840,6 +860,7 @@
+
@@ -863,7 +884,7 @@
-
+
@@ -1243,26 +1264,44 @@
$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
-
- Moc%27ing save_data_utility.h...
+
+ Moc%27ing save_data_list_dialog.h...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\."
- Moc%27ing save_data_utility.h...
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ Moc%27ing save_data_list_dialog.h...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\."
- Moc%27ing save_data_utility.h...
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ Moc%27ing save_data_list_dialog.h...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- Moc%27ing save_data_utility.h...
+ Moc%27ing save_data_list_dialog.h...
.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
- $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\."
- $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
- $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
- $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
- "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(NOINHERIT)\."
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ Moc%27ing save_data_info_dialog.h...
+ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ Moc%27ing save_data_info_dialog.h...
+ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ Moc%27ing save_data_info_dialog.h...
+ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+ $(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)
+ Moc%27ing save_data_info_dialog.h...
+ .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp
+ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_QUICK_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DLLVM_AVAILABLE -D_SCL_SECURE_NO_WARNINGS -D_UNICODE "-I.\..\Vulkan\Vulkan-LoaderAndValidationLayers\include" "-I.\.." "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtQuick" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtQml" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)\." "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras"
+
Moc%27ing welcome_dialog.h...
diff --git a/rpcs3/rpcs3.vcxproj.filters b/rpcs3/rpcs3.vcxproj.filters
index 25341f839d..162d4c67bd 100644
--- a/rpcs3/rpcs3.vcxproj.filters
+++ b/rpcs3/rpcs3.vcxproj.filters
@@ -60,6 +60,9 @@
ui
true
+
+ {31799965-1274-4c87-83a3-3bff31e8715d}
+
@@ -266,24 +269,6 @@
Gui
-
- Gui
-
-
- Gui
-
-
- Generated Files\Release - LLVM
-
-
- Generated Files\Debug
-
-
- Generated Files\Release
-
-
- Generated Files\Debug - LLVM
-
Generated Files\Release - LLVM
@@ -461,6 +446,39 @@
Generated Files\Debug - LLVM
+
+ Generated Files\Release - LLVM
+
+
+ Generated Files\Debug
+
+
+ Generated Files\Release
+
+
+ Generated Files\Debug - LLVM
+
+
+ Generated Files\Release - LLVM
+
+
+ Generated Files\Debug
+
+
+ Generated Files\Release
+
+
+ Generated Files\Debug - LLVM
+
+
+ Gui\saves
+
+
+ Gui\saves
+
+
+ Gui\saves
+
@@ -469,9 +487,6 @@
Gui
-
- Gui
-
Gui
@@ -517,6 +532,9 @@
Gui
+
+ Gui\saves
+
@@ -564,9 +582,6 @@
Gui
-
- Gui
-
Gui
@@ -618,6 +633,12 @@
Gui
+
+ Gui\saves
+
+
+ Gui\saves
+
diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h
index 3c5b05ddb8..b0379c4026 100644
--- a/rpcs3/rpcs3qt/gui_settings.h
+++ b/rpcs3/rpcs3qt/gui_settings.h
@@ -117,6 +117,7 @@ namespace GUI
const GUI_SAVE m_currentConfig = GUI_SAVE(meta, "currentConfig", QObject::tr("CurrentSettings"));
const GUI_SAVE m_currentStylesheet = GUI_SAVE(meta, "currentStylesheet", QObject::tr("default"));
+ const GUI_SAVE m_saveNotes = GUI_SAVE(meta, "saveNotes", QVariantMap());
const GUI_SAVE gs_resize = GUI_SAVE(gs_frame, "resize", false);
const GUI_SAVE gs_width = GUI_SAVE(gs_frame, "width", 1280);
diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp
index e045331686..fadb6e5d89 100644
--- a/rpcs3/rpcs3qt/main_window.cpp
+++ b/rpcs3/rpcs3qt/main_window.cpp
@@ -9,7 +9,7 @@
#include
#include "vfs_dialog.h"
-#include "save_data_utility.h"
+#include "save_data_list_dialog.h"
#include "kernel_explorer.h"
#include "game_list_frame.h"
#include "debugger_frame.h"
diff --git a/rpcs3/rpcs3qt/save_data_dialog.cpp b/rpcs3/rpcs3qt/save_data_dialog.cpp
index 670488af9d..a265cd7219 100644
--- a/rpcs3/rpcs3qt/save_data_dialog.cpp
+++ b/rpcs3/rpcs3qt/save_data_dialog.cpp
@@ -2,7 +2,7 @@
#include "Emu/Memory/Memory.h"
#include "save_data_dialog.h"
-#include "save_data_utility.h"
+#include "save_data_list_dialog.h"
s32 save_data_dialog::ShowSaveDataList(std::vector& save_entries, s32 focused, bool isSaving, vm::ptr listSet)
{
diff --git a/rpcs3/rpcs3qt/save_data_info_dialog.cpp b/rpcs3/rpcs3qt/save_data_info_dialog.cpp
new file mode 100644
index 0000000000..1e515546ff
--- /dev/null
+++ b/rpcs3/rpcs3qt/save_data_info_dialog.cpp
@@ -0,0 +1,82 @@
+#include "save_data_info_dialog.h"
+
+#include
+#include
+#include
+
+inline QString qstr(const std::string& _in) { return QString::fromUtf8(_in.data(), _in.size()); }
+
+save_data_info_dialog::save_data_info_dialog(const SaveDataEntry& save, QWidget* parent)
+ : QDialog(parent), m_entry(save)
+{
+ setWindowTitle(tr("Save Data Information"));
+
+ // Table
+ m_list = new QTableWidget(this);
+
+ //m_list->setItemDelegate(new table_item_delegate(this)); // to get rid of item selection rectangles include "table_item_delegate.h"
+ m_list->setSelectionBehavior(QAbstractItemView::SelectRows); // enable to only select whole rows instead of items
+ m_list->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ m_list->setColumnCount(2);
+ m_list->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Detail"));
+
+ // Buttons
+ QPushButton* close_button = new QPushButton(tr("&Close"), this);
+ connect(close_button, &QAbstractButton::clicked, this, &save_data_info_dialog::close);
+
+ // Button Layout
+ QHBoxLayout* hbox_actions = new QHBoxLayout();
+ hbox_actions->addStretch(); //Add a stretch to make Close on the Right-Down corner of this dialog.
+ hbox_actions->addWidget(close_button);
+
+ // Main Layout
+ QVBoxLayout* vbox_main = new QVBoxLayout();
+ vbox_main->addWidget(m_list, 1);
+ vbox_main->addLayout(hbox_actions, 0);
+ vbox_main->setAlignment(Qt::AlignCenter);
+ setLayout(vbox_main);
+
+ UpdateData();
+
+ m_list->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
+ m_list->verticalHeader()->resizeSections(QHeaderView::ResizeToContents);
+
+ QSize tableSize = QSize(
+ m_list->verticalHeader()->width() + m_list->horizontalHeader()->length() + m_list->frameWidth() * 2,
+ m_list->horizontalHeader()->height() + m_list->verticalHeader()->length() + m_list->frameWidth() * 2);
+
+ // no minimum size needed because we always have same table size and row count
+ resize(sizeHint() - m_list->sizeHint() + tableSize);
+
+}
+
+//This is intended to write the information of save data to QTableView.
+void save_data_info_dialog::UpdateData()
+{
+ m_list->clearContents();
+ int num_entries = 4; // set this to number of members in struct
+ m_list->setRowCount(num_entries);
+
+ //Maybe there should be more details of save data.
+ m_list->setItem(0, 0, new QTableWidgetItem(tr("User ID")));
+ m_list->setItem(0, 1, new QTableWidgetItem("00000001 (Default)"));
+
+ m_list->setItem(1, 0, new QTableWidgetItem(tr("Title")));
+ m_list->setItem(1, 1, new QTableWidgetItem(qstr(m_entry.title)));
+
+ m_list->setItem(2, 0, new QTableWidgetItem(tr("Subtitle")));
+ m_list->setItem(2, 1, new QTableWidgetItem(qstr(m_entry.subtitle)));
+
+ m_list->setItem(3, 0, new QTableWidgetItem(tr("Detail")));
+ m_list->setItem(3, 1, new QTableWidgetItem(qstr(m_entry.details)));
+
+ QImage img;
+ if (m_entry.iconBuf.size() > 0 && img.loadFromData((uchar*)&m_entry.iconBuf[0], m_entry.iconBuf.size(), "PNG"))
+ {
+ m_list->insertRow(0);
+ QTableWidgetItem* img_item = new QTableWidgetItem();
+ img_item->setData(Qt::DecorationRole, QPixmap::fromImage(img));
+ m_list->setItem(0, 0, new QTableWidgetItem(tr("Icon")));
+ m_list->setItem(0, 1, img_item);
+ }
+}
diff --git a/rpcs3/rpcs3qt/save_data_info_dialog.h b/rpcs3/rpcs3qt/save_data_info_dialog.h
new file mode 100644
index 0000000000..ae4e79f972
--- /dev/null
+++ b/rpcs3/rpcs3qt/save_data_info_dialog.h
@@ -0,0 +1,23 @@
+#pragma once
+
+// I just want the struct for the save data.
+#include "stdafx.h"
+#include "Emu/Memory/Memory.h"
+#include "Emu/Cell/Modules/cellSaveData.h"
+
+#include
+#include
+
+//Used to display the information of a savedata.
+class save_data_info_dialog :public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit save_data_info_dialog(const SaveDataEntry& save, QWidget* parent = nullptr);
+private:
+ void UpdateData();
+
+ SaveDataEntry m_entry;
+ QTableWidget* m_list;
+};
diff --git a/rpcs3/rpcs3qt/save_data_utility.cpp b/rpcs3/rpcs3qt/save_data_list_dialog.cpp
similarity index 66%
rename from rpcs3/rpcs3qt/save_data_utility.cpp
rename to rpcs3/rpcs3qt/save_data_list_dialog.cpp
index c132ff9235..dc68451bb4 100644
--- a/rpcs3/rpcs3qt/save_data_utility.cpp
+++ b/rpcs3/rpcs3qt/save_data_list_dialog.cpp
@@ -1,85 +1,15 @@
#include "stdafx.h"
-#include "save_data_utility.h"
+#include "save_data_list_dialog.h"
+#include "save_data_info_dialog.h"
+#include "gui_settings.h"
+
+#include
+#include
+#include
+#include
inline QString qstr(const std::string& _in) { return QString::fromUtf8(_in.data(), _in.size()); }
-//Cause i can not decide what struct to be used to fill those. Just use no real data now.
-//Currently variable info isn't used. it supposed to be a container for the information passed by other.
-save_data_info_dialog::save_data_info_dialog(const SaveDataEntry& save, QWidget* parent)
- : QDialog(parent), m_entry(save)
-{
- setWindowTitle(tr("Save Data Information"));
-
- // Table
- m_list = new QTableWidget(this);
-
- //m_list->setItemDelegate(new table_item_delegate(this)); // to get rid of item selection rectangles include "table_item_delegate.h"
- m_list->setSelectionBehavior(QAbstractItemView::SelectRows); // enable to only select whole rows instead of items
- m_list->setEditTriggers(QAbstractItemView::NoEditTriggers);
- m_list->setColumnCount(2);
- m_list->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("Detail"));
-
- // Buttons
- QPushButton* close_button = new QPushButton(tr("&Close"), this);
- connect(close_button, &QAbstractButton::clicked, this, &save_data_info_dialog::close);
-
- // Button Layout
- QHBoxLayout* hbox_actions = new QHBoxLayout();
- hbox_actions->addStretch(); //Add a stretch to make Close on the Right-Down corner of this dialog.
- hbox_actions->addWidget(close_button);
-
- // Main Layout
- QVBoxLayout* vbox_main = new QVBoxLayout();
- vbox_main->addWidget(m_list, 1);
- vbox_main->addLayout(hbox_actions, 0);
- vbox_main->setAlignment(Qt::AlignCenter);
- setLayout(vbox_main);
-
- UpdateData();
-
- m_list->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
- m_list->verticalHeader()->resizeSections(QHeaderView::ResizeToContents);
-
- QSize tableSize = QSize(
- m_list->verticalHeader()->width() + m_list->horizontalHeader()->length() + m_list->frameWidth() * 2,
- m_list->horizontalHeader()->height() + m_list->verticalHeader()->length() + m_list->frameWidth() * 2);
-
- // no minimum size needed because we always have same table size and row count
- resize(sizeHint() - m_list->sizeHint() + tableSize);
-
-}
-
-//This is intended to write the information of save data to QTableView.
-void save_data_info_dialog::UpdateData()
-{
- m_list->clearContents();
- int num_entries = 4; // set this to number of members in struct
- m_list->setRowCount(num_entries);
-
- //Maybe there should be more details of save data.
- m_list->setItem(0, 0, new QTableWidgetItem(tr("User ID")));
- m_list->setItem(0, 1, new QTableWidgetItem("00000001 (Default)"));
-
- m_list->setItem(1, 0, new QTableWidgetItem(tr("Title")));
- m_list->setItem(1, 1, new QTableWidgetItem(qstr(m_entry.title)));
-
- m_list->setItem(2, 0, new QTableWidgetItem(tr("Subtitle")));
- m_list->setItem(2, 1, new QTableWidgetItem(qstr(m_entry.subtitle)));
-
- m_list->setItem(3, 0, new QTableWidgetItem(tr("Detail")));
- m_list->setItem(3, 1, new QTableWidgetItem(qstr(m_entry.details)));
-
- QImage img;
- if (m_entry.iconBuf.size() > 0 && img.loadFromData((uchar*) &m_entry.iconBuf[0], m_entry.iconBuf.size(), "PNG"))
- {
- m_list->insertRow(0);
- QTableWidgetItem* img_item = new QTableWidgetItem();
- img_item->setData(Qt::DecorationRole, QPixmap::fromImage(img));
- m_list->setItem(0, 0, new QTableWidgetItem(tr("Icon")));
- m_list->setItem(0, 1, img_item);
- }
-}
-
//Show up the savedata list, either to choose one to save/load or to manage saves.
//I suggest to use function callbacks to give save data list or get save data entry. (Not implemented or stubbed)
save_data_list_dialog::save_data_list_dialog(const std::vector& entries, s32 focusedEntry, bool is_saving, QWidget* parent)
@@ -94,10 +24,9 @@ save_data_list_dialog::save_data_list_dialog(const std::vector& e
//m_list->setItemDelegate(new table_item_delegate(this)); // to get rid of cell selection rectangles include "table_item_delegate.h"
m_list->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
m_list->setSelectionBehavior(QAbstractItemView::SelectRows);
- m_list->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_list->setContextMenuPolicy(Qt::CustomContextMenu);
- m_list->setColumnCount(3);
- m_list->setHorizontalHeaderLabels(QStringList() << tr("Title") << tr("Subtitle") << tr("Save ID"));
+ m_list->setColumnCount(4);
+ m_list->setHorizontalHeaderLabels(QStringList() << tr("Title") << tr("Subtitle") << tr("Save ID") << tr("Entry Notes"));
// Button Layout
QHBoxLayout* hbox_action = new QHBoxLayout();
@@ -158,10 +87,19 @@ save_data_list_dialog::save_data_list_dialog(const std::vector& e
LoadEntries();
UpdateList();
+ connect(m_list, &QTableWidget::cellChanged, [&](int row, int col) {
+ int originalIndex = m_list->item(row, 0)->data(Qt::UserRole).toInt();
+ SaveDataEntry originalEntry = m_save_entries[originalIndex];
+ QString originalDirName = qstr(originalEntry.dirName);
+ gui_settings settings(this);
+ QVariantMap currNotes = settings.GetValue(GUI::m_saveNotes).toMap();
+ currNotes[originalDirName] = m_list->item(row, col)->text();
+ settings.SetValue(GUI::m_saveNotes, currNotes);
+ });
+
m_list->setCurrentCell(focusedEntry, 0);
}
-
void save_data_list_dialog::UpdateSelectionLabel()
{
if (selectedEntryLabel != nullptr)
@@ -196,7 +134,7 @@ s32 save_data_list_dialog::GetSelection()
void save_data_list_dialog::OnSort(int idx)
{
- if ((idx < m_sort_type_count) && (idx >= 0))
+ if (idx >= 0)
{
if (idx == m_sortColumn)
{
@@ -300,16 +238,41 @@ void save_data_list_dialog::UpdateList(void)
{
m_list->clearContents();
m_list->setRowCount(m_save_entries.size());
+ gui_settings settings(this);
int row = 0;
for (SaveDataEntry entry: m_save_entries)
- {
- QTableWidgetItem* item = new QTableWidgetItem(qstr(entry.title));
- item->setData(Qt::UserRole, row); // For sorting to work properly
- m_list->setItem(row, 0, item);
- m_list->setItem(row, 1, new QTableWidgetItem(qstr(entry.subtitle)));
- m_list->setItem(row, 2, new QTableWidgetItem(qstr(entry.dirName)));
+ {
+ QString title = qstr(entry.title);
+ QString subtitle = qstr(entry.subtitle);
+ QString dirName = qstr(entry.dirName);
+ QTableWidgetItem* titleItem = new QTableWidgetItem(title);
+ titleItem->setData(Qt::UserRole, row); // For sorting to work properly
+ titleItem->setFlags(titleItem->flags() & ~Qt::ItemIsEditable);
+
+ m_list->setItem(row, 0, titleItem);
+ QTableWidgetItem* subtitleItem = new QTableWidgetItem(subtitle);
+ subtitleItem->setFlags(subtitleItem->flags() & ~Qt::ItemIsEditable);
+ m_list->setItem(row, 1, subtitleItem);
+
+ QTableWidgetItem* dirNameItem = new QTableWidgetItem(dirName);
+ dirNameItem->setFlags(dirNameItem->flags() & ~Qt::ItemIsEditable);
+ m_list->setItem(row, 2, dirNameItem);
+
+ QVariantMap currNotes = settings.GetValue(GUI::m_saveNotes).toMap();
+ QTableWidgetItem* noteItem = new QTableWidgetItem();
+ noteItem->setFlags(noteItem->flags() | Qt::ItemIsEditable);
+ if (currNotes.contains(dirName))
+ {
+ noteItem->setText(currNotes[dirName].toString());
+ }
+ else
+ {
+ currNotes[dirName] = "";
+ settings.SetValue(GUI::m_saveNotes, currNotes);
+ }
+ m_list->setItem(row, 3, noteItem);
++row;
}
diff --git a/rpcs3/rpcs3qt/save_data_utility.h b/rpcs3/rpcs3qt/save_data_list_dialog.h
similarity index 69%
rename from rpcs3/rpcs3qt/save_data_utility.h
rename to rpcs3/rpcs3qt/save_data_list_dialog.h
index 23f2e5b991..622a64bcec 100644
--- a/rpcs3/rpcs3qt/save_data_utility.h
+++ b/rpcs3/rpcs3qt/save_data_list_dialog.h
@@ -5,29 +5,9 @@
#include "Emu/Memory/Memory.h"
#include "Emu/Cell/Modules/cellSaveData.h"
-#include
-#include
-#include
-#include
#include
+#include
#include
-#include
-#include
-
-//Used to display the information of a savedata.
-//Not sure about what information should be displayed.
-class save_data_info_dialog :public QDialog
-{
- Q_OBJECT
-
-public:
- explicit save_data_info_dialog(const SaveDataEntry& save, QWidget* parent = nullptr);
-private:
- void UpdateData();
-
- SaveDataEntry m_entry;
- QTableWidget* m_list;
-};
//Display a list of SaveData. Would need to be initialized.
//Can also be used as a Save Data Chooser.
@@ -58,7 +38,6 @@ private:
QMenu* m_sort_options;
- const int m_sort_type_count = 3;
int m_sortColumn;
bool m_sortAscending;