Skip to content
Snippets Groups Projects
Commit 0409bdfe authored by TheKoopaKingdom's avatar TheKoopaKingdom
Browse files

Optimized messages that were repetitive and added ability for core errors to...

Optimized messages that were repetitive and added ability for core errors to specify more details optionally.
parent b6bab590
No related branches found
No related tags found
No related merge requests found
......@@ -39,7 +39,7 @@ void EmuThread::run() {
Core::System::ResultStatus result = Core::System::GetInstance().RunLoop();
if (result != Core::System::ResultStatus::Success) {
emit ErrorThrown(result);
emit ErrorThrown(result, Core::System::GetInstance().GetStatusDetails());
}
was_active = running || exec_step;
......
......@@ -99,7 +99,7 @@ signals:
*/
void DebugModeLeft();
void ErrorThrown(Core::System::ResultStatus);
void ErrorThrown(Core::System::ResultStatus, boost::optional<std::string>);
};
class GRenderWindow : public QWidget, public EmuWindow {
......
......@@ -553,8 +553,10 @@ void GMainWindow::OnMenuRecentFile() {
void GMainWindow::OnStartGame() {
emu_thread->SetRunning(true);
qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus");
connect(emu_thread.get(), SIGNAL(ErrorThrown(Core::System::ResultStatus)), this,
SLOT(OnCoreError(Core::System::ResultStatus)));
qRegisterMetaType<boost::optional<std::string>>("boost::optional<std::string>");
connect(emu_thread.get(),
SIGNAL(ErrorThrown(Core::System::ResultStatus, boost::optional<std::string>)), this,
SLOT(OnCoreError(Core::System::ResultStatus, boost::optional<std::string>)));
ui.action_Start->setEnabled(false);
ui.action_Start->setText(tr("Continue"));
......@@ -647,52 +649,68 @@ void GMainWindow::UpdateStatusBar() {
emu_frametime_label->setVisible(true);
}
void GMainWindow::OnCoreError(Core::System::ResultStatus result) {
void GMainWindow::OnCoreError(Core::System::ResultStatus result,
boost::optional<std::string> details) {
QMessageBox::StandardButton answer;
QString status_message;
const QString common_message =
tr("The game you are trying to load requires additional files from your 3DS to be dumped "
"before playing.<br/><br/>For more information on dumping these files, please see the "
"following wiki page: <a "
"href='https://citra-emu.org/wiki/"
"Dumping-System-Archives-and-the-Shared-Fonts-from-a-3DS-Console/'>Dumping System "
"Archives and the Shared Fonts from a 3DS Console</a>.<br/><br/>Would you like to quit "
"back to the game list?");
switch (result) {
case Core::System::ResultStatus::ErrorSystemFiles:
QMessageBox::critical(
this, "System Archive Not Found",
"Citra was unable to locate the 3DS system archive.<br/><br/>"
"The game you are trying to load requires additional files from your 3DS to be dumped "
"before playing.<br/><br/>"
"For more information on dumping these files, please see the following wiki page: "
"<a "
"href='https://citra-emu.org/wiki/"
"Dumping-System-Archives-and-the-Shared-Fonts-from-a-3DS-Console/'>Dumping System "
"Archives and the Shared Fonts from a 3DS Console</a>"
".");
case Core::System::ResultStatus::ErrorSystemFiles: {
QString message = "Citra was unable to locate a 3DS system archive";
if (details)
message.append(tr(": %1. ").arg(details.get().c_str()));
else
message.append(". ");
message.append(common_message);
answer = QMessageBox::question(this, tr("System Archive Not Found"), message,
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
status_message = "System Archive Missing";
break;
}
case Core::System::ResultStatus::ErrorSharedFont:
QMessageBox::critical(
this, "Shared Fonts Not Found",
"Citra was unable to locate the 3DS shared fonts.<br/><br/>"
"The game you are trying to load requires additional files from your 3DS to be dumped "
"before playing.<br/><br/>"
"For more information on dumping these files, please see the following wiki page: "
"<a "
"href='https://citra-emu.org/wiki/"
"Dumping-System-Archives-and-the-Shared-Fonts-from-a-3DS-Console/'>Dumping System "
"Archives and the Shared Fonts from a 3DS Console</a>"
".");
case Core::System::ResultStatus::ErrorSharedFont: {
QString message = tr("Citra was unable to locate the 3DS shared fonts. ");
message.append(common_message);
answer = QMessageBox::question(this, tr("Shared Fonts Not Found"), message,
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
status_message = "Shared Font Missing";
break;
}
default:
QMessageBox::critical(
this, "Fatal Error",
"Citra has encountered a fatal error, please see the log for more details. "
"For more information on accessing the log, please see the following page: "
"<a href='https://community.citra-emu.org/t/how-to-upload-the-log-file/296'>How to "
"Upload the Log File</a>.");
answer = QMessageBox::question(
this, tr("Fatal Error"),
tr("Citra has encountered a fatal error, please see the log for more details. "
"For more information on accessing the log, please see the following page: "
"<a href='https://community.citra-emu.org/t/how-to-upload-the-log-file/296'>How to "
"Upload the Log File</a>.<br/><br/>Would you like to quit back to the game list?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
status_message = "Fatal Error encountered.";
break;
}
if (answer == QMessageBox::Yes) {
if (emu_thread != nullptr)
ShutdownGame();
} else {
message_label->setText(status_message);
message_label->setVisible(true);
}
}
bool GMainWindow::ConfirmClose() {
if (emu_thread == nullptr || !UISettings::values.confirm_before_closing)
return true;
auto answer =
QMessageBox::StandardButton answer =
QMessageBox::question(this, tr("Citra"), tr("Are you sure you want to close Citra?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
return answer != QMessageBox::No;
......
......@@ -125,7 +125,7 @@ private slots:
void OnDisplayTitleBars(bool);
void ToggleWindowMode();
void OnCreateGraphicsSurfaceViewer();
void OnCoreError(Core::System::ResultStatus);
void OnCoreError(Core::System::ResultStatus, boost::optional<std::string>);
private:
void UpdateStatusBar();
......
......@@ -6,6 +6,9 @@
#include <memory>
#include <string>
#include <boost/optional.hpp>
#include "common/common_types.h"
#include "core/memory.h"
#include "core/perf_stats.h"
......@@ -112,8 +115,16 @@ public:
return status;
}
void SetStatus(ResultStatus newStatus) {
status = newStatus;
void SetStatus(ResultStatus new_status, std::string details = std::string()) {
status = new_status;
if (details == std::string())
status_details = boost::none;
else
status_details = details;
}
boost::optional<std::string> GetStatusDetails() {
return status_details;
}
private:
......@@ -141,7 +152,9 @@ private:
std::unique_ptr<Core::TelemetrySession> telemetry_session;
static System s_instance;
ResultStatus status;
boost::optional<std::string> status_details;
};
inline ARM_Interface& CPU() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment