# HG changeset patch # User Andrew McPherson # Date 1395406430 0 # Node ID 0deac2806a7b4db3b90a940601e9f4cec88d8d0d # Parent 3f948746885a722341688f3ba251ad63c51dec18 Preset support for the rest of the mappings. diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp --- a/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -131,6 +131,38 @@ setBendParameters(); } + +// ****** Preset Save/Load ****** +XmlElement* TouchkeyKeyDivisionMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "KeyDivision"); + + return preset; +} + +bool TouchkeyKeyDivisionMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + +// ***** Private Methods ***** + // Set the initial parameters for a new mapping void TouchkeyKeyDivisionMappingFactory::initializeMappingParameters(int noteNumber, TouchkeyKeyDivisionMapping *mapping) { // KLUDGE: testing Maqam tunings. Go from absolute tunings in cents to pitch bends in semitones diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h --- a/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -83,6 +83,10 @@ globalOffsetCents_ = offsetCents; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + private: // ***** Private Methods ***** void initializeMappingParameters(int noteNumber, TouchkeyKeyDivisionMapping *mapping); diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp --- a/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -23,3 +23,32 @@ */ #include "TouchkeyMultiFingerTriggerMappingFactory.h" + +// ****** Preset Save/Load ****** +XmlElement* TouchkeyMultiFingerTriggerMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "MultiFingerTrigger"); + + return preset; +} + +bool TouchkeyMultiFingerTriggerMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h --- a/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -46,6 +46,10 @@ // ***** Accessors / Modifiers ***** virtual const std::string factoryTypeName() { return "Multi-Finger\nTrigger"; } + + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); }; #endif /* defined(__TouchKeys__TouchkeyMultiFingerTriggerMappingFactory__) */ diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp --- a/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -34,6 +34,35 @@ setMidiParameters(MidiKeyboardSegment::kControlPitchWheel, -2.0, 2.0, 0.0); } +// ****** Preset Save/Load ****** +XmlElement* TouchkeyOnsetAngleMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "OnsetAngle"); + + return preset; +} + +bool TouchkeyOnsetAngleMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + // MIDI note ended: see whether the mapping was suspended and if not, execute the angle calculation void TouchkeyOnsetAngleMappingFactory::midiNoteOn(int noteNumber, bool touchIsOn, bool keyMotionActive, Node* touchBuffer, diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h --- a/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -47,6 +47,10 @@ virtual const std::string factoryTypeName() { return "Onset\nAngle"; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + // ***** State Updaters ***** // Override the MIDI note on method to process the onset angle diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp --- a/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -126,6 +126,61 @@ return new TouchkeyPitchBendMappingShortEditor(*this); } +// ****** Preset Save/Load ****** +XmlElement* TouchkeyPitchBendMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + properties.setValue("bendRangeSemitones", bendRangeSemitones_); + properties.setValue("bendThresholdSemitones", bendThresholdSemitones_); + properties.setValue("bendThresholdKeyLength", bendThresholdKeyLength_); + properties.setValue("bendMode", bendMode_); + properties.setValue("fixedModeMinEnableDistance", fixedModeMinEnableDistance_); + properties.setValue("fixedModeBufferDistance", fixedModeBufferDistance_); + properties.setValue("bendIgnoresTwoFingers", bendIgnoresTwoFingers_); + properties.setValue("bendIgnoresThreeFingers", bendIgnoresThreeFingers_); + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "PitchBend"); + + return preset; +} + +bool TouchkeyPitchBendMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + if(!properties.containsKey("bendRangeSemitones") || + !properties.containsKey("bendThresholdSemitones") || + !properties.containsKey("bendThresholdKeyLength") || + !properties.containsKey("bendMode") || + !properties.containsKey("fixedModeMinEnableDistance") || + !properties.containsKey("fixedModeBufferDistance") || + !properties.containsKey("bendIgnoresTwoFingers") || + !properties.containsKey("bendIgnoresThreeFingers")) + return false; + + bendRangeSemitones_ = properties.getDoubleValue("bendRangeSemitones"); + bendThresholdSemitones_ = properties.getDoubleValue("bendThresholdSemitones"); + bendThresholdKeyLength_ = properties.getDoubleValue("bendThresholdKeyLength"); + bendMode_ = properties.getIntValue("bendMode"); + fixedModeMinEnableDistance_ = properties.getDoubleValue("fixedModeMinEnableDistance"); + fixedModeBufferDistance_ = properties.getDoubleValue("fixedModeBufferDistance"); + bendIgnoresTwoFingers_ = properties.getBoolValue("bendIgnoresTwoFingers"); + bendIgnoresThreeFingers_ = properties.getBoolValue("bendIgnoresThreeFingers"); + + // Update MIDI information + setBendParameters(); + + return true; +} + // ***** Private Methods ***** // Set the initial parameters for a new mapping diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h --- a/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -74,6 +74,10 @@ bool hasExtendedEditor() { return false; } MappingEditorComponent* createExtendedEditor() { return nullptr; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + private: // ***** Private Methods ***** void initializeMappingParameters(int noteNumber, TouchkeyPitchBendMapping *mapping); diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp --- a/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Fri Mar 21 12:53:50 2014 +0000 @@ -31,6 +31,35 @@ TouchkeyReleaseAngleMappingFactory::TouchkeyReleaseAngleMappingFactory(PianoKeyboard &keyboard, MidiKeyboardSegment& segment) : TouchkeyBaseMappingFactory(keyboard, segment) {} +// ****** Preset Save/Load ****** +XmlElement* TouchkeyReleaseAngleMappingFactory::getPreset() { + PropertySet properties; + + storeCommonProperties(properties); + + // No properties for now + + XmlElement* preset = properties.createXml("MappingFactory"); + preset->setAttribute("type", "ReleaseAngle"); + + return preset; +} + +bool TouchkeyReleaseAngleMappingFactory::loadPreset(XmlElement const* preset) { + if(preset == 0) + return false; + + PropertySet properties; + properties.restoreFromXml(*preset); + + if(!loadCommonProperties(properties)) + return false; + + // Nothing specific to do for now + + return true; +} + // MIDI note ended: see whether the mapping was suspended and if not, execute the angle calculation void TouchkeyReleaseAngleMappingFactory::midiNoteOff(int noteNumber, bool touchIsOn, bool keyMotionActive, Node* touchBuffer, diff -r 3f948746885a -r 0deac2806a7b Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h --- a/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h Fri Mar 21 00:23:32 2014 +0000 +++ b/Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h Fri Mar 21 12:53:50 2014 +0000 @@ -46,6 +46,10 @@ // ***** Accessors / Modifiers ***** virtual const std::string factoryTypeName() { return "Release\nAngle"; } + // ****** Preset Save/Load ****** + XmlElement* getPreset(); + bool loadPreset(XmlElement const* preset); + // ***** State Updaters ***** // Override the MIDI note off method to process the release angle