| 63 | } |
| 64 | |
| 65 | SettingsAgent::SettingsAgent(QObject *parent) |
| 66 | : QObject{parent} |
| 67 | { |
| 68 | _settings_file_path = QCoreApplication::applicationDirPath() + "/config.ini"; |
| 69 | QFile settings_file(_settings_file_path); |
| 70 | if (!settings_file.exists()) { |
| 71 | MessageBox file_missing_msg; |
| 72 | file_missing_msg.setWindowIcon(QIcon(":/svg/favicon.svg")); |
| 73 | file_missing_msg.setIcon(QMessageBox::Warning); |
| 74 | file_missing_msg.setText(tr("WARNING")); |
| 75 | file_missing_msg.setInformativeText(tr("The configuration file 'condig.ini' was not found. The program may have been modified. It is recommended to reinstall the program, which may resolve this issue.")); |
| 76 | |
| 77 | QPushButton* ignore_btn = file_missing_msg.addButton(tr("Ignore"), QMessageBox::NoRole); |
| 78 | QPushButton* reinstall_btn = file_missing_msg.addButton(tr("Reinstall"), QMessageBox::YesRole); |
| 79 | file_missing_msg.setDefaultButton(ignore_btn); |
| 80 | |
| 81 | file_missing_msg.exec(); |
| 82 | |
| 83 | if (file_missing_msg.clickedButton() == reinstall_btn) { |
| 84 | QDesktopServices::openUrl(QUrl("https://seayj.github.io/MouseClick/")); |
| 85 | } else if (file_missing_msg.clickedButton() == ignore_btn) { |
| 86 | // nothing to do |
| 87 | } else { |
| 88 | // nothing to do |
| 89 | } |
| 90 | } |
| 91 | |
| 92 | QSettings settings(_settings_file_path, QSettings::IniFormat); |
| 93 | |
| 94 | settings.beginGroup("MainWindow"); |
| 95 | _config["ThemeMode"] = settings.value("ThemeMode"); |
| 96 | _config["WindowState"] = settings.value("WindowState"); |
| 97 | settings.endGroup(); |
| 98 | |
| 99 | settings.beginGroup("Settings"); |
| 100 | _config["Language"] = settings.value("Language"); |
| 101 | _config["Hotkey"] = settings.value("Hotkey"); |
| 102 | settings.endGroup(); |
| 103 | |
| 104 | // 主题的特殊检查 |
| 105 | if (!Theme::isValidThemeMode(_config["ThemeMode"].toInt())) { |
| 106 | _config["ThemeMode"] = _DEFAULT_THEMEMODE; |
| 107 | QTimer::singleShot(0, this, [this](){ // 延迟发送,确保在对象初始化完成后发送信号 |
| 108 | emit currentThemeChanged(_DEFAULT_THEMEMODE); |
| 109 | }); |
| 110 | } |
| 111 | |
| 112 | // 语言的特殊检查(必须确保可用) |
| 113 | const QString language = _config["Language"].toString(); |
| 114 | if (language.isEmpty() || !_language_support_list.contains(language)) { |
| 115 | _config["Language"] = _DEFAULT_LANGUAGE; |
| 116 | QTimer::singleShot(0, this, [this]() { // 延迟发送,确保在对象初始化完成后发送信号 |
| 117 | emit currentLanguageChanged(_DEFAULT_LANGUAGE); |
| 118 | }); |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | SettingsAgent::~SettingsAgent() |