annotate MessageOrganiser.mm @ 28:953db6518738

leap version more or less there, needs btter results feedback but thats detail. "no movement" bit is stupid cos peopel can move their hand. light flash not work.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Thu, 30 Oct 2014 18:35:00 +0000
parents 27cdf475aa4b
children a677c027e3a0
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@27 10
rt300@27 11
rt300@27 12 void MessageOrganiser::setupDefaultMapping(controlPanelType whichInterfaceAreWeUsing){
rt300@27 13 vector<int> mappingIDsForChangeableParams = getMappingIDsFromSynths();
rt300@27 14 vector<controllerType> elemList;
rt300@27 15
rt300@27 16 if (whichInterfaceAreWeUsing == ALL_SLIDERS){
rt300@27 17
rt300@27 18 for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
rt300@27 19 elemList.push_back(SLIDER);
rt300@27 20
rt300@27 21 }
rt300@27 22 }else if (whichInterfaceAreWeUsing == LEAP6DOF){
rt300@27 23 elemList.push_back(LEAP6D);
rt300@27 24 }
rt300@27 25 vector<UIElement*> UIElemHandles = controlPanel->generateControls(elemList, whichInterfaceAreWeUsing);
rt300@27 26
rt300@27 27 mapSlidersToParams(UIElemHandles, mappingIDsForChangeableParams);
rt300@27 28
rt300@27 29 }
rt300@27 30
rt300@27 31
rt300@27 32 //----------------------------------------------------------------------------------------
rt300@27 33 vector<int> MessageOrganiser::getMappingIDsFromSynths(){
rt300@27 34 vector<int> index;
rt300@27 35 for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
rt300@27 36 index.push_back(i);
rt300@27 37 }
rt300@27 38 vector<int> mids = candidateSynth.getMappingIDForIndices(index);
rt300@27 39
rt300@27 40 return mids;
rt300@27 41 }
rt300@18 42 // could template for ui element type??
rt300@18 43 void MessageOrganiser::mapButtonToAction(UIElement* control, int mappingID){
rt300@18 44 UICallbackFunction callbackF;
rt300@18 45 callbackF = boost::bind(&MessageOrganiser::buttonPressCallback, this, _1,_2);
rt300@18 46 control->addHandler(callbackF, mappingID);
rt300@18 47 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 48 }
rt300@18 49
rt300@18 50
rt300@18 51 void MessageOrganiser::setControlPanel(SliderPanel* p){ // a bit specific??
rt300@27 52 controlPanel = p;
rt300@18 53
rt300@18 54 };
rt300@18 55 void MessageOrganiser::setBottomPanel(ButtonPanel * ntb){
rt300@18 56 bottomPanel = ntb;
rt300@18 57 };
rt300@18 58
rt300@18 59
rt300@18 60 void MessageOrganiser::setIconPanel(IconPanel * ip){
rt300@18 61 presetIconPanel = ip;
rt300@18 62 }
rt300@27 63
rt300@18 64 void MessageOrganiser::setInstructionPanel(TextPanel * ip){
rt300@18 65 instructionPanel = ip;
rt300@18 66 instructionPanel->show();
rt300@18 67 }
rt300@18 68
rt300@18 69
rt300@18 70 //-----------------------------------------------------------------------------
rt300@18 71 void MessageOrganiser::hideMyPanels(){
rt300@18 72 presetIconPanel->hide();
rt300@18 73 instructionPanel->hide();
rt300@18 74 bottomPanel->hide();
rt300@27 75 controlPanel->hide();
rt300@18 76 }
rt300@18 77 void MessageOrganiser::showMyPanels(){
rt300@18 78 presetIconPanel->show();
rt300@18 79 instructionPanel->show();
rt300@18 80 bottomPanel->show();
rt300@27 81 controlPanel->show();
rt300@18 82 }
rt300@18 83
rt300@18 84 void MessageOrganiser::triggerCandidateSound(){
rt300@18 85 // log event
rt300@18 86 sendSynthValuesAgain();
rt300@18 87 candidateSynth.trigger();
rt300@18 88 eventLogger.logEvent(CANDIDATE_PLAYED);
rt300@18 89 // flash panel?
rt300@27 90 controlPanel->flash();
rt300@18 91 }
rt300@18 92
rt300@18 93 void MessageOrganiser::paramChangeCallback(int mappingID, int value){
rt300@18 94
rt300@18 95 if(onlyChangeCandidateOnTrigger){
rt300@18 96 candidateSynth.paramChangeCallback(mappingID, value, false);
rt300@18 97 }else{
rt300@18 98 candidateSynth.paramChangeCallback(mappingID, value, true);
rt300@18 99 }
rt300@18 100
rt300@18 101 vector<int> evtData;
rt300@18 102 evtData.push_back(mappingID); // or just index?
rt300@18 103 evtData.push_back(value);
rt300@18 104
rt300@18 105 eventLogger.logEvent(CANDIDATE_PARAM_ADJUSTED, evtData);
rt300@18 106 };
rt300@18 107
rt300@18 108 void MessageOrganiser::sendSynthValuesAgain(){
rt300@18 109 candidateSynth.sendAllParams();
rt300@18 110 targetSynth.sendAllParams();
rt300@18 111 };
rt300@18 112
rt300@18 113
rt300@18 114 void MessageOrganiser::setAllSlidersToValues(vector<int> values){
rt300@28 115 controlPanel->setValues(values);
rt300@18 116 }
rt300@18 117 // we want to set UI object
rt300@28 118 void MessageOrganiser::setUIToParam(int index, int value){
rt300@28 119
rt300@28 120 if(controlPanel->getPanelType() == ALL_SLIDERS){
rt300@28 121
rt300@28 122 UIElement* elem;
rt300@28 123 // get the element
rt300@28 124 if(controlPanel->subElements.size() <= index){
rt300@28 125 cout << "ERROR: index out of range for num sliders" << endl;
rt300@28 126 return;
rt300@28 127 }
rt300@28 128 elem = controlPanel->subElements[index];
rt300@28 129 if ( elem->getType() == SLIDER){
rt300@28 130 ButtronSlider* theSlider = (ButtronSlider*)elem;
rt300@28 131 theSlider->setValueAndScale(value);
rt300@28 132
rt300@28 133 }
rt300@28 134 }else if (controlPanel->getPanelType() == LEAP6DOF){
rt300@28 135 Leap6DBox* box = (Leap6DBox*)controlPanel->subElements[0];
rt300@28 136 box->setValueAndScale(index,value);
rt300@28 137
rt300@18 138 }
rt300@28 139
rt300@18 140 };
rt300@18 141
rt300@18 142
rt300@18 143 void MessageOrganiser::mapControlToParam(UIElement* control, int mappingID){
rt300@18 144
rt300@18 145 UICallbackFunction callbackF;
rt300@18 146 callbackF = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 147 control->addHandler(callbackF, mappingID);
rt300@18 148 // put in our map so we can send param values to gui
rt300@18 149 currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 150 cout << " Mapped control to ID: " << mappingID << "Name: " << candidateSynth.getNameForMappingID(mappingID) << endl;
rt300@18 151 control->setLabel(candidateSynth.getNameForMappingID(mappingID));
rt300@18 152 };
rt300@18 153
rt300@18 154 //-----------------------------------------------------------------------------
rt300@18 155
rt300@18 156 void MessageOrganiser::mapSlidersToParams(vector<UIElement*> elems, vector<int> mids){
rt300@18 157
rt300@18 158 vector<UIElement*>::iterator elit;
rt300@18 159 vector<int> typeListLog;
rt300@18 160 int i = 0;
rt300@18 161 for(elit=elems.begin(); elit<elems.end();elit++){
rt300@18 162 if ( (*elit)->getType() == SLIDER){
rt300@18 163 if(i >= mids.size()){
rt300@18 164
rt300@18 165 cout << "ERROR ERROR: too many controls for mapping IDs: " << mids.size() << endl;
rt300@18 166 }
rt300@18 167
rt300@18 168 ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@18 169 mapControlToParam((*elit), mids[i]);
rt300@18 170 theSlider->setValueAndScale(candidateSynth.getParamValueForID(mids[i]));
rt300@18 171 cout << "Hint Value " << targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])) << endl;
rt300@18 172 theSlider->setHintValue(targetSynth.getParamValueFromName(candidateSynth.getNameForMappingID(mids[i])));
rt300@18 173 i++;
rt300@18 174 typeListLog.push_back(int(SLIDER));
rt300@18 175
rt300@18 176 }else{
rt300@18 177 cout << "ERROR ERROR: ui type not handled my mapping function !" << endl;
rt300@18 178 }
rt300@18 179 }
rt300@18 180
rt300@18 181 eventLogger.logEvent(CONTROL_LIST,typeListLog);
rt300@18 182 };
rt300@18 183
rt300@18 184 void MessageOrganiser::mapXYToParams(ButtronXY* control, int mappingIDX, int mappingIDY){
rt300@18 185 UICallbackFunction callback;
rt300@18 186
rt300@18 187 callback = boost::bind(&MessageOrganiser::paramChangeCallback, this, _1,_2);
rt300@18 188
rt300@18 189 control->addHandler(callback, mappingIDX, mappingIDY);
rt300@18 190
rt300@18 191 // put in our map so we can send param values to gui
rt300@18 192 //currentMapping.insert(std::pair<int,UIElement*>(mappingID,control));
rt300@18 193
rt300@18 194
rt300@18 195 cout << " Mapped control to XID: " << mappingIDX << "Name: " << candidateSynth.getNameForMappingID(mappingIDX) << endl;
rt300@18 196 cout << " Mapped control to YID: " << mappingIDY << "Name: " << candidateSynth.getNameForMappingID(mappingIDY) << endl;
rt300@18 197 control->setLabel(candidateSynth.getNameForMappingID(mappingIDX), candidateSynth.getNameForMappingID(mappingIDY));
rt300@18 198
rt300@18 199 };
rt300@18 200
rt300@18 201
rt300@18 202 void MessageOrganiser::mapControlToParam(UIElement* control, string paramName){
rt300@18 203 // get mapping ID from synth
rt300@18 204 int mappingID = candidateSynth.getMappingIDForName(paramName);
rt300@18 205 mapControlToParam(control, mappingID);
rt300@18 206 control->setLabel(paramName);
rt300@18 207 };
rt300@18 208
rt300@18 209 void MessageOrganiser::buttonPressCallback(int mappingID, int value){
rt300@18 210
rt300@18 211 };
rt300@18 212
rt300@18 213
rt300@18 214 void MessageOrganiser::setSlidersToTarget(){
rt300@18 215 // this will actually show sliders with target vals - for "memorisation" purposes mwa heh heh
rt300@18 216 // get target values
rt300@18 217 // set ui
rt300@18 218 vector<int> vals = targetSynth.getAllParamValues();
rt300@18 219 for(int i=1; i < vals.size(); i++){
rt300@18 220 setUIToParam(i, vals[i]);
rt300@18 221 }
rt300@18 222 }
rt300@21 223 void MessageOrganiser::showTargetAsHints(){
rt300@21 224 // int i = 0;
rt300@21 225 // vector<int> vals = targetSynth.getAllParamValues();
rt300@21 226 // for(auto elit=elems.begin(); elit<elems.end();elit++){
rt300@21 227 // ButtronSlider* theSlider = (ButtronSlider*)(*elit);
rt300@21 228 // theSlider->setHintValue(vals[i]);
rt300@21 229 // i++;
rt300@21 230 // }
rt300@21 231 }
rt300@18 232 void MessageOrganiser::setSlidersToDefault(){
rt300@22 233 for(int i=1; i < candidateSynth.getNumParams(); i++){
rt300@18 234 setUIToParam(i, 0);
rt300@22 235
rt300@18 236 }
rt300@22 237 }
rt300@22 238 void MessageOrganiser::setCandidateAndSlidersToRandom(){
rt300@22 239 vector<int> rands;
rt300@22 240 for(int i = 0; i < candidateSynth.getNumParams(); i++){
rt300@22 241
rt300@22 242 rands.push_back(rand() % 127);
rt300@22 243 }
rt300@22 244
rt300@22 245 setAllSlidersToValues(rands);
rt300@22 246 candidateSynth.setAllParams(rands);
rt300@22 247
rt300@18 248 }