Mercurial > hg > tweakathon2ios
diff MessageOrganiser.mm @ 18:36cdb73691da
PIMPL speed compile?
eventlogger now just saves as it goes
more refactoring
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Wed, 22 Oct 2014 15:00:14 +0100 |
parents | |
children | 5cf2b80909fc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MessageOrganiser.mm Wed Oct 22 15:00:14 2014 +0100 @@ -0,0 +1,191 @@ + +#include "MessageOrganiser.h" + +void MessageOrganiser::init(PDSynthWrapper& cs, PDSynthWrapper& ts){ + candidateSynth = cs; + targetSynth = ts; + + onlyChangeCandidateOnTrigger = true; +} +// could template for ui element type?? +void MessageOrganiser::mapButtonToAction(UIElement* control, int mappingID){ + UICallbackFunction callbackF; + callbackF = boost::bind(&MessageOrganiser::buttonPressCallback, this, _1,_2); + control->addHandler(callbackF, mappingID); + currentMapping.insert(std::pair<int,UIElement*>(mappingID,control)); +} + + +void MessageOrganiser::setControlPanel(SliderPanel* p){ // a bit specific?? + panel = p; + +}; +void MessageOrganiser::setBottomPanel(ButtonPanel * ntb){ + bottomPanel = ntb; +}; + + +void MessageOrganiser::setIconPanel(IconPanel * ip){ + presetIconPanel = ip; +} +void MessageOrganiser::setInstructionPanel(TextPanel * ip){ + instructionPanel = ip; + instructionPanel->show(); +} + + +//----------------------------------------------------------------------------- +void MessageOrganiser::hideMyPanels(){ + presetIconPanel->hide(); + instructionPanel->hide(); + bottomPanel->hide(); + panel->hide(); +} +void MessageOrganiser::showMyPanels(){ + presetIconPanel->show(); + instructionPanel->show(); + bottomPanel->show(); + panel->show(); +} + +void MessageOrganiser::triggerCandidateSound(){ + // log event + sendSynthValuesAgain(); + candidateSynth.trigger(); + eventLogger.logEvent(CANDIDATE_PLAYED); + // flash panel? + panel->flash(); +} + +void MessageOrganiser::paramChangeCallback(int mappingID, int value){ + + if(onlyChangeCandidateOnTrigger){ + candidateSynth.paramChangeCallback(mappingID, value, false); + }else{ + candidateSynth.paramChangeCallback(mappingID, value, true); + } + + vector<int> evtData; + evtData.push_back(mappingID); // or just index? + evtData.push_back(value); + + eventLogger.logEvent(CANDIDATE_PARAM_ADJUSTED, evtData); +}; + +void MessageOrganiser::sendSynthValuesAgain(){ + candidateSynth.sendAllParams(); + targetSynth.sendAllParams(); +}; + + +void MessageOrganiser::setAllSlidersToValues(vector<int> values){ + for(int i = 0; i < values.size(); i++){ + setUIToParam(i, values[i]); + } +} +// we want to set UI object +void MessageOrganiser::setUIToParam(int index, int value){ // e.g. from MIDI incoming, will handle both box and sliders... + // theXY->setValueAndScale(candidateSynth.getParamValueForID(mids[i]), candidateSynth.getParamValueForID(mids[i+1])); + UIElement* elem; + // get the element + if(panel->subElements.size() <= index){ + cout << "ERROR: index out of range for num sliders" << endl; + return; + } + elem = panel->subElements[index]; + if ( elem->getType() == SLIDER){ + ButtronSlider* theSlider = (ButtronSlider*)elem; + theSlider->setValueAndScale(value); + + }else{ + cout << "ERROR ERROR: ui type not handled by setUIToParam!" << endl; + } + +}; + + +void MessageOrganiser::mapControlToParam(UIElement* control, int mappingID){ + + UICallbackFunction callbackF; + callbackF = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2); + control->addHandler(callbackF, mappingID); + // put in our map so we can send param values to gui + currentMapping.insert(std::pair<int,UIElement*>(mappingID,control)); + cout << " Mapped control to ID: " << mappingID << "Name: " << candidateSynth.getNameForMappingID(mappingID) << endl; + control->setLabel(candidateSynth.getNameForMappingID(mappingID)); +}; + +//----------------------------------------------------------------------------- + +void MessageOrganiser::mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){ + + vector<UIElement*>::iterator elit; + vector<int> typeListLog; + int i = 0; + for(elit=elems.begin(); elit<elems.end();elit++){ + if ( (*elit)->getType() == SLIDER){ + if(i >= mids.size()){ + + cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl; + } + + ButtronSlider* theSlider = (ButtronSlider*)(*elit); + mapControlToParam((*elit), mids[i]); + theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i])); + cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl; + theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i]))); + i++; + typeListLog.push_back(int(SLIDER)); + + }else{ + cout << "ERROR ERROR: ui type not handled my mapping function !" << endl; + } + } + + eventLogger.logEvent(CONTROL_LIST,typeListLog); +}; + +void MessageOrganiser::mapXYToParams(ButtronXY* control, int mappingIDX, int mappingIDY){ + UICallbackFunction callback; + + callback = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2); + + control->addHandler(callback, mappingIDX, mappingIDY); + + // put in our map so we can send param values to gui + //currentMapping.insert(std::pair<int,UIElement*>(mappingID,control)); + + + cout << " Mapped control to XID: " << mappingIDX << "Name: " << candidateSynth.getNameForMappingID(mappingIDX) << endl; + cout << " Mapped control to YID: " << mappingIDY << "Name: " << candidateSynth.getNameForMappingID(mappingIDY) << endl; + control->setLabel(candidateSynth.getNameForMappingID(mappingIDX), candidateSynth.getNameForMappingID(mappingIDY)); + +}; + + +void MessageOrganiser::mapControlToParam(UIElement* control, string paramName){ + // get mapping ID from synth + int mappingID = candidateSynth.getMappingIDForName(paramName); + mapControlToParam(control, mappingID); + control->setLabel(paramName); +}; + +void MessageOrganiser::buttonPressCallback(int mappingID, int value){ + +}; + + +void MessageOrganiser::setSlidersToTarget(){ + // this will actually show sliders with target vals - for "memorisation" purposes mwa heh heh + // get target values + // set ui + vector<int> vals = targetSynth.getAllParamValues(); + for(int i=1; i < vals.size(); i++){ + setUIToParam(i, vals[i]); + } +} +void MessageOrganiser::setSlidersToDefault(){ + for(int i=1; i < targetSynth.getNumParams(); i++){ + setUIToParam(i, 0); + } +} \ No newline at end of file