diff --git a/src/common/JoyMap.cxx b/src/common/JoyMap.cxx index 10905f71a..87eed9d34 100644 --- a/src/common/JoyMap.cxx +++ b/src/common/JoyMap.cxx @@ -197,11 +197,18 @@ json JoyMap::saveMapping(const EventMode mode) const json eventMapping = json::object(); eventMapping["event"] = item.second; - eventMapping["button"] = item.first.button; - eventMapping["axis"] = item.first.axis; - eventMapping["axisDirection"] = item.first.adir; - eventMapping["hat"] = item.first.hat; - eventMapping["hatDirection"] = item.first.hdir; + + if (item.first.button != JOY_CTRL_NONE) eventMapping["button"] = item.first.button; + + if (item.first.axis != JoyAxis::NONE) { + eventMapping["axis"] = item.first.axis; + eventMapping["axisDirection"] = item.first.adir; + } + + if (item.first.hat != -1) { + eventMapping["hat"] = item.first.hat; + eventMapping["hatDirection"] = item.first.hdir; + } eventMappings.push_back(eventMapping); } @@ -215,15 +222,21 @@ int JoyMap::loadMapping(const json& eventMappings, const EventMode mode) int i = 0; for (const json& eventMapping: eventMappings) { + int button = eventMapping.contains("button") ? eventMapping.at("button").get() : JOY_CTRL_NONE; + JoyAxis axis = eventMapping.contains("axis") ? eventMapping.at("axis").get() : JoyAxis::NONE; + JoyDir axisDirection = eventMapping.contains("axis") ? eventMapping.at("axisDirection").get() : JoyDir::NONE; + int hat = eventMapping.contains("hat") ? eventMapping.at("hat").get() : -1; + JoyHatDir hatDirection = eventMapping.contains("hat") ? eventMapping.at("hatDirection").get() : JoyHatDir::CENTER; + try { add( eventMapping.at("event").get(), mode, - eventMapping.at("button").get(), - eventMapping.at("axis").get(), - eventMapping.at("axisDirection").get(), - eventMapping.at("hat").get(), - eventMapping.at("hatDirection").get() + button, + axis, + axisDirection, + hat, + hatDirection ); i++; diff --git a/src/common/jsonDefinitions.hxx b/src/common/jsonDefinitions.hxx index 047a3af22..200b2d9d0 100644 --- a/src/common/jsonDefinitions.hxx +++ b/src/common/jsonDefinitions.hxx @@ -16,7 +16,7 @@ NLOHMANN_JSON_SERIALIZE_ENUM(JoyAxis, { NLOHMANN_JSON_SERIALIZE_ENUM(JoyDir, { {JoyDir::ANALOG, "analog"}, {JoyDir::NEG, "negative"}, - {JoyDir::NONE, "none"}, + {JoyDir::NONE, nullptr}, {JoyDir::POS, "position"} })