This commit is contained in:
firestar5683
2026-08-08 16:35:20 -05:00
parent 7ec6fa5c0e
commit 8e69eb32fd
5 changed files with 87 additions and 14 deletions
+43 -8
View File
@@ -62,7 +62,8 @@ INJECTED_SECTION_PARAMS = {
# Keys explicitly hidden from The Galaxy's generic settings UI.
HIDDEN_KEYS = {
"HumanAcceleration",
"DisableWideRoad",
"HideLeadMarker",
"HideSpeedLimit",
"LockDoorsTimer",
"NewLongAPI",
"ToyotaDoors",
@@ -74,6 +75,18 @@ HIDDEN_SECTION_NAMES = {"Model & Customization"}
# Keys that are boolean toggles despite ambiguous defaults in starpilot_variables.py.
FORCE_BOOL_KEYS = {"EVTuning"}
# These fields are intentionally allowed to differ from the Qt source. Galaxy
# has its own copy, nesting, and browser-only behavior for otherwise shared
# params, so regeneration must not discard those overrides.
GALAXY_OVERRIDE_FIELDS = {
"label",
"description",
"parent_key",
"is_parent_toggle",
"disabled_when_key_true",
"disabled_reason",
}
def get_param_settings_tiers():
params_path = os.path.join(REPO_ROOT, "common/params_keys.h")
@@ -105,6 +118,9 @@ def apply_settings_tiers(layout):
resolving.add(key)
parent_key = params_by_key.get(key, {}).get("parent_key")
if parent_key == "GalaxyDeveloperMode":
resolved[key] = "advanced"
return resolved[key]
own_tier = PARAM_SETTINGS_TIERS.get(key)
if parent_key:
parent_tier = resolve_tier(parent_key, resolving)
@@ -601,8 +617,14 @@ def parse_cpp_file(filename):
def merge_layouts(existing_layout, generated_layout):
existing_sections = {section["name"]: section for section in existing_layout}
generated_sections = {section["name"]: section for section in generated_layout}
existing_keys = {
param["key"]
for section in existing_layout
for param in section.get("params", [])
if "key" in param
}
merged_keys = set(existing_keys)
merged_layout = []
@@ -625,16 +647,21 @@ def merge_layouts(existing_layout, generated_layout):
for param in existing_params:
key = param["key"]
if key in generated_by_key:
merged_params.append(generated_by_key[key])
merged_param = dict(param)
for field, value in generated_by_key[key].items():
if field not in GALAXY_OVERRIDE_FIELDS and field != "settings_tier":
merged_param[field] = value
merged_params.append(merged_param)
else:
merged_params.append(param)
seen_keys.add(key)
for param in generated_params:
key = param["key"]
if key not in seen_keys:
if key not in seen_keys and key not in merged_keys:
merged_params.append(param)
seen_keys.add(key)
merged_keys.add(key)
merged_section = dict(section)
merged_section["icon"] = generated.get("icon", section.get("icon"))
@@ -648,7 +675,8 @@ def merge_layouts(existing_layout, generated_layout):
return merged_layout
def main():
def generate_layout(existing_layout=None):
generated_layout = []
for cat in CATEGORIES:
items = parse_cpp_file(cat["file"])
@@ -662,15 +690,22 @@ def main():
"icon": cat["icon"],
"params": items
})
layout = generated_layout if existing_layout is None else merge_layouts(existing_layout, generated_layout)
return apply_settings_tiers(layout)
def main():
output_path = os.path.join(REPO_ROOT, "starpilot/system/the_galaxy/assets/components/tools/device_settings_layout.json")
layout = generated_layout
existing_layout = None
if os.path.exists(output_path):
with open(output_path, 'r', encoding='utf-8') as f:
existing_layout = json.load(f)
layout = merge_layouts(existing_layout, generated_layout)
layout = apply_settings_tiers(layout)
layout = generate_layout(existing_layout)
if layout == existing_layout:
return
with open(output_path, 'w', encoding='utf-8') as f:
json.dump(layout, f, indent=2, ensure_ascii=False)
f.write("\n")
if __name__ == '__main__':
main()