service/cfg, citra_qt: add country code configuration

This commit is contained in:
zhupengfei 2018-07-18 14:32:56 +08:00
parent a1b1d827bf
commit e61b7d265f
No known key found for this signature in database
GPG Key ID: 85B82A3E62174206
5 changed files with 243 additions and 1 deletions

View File

@ -25,6 +25,196 @@ static const std::array<int, 12> days_in_month = {{
31,
}};
static const std::array<const char*, 187> country_names = {
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "Japan"),
"",
"",
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "Anguilla"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Antigua and Barbuda"), // 0-9
QT_TRANSLATE_NOOP("ConfigureSystem", "Argentina"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Aruba"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Bahamas"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Barbados"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Belize"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Bolivia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Brazil"),
QT_TRANSLATE_NOOP("ConfigureSystem", "British Virgin Islands"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Canada"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Cayman Islands"), // 10-19
QT_TRANSLATE_NOOP("ConfigureSystem", "Chile"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Colombia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Costa Rica"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Dominica"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Dominican Republic"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Ecuador"),
QT_TRANSLATE_NOOP("ConfigureSystem", "El Salvador"),
QT_TRANSLATE_NOOP("ConfigureSystem", "French Guiana"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Grenada"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Guadeloupe"), // 20-29
QT_TRANSLATE_NOOP("ConfigureSystem", "Guatemala"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Guyana"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Haiti"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Honduras"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Jamaica"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Martinique"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Mexico"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Montserrat"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Netherlands Antilles"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Nicaragua"), // 30-39
QT_TRANSLATE_NOOP("ConfigureSystem", "Panama"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Paraguay"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Peru"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Saint Kitts and Nevis"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Saint Lucia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Saint Vincent and the Grenadines"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Suriname"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Trinidad and Tobago"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Turks and Caicos Islands"),
QT_TRANSLATE_NOOP("ConfigureSystem", "United States"), // 40-49
QT_TRANSLATE_NOOP("ConfigureSystem", "Uruguay"),
QT_TRANSLATE_NOOP("ConfigureSystem", "US Virgin Islands"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Venezuela"),
"",
"",
"",
"",
"",
"",
"", // 50-59
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "Albania"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Australia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Austria"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Belgium"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Bosnia and Herzegovina"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Botswana"), // 60-69
QT_TRANSLATE_NOOP("ConfigureSystem", "Bulgaria"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Croatia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Cyprus"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Czech Republic"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Denmark"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Estonia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Finland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "France"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Germany"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Greece"), // 70-79
QT_TRANSLATE_NOOP("ConfigureSystem", "Hungary"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Iceland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Ireland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Italy"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Latvia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Lesotho"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Liechtenstein"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Lithuania"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Luxembourg"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Macedonia"), // 80-89
QT_TRANSLATE_NOOP("ConfigureSystem", "Malta"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Montenegro"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Mozambique"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Namibia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Netherlands"),
QT_TRANSLATE_NOOP("ConfigureSystem", "New Zealand"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Norway"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Poland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Portugal"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Romania"), // 90-99
QT_TRANSLATE_NOOP("ConfigureSystem", "Russia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Serbia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Slovakia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Slovenia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "South Africa"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Spain"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Swaziland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Sweden"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Switzerland"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Turkey"), // 100-109
QT_TRANSLATE_NOOP("ConfigureSystem", "United Kingdom"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Zambia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Zimbabwe"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Azerbaijan"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Mauritania"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Mali"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Niger"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Chad"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Sudan"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Eritrea"), // 110-119
QT_TRANSLATE_NOOP("ConfigureSystem", "Djibouti"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Somalia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Andorra"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Gibraltar"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Guernsey"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Isle of Man"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Jersey"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Monaco"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Taiwan"),
"", // 120-129
"",
"",
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "South Korea"),
"",
"",
"", // 130-139
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "Hong Kong"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Macau"),
"",
"",
"",
"", // 140-149
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "Indonesia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Singapore"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Thailand"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Philippines"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Malaysia"),
"",
"",
"", // 150-159
QT_TRANSLATE_NOOP("ConfigureSystem", "China"),
"",
"",
"",
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "United Arab Emirates"),
QT_TRANSLATE_NOOP("ConfigureSystem", "India"), // 160-169
QT_TRANSLATE_NOOP("ConfigureSystem", "Egypt"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Oman"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Qatar"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Kuwait"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Saudi Arabia"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Syria"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Bahrain"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Jordan"),
"",
"", // 170-179
"",
"",
"",
"",
QT_TRANSLATE_NOOP("ConfigureSystem", "San Marino"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Vatican City"),
QT_TRANSLATE_NOOP("ConfigureSystem", "Bermuda"), // 180-186
};
ConfigureSystem::ConfigureSystem(QWidget* parent) : QWidget(parent), ui(new Ui::ConfigureSystem) {
ui->setupUi(this);
connect(ui->combo_birthmonth,
@ -32,6 +222,11 @@ ConfigureSystem::ConfigureSystem(QWidget* parent) : QWidget(parent), ui(new Ui::
&ConfigureSystem::updateBirthdayComboBox);
connect(ui->button_regenerate_console_id, &QPushButton::clicked, this,
&ConfigureSystem::refreshConsoleID);
for (u8 i = 0; i < country_names.size(); i++) {
if (country_names.at(i) != "") {
ui->combo_country->addItem(tr(country_names.at(i)), i);
}
}
this->setConfiguration();
}
@ -81,6 +276,10 @@ void ConfigureSystem::ReadSystemSettings() {
sound_index = cfg->GetSoundOutputMode();
ui->combo_sound->setCurrentIndex(sound_index);
// set the country code
country_code = cfg->GetCountryCode();
ui->combo_country->setCurrentIndex(ui->combo_country->findData(country_code));
// set the console id
u64 console_id = cfg->GetConsoleUniqueId();
ui->label_console_id->setText(
@ -125,6 +324,13 @@ void ConfigureSystem::applyConfiguration() {
modified = true;
}
// apply country
u8 new_country = static_cast<u8>(ui->combo_country->currentData().toInt());
if (country_code != new_country) {
cfg->SetCountryCode(new_country);
modified = true;
}
// update the config savegame if any item is modified.
if (modified)
cfg->UpdateConfigNANDSavegame();

View File

@ -6,6 +6,7 @@
#include <memory>
#include <QWidget>
#include "common/common_types.h"
namespace Ui {
class ConfigureSystem;
@ -43,4 +44,5 @@ private:
int birthmonth, birthday;
int language_index;
int sound_index;
u8 country_code;
};

View File

@ -221,13 +221,24 @@
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_country">
<property name="text">
<string>Country</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="combo_country">
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_console_id">
<property name="text">
<string>Console ID:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QPushButton" name="button_regenerate_console_id">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">

View File

@ -666,6 +666,17 @@ SoundOutputMode Module::GetSoundOutputMode() {
return static_cast<SoundOutputMode>(block);
}
void Module::SetCountryCode(u8 country_code) {
ConsoleCountryInfo block = {{0, 0, 0}, country_code};
SetConfigInfoBlock(CountryInfoBlockID, sizeof(block), 4, &block);
}
u8 Module::GetCountryCode() {
ConsoleCountryInfo block;
GetConfigInfoBlock(CountryInfoBlockID, sizeof(block), 8, &block);
return block.country_code;
}
void Module::GenerateConsoleUniqueId(u32& random_number, u64& console_id) {
CryptoPP::AutoSeededRandomPool rng;
random_number = rng.GenerateWord32(0, 0xFFFF);

View File

@ -357,6 +357,18 @@ public:
*/
SoundOutputMode GetSoundOutputMode();
/**
* Sets the country code in config savegame.
* @param country_code the country code to set
*/
void SetCountryCode(u8 country_code);
/**
* Gets the country code from config savegame.
* @returns the country code
*/
u8 GetCountryCode();
/**
* Generates a new random console unique id.
* @param random_number a random generated 16bit number stored at 0x90002, used for generating