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.show_status_bar = qt_config->value("showStatusBar", true).toBool(); | ||||||
|     UISettings::values.confirm_before_closing = qt_config->value("confirmClose", 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.first_start = qt_config->value("firstStart", true).toBool(); | ||||||
|  |     UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt(); | ||||||
|  |  | ||||||
|     qt_config->endGroup(); |     qt_config->endGroup(); | ||||||
| } | } | ||||||
| @@ -320,6 +321,7 @@ void Config::SaveValues() { | |||||||
|     qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); |     qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); | ||||||
|     qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); |     qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); | ||||||
|     qt_config->setValue("firstStart", UISettings::values.first_start); |     qt_config->setValue("firstStart", UISettings::values.first_start); | ||||||
|  |     qt_config->setValue("calloutFlags", UISettings::values.callout_flags); | ||||||
|  |  | ||||||
|     qt_config->endGroup(); |     qt_config->endGroup(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -48,6 +48,47 @@ | |||||||
| Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); | Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); | ||||||
| #endif | #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) { | GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | ||||||
|     Pica::g_debug_context = Pica::DebugContext::Construct(); |     Pica::g_debug_context = Pica::DebugContext::Construct(); | ||||||
|     setAcceptDrops(true); |     setAcceptDrops(true); | ||||||
| @@ -73,6 +114,9 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | |||||||
|  |  | ||||||
|     UpdateUITheme(); |     UpdateUITheme(); | ||||||
|  |  | ||||||
|  |     // Show one-time "callout" messages to the user | ||||||
|  |     ShowCallouts(); | ||||||
|  |  | ||||||
|     QStringList args = QApplication::arguments(); |     QStringList args = QApplication::arguments(); | ||||||
|     if (args.length() >= 2) { |     if (args.length() >= 2) { | ||||||
|         BootGame(args[1]); |         BootGame(args[1]); | ||||||
|   | |||||||
| @@ -80,6 +80,8 @@ private: | |||||||
|     void BootGame(const QString& filename); |     void BootGame(const QString& filename); | ||||||
|     void ShutdownGame(); |     void ShutdownGame(); | ||||||
|  |  | ||||||
|  |     void ShowCallouts(); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Stores the filename in the recently loaded files list. |      * Stores the filename in the recently loaded files list. | ||||||
|      * The new filename is stored at the beginning of 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> |     // Shortcut name <Shortcut, context> | ||||||
|     std::vector<Shortcut> shortcuts; |     std::vector<Shortcut> shortcuts; | ||||||
|  |  | ||||||
|  |     uint32_t callout_flags; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| extern Values values; | extern Values values; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user