12#include <QtCore/QStandardPaths>
14#include <QtCore/QSettings>
17QList<QLocale::Language> AppSettings::_rgReleaseLanguages = {
28QList<QLocale::Language> AppSettings::_rgPartialLanguages = {
32AppSettings::LanguageInfo_t AppSettings::_rgLanguageInfo[] = {
33 { QLocale::AnyLanguage,
"System" },
34 { QLocale::Azerbaijani,
"Azerbaijani (Azerbaijani)" },
35 { QLocale::Bulgarian,
"български (Bulgarian)" },
36 { QLocale::Chinese,
"中文 (Chinese)" },
37 { QLocale::Dutch,
"Nederlands (Dutch)" },
38 { QLocale::English,
"English" },
39 { QLocale::Finnish,
"Suomi (Finnish)" },
40 { QLocale::French,
"Français (French)" },
41 { QLocale::German,
"Deutsche (German)" },
42 { QLocale::Greek,
"Ελληνικά (Greek)" },
43 { QLocale::Hebrew,
"עברית (Hebrew)" },
44 { QLocale::Italian,
"Italiano (Italian)" },
45 { QLocale::Japanese,
"日本語 (Japanese)" },
46 { QLocale::Korean,
"한국어 (Korean)" },
47 { QLocale::NorwegianBokmal,
"Norsk (Norwegian)" },
48 { QLocale::Polish,
"Polskie (Polish)" },
49 { QLocale::Portuguese,
"Português (Portuguese)" },
50 { QLocale::Russian,
"Pусский (Russian)" },
51 { QLocale::Spanish,
"Español (Spanish)" },
52 { QLocale::Swedish,
"Svenska (Swedish)" },
53 { QLocale::Turkish,
"Türk (Turkish)" }
62 SettingsFact* savePathFact = qobject_cast<SettingsFact*>(savePath());
63 QString appName = QCoreApplication::applicationName();
64#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
66 bool userHasModifiedSavePath =
false;
68 bool userHasModifiedSavePath = !savePathFact->rawValue().toString().isEmpty() || !_nameToMetaDataMap[savePathName]->rawDefaultValue().toString().isEmpty();
71 if (!userHasModifiedSavePath) {
72#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
75 QDir rootDir = QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
76 savePathFact->setRawValue(rootDir.absolutePath());
80 if (!androidDontSaveToSDCard()->rawValue().toBool()) {
82 qDebug() <<
"AndroidInterface::getSDCardPath();" << rootDirPath;
83 if (rootDirPath.isEmpty() || !QDir(rootDirPath).exists()) {
85 qDebug() <<
"Save to SD card specified for application data. But no SD card present or permissions not granted. Using internal storage.";
86 }
else if (!QFileInfo(rootDirPath).isWritable()) {
88 qgcApp()->showAppMessage(AppSettings::tr(
"Save to SD card specified for application data. But SD card is write protected. Using internal storage."));
92 if (rootDirPath.isEmpty()) {
93 rootDirPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
95 savePathFact->setRawValue(QDir(rootDirPath).filePath(appName));
97 savePathFact->setVisible(
false);
99 QDir rootDir = QDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
100 savePathFact->setRawValue(rootDir.filePath(appName));
107 _checkSavePathDirectories();
143 if (!_indoorPaletteFact) {
144 _indoorPaletteFact = _createSettingsFact(indoorPaletteName);
147 return _indoorPaletteFact;
152 if (!_qLocaleLanguageFact) {
153 _qLocaleLanguageFact = _createSettingsFact(qLocaleLanguageName);
156 FactMetaData* metaData = _qLocaleLanguageFact->metaData();
157 QStringList rgEnumStrings;
158 QVariantList rgEnumValues;
161 rgEnumStrings.append(_rgLanguageInfo[0].languageName);
162 rgEnumValues.append(_rgLanguageInfo[0].languageId);
164 for (
const auto& languageInfo: _rgLanguageInfo) {
165 if (_rgReleaseLanguages.contains(languageInfo.languageId)) {
166 rgEnumStrings.append(languageInfo.languageName);
167 rgEnumValues.append(languageInfo.languageId);
170 for (
const auto& languageInfo: _rgLanguageInfo) {
171 if (_rgPartialLanguages.contains(languageInfo.languageId)) {
172 rgEnumStrings.append(QString(languageInfo.languageName) + AppSettings::tr(
" (Partial)"));
173 rgEnumValues.append(languageInfo.languageId);
176#ifdef QGC_DAILY_BUILD
178 for (
const auto& languageInfo: _rgLanguageInfo) {
179 if (!_rgReleaseLanguages.contains(languageInfo.languageId) && !_rgPartialLanguages.contains(languageInfo.languageId)) {
180 rgEnumStrings.append(QString(languageInfo.languageName) + AppSettings::tr(
" (Test Only)"));
181 rgEnumValues.append(languageInfo.languageId);
185 metaData->
setEnumInfo(rgEnumStrings, rgEnumValues);
187 if (_qLocaleLanguageFact->enumIndex() == -1) {
188 _qLocaleLanguageFact->setRawValue(QLocale::AnyLanguage);
191 return _qLocaleLanguageFact;
194void AppSettings::_qLocaleLanguageChanged()
199void AppSettings::_checkSavePathDirectories(
void)
216QString AppSettings::_childSavePath(
const char* directory)
218 const QString rootPath =
savePath()->rawValue().toString();
219 if (rootPath.isEmpty()) {
223 const QDir rootDir(rootPath);
224 if (!rootDir.exists()) {
228 return rootDir.filePath(directory);
231void AppSettings::_indoorPaletteChanged(
void)
236QString AppSettings::missionSavePath(
void)
285 QStringList strIdList = firstRunPromptIds.toString().split(
",", Qt::SkipEmptyParts);
287 for (
const QString& strId: strIdList) {
288 rgIds.append(strId.toInt());
296 for (
int id: rgIds) {
297 strList.append(QString::number(
id));
299 return QVariant(strList.join(
","));
305 if (!rgIds.contains(
id)) {
316QLocale::Language AppSettings::_qLocaleLanguageEarlyAccess(
void)
321 QLocale::Language localeLanguage =
static_cast<QLocale::Language
>(settings.value(
qLocaleLanguageName).toInt());
322 for (
auto& languageInfo: _rgLanguageInfo) {
323 if (languageInfo.languageId == localeLanguage) {
324 return localeLanguage;
328 localeLanguage = QLocale::AnyLanguage;
331 return localeLanguage;
#define DECLARE_SETTINGSFACT_NO_FUNC(CLASS, NAME)
#define DECLARE_SETTINGSFACT(CLASS, NAME)
#define DECLARE_SETTINGGROUP(NAME, GROUP)
static QVariant firstRunPromptsIdsListToVariant(const QList< int > &rgIds)
QString telemetrySavePath()
Fact *firstRunPromptIdsShown READ firstRunPromptIdsShown CONSTANT Fact * firstRunPromptIdsShown()
static constexpr const char * settingsDirectory
QString parameterSavePath()
static constexpr const char * photoDirectory
Fact *indoorPalette READ indoorPalette CONSTANT Fact * indoorPalette()
static constexpr const char * telemetryDirectory
void firstRunPromptIdsMarkIdAsShown(int id)
static constexpr const char * logDirectory
QString settingsSavePath()
static const char * qLocaleLanguageName
static constexpr const char * videoDirectory
Fact *savePath READ savePath CONSTANT Fact * savePath()
static QList< int > firstRunPromptsIdsVariantToList(const QVariant &firstRunPromptIds)
static constexpr const char * missionDirectory
static constexpr const char * mavlinkActionsDirectory
static constexpr const char * crashDirectory
QString mavlinkActionsSavePath()
static constexpr const char * parameterDirectory
void rawValueChanged(const QVariant &value)
static void setGlobalTheme(Theme newTheme)
A SettingsFact is Fact which holds a QSettings value.
bool ensureDirectoryExists(const QString &path)
QString joinPath(const QString &dir, const QString &name)