annotate MessageOrganiser.mm @ 22:8124f46eda65

pretty much working. ugly though.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Thu, 23 Oct 2014 18:15:46 +0100
parents 5cf2b80909fc
children b339acf124df
rev   line source
rt300@18 1
rt300@18 2 #include "MessageOrganiser.h"
rt300@18 3
rt300@18 4 void MessageOrganiser::init(PDSynthWrapper& cs, PDSynthWrapper& ts){
rt300@18 5 candidateSynth = cs;
rt300@18 6 targetSynth = ts;
rt300@18 7
rt300@18 8 onlyChangeCandidateOnTrigger = true;
rt300@18 9 }
rt300@18 10 // could template for ui element type??
rt300@18 11 void MessageOrganiser::mapButtonToAction(UIElement* control, int mappingID){
rt300@18 12 UICallbackFunction callbackF;
rt300@18 13 callbackF = boost::bind(&MessageOrganiser::buttonPressCallback, this, _1,_2);
rt300@18 14 control->addHandler(callbackF, mappingID);
rt300@18 15 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 16 }
rt300@18 17
rt300@18 18
rt300@18 19 void MessageOrganiser::setControlPanel(SliderPanel* p){ // a bit specific??
rt300@18 20 panel = p;
rt300@18 21
rt300@18 22 };
rt300@18 23 void MessageOrganiser::setBottomPanel(ButtonPanel * ntb){
rt300@18 24 bottomPanel = ntb;
rt300@18 25 };
rt300@18 26
rt300@18 27
rt300@18 28 void MessageOrganiser::setIconPanel(IconPanel * ip){
rt300@18 29 presetIconPanel = ip;
rt300@18 30 }
rt300@18 31 void MessageOrganiser::setInstructionPanel(TextPanel * ip){
rt300@18 32 instructionPanel = ip;
rt300@18 33 instructionPanel->show();
rt300@18 34 }
rt300@18 35
rt300@18 36
rt300@18 37 //-----------------------------------------------------------------------------
rt300@18 38 void MessageOrganiser::hideMyPanels(){
rt300@18 39 presetIconPanel->hide();
rt300@18 40 instructionPanel->hide();
rt300@18 41 bottomPanel->hide();
rt300@18 42 panel->hide();
rt300@18 43 }
rt300@18 44 void MessageOrganiser::showMyPanels(){
rt300@18 45 presetIconPanel->show();
rt300@18 46 instructionPanel->show();
rt300@18 47 bottomPanel->show();
rt300@18 48 panel->show();
rt300@18 49 }
rt300@18 50
rt300@18 51 void MessageOrganiser::triggerCandidateSound(){
rt300@18 52 // log event
rt300@18 53 sendSynthValuesAgain();
rt300@18 54 candidateSynth.trigger();
rt300@18 55 eventLogger.logEvent(CANDIDATE_PLAYED);
rt300@18 56 // flash panel?
rt300@18 57 panel->flash();
rt300@18 58 }
rt300@18 59
rt300@18 60 void MessageOrganiser::paramChangeCallback(int mappingID, int value){
rt300@18 61
rt300@18 62 if(onlyChangeCandidateOnTrigger){
rt300@18 63 candidateSynth.paramChangeCallback(mappingID, value, false);
rt300@18 64 }else{
rt300@18 65 candidateSynth.paramChangeCallback(mappingID, value, true);
rt300@18 66 }
rt300@18 67
rt300@18 68 vector<int> evtData;
rt300@18 69 evtData.push_back(mappingID); // or just index?
rt300@18 70 evtData.push_back(value);
rt300@18 71
rt300@18 72 eventLogger.logEvent(CANDIDATE_PARAM_ADJUSTED, evtData);
rt300@18 73 };
rt300@18 74
rt300@18 75 void MessageOrganiser::sendSynthValuesAgain(){
rt300@18 76 candidateSynth.sendAllParams();
rt300@18 77 targetSynth.sendAllParams();
rt300@18 78 };
rt300@18 79
rt300@18 80
rt300@18 81 void MessageOrganiser::setAllSlidersToValues(vector<int> values){
rt300@18 82 for(int i = 0; i < values.size(); i++){
rt300@18 83 setUIToParam(i, values[i]);
rt300@18 84 }
rt300@18 85 }
rt300@18 86 // we want to set UI object
rt300@18 87 void MessageOrganiser::setUIToParam(int index, int value){ // e.g. from MIDI incoming, will handle both box and sliders...
rt300@18 88 // theXY->setValueAndScale(candidateSynth.getParamValueForID(mids[i]), candidateSynth.getParamValueForID(mids[i+1]));
rt300@18 89 UIElement* elem;
rt300@18 90 // get the element
rt300@18 91 if(panel->subElements.size() <= index){
rt300@18 92 cout << "ERROR: index out of range for num sliders" << endl;
rt300@18 93 return;
rt300@18 94 }
rt300@18 95 elem = panel->subElements[index];
rt300@18 96 if ( elem->getType() == SLIDER){
rt300@18 97 ButtronSlider* theSlider = (ButtronSlider*)elem;
rt300@18 98 theSlider->setValueAndScale(value);
rt300@18 99
rt300@18 100 }else{
rt300@18 101 cout << "ERROR ERROR: ui type not handled by setUIToParam!" << endl;
rt300@18 102 }
rt300@18 103
rt300@18 104 };
rt300@18 105
rt300@18 106
rt300@18 107 void MessageOrganiser::mapControlToParam(UIElement* control, int mappingID){
rt300@18 108
rt300@18 109 UICallbackFunction callbackF;
rt300@18 110 callbackF = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 111 control->addHandler(callbackF, mappingID);
rt300@18 112 // put in our map so we can send param values to gui
rt300@18 113 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 114 cout << " Mapped control to ID: " << mappingID << "Name: " << candidateSynth.getNameForMappingID(mappingID) << endl;
rt300@18 115 control->setLabel(candidateSynth.getNameForMappingID(mappingID));
rt300@18 116 };
rt300@18 117
rt300@18 118 //-----------------------------------------------------------------------------
rt300@18 119
rt300@18 120 void MessageOrganiser::mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){
rt300@18 121
rt300@18 122 vector<UIElement*>::iterator elit;
rt300@18 123 vector<int> typeListLog;
rt300@18 124 int i = 0;
rt300@18 125 for(elit=elems.begin(); elit<elems.end();elit++){
rt300@18 126 if ( (*elit)->getType() == SLIDER){
rt300@18 127 if(i >= mids.size()){
rt300@18 128
rt300@18 129 cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl;
rt300@18 130 }
rt300@18 131
rt300@18 132 ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@18 133 mapControlToParam((*elit), mids[i]);
rt300@18 134 theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i]));
rt300@18 135 cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl;
rt300@18 136 theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])));
rt300@18 137 i++;
rt300@18 138 typeListLog.push_back(int(SLIDER));
rt300@18 139
rt300@18 140 }else{
rt300@18 141 cout << "ERROR ERROR: ui type not handled my mapping function !" << endl;
rt300@18 142 }
rt300@18 143 }
rt300@18 144
rt300@18 145 eventLogger.logEvent(CONTROL_LIST,typeListLog);
rt300@18 146 };
rt300@18 147
rt300@18 148 void MessageOrganiser::mapXYToParams(ButtronXY* control, int mappingIDX, int mappingIDY){
rt300@18 149 UICallbackFunction callback;
rt300@18 150
rt300@18 151 callback = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 152
rt300@18 153 control->addHandler(callback, mappingIDX, mappingIDY);
rt300@18 154
rt300@18 155 // put in our map so we can send param values to gui
rt300@18 156 //currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 157
rt300@18 158
rt300@18 159 cout << " Mapped control to XID: " << mappingIDX << "Name: " << candidateSynth.getNameForMappingID(mappingIDX) << endl;
rt300@18 160 cout << " Mapped control to YID: " << mappingIDY << "Name: " << candidateSynth.getNameForMappingID(mappingIDY) << endl;
rt300@18 161 control->setLabel(candidateSynth.getNameForMappingID(mappingIDX), candidateSynth.getNameForMappingID(mappingIDY));
rt300@18 162
rt300@18 163 };
rt300@18 164
rt300@18 165
rt300@18 166 void MessageOrganiser::mapControlToParam(UIElement* control, string paramName){
rt300@18 167 // get mapping ID from synth
rt300@18 168 int mappingID = candidateSynth.getMappingIDForName(paramName);
rt300@18 169 mapControlToParam(control, mappingID);
rt300@18 170 control->setLabel(paramName);
rt300@18 171 };
rt300@18 172
rt300@18 173 void MessageOrganiser::buttonPressCallback(int mappingID, int value){
rt300@18 174
rt300@18 175 };
rt300@18 176
rt300@18 177
rt300@18 178 void MessageOrganiser::setSlidersToTarget(){
rt300@18 179 // this will actually show sliders with target vals - for "memorisation" purposes mwa heh heh
rt300@18 180 // get target values
rt300@18 181 // set ui
rt300@18 182 vector<int> vals = targetSynth.getAllParamValues();
rt300@18 183 for(int i=1; i < vals.size(); i++){
rt300@18 184 setUIToParam(i, vals[i]);
rt300@18 185 }
rt300@18 186 }
rt300@21 187 void MessageOrganiser::showTargetAsHints(){
rt300@21 188 // int i = 0;
rt300@21 189 // vector<int> vals = targetSynth.getAllParamValues();
rt300@21 190 // for(auto elit=elems.begin(); elit<elems.end();elit++){
rt300@21 191 // ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@21 192 // theSlider->setHintValue(vals[i]);
rt300@21 193 // i++;
rt300@21 194 // }
rt300@21 195 }
rt300@18 196 void MessageOrganiser::setSlidersToDefault(){
rt300@22 197 for(int i=1; i < candidateSynth.getNumParams(); i++){
rt300@18 198 setUIToParam(i, 0);
rt300@22 199
rt300@18 200 }
rt300@22 201 }
rt300@22 202 void MessageOrganiser::setCandidateAndSlidersToRandom(){
rt300@22 203 vector<int> rands;
rt300@22 204 for(int i = 0; i < candidateSynth.getNumParams(); i++){
rt300@22 205
rt300@22 206 rands.push_back(rand() % 127);
rt300@22 207 }
rt300@22 208
rt300@22 209 setAllSlidersToValues(rands);
rt300@22 210 candidateSynth.setAllParams(rands);
rt300@22 211
rt300@18 212 }