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 } |