citra_qt: Show one-time callout messages to user.
This commit is contained in:
		| @@ -194,6 +194,7 @@ void Config::ReadValues() { | ||||
|     UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); | ||||
|     UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); | ||||
|     UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); | ||||
|     UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt(); | ||||
|  | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| @@ -320,6 +321,7 @@ void Config::SaveValues() { | ||||
|     qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); | ||||
|     qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); | ||||
|     qt_config->setValue("firstStart", UISettings::values.first_start); | ||||
|     qt_config->setValue("calloutFlags", UISettings::values.callout_flags); | ||||
|  | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
|   | ||||
| @@ -48,6 +48,47 @@ | ||||
| Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * "Callouts" are one-time instructional messages shown to the user. In the config settings, there | ||||
|  * is a bitfield "callout_flags" options, used to track if a message has already been shown to the | ||||
|  * user. This is 32-bits - if we have more than 32 callouts, we should retire and recyle old ones. | ||||
|  */ | ||||
| enum class CalloutFlag : uint32_t { | ||||
|     Telemetry = 0x1, | ||||
| }; | ||||
|  | ||||
| static void ShowCalloutMessage(const QString& message, CalloutFlag flag) { | ||||
|     if (UISettings::values.callout_flags & static_cast<uint32_t>(flag)) { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     UISettings::values.callout_flags |= static_cast<uint32_t>(flag); | ||||
|  | ||||
|     QMessageBox msg; | ||||
|     msg.setText(message); | ||||
|     msg.setStandardButtons(QMessageBox::Ok); | ||||
|     msg.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||||
|     msg.setStyleSheet("QLabel{min-width: 900px;}"); | ||||
|     msg.exec(); | ||||
| } | ||||
|  | ||||
| void GMainWindow::ShowCallouts() { | ||||
|     static const QString telemetry_message = | ||||
|         tr("To help improve Citra, the Citra Team collects anonymous usage data. No private or " | ||||
|            "personally identifying information is collected. This data helps us to understand how " | ||||
|            "people use Citra and prioritize our efforts. Furthermore, it helps us to more easily " | ||||
|            "identify emulation bugs and performance issues. This data includes:<ul><li>Information" | ||||
|            " about the version of Citra you are using</li><li>Performance data about the games you " | ||||
|            "play</li><li>Your configuration settings</li><li>Information about your computer " | ||||
|            "hardware</li><li>Emulation errors and crash information</li></ul>By default, this " | ||||
|            "feature is enabled. To disable this feature, click 'Emulation' from the menu and then " | ||||
|            "select 'Configure...'. Then, on the 'Web' tab, uncheck 'Share anonymous usage data with" | ||||
|            " the Citra team'. <br/><br/>By using this software, you agree to the above terms.<br/>" | ||||
|            "<br/><a href='https://citra-emu.org/entry/telemetry-and-why-thats-a-good-thing/'>Learn " | ||||
|            "more</a>"); | ||||
|     ShowCalloutMessage(telemetry_message, CalloutFlag::Telemetry); | ||||
| } | ||||
|  | ||||
| GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | ||||
|     Pica::g_debug_context = Pica::DebugContext::Construct(); | ||||
|     setAcceptDrops(true); | ||||
| @@ -73,6 +114,9 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | ||||
|  | ||||
|     UpdateUITheme(); | ||||
|  | ||||
|     // Show one-time "callout" messages to the user | ||||
|     ShowCallouts(); | ||||
|  | ||||
|     QStringList args = QApplication::arguments(); | ||||
|     if (args.length() >= 2) { | ||||
|         BootGame(args[1]); | ||||
|   | ||||
| @@ -80,6 +80,8 @@ private: | ||||
|     void BootGame(const QString& filename); | ||||
|     void ShutdownGame(); | ||||
|  | ||||
|     void ShowCallouts(); | ||||
|  | ||||
|     /** | ||||
|      * Stores the filename in the recently loaded files list. | ||||
|      * The new filename is stored at the beginning of the recently loaded files list. | ||||
|   | ||||
| @@ -48,6 +48,8 @@ struct Values { | ||||
|  | ||||
|     // Shortcut name <Shortcut, context> | ||||
|     std::vector<Shortcut> shortcuts; | ||||
|  | ||||
|     uint32_t callout_flags; | ||||
| }; | ||||
|  | ||||
| extern Values values; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user