annotate UI code/sliderPanel.mm @ 52:89944ab3e129 tip

fix oF linker errors ios8
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 03 Feb 2015 13:18:23 +0000
parents 96ff7b41923a
children
rev   line source
rt300@0 1 //
rt300@0 2 // sliderPanel.cpp
rt300@0 3 // tweakathlon
rt300@0 4 //
rt300@0 5 // Created by Robert Tubb on 11/02/2014.
rt300@0 6 //
rt300@0 7 //
rt300@0 8
rt300@0 9 #include "sliderPanel.h"
rt300@0 10
rt300@0 11 //-----------------------------------------------------------------------------
rt300@0 12 SliderPanel::SliderPanel(float ax,
rt300@0 13 float ay,
rt300@0 14 float awidth,
rt300@0 15 float aheight,
rt300@0 16 const UIProps& aprops,
rt300@0 17 vector<controllerType> elemList) :
rt300@0 18 UIElementContainer(ax,ay,awidth,aheight,aprops)
rt300@0 19 {
rt300@0 20 cout << "SliderPanel auto layout contructor\n";
rt300@0 21
rt300@0 22 // generateControls(elemList);// called from messageorganiser
rt300@28 23
rt300@28 24
rt300@28 25 ofVec3f ori;
rt300@28 26 ori.x = 1.;
rt300@28 27 ori.y = 0.5;
rt300@28 28
rt300@28 29 resultLight.setOrientation(ori);
rt300@28 30 resultLight.setDirectional();
rt300@28 31 resultLight.setDiffuseColor(ofColor::white);
rt300@0 32 }
rt300@27 33 //--------------------------------------------------------------------------------
rt300@0 34
rt300@27 35 void SliderPanel::showHint(bool value){
rt300@27 36 if (thisPanelType == ALL_SLIDERS){
rt300@27 37 vector<UIElement *>::iterator UIitr;
rt300@27 38 for(UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 39
rt300@27 40
rt300@27 41 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@27 42 thisSlider->showHint(value);
rt300@27 43 }
rt300@27 44 }else if(thisPanelType == LEAP6DOF){
rt300@27 45 if (subElements[0]->getType() == LEAP6D){
rt300@27 46 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@27 47
rt300@27 48 box->showHint(value);
rt300@27 49 }
rt300@27 50 }
rt300@27 51 }
rt300@27 52 //------------------------
rt300@27 53 void SliderPanel::setHintColor(ofColor c){
rt300@27 54 vector<UIElement *>::iterator UIitr;
rt300@27 55 for(UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 56 (*UIitr)->setHintColor(c);
rt300@27 57 }
rt300@27 58 }
rt300@27 59 //------------------------
rt300@27 60 void SliderPanel::setSliderColors(ofColor c){
rt300@27 61 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 62 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@27 63 thisSlider->setColor(c);
rt300@27 64 }
rt300@27 65 }
rt300@27 66 //------------------------
rt300@27 67 void SliderPanel::flash(){
rt300@27 68 // turn hilight on and off
rt300@27 69 if (!flashing){
rt300@27 70 vector<UIElement *>::iterator UIitr;
rt300@27 71 for(UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 72 (*UIitr)->setHighlight(true);
rt300@27 73 }
rt300@27 74 // set up timer
rt300@27 75 TimerCallbackFunction tcb;
rt300@27 76 tcb = boost::bind(&SliderPanel::flash, this);
rt300@27 77 timeController.scheduleEvent(tcb, 250);
rt300@27 78 flashing = true;
rt300@27 79 }else{
rt300@27 80 vector<UIElement *>::iterator UIitr;
rt300@27 81 for(UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 82 (*UIitr)->setHighlight(false);
rt300@27 83 }
rt300@27 84 flashing = false;
rt300@27 85 }
rt300@27 86
rt300@27 87 }
rt300@27 88 //------------------------
rt300@27 89 void SliderPanel::setBgColor(ofColor c){
rt300@27 90 vector<UIElement *>::iterator UIitr;
rt300@27 91 for(UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 92 (*UIitr)->setColor(c);
rt300@27 93 }
rt300@27 94 }
rt300@27 95 //------------------------
rt300@27 96 //------------------------
rt300@27 97 UIElement* SliderPanel::getSlider(int index){
rt300@27 98 if (index < subElements.size()){
rt300@27 99 return subElements[index];
rt300@27 100 }else{
rt300@27 101 cout << "ERROR: index too big for sldiers" << endl;
rt300@27 102 return NULL;
rt300@27 103 }
rt300@27 104 };
rt300@27 105 //------------------------
rt300@27 106 void SliderPanel::showValueIndicators(bool show){
rt300@27 107
rt300@27 108
rt300@27 109 if (thisPanelType == LEAP6DOF){ // yeuch
rt300@27 110 if (subElements[0]->getType() == LEAP6D){
rt300@27 111 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@27 112
rt300@27 113 box->showValueIndicator(show);
rt300@27 114 }
rt300@27 115
rt300@27 116 }else if(thisPanelType == ALL_SLIDERS){
rt300@27 117 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@27 118 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@27 119 thisSlider->showValueIndicator(show);
rt300@27 120 }
rt300@27 121 }
rt300@27 122 }
rt300@27 123 //------------------------
rt300@27 124 void SliderPanel::setHintValues(vector<int> vals){
rt300@27 125 if (thisPanelType == LEAP6DOF){ // yeuch
rt300@27 126 if (subElements[0]->getType() == LEAP6D){
rt300@27 127 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@27 128
rt300@27 129 box->setHintValues(vals);
rt300@27 130 }
rt300@27 131 }else if(thisPanelType == ALL_SLIDERS){
rt300@29 132 int i = 0;
rt300@29 133 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@29 134 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@29 135 thisSlider->setHintValue(vals[i]);
rt300@29 136 i++;
rt300@29 137 }
rt300@27 138 }
rt300@27 139 }
rt300@28 140 //------------------------
rt300@28 141 void SliderPanel::setValues(vector<int> vals){
rt300@28 142 if (thisPanelType == LEAP6DOF){ // yeuch
rt300@28 143 if (subElements[0]->getType() == LEAP6D){
rt300@28 144 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@32 145 cout << "set values" << endl;
rt300@28 146 box->setValues(vals);
rt300@28 147 }
rt300@28 148 }else if(thisPanelType == ALL_SLIDERS){
rt300@28 149 int i = 0;
rt300@28 150 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@28 151 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@31 152 thisSlider->setValueAndScale(vals[i]);
rt300@28 153 i++;
rt300@28 154 }
rt300@28 155 }
rt300@28 156 }
rt300@27 157
rt300@0 158 //-----------------------------------------------------------------------------
rt300@0 159 vector<UIElement*> SliderPanel::generateControls(vector<controllerType> elemList, controlPanelType panelType){
rt300@0 160 removeAllSubelements();
rt300@0 161 vector<controllerType>::iterator i;
rt300@0 162
rt300@0 163 // 10 cm is 520 pixels
rt300@0 164
rt300@0 165 // calc positions
rt300@0 166 int top = y + myProps.spacerSize;
rt300@0 167
rt300@0 168 float pixPerElem = width/(float)elemList.size();
rt300@0 169 if (pixPerElem < myProps.sliderWidth ){
rt300@0 170 cout << "error not enough room for sliders" << endl;
rt300@0 171 }
rt300@0 172
rt300@0 173 int n=0;
rt300@0 174 for(i=elemList.begin(); i<elemList.end();i++){
rt300@0 175 if(*i == SLIDER){
rt300@0 176 // add a slider
rt300@0 177 float c = (n + 0.5) * pixPerElem;
rt300@0 178 float l = c - myProps.sliderWidth/2;
rt300@0 179 if(n==1){
rt300@0 180 cout << "centre " << c << endl;
rt300@0 181 cout << l << endl;
rt300@0 182 }
rt300@0 183
rt300@38 184 ButtronSlider * revslider = new ButtronSlider(l , top , myProps.sliderWidth, myProps.sliderHeight,FILL, myProps);
rt300@0 185 revslider->setLabel("unassigned");
rt300@0 186 subElements.push_back(revslider);
rt300@0 187 revslider->showHint(false);
rt300@0 188 // grey out all but first
rt300@0 189 if(panelType == SEQUENTIAL && i != elemList.begin()){
rt300@0 190 revslider->setActive(false);
rt300@0 191 }
rt300@0 192
rt300@0 193 n++;
rt300@0 194
rt300@0 195 }else if(*i == XYPAD){
rt300@0 196 // add a xy
rt300@0 197 float c = (n + 0.5) * pixPerElem;
rt300@0 198 float left = c - myProps.XYsize/2;
rt300@0 199 ButtronXY * xyp = new ButtronXY(left , top , myProps);
rt300@0 200 xyp->setLabel("unassigned","unassigned");
rt300@0 201 xyp->showHint(false);
rt300@0 202 subElements.push_back(xyp);
rt300@0 203 n++;
rt300@0 204 }else if(*i == LEAP3D){
rt300@0 205 // add a threed box
rt300@0 206 float c = x+width*0.5;
rt300@0 207 float left = c - myProps.XYsize;
rt300@0 208
rt300@0 209 //Leap3DBox * l3d = new Leap3DBox(left , top+50 , myProps.XYsize*0.75,myProps.XYsize*0.75,150,50, myProps);
rt300@0 210
rt300@0 211 Leap3DBoxGL * l3d = new Leap3DBoxGL(left , top+50 , myProps.XYsize*0.75,myProps.XYsize*0.75,150,50, myProps);
rt300@0 212
rt300@0 213
rt300@0 214
rt300@0 215 subElements.push_back(l3d);
rt300@0 216 n++;
rt300@27 217 }else if(*i == LEAP6D){
rt300@27 218 // add a threed box
rt300@27 219 float c = x+width*0.5;
rt300@27 220 float left = c - myProps.XYsize;
rt300@27 221
rt300@27 222 Leap6DBox * l6d = new Leap6DBox(left , top+50 , myProps.XYsize*0.75,myProps.XYsize*0.75,150,50, myProps);
rt300@27 223
rt300@27 224
rt300@27 225 subElements.push_back(l6d);
rt300@27 226 n++;
rt300@0 227
rt300@0 228 }else{
rt300@0 229 cout << "ERROR: slider panel only handles xy pads and sliders" << endl;
rt300@0 230 }
rt300@0 231
rt300@0 232
rt300@0 233 }
rt300@27 234 thisPanelType = panelType;
rt300@0 235 autoArrangeRow(); // will set positions
rt300@0 236
rt300@0 237
rt300@0 238
rt300@0 239 return subElements;
rt300@0 240 }
rt300@27 241 //-----------------------------------------------------------------------
rt300@27 242 void SliderPanel::setAndShowHint(vector<int> values, ofImage* texture){
rt300@28 243 animating = false;
rt300@27 244 setHintValues(values);
rt300@27 245 setHintTexture(texture);
rt300@27 246 showHint(true);
rt300@0 247
rt300@27 248 }
rt300@31 249 void SliderPanel::setHintNoShow(vector<int> values, ofImage* texture){
rt300@31 250 animating = false;
rt300@31 251 setHintValues(values);
rt300@31 252 setHintTexture(texture);
rt300@31 253 showHint(false);
rt300@31 254
rt300@31 255 }
rt300@27 256 //------------------------------------------
rt300@27 257 void SliderPanel::setHintTexture(ofImage* texture){
rt300@27 258 if (thisPanelType == LEAP6DOF){ // yeuch
rt300@27 259 if (subElements[0]->getType() == LEAP6D){
rt300@27 260 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@27 261
rt300@27 262 box->setHintTexture(texture);
rt300@27 263 }
rt300@27 264
rt300@37 265 }else if(thisPanelType == ALL_SLIDERS){
rt300@37 266
rt300@37 267 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@37 268 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@37 269 thisSlider->setHandTexture(texture);
rt300@37 270 }
rt300@27 271 }
rt300@27 272 }
rt300@28 273 //------------------------------------------
rt300@28 274 void SliderPanel::setIndicatorTexture(ofImage* texture){
rt300@28 275 if (thisPanelType == LEAP6DOF){ // yeuch
rt300@28 276 if (subElements[0]->getType() == LEAP6D){
rt300@28 277 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@28 278
rt300@36 279 box->setHandTexture(texture);
rt300@28 280 }
rt300@28 281
rt300@37 282 }else if(thisPanelType == ALL_SLIDERS){
rt300@37 283
rt300@37 284 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@37 285 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@37 286 thisSlider->setHandTexture(texture);
rt300@37 287 }
rt300@28 288 }
rt300@28 289 }
rt300@28 290 //---------------------------------------------
rt300@28 291 void SliderPanel::animateToNewHintValues(vector<int> newTargetValues, float timeToTake, ofImage* newTexture){
rt300@28 292 animating = true;
rt300@28 293
rt300@28 294 if(thisPanelType == LEAP6DOF){
rt300@28 295 if (subElements[0]->getType() == LEAP6D){
rt300@28 296 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@28 297
rt300@28 298 box->animateHintToNewValues(newTargetValues, timeToTake, newTexture);
rt300@28 299 }
rt300@29 300 }else if(thisPanelType == ALL_SLIDERS){
rt300@29 301 int i = 0;
rt300@29 302 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@29 303 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@29 304
rt300@29 305 thisSlider->animateHintToNewValue(newTargetValues[i], timeToTake);
rt300@29 306 i++;
rt300@29 307 }
rt300@28 308 }
rt300@28 309
rt300@28 310 }
rt300@28 311 //---------------------------------------------
rt300@31 312 void SliderPanel::animateToNewValues(vector<int> newTargetValues, float timeToTake){
rt300@31 313 animating = true;
rt300@31 314
rt300@31 315 if(thisPanelType == LEAP6DOF){
rt300@31 316 if (subElements[0]->getType() == LEAP6D){
rt300@31 317 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@31 318
rt300@31 319 box->animateToNewValues(newTargetValues, timeToTake);
rt300@31 320 }
rt300@31 321 }else if(thisPanelType == ALL_SLIDERS){
rt300@31 322 int i = 0;
rt300@31 323 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@31 324 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@31 325
rt300@31 326 thisSlider->animateToNewValue(newTargetValues[i], timeToTake);
rt300@31 327 i++;
rt300@31 328 }
rt300@31 329 }
rt300@31 330
rt300@31 331 }
rt300@31 332 //---------------------------------------------
rt300@27 333
rt300@28 334 void SliderPanel::update(){
rt300@28 335 if(!animating) return;
rt300@28 336 if(thisPanelType == LEAP6DOF){
rt300@28 337 if (subElements[0]->getType() == LEAP6D){
rt300@28 338 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@28 339
rt300@28 340 box->update();
rt300@28 341 }
rt300@29 342 }else if(thisPanelType == ALL_SLIDERS){
rt300@29 343 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@29 344 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@29 345 thisSlider->update();
rt300@29 346
rt300@29 347 }
rt300@28 348 }
rt300@28 349
rt300@28 350 }
rt300@28 351
rt300@28 352
rt300@28 353 void SliderPanel::flashResultLight(ofColor c, int howLong){
rt300@28 354
rt300@28 355 resultLight.setDiffuseColor(c);
rt300@28 356 resultLight.enable();
rt300@28 357 // set up timer
rt300@28 358 TimerCallbackFunction tcb;
rt300@28 359 tcb = boost::bind(&SliderPanel::turnOffResultLight, this);
rt300@28 360 timeController.scheduleEvent(tcb, howLong);
rt300@31 361 if(thisPanelType == LEAP6DOF){
rt300@31 362 if (subElements[0]->getType() == LEAP6D){
rt300@31 363 Leap6DBox * box = (Leap6DBox*)subElements[0];
rt300@31 364
rt300@39 365 box->flashScore(5, c,howLong);
rt300@31 366 }
rt300@31 367 }else if(thisPanelType == ALL_SLIDERS){
rt300@37 368 for(auto UIitr = subElements.begin(); UIitr < subElements.end(); UIitr++){
rt300@37 369 ButtronSlider* thisSlider = (ButtronSlider *)(*UIitr);
rt300@39 370 thisSlider->flashScore(5, c,howLong);
rt300@37 371
rt300@37 372 }
rt300@31 373 }
rt300@31 374
rt300@28 375 }
rt300@28 376 void SliderPanel::turnOffResultLight(){
rt300@28 377
rt300@28 378 resultLight.setDiffuseColor(ofColor::white);
rt300@28 379 resultLight.disable();
rt300@28 380 }
rt300@37 381
rt300@28 382 //---------------------------------------------
rt300@28 383 //---------------------------------------------
rt300@28 384 //---------------------------------------------
rt300@28 385 //---------------------------------------------
rt300@28 386