changeset 36:0deac2806a7b

Preset support for the rest of the mappings.
author Andrew McPherson <andrewm@eecs.qmul.ac.uk>
date Fri, 21 Mar 2014 12:53:50 +0000
parents 3f948746885a
children 239b039d3000
files Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.cpp Source/Mappings/KeyDivision/TouchkeyKeyDivisionMappingFactory.h Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.cpp Source/Mappings/MultiFingerTrigger/TouchkeyMultiFingerTriggerMappingFactory.h Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.cpp Source/Mappings/OnsetAngle/TouchkeyOnsetAngleMappingFactory.h Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.cpp Source/Mappings/PitchBend/TouchkeyPitchBendMappingFactory.h Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.cpp Source/Mappings/ReleaseAngle/TouchkeyReleaseAngleMappingFactory.h
diffstat 10 files changed, 194 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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);
--- 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;
+}
--- 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__) */
--- 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<KeyTouchFrame>* touchBuffer,
--- 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
--- 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
--- 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);
--- 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<TouchkeyReleaseAngleMapping>(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<KeyTouchFrame>* touchBuffer,
--- 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