void CButtonMapXml::SerializePrimitive(TiXmlElement* pElement, const ADDON::DriverPrimitive& primitive) { std::string strPrimitive = ButtonMapTranslator::ToString(primitive); if (!strPrimitive.empty()) { switch (primitive.Type()) { case JOYSTICK_DRIVER_PRIMITIVE_TYPE_BUTTON: { pElement->SetAttribute(BUTTONMAP_XML_ATTR_FEATURE_BUTTON, strPrimitive); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION: { pElement->SetAttribute(BUTTONMAP_XML_ATTR_FEATURE_HAT, strPrimitive); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS: { pElement->SetAttribute(BUTTONMAP_XML_ATTR_FEATURE_AXIS, strPrimitive); break; } default: break; } } }
CDriverPrimitive CPeripheralAddonTranslator::TranslatePrimitive(const ADDON::DriverPrimitive& primitive) { CDriverPrimitive retVal; switch (primitive.Type()) { case JOYSTICK_DRIVER_PRIMITIVE_TYPE_BUTTON: { retVal = CDriverPrimitive(PRIMITIVE_TYPE::BUTTON, primitive.DriverIndex()); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION: { retVal = CDriverPrimitive(primitive.DriverIndex(), TranslateHatDirection(primitive.HatDirection())); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS: { retVal = CDriverPrimitive(primitive.DriverIndex(), primitive.Center(), TranslateSemiAxisDirection(primitive.SemiAxisDirection()), primitive.Range()); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOTOR: { retVal = CDriverPrimitive(PRIMITIVE_TYPE::MOTOR, primitive.DriverIndex()); break; } default: break; } return retVal; }
std::string ButtonMapTranslator::ToString(const ADDON::DriverPrimitive& primitive) { std::stringstream strPrimitive; switch (primitive.Type()) { case JOYSTICK_DRIVER_PRIMITIVE_TYPE_BUTTON: { strPrimitive << primitive.DriverIndex(); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION: { strPrimitive << HAT_CHAR; strPrimitive << primitive.DriverIndex(); strPrimitive << JoystickTranslator::TranslateHatDir(primitive.HatDirection()); break; } case JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS: { const char* dir = JoystickTranslator::TranslateSemiAxisDir(primitive.SemiAxisDirection()); if (*dir != '\0') { strPrimitive << dir; strPrimitive << primitive.DriverIndex(); } break; } default: break; } return strPrimitive.str(); }
bool CButtonMapXml::SerializePrimitiveTag(TiXmlElement* pElement, const ADDON::DriverPrimitive& primitive, const char* tagName) { if (primitive.Type() != JOYSTICK_DRIVER_PRIMITIVE_TYPE_UNKNOWN) { if (pElement == NULL) return false; TiXmlElement primitiveElement(tagName); TiXmlNode* primitiveNode = pElement->InsertEndChild(primitiveElement); if (primitiveNode == NULL) return false; TiXmlElement* primitiveElem = primitiveNode->ToElement(); if (primitiveElem == NULL) return false; SerializePrimitive(primitiveElem, primitive); } return true; }
ADDON::DriverPrimitive CPeripheralAddonTranslator::Opposite(const ADDON::DriverPrimitive& primitive) { return ADDON::DriverPrimitive(primitive.DriverIndex(), primitive.Center() * -1, primitive.SemiAxisDirection() * -1, primitive.Range()); }