diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc index 3c6809e712..9beab50bdb 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.cc @@ -25,6 +25,8 @@ QVariant PlatformSelector::getPlatformBundle(const QString &key) { } PlatformSelector::PlatformSelector() : ButtonControl(tr("Vehicle"), "", "") { + platforms = loadPlatformList(); + QObject::connect(this, &ButtonControl::clicked, [=]() { if (text() == tr("SEARCH")) { QString query = InputDialog::getText(tr("Search your vehicle"), this, tr("Enter model year (e.g., 2021) and model name (Toyota Corolla):"), false); @@ -53,18 +55,18 @@ void PlatformSelector::refresh(bool _offroad) { } QMap PlatformSelector::loadPlatformList() { - QMap platforms; + QMap _platforms; std::string json_data = util::read_file("../../sunnypilot/selfdrive/car/car_list.json"); if (json_data.empty()) { - return platforms; + return _platforms; } QJsonParseError json_error{}; QJsonDocument doc = QJsonDocument::fromJson(QString::fromStdString(json_data).toUtf8(), &json_error); if (doc.isNull()) { - return platforms; + return _platforms; } if (doc.isObject()) { @@ -86,11 +88,37 @@ QMap PlatformSelector::loadPlatformList() { platform_data["platform"] = attributes.value("platform").toString(); platform_data["package"] = attributes.value("package").toString(); - platforms[key] = platform_data; + _platforms[key] = platform_data; } } - return platforms; + return _platforms; +} + +void PlatformSelector::setPlatform(const QString &platform) { + QVariantMap platform_data = platforms[platform]; + + const QString offroad_msg = offroad ? tr("This setting will take effect immediately.") : + tr("This setting will take effect once the device enters offroad state."); + const QString msg = QString("%1

%2") + .arg(platform, offroad_msg); + + QString content("

" + tr("Vehicle Selector") + "


" + "

" + msg + "

"); + + if (ConfirmationDialog(content, tr("Confirm"), tr("Cancel"), true, this).exec()) { + QJsonObject json_bundle; + json_bundle["platform"] = platform_data["platform"].toString(); + json_bundle["name"] = platform; + json_bundle["make"] = platform_data["make"].toString(); + json_bundle["brand"] = platform_data["brand"].toString(); + json_bundle["model"] = platform_data["model"].toString(); + json_bundle["package"] = platform_data["package"].toString(); + + QString json_bundle_str = QString::fromUtf8(QJsonDocument(json_bundle).toJson(QJsonDocument::Compact)); + + params.put("CarPlatformBundle", json_bundle_str.toStdString()); + } } void PlatformSelector::searchPlatforms(const QString &query) { @@ -98,7 +126,6 @@ void PlatformSelector::searchPlatforms(const QString &query) { return; } - QMap platforms = loadPlatformList(); QSet matched_cars; QString normalized_query = query.simplified().toLower(); @@ -188,28 +215,6 @@ void PlatformSelector::searchPlatforms(const QString &query) { QString selected_platform = MultiOptionDialog::getSelection(tr("Select a vehicle"), results, "", this); if (!selected_platform.isEmpty()) { - QVariantMap platform_data = platforms[selected_platform]; - - const QString offroad_msg = offroad ? tr("This setting will take effect immediately.") : - tr("This setting will take effect once the device enters offroad state."); - const QString msg = QString("%1

%2") - .arg(selected_platform, offroad_msg); - - QString content("

" + tr("Vehicle Selector") + "


" - "

" + msg + "

"); - - if (ConfirmationDialog(content, tr("Confirm"), tr("Cancel"), true, this).exec()) { - QJsonObject json_bundle; - json_bundle["platform"] = platform_data["platform"].toString(); - json_bundle["name"] = selected_platform; - json_bundle["make"] = platform_data["make"].toString(); - json_bundle["brand"] = platform_data["brand"].toString(); - json_bundle["model"] = platform_data["model"].toString(); - json_bundle["package"] = platform_data["package"].toString(); - - QString json_bundle_str = QString::fromUtf8(QJsonDocument(json_bundle).toJson(QJsonDocument::Compact)); - - params.put("CarPlatformBundle", json_bundle_str.toStdString()); - } + setPlatform(selected_platform); } } diff --git a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.h b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.h index 6a53a5b95a..cce6460461 100644 --- a/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.h +++ b/selfdrive/ui/sunnypilot/qt/offroad/settings/vehicle/platform_selector.h @@ -14,6 +14,7 @@ class PlatformSelector : public ButtonControl { public: PlatformSelector(); + QMap loadPlatformList(); QVariant getPlatformBundle(const QString &key); public slots: @@ -21,7 +22,8 @@ public slots: private: void searchPlatforms(const QString &query); - QMap loadPlatformList(); + void setPlatform(const QString &platform = ""); + QMap platforms; Params params; bool offroad;