mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 06:21:26 +12:00
Qt: use persistent_settings for playtimes
This commit is contained in:
parent
e2512e78b6
commit
449cbb7281
16 changed files with 436 additions and 193 deletions
|
@ -745,7 +745,7 @@ namespace rsx
|
|||
void run_FIFO();
|
||||
|
||||
public:
|
||||
virtual void clear_surface(u32 arg) {};
|
||||
virtual void clear_surface(u32 /*arg*/) {};
|
||||
virtual void begin();
|
||||
virtual void end();
|
||||
virtual void execute_nop_draw();
|
||||
|
|
|
@ -472,6 +472,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_persistent_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_pkg_install_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
|
@ -502,6 +507,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_settings_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
|
@ -672,6 +682,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_persistent_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_pkg_install_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
|
@ -702,6 +717,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_settings_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
|
@ -892,6 +912,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_persistent_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_pkg_install_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
|
@ -922,6 +947,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_settings_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
||||
|
@ -1092,6 +1122,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_persistent_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_pkg_install_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
|
@ -1122,6 +1157,11 @@
|
|||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_settings.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_settings_dialog.cpp">
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">true</ExcludedFromBuild>
|
||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
||||
|
@ -1172,6 +1212,8 @@
|
|||
<ClCompile Include="rpcs3qt\input_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\osk_dialog_frame.cpp" />
|
||||
<ClCompile Include="rpcs3qt\pkg_install_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\persistent_settings.cpp" />
|
||||
<ClCompile Include="rpcs3qt\settings.cpp" />
|
||||
<ClCompile Include="rpcs3qt\skylander_dialog.cpp" />
|
||||
<ClCompile Include="rpcs3qt\update_manager.cpp" />
|
||||
<ClCompile Include="rpcs3qt\_discord_utils.cpp" />
|
||||
|
@ -1751,6 +1793,42 @@
|
|||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent" "-IC:\Program Files (x86)\Visual Leak Detector\include"</Command>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="rpcs3qt\settings.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB "-DBRANCH=$(BRANCH)" -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="rpcs3qt\persistent_settings.h">
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB "-DBRANCH=$(BRANCH)" -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
<AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">$(QTDIR)\bin\moc.exe;%(FullPath);$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">Moc%27ing %(Identity)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">.\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug - LLVM|x64'">"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\minidx12\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtWidgets" "-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$(QTDIR)\include\QtConcurrent"</Command>
|
||||
</CustomBuild>
|
||||
<ClInclude Include="rpcs3qt\stylesheets.h" />
|
||||
<ClInclude Include="rpcs3qt\skylander_dialog.h" />
|
||||
<CustomBuild Include="rpcs3qt\update_manager.h">
|
||||
|
|
|
@ -656,9 +656,6 @@
|
|||
<ClCompile Include="rpcs3qt\_discord_utils.cpp">
|
||||
<Filter>Gui\utils</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Input/keyboard_pad_handler.cpp">
|
||||
<Filter>Io\Keyboard</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_trophy_manager_dialog.cpp">
|
||||
<Filter>Generated Files\Release - LLVM</Filter>
|
||||
</ClCompile>
|
||||
|
@ -716,9 +713,6 @@
|
|||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_osk_dialog_frame.cpp">
|
||||
<Filter>Generated Files\Debug - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Input/ds3_pad_handler.cpp">
|
||||
<Filter>Io\DS3</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="rpcs3qt\gui_application.cpp">
|
||||
<Filter>Gui</Filter>
|
||||
</ClCompile>
|
||||
|
@ -803,6 +797,54 @@
|
|||
<ClCompile Include="rpcs3qt\pkg_install_dialog.cpp">
|
||||
<Filter>Gui\misc dialogs</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Input\ds3_pad_handler.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Input\keyboard_pad_handler.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="rpcs3qt\settings.cpp">
|
||||
<Filter>Gui\settings</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_settings.cpp">
|
||||
<Filter>Generated Files\Release - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_settings.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_settings.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_settings.cpp">
|
||||
<Filter>Generated Files\Debug - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_playtime_settings.cpp">
|
||||
<Filter>Generated Files\Release - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_playtime_settings.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_playtime_settings.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_playtime_settings.cpp">
|
||||
<Filter>Generated Files\Debug - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release - LLVM\moc_persistent_settings.cpp">
|
||||
<Filter>Generated Files\Release - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug\moc_persistent_settings.cpp">
|
||||
<Filter>Generated Files\Debug</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Release\moc_persistent_settings.cpp">
|
||||
<Filter>Generated Files\Release</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="QTGeneratedFiles\Debug - LLVM\moc_persistent_settings.cpp">
|
||||
<Filter>Generated Files\Debug - LLVM</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="rpcs3qt\persistent_settings.cpp">
|
||||
<Filter>Gui\settings</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="\rpcs3qt\*.h">
|
||||
|
@ -811,9 +853,6 @@
|
|||
<ClInclude Include="Input\ds4_pad_handler.h">
|
||||
<Filter>Io\DS4</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input\mm_joystick_handler.h">
|
||||
<Filter>Io\MMJoystick</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input\xinput_pad_handler.h">
|
||||
<Filter>Io\XInput</Filter>
|
||||
</ClInclude>
|
||||
|
@ -883,12 +922,6 @@
|
|||
<ClInclude Include="rpcs3qt\_discord_utils.h">
|
||||
<Filter>Gui\utils</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input/keyboard_pad_handler.h">
|
||||
<Filter>Io\Keyboard</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input/ds3_pad_handler.h">
|
||||
<Filter>Io\DS3</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="rpcs3qt\stylesheets.h">
|
||||
<Filter>Gui</Filter>
|
||||
</ClInclude>
|
||||
|
@ -898,6 +931,15 @@
|
|||
<ClInclude Include="display_sleep_control.h">
|
||||
<Filter>Gui</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input\ds3_pad_handler.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input\keyboard_pad_handler.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Input/mm_joystick_handler.h">
|
||||
<Filter>Generated Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="debug\moc_predefs.h.cbt">
|
||||
|
@ -1059,6 +1101,12 @@
|
|||
<CustomBuild Include="rpcs3qt\pkg_install_dialog.h">
|
||||
<Filter>Gui\misc dialogs</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="rpcs3qt\settings.h">
|
||||
<Filter>Gui\settings</Filter>
|
||||
</CustomBuild>
|
||||
<CustomBuild Include="rpcs3qt\persistent_settings.h">
|
||||
<Filter>Gui\settings</Filter>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="rpcs3.ico" />
|
||||
|
@ -1066,4 +1114,4 @@
|
|||
<ItemGroup>
|
||||
<ResourceCompile Include="rpcs3.rc" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
</Project>
|
|
@ -29,6 +29,7 @@
|
|||
msg_dialog_frame.cpp
|
||||
osk_dialog_frame.cpp
|
||||
pad_settings_dialog.cpp
|
||||
persistent_settings.cpp
|
||||
pkg_install_dialog.cpp
|
||||
progress_dialog.cpp
|
||||
qt_utils.cpp
|
||||
|
@ -38,6 +39,7 @@
|
|||
save_data_info_dialog.cpp
|
||||
save_data_list_dialog.cpp
|
||||
save_manager_dialog.cpp
|
||||
settings.cpp
|
||||
settings_dialog.cpp
|
||||
skylander_dialog.cpp
|
||||
syntax_highlighter.cpp
|
||||
|
|
|
@ -31,8 +31,11 @@
|
|||
|
||||
inline std::string sstr(const QString& _in) { return _in.toStdString(); }
|
||||
|
||||
game_list_frame::game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent)
|
||||
: custom_dock_widget(tr("Game List"), parent), m_gui_settings(guiSettings), m_emu_settings(emuSettings)
|
||||
game_list_frame::game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, std::shared_ptr<persistent_settings> persistent_settings, QWidget *parent)
|
||||
: custom_dock_widget(tr("Game List"), parent)
|
||||
, m_gui_settings(guiSettings)
|
||||
, m_emu_settings(emuSettings)
|
||||
, m_persistent_settings(persistent_settings)
|
||||
{
|
||||
m_isListLayout = m_gui_settings->GetValue(gui::gl_listMode).toBool();
|
||||
m_Margin_Factor = m_gui_settings->GetValue(gui::gl_marginFactor).toReal();
|
||||
|
@ -364,12 +367,12 @@ void game_list_frame::SortGameList()
|
|||
|
||||
QString game_list_frame::GetLastPlayedBySerial(const QString& serial)
|
||||
{
|
||||
return m_gui_settings->GetLastPlayed(serial);
|
||||
return m_persistent_settings->GetLastPlayed(serial);
|
||||
}
|
||||
|
||||
QString game_list_frame::GetPlayTimeBySerial(const QString& serial)
|
||||
{
|
||||
const qint64 elapsed_ms = m_gui_settings->GetPlaytime(serial);
|
||||
const qint64 elapsed_ms = m_persistent_settings->GetPlaytime(serial);
|
||||
|
||||
if (elapsed_ms <= 0)
|
||||
{
|
||||
|
@ -579,8 +582,32 @@ void game_list_frame::Refresh(const bool fromDrive, const bool scrollAfter)
|
|||
const QString serial = qstr(game.serial);
|
||||
const QString note = m_gui_settings->GetValue(gui::notes, serial, "").toString();
|
||||
const QString title = m_gui_settings->GetValue(gui::titles, serial, "").toString().simplified();
|
||||
m_gui_settings->SetLastPlayed(serial, m_gui_settings->GetValue(gui::last_played, serial, "").toString());
|
||||
m_gui_settings->SetPlaytime(serial, m_gui_settings->GetValue(gui::playtime, serial, 0).toInt());
|
||||
|
||||
// Read persistent_settings values
|
||||
QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString();
|
||||
int playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toInt();
|
||||
|
||||
// Read deprecated gui_setting values first for backwards compatibility (older than January 12th 2020).
|
||||
// Restrict this to empty persistent settings to keep continuity.
|
||||
if (last_played.isEmpty())
|
||||
{
|
||||
last_played = m_gui_settings->GetValue(gui::persistent::last_played, serial, "").toString();
|
||||
}
|
||||
if (playtime <= 0)
|
||||
{
|
||||
playtime = m_gui_settings->GetValue(gui::persistent::playtime, serial, 0).toInt();
|
||||
}
|
||||
|
||||
// Set persistent_settings values if values exist
|
||||
if (!last_played.isEmpty())
|
||||
{
|
||||
m_persistent_settings->SetLastPlayed(serial, last_played);
|
||||
}
|
||||
if (playtime > 0)
|
||||
{
|
||||
m_persistent_settings->SetPlaytime(serial, playtime);
|
||||
}
|
||||
|
||||
serials.insert(serial);
|
||||
|
||||
if (!note.isEmpty())
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "game_list.h"
|
||||
#include "game_list_grid.h"
|
||||
#include "emu_settings.h"
|
||||
#include "persistent_settings.h"
|
||||
#include "game_compatibility.h"
|
||||
|
||||
#include <QMainWindow>
|
||||
|
@ -182,7 +183,7 @@ class game_list_frame : public custom_dock_widget
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = nullptr);
|
||||
explicit game_list_frame(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, std::shared_ptr<persistent_settings> persistent_settings, QWidget *parent = nullptr);
|
||||
~game_list_frame();
|
||||
|
||||
/** Fix columns with width smaller than the minimal section size */
|
||||
|
@ -289,6 +290,7 @@ private:
|
|||
// Data
|
||||
std::shared_ptr<gui_settings> m_gui_settings;
|
||||
std::shared_ptr<emu_settings> m_emu_settings;
|
||||
std::shared_ptr<persistent_settings> m_persistent_settings;
|
||||
QList<game_info> m_game_data;
|
||||
QSet<QString> m_hidden_list;
|
||||
bool m_show_hidden{false};
|
||||
|
|
|
@ -35,6 +35,7 @@ void gui_application::Init()
|
|||
|
||||
m_emu_settings.reset(new emu_settings());
|
||||
m_gui_settings.reset(new gui_settings());
|
||||
m_persistent_settings.reset(new persistent_settings());
|
||||
|
||||
// Force init the emulator
|
||||
InitializeEmulator(m_gui_settings->GetCurrentUser().toStdString(), true, m_show_gui);
|
||||
|
@ -42,7 +43,7 @@ void gui_application::Init()
|
|||
// Create the main window
|
||||
if (m_show_gui)
|
||||
{
|
||||
m_main_window = new main_window(m_gui_settings, m_emu_settings, nullptr);
|
||||
m_main_window = new main_window(m_gui_settings, m_emu_settings, m_persistent_settings, nullptr);
|
||||
}
|
||||
|
||||
// Create callbacks from the emulator, which reference the handlers.
|
||||
|
@ -216,7 +217,7 @@ void gui_application::StartPlaytime()
|
|||
return;
|
||||
}
|
||||
|
||||
m_gui_settings->SetLastPlayed(serial, QDate::currentDate().toString("MMMM d yyyy"));
|
||||
m_persistent_settings->SetLastPlayed(serial, QDate::currentDate().toString("MMMM d yyyy"));
|
||||
m_timer_playtime.start();
|
||||
}
|
||||
|
||||
|
@ -232,9 +233,9 @@ void gui_application::StopPlaytime()
|
|||
return;
|
||||
}
|
||||
|
||||
const qint64 playtime = m_gui_settings->GetPlaytime(serial) + m_timer_playtime.elapsed();
|
||||
m_gui_settings->SetPlaytime(serial, playtime);
|
||||
m_gui_settings->SetLastPlayed(serial, QDate::currentDate().toString("MMMM d yyyy"));
|
||||
const qint64 playtime = m_persistent_settings->GetPlaytime(serial) + m_timer_playtime.elapsed();
|
||||
m_persistent_settings->SetPlaytime(serial, playtime);
|
||||
m_persistent_settings->SetLastPlayed(serial, QDate::currentDate().toString("MMMM d yyyy"));
|
||||
m_timer_playtime.invalidate();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "main_application.h"
|
||||
#include "emu_settings.h"
|
||||
#include "gui_settings.h"
|
||||
#include "persistent_settings.h"
|
||||
#include "gs_frame.h"
|
||||
#include "gl_gs_frame.h"
|
||||
|
||||
|
@ -56,6 +57,7 @@ private:
|
|||
|
||||
std::shared_ptr<emu_settings> m_emu_settings;
|
||||
std::shared_ptr<gui_settings> m_gui_settings;
|
||||
std::shared_ptr<persistent_settings> m_persistent_settings;
|
||||
|
||||
bool m_show_gui = true;
|
||||
bool m_use_cli_style = false;
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
|
||||
inline std::string sstr(const QString& _in) { return _in.toStdString(); }
|
||||
|
||||
gui_settings::gui_settings(QObject* parent) : QObject(parent)
|
||||
gui_settings::gui_settings(QObject* parent) : settings(parent)
|
||||
, m_current_name(gui::Settings)
|
||||
, m_settings(ComputeSettingsDir() + gui::Settings + ".ini", QSettings::Format::IniFormat, parent)
|
||||
, m_settingsDir(ComputeSettingsDir())
|
||||
{
|
||||
m_settings = new QSettings(ComputeSettingsDir() + gui::Settings + ".ini", QSettings::Format::IniFormat, parent);
|
||||
|
||||
const QString settings_name = GetValue(gui::m_currentConfig).toString();
|
||||
|
||||
if (settings_name != m_current_name)
|
||||
|
@ -21,11 +21,6 @@ gui_settings::gui_settings(QObject* parent) : QObject(parent)
|
|||
}
|
||||
}
|
||||
|
||||
gui_settings::~gui_settings()
|
||||
{
|
||||
m_settings.sync();
|
||||
}
|
||||
|
||||
QString gui_settings::GetCurrentUser()
|
||||
{
|
||||
// load user
|
||||
|
@ -43,16 +38,6 @@ QString gui_settings::GetCurrentUser()
|
|||
return QString();
|
||||
}
|
||||
|
||||
QString gui_settings::GetSettingsDir()
|
||||
{
|
||||
return m_settingsDir.absolutePath();
|
||||
}
|
||||
|
||||
QString gui_settings::ComputeSettingsDir()
|
||||
{
|
||||
return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/";
|
||||
}
|
||||
|
||||
bool gui_settings::ChangeToConfig(const QString& friendly_name)
|
||||
{
|
||||
if (m_current_name == friendly_name)
|
||||
|
@ -68,27 +53,27 @@ bool gui_settings::ChangeToConfig(const QString& friendly_name)
|
|||
}
|
||||
else
|
||||
{
|
||||
QSettings tmp(m_settingsDir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
|
||||
QSettings tmp(m_settings_dir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
|
||||
tmp.beginGroup(gui::m_currentConfig.key);
|
||||
tmp.setValue(gui::m_currentConfig.name, friendly_name);
|
||||
tmp.endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
m_settings.sync();
|
||||
m_settings->sync();
|
||||
|
||||
Reset(true);
|
||||
|
||||
QSettings other(m_settingsDir.absoluteFilePath(friendly_name + ".ini"), QSettings::IniFormat);
|
||||
QSettings other(m_settings_dir.absoluteFilePath(friendly_name + ".ini"), QSettings::IniFormat);
|
||||
|
||||
for (const QString& key : other.allKeys())
|
||||
{
|
||||
m_settings.setValue(key, other.value(key));
|
||||
m_settings->setValue(key, other.value(key));
|
||||
}
|
||||
|
||||
SetValue(gui::m_currentConfig, friendly_name);
|
||||
|
||||
m_settings.sync();
|
||||
m_settings->sync();
|
||||
|
||||
m_current_name = friendly_name;
|
||||
|
||||
|
@ -99,86 +84,16 @@ void gui_settings::Reset(bool removeMeta)
|
|||
{
|
||||
if (removeMeta)
|
||||
{
|
||||
m_settings.clear();
|
||||
m_settings->clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settings.remove(gui::logger);
|
||||
m_settings.remove(gui::main_window);
|
||||
m_settings.remove(gui::game_list);
|
||||
m_settings->remove(gui::logger);
|
||||
m_settings->remove(gui::main_window);
|
||||
m_settings->remove(gui::game_list);
|
||||
}
|
||||
}
|
||||
|
||||
void gui_settings::RemoveValue(const QString& key, const QString& name)
|
||||
{
|
||||
m_settings.beginGroup(key);
|
||||
m_settings.remove(name);
|
||||
m_settings.endGroup();
|
||||
}
|
||||
|
||||
QVariant gui_settings::GetValue(const gui_save& entry)
|
||||
{
|
||||
return m_settings.value(entry.key + "/" + entry.name, entry.def);
|
||||
}
|
||||
|
||||
QVariant gui_settings::GetValue(const QString& key, const QString& name, const QString& def)
|
||||
{
|
||||
return m_settings.value(key + "/" + name, def);
|
||||
}
|
||||
|
||||
QVariant gui_settings::List2Var(const q_pair_list& list)
|
||||
{
|
||||
QByteArray ba;
|
||||
QDataStream stream(&ba, QIODevice::WriteOnly);
|
||||
stream << list;
|
||||
return QVariant(ba);
|
||||
}
|
||||
|
||||
q_pair_list gui_settings::Var2List(const QVariant& var)
|
||||
{
|
||||
q_pair_list list;
|
||||
QByteArray ba = var.toByteArray();
|
||||
QDataStream stream(&ba, QIODevice::ReadOnly);
|
||||
stream >> list;
|
||||
return list;
|
||||
}
|
||||
|
||||
void gui_settings::SetValue(const gui_save& entry, const QVariant& value)
|
||||
{
|
||||
m_settings.beginGroup(entry.key);
|
||||
m_settings.setValue(entry.name, value);
|
||||
m_settings.endGroup();
|
||||
}
|
||||
|
||||
void gui_settings::SetValue(const QString& key, const QString& name, const QVariant& value)
|
||||
{
|
||||
m_settings.beginGroup(key);
|
||||
m_settings.setValue(name, value);
|
||||
m_settings.endGroup();
|
||||
}
|
||||
|
||||
void gui_settings::SetPlaytime(const QString& serial, const qint64& elapsed)
|
||||
{
|
||||
m_playtime[serial] = elapsed;
|
||||
SetValue(gui::playtime, serial, elapsed);
|
||||
}
|
||||
|
||||
qint64 gui_settings::GetPlaytime(const QString& serial)
|
||||
{
|
||||
return m_playtime[serial];
|
||||
}
|
||||
|
||||
void gui_settings::SetLastPlayed(const QString& serial, const QString& date)
|
||||
{
|
||||
m_last_played[serial] = date;
|
||||
SetValue(gui::last_played, serial, date);
|
||||
}
|
||||
|
||||
QString gui_settings::GetLastPlayed(const QString& serial)
|
||||
{
|
||||
return m_last_played[serial];
|
||||
}
|
||||
|
||||
QStringList gui_settings::GetGameListCategoryFilters()
|
||||
{
|
||||
QStringList filterList;
|
||||
|
@ -325,11 +240,11 @@ void gui_settings::SaveCurrentConfig(const QString& friendly_name)
|
|||
if (m_current_name == gui::Settings)
|
||||
{
|
||||
SetValue(gui::m_currentConfig, friendly_name);
|
||||
m_settings.sync();
|
||||
m_settings->sync();
|
||||
}
|
||||
else
|
||||
{
|
||||
QSettings tmp(m_settingsDir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
|
||||
QSettings tmp(m_settings_dir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
|
||||
tmp.beginGroup(gui::m_currentConfig.key);
|
||||
tmp.setValue(gui::m_currentConfig.name, friendly_name);
|
||||
tmp.endGroup();
|
||||
|
@ -359,7 +274,7 @@ QStringList gui_settings::GetConfigEntries()
|
|||
{
|
||||
QStringList nameFilter;
|
||||
nameFilter << "*.ini";
|
||||
QFileInfoList entries = m_settingsDir.entryInfoList(nameFilter, QDir::Files);
|
||||
QFileInfoList entries = m_settings_dir.entryInfoList(nameFilter, QDir::Files);
|
||||
QStringList res;
|
||||
for (const QFileInfo &entry : entries)
|
||||
{
|
||||
|
@ -373,11 +288,11 @@ void gui_settings::BackupSettingsToTarget(const QString& friendly_name)
|
|||
{
|
||||
QSettings target(ComputeSettingsDir() + friendly_name + ".ini", QSettings::Format::IniFormat);
|
||||
|
||||
for (const QString& key : m_settings.allKeys())
|
||||
for (const QString& key : m_settings->allKeys())
|
||||
{
|
||||
if (!key.startsWith(gui::meta))
|
||||
{
|
||||
target.setValue(key, m_settings.value(key));
|
||||
target.setValue(key, m_settings->value(key));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -387,7 +302,7 @@ void gui_settings::BackupSettingsToTarget(const QString& friendly_name)
|
|||
QStringList gui_settings::GetStylesheetEntries()
|
||||
{
|
||||
QStringList nameFilter = QStringList("*.qss");
|
||||
QStringList res = gui::utils::get_dir_entries(m_settingsDir, nameFilter);
|
||||
QStringList res = gui::utils::get_dir_entries(m_settings_dir, nameFilter);
|
||||
#if !defined(_WIN32)
|
||||
// Makes stylesheets load if using AppImage (App Bundle) or installed to /usr/bin
|
||||
#ifdef __APPLE__
|
||||
|
@ -415,7 +330,7 @@ QString gui_settings::GetCurrentStylesheetPath()
|
|||
return "-";
|
||||
}
|
||||
|
||||
return m_settingsDir.absoluteFilePath(stylesheet + ".qss");
|
||||
return m_settings_dir.absoluteFilePath(stylesheet + ".qss");
|
||||
}
|
||||
|
||||
QSize gui_settings::SizeFromSlider(int pos)
|
||||
|
|
|
@ -1,40 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "settings.h"
|
||||
#include "Utilities/Log.h"
|
||||
|
||||
#include <QSettings>
|
||||
#include <QDir>
|
||||
#include <QVariant>
|
||||
#include <QSize>
|
||||
#include <QColor>
|
||||
|
||||
struct gui_save
|
||||
{
|
||||
QString key;
|
||||
QString name;
|
||||
QVariant def;
|
||||
|
||||
gui_save()
|
||||
{
|
||||
key = "";
|
||||
name = "";
|
||||
def = QVariant();
|
||||
}
|
||||
|
||||
gui_save(const QString& k, const QString& n, const QVariant& d)
|
||||
{
|
||||
key = k;
|
||||
name = n;
|
||||
def = d;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::map<std::string, const QString> q_from_char;
|
||||
typedef QPair<QString, QString> q_string_pair;
|
||||
typedef QPair<QString, QSize> q_size_pair;
|
||||
typedef QList<q_string_pair> q_pair_list;
|
||||
typedef QList<q_size_pair> q_size_list;
|
||||
|
||||
namespace gui
|
||||
{
|
||||
static QString stylesheet;
|
||||
|
@ -137,8 +110,6 @@ namespace gui
|
|||
const QString users = "Users";
|
||||
const QString notes = "Notes";
|
||||
const QString titles = "Titles";
|
||||
const QString playtime = "Playtime";
|
||||
const QString last_played = "LastPlayed";
|
||||
|
||||
const QColor gl_icon_color = QColor(240, 240, 240, 255);
|
||||
|
||||
|
@ -165,7 +136,7 @@ namespace gui
|
|||
const gui_save mw_titleBarsVisible = gui_save(main_window, "titleBarsVisible", true);
|
||||
const gui_save mw_geometry = gui_save(main_window, "geometry", QByteArray());
|
||||
const gui_save mw_windowState = gui_save(main_window, "windowState", QByteArray());
|
||||
const gui_save mw_mwState = gui_save(main_window, "wwState", QByteArray());
|
||||
const gui_save mw_mwState = gui_save(main_window, "mwState", QByteArray());
|
||||
|
||||
const gui_save cat_hdd_game = gui_save(game_list, "categoryVisibleHDDGame", true);
|
||||
const gui_save cat_disc_game = gui_save(game_list, "categoryVisibleDiscGame", true);
|
||||
|
@ -249,25 +220,19 @@ namespace gui
|
|||
|
||||
/** Class for GUI settings..
|
||||
*/
|
||||
class gui_settings : public QObject
|
||||
class gui_settings : public settings
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit gui_settings(QObject* parent = nullptr);
|
||||
~gui_settings();
|
||||
|
||||
QString GetCurrentUser();
|
||||
QString GetSettingsDir();
|
||||
|
||||
/** Changes the settings file to the destination preset*/
|
||||
bool ChangeToConfig(const QString& friendly_name);
|
||||
|
||||
bool GetCategoryVisibility(int cat);
|
||||
QVariant GetValue(const gui_save& entry);
|
||||
QVariant GetValue(const QString& key, const QString& name, const QString& def);
|
||||
QVariant List2Var(const q_pair_list& list);
|
||||
q_pair_list Var2List(const QVariant &var);
|
||||
|
||||
void ShowConfirmationBox(const QString& title, const QString& text, const gui_save& entry, int* result, QWidget* parent);
|
||||
void ShowInfoBox(const QString& title, const QString& text, const gui_save& entry, QWidget* parent);
|
||||
|
@ -283,19 +248,6 @@ public:
|
|||
public Q_SLOTS:
|
||||
void Reset(bool removeMeta = false);
|
||||
|
||||
/** Remove entry */
|
||||
void RemoveValue(const QString& key, const QString& name);
|
||||
|
||||
/** Write value to entry */
|
||||
void SetValue(const gui_save& entry, const QVariant& value);
|
||||
void SetValue(const QString& key, const QString& name, const QVariant& value);
|
||||
|
||||
void SetPlaytime(const QString& serial, const qint64& elapsed);
|
||||
qint64 GetPlaytime(const QString& serial);
|
||||
|
||||
void SetLastPlayed(const QString& serial, const QString& date);
|
||||
QString GetLastPlayed(const QString& serial);
|
||||
|
||||
/** Sets the visibility of the chosen category. */
|
||||
void SetCategoryVisibility(int cat, const bool& val);
|
||||
|
||||
|
@ -309,13 +261,8 @@ public Q_SLOTS:
|
|||
static gui_save GetGuiSaveForColumn(int col);
|
||||
|
||||
private:
|
||||
QString ComputeSettingsDir();
|
||||
void BackupSettingsToTarget(const QString& friendly_name);
|
||||
void ShowBox(bool confirm, const QString& title, const QString& text, const gui_save& entry, int* result, QWidget* parent, bool always_on_top);
|
||||
|
||||
QSettings m_settings;
|
||||
QDir m_settingsDir;
|
||||
QString m_current_name;
|
||||
QMap<QString, qint64> m_playtime;
|
||||
QMap<QString, QString> m_last_played;
|
||||
};
|
||||
|
|
|
@ -57,8 +57,13 @@
|
|||
|
||||
inline std::string sstr(const QString& _in) { return _in.toStdString(); }
|
||||
|
||||
main_window::main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent)
|
||||
: QMainWindow(parent), guiSettings(guiSettings), emuSettings(emuSettings), m_sys_menu_opened(false), ui(new Ui::main_window)
|
||||
main_window::main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, std::shared_ptr<persistent_settings> persistent_settings, QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, guiSettings(guiSettings)
|
||||
, emuSettings(emuSettings)
|
||||
, m_persistent_settings(persistent_settings)
|
||||
, m_sys_menu_opened(false)
|
||||
, ui(new Ui::main_window)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -1557,7 +1562,7 @@ void main_window::CreateDockWindows()
|
|||
m_mw = new QMainWindow();
|
||||
m_mw->setContextMenuPolicy(Qt::PreventContextMenu);
|
||||
|
||||
m_gameListFrame = new game_list_frame(guiSettings, emuSettings, m_mw);
|
||||
m_gameListFrame = new game_list_frame(guiSettings, emuSettings, m_persistent_settings, m_mw);
|
||||
m_gameListFrame->setObjectName("gamelist");
|
||||
m_debuggerFrame = new debugger_frame(guiSettings, m_mw);
|
||||
m_debuggerFrame->setObjectName("debugger");
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "debugger_frame.h"
|
||||
#include "game_list_frame.h"
|
||||
#include "gui_settings.h"
|
||||
#include "persistent_settings.h"
|
||||
#include "update_manager.h"
|
||||
|
||||
#include <memory>
|
||||
|
@ -67,7 +68,7 @@ class main_window : public QMainWindow
|
|||
};
|
||||
|
||||
public:
|
||||
explicit main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, QWidget *parent = 0);
|
||||
explicit main_window(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, std::shared_ptr<persistent_settings> persistent_settings, QWidget *parent = 0);
|
||||
void Init();
|
||||
~main_window();
|
||||
QIcon GetAppIcon();
|
||||
|
@ -141,6 +142,7 @@ private:
|
|||
game_list_frame* m_gameListFrame = nullptr;
|
||||
std::shared_ptr<gui_settings> guiSettings;
|
||||
std::shared_ptr<emu_settings> emuSettings;
|
||||
std::shared_ptr<persistent_settings> m_persistent_settings;
|
||||
|
||||
update_manager m_updater;
|
||||
};
|
||||
|
|
29
rpcs3/rpcs3qt/persistent_settings.cpp
Normal file
29
rpcs3/rpcs3qt/persistent_settings.cpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
#include "persistent_settings.h"
|
||||
|
||||
persistent_settings::persistent_settings(QObject* parent) : settings(parent)
|
||||
{
|
||||
// Don't use the .ini file ending for now, as it will be confused for a regular gui_settings file.
|
||||
m_settings = new QSettings(ComputeSettingsDir() + gui::persistent::persistent_file_name + ".dat", QSettings::Format::IniFormat, parent);
|
||||
}
|
||||
|
||||
void persistent_settings::SetPlaytime(const QString& serial, const qint64& elapsed)
|
||||
{
|
||||
m_playtime[serial] = elapsed;
|
||||
SetValue(gui::persistent::playtime, serial, elapsed);
|
||||
}
|
||||
|
||||
qint64 persistent_settings::GetPlaytime(const QString& serial)
|
||||
{
|
||||
return m_playtime[serial];
|
||||
}
|
||||
|
||||
void persistent_settings::SetLastPlayed(const QString& serial, const QString& date)
|
||||
{
|
||||
m_last_played[serial] = date;
|
||||
SetValue(gui::persistent::last_played, serial, date);
|
||||
}
|
||||
|
||||
QString persistent_settings::GetLastPlayed(const QString& serial)
|
||||
{
|
||||
return m_last_played[serial];
|
||||
}
|
35
rpcs3/rpcs3qt/persistent_settings.h
Normal file
35
rpcs3/rpcs3qt/persistent_settings.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
#pragma once
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
namespace gui
|
||||
{
|
||||
namespace persistent
|
||||
{
|
||||
// File name
|
||||
const QString persistent_file_name = "persistent_settings";
|
||||
|
||||
// Entry names
|
||||
const QString playtime = "Playtime";
|
||||
const QString last_played = "LastPlayed";
|
||||
}
|
||||
}
|
||||
|
||||
// Provides a persistent settings class that won't be affected by settings dialog changes
|
||||
class persistent_settings : public settings
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit persistent_settings(QObject* parent = nullptr);
|
||||
|
||||
public Q_SLOTS:
|
||||
void SetPlaytime(const QString& serial, const qint64& elapsed);
|
||||
qint64 GetPlaytime(const QString& serial);
|
||||
|
||||
void SetLastPlayed(const QString& serial, const QString& date);
|
||||
QString GetLastPlayed(const QString& serial);
|
||||
private:
|
||||
QMap<QString, qint64> m_playtime;
|
||||
QMap<QString, QString> m_last_played;
|
||||
};
|
85
rpcs3/rpcs3qt/settings.cpp
Normal file
85
rpcs3/rpcs3qt/settings.cpp
Normal file
|
@ -0,0 +1,85 @@
|
|||
#include "settings.h"
|
||||
|
||||
#include "qt_utils.h"
|
||||
|
||||
inline std::string sstr(const QString& _in) { return _in.toStdString(); }
|
||||
|
||||
settings::settings(QObject* parent) : QObject(parent),
|
||||
m_settings_dir(ComputeSettingsDir())
|
||||
{
|
||||
}
|
||||
|
||||
settings::~settings()
|
||||
{
|
||||
if (m_settings)
|
||||
{
|
||||
m_settings->sync();
|
||||
}
|
||||
}
|
||||
|
||||
QString settings::GetSettingsDir()
|
||||
{
|
||||
return m_settings_dir.absolutePath();
|
||||
}
|
||||
|
||||
QString settings::ComputeSettingsDir()
|
||||
{
|
||||
return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/";
|
||||
}
|
||||
|
||||
void settings::RemoveValue(const QString& key, const QString& name)
|
||||
{
|
||||
if (m_settings)
|
||||
{
|
||||
m_settings->beginGroup(key);
|
||||
m_settings->remove(name);
|
||||
m_settings->endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
QVariant settings::GetValue(const gui_save& entry)
|
||||
{
|
||||
return m_settings ? m_settings->value(entry.key + "/" + entry.name, entry.def) : entry.def;
|
||||
}
|
||||
|
||||
QVariant settings::GetValue(const QString& key, const QString& name, const QString& def)
|
||||
{
|
||||
return m_settings ? m_settings->value(key + "/" + name, def) : def;
|
||||
}
|
||||
|
||||
QVariant settings::List2Var(const q_pair_list& list)
|
||||
{
|
||||
QByteArray ba;
|
||||
QDataStream stream(&ba, QIODevice::WriteOnly);
|
||||
stream << list;
|
||||
return QVariant(ba);
|
||||
}
|
||||
|
||||
q_pair_list settings::Var2List(const QVariant& var)
|
||||
{
|
||||
q_pair_list list;
|
||||
QByteArray ba = var.toByteArray();
|
||||
QDataStream stream(&ba, QIODevice::ReadOnly);
|
||||
stream >> list;
|
||||
return list;
|
||||
}
|
||||
|
||||
void settings::SetValue(const gui_save& entry, const QVariant& value)
|
||||
{
|
||||
if (m_settings)
|
||||
{
|
||||
m_settings->beginGroup(entry.key);
|
||||
m_settings->setValue(entry.name, value);
|
||||
m_settings->endGroup();
|
||||
}
|
||||
}
|
||||
|
||||
void settings::SetValue(const QString& key, const QString& name, const QVariant& value)
|
||||
{
|
||||
if (m_settings)
|
||||
{
|
||||
m_settings->beginGroup(key);
|
||||
m_settings->setValue(name, value);
|
||||
m_settings->endGroup();
|
||||
}
|
||||
}
|
65
rpcs3/rpcs3qt/settings.h
Normal file
65
rpcs3/rpcs3qt/settings.h
Normal file
|
@ -0,0 +1,65 @@
|
|||
#pragma once
|
||||
|
||||
#include <QSettings>
|
||||
#include <QDir>
|
||||
#include <QVariant>
|
||||
#include <QSize>
|
||||
|
||||
struct gui_save
|
||||
{
|
||||
QString key;
|
||||
QString name;
|
||||
QVariant def;
|
||||
|
||||
gui_save()
|
||||
{
|
||||
key = "";
|
||||
name = "";
|
||||
def = QVariant();
|
||||
}
|
||||
|
||||
gui_save(const QString& k, const QString& n, const QVariant& d)
|
||||
{
|
||||
key = k;
|
||||
name = n;
|
||||
def = d;
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::map<std::string, const QString> q_from_char;
|
||||
typedef QPair<QString, QString> q_string_pair;
|
||||
typedef QPair<QString, QSize> q_size_pair;
|
||||
typedef QList<q_string_pair> q_pair_list;
|
||||
typedef QList<q_size_pair> q_size_list;
|
||||
|
||||
// Parent Class for GUI settings
|
||||
class settings : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit settings(QObject* parent = nullptr);
|
||||
~settings();
|
||||
|
||||
QString GetSettingsDir();
|
||||
|
||||
QVariant GetValue(const gui_save& entry);
|
||||
QVariant GetValue(const QString& key, const QString& name, const QString& def);
|
||||
QVariant List2Var(const q_pair_list& list);
|
||||
q_pair_list Var2List(const QVariant& var);
|
||||
|
||||
public Q_SLOTS:
|
||||
/** Remove entry */
|
||||
void RemoveValue(const QString& key, const QString& name);
|
||||
|
||||
/** Write value to entry */
|
||||
void SetValue(const gui_save& entry, const QVariant& value);
|
||||
void SetValue(const QString& key, const QString& name, const QVariant& value);
|
||||
|
||||
protected:
|
||||
QString ComputeSettingsDir();
|
||||
|
||||
QSettings* m_settings = nullptr;
|
||||
QDir m_settings_dir;
|
||||
QString m_current_name;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue