2 changed files with 118 additions and 0 deletions
@ -0,0 +1,95 @@ |
|||||
|
#include "ofxRadioList.h" |
||||
|
|
||||
|
ofxRadioList::ofxRadioList(){} |
||||
|
|
||||
|
ofxRadioList::ofxRadioList(vector<string> &labels) |
||||
|
{ |
||||
|
setup(labels); |
||||
|
} |
||||
|
|
||||
|
ofxRadioList::~ofxRadioList() |
||||
|
{ |
||||
|
removeListeners(); |
||||
|
|
||||
|
int i; |
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
delete toggles[i]; |
||||
|
} |
||||
|
toggles.clear(); |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::setup(vector<string> &labels) |
||||
|
{ |
||||
|
// Create toggles with labels from the labels arg
|
||||
|
int i; |
||||
|
for (i = 0; i < labels.size(); i++) { |
||||
|
ofxToggle* toggle = new ofxToggle(); |
||||
|
toggle->setup(false); |
||||
|
toggle->setName(labels[i]); |
||||
|
toggle->setPosition(0, toggle->getHeight() * i); |
||||
|
toggles.push_back(toggle); |
||||
|
} |
||||
|
|
||||
|
addListeners(); |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::draw() |
||||
|
{ |
||||
|
int i; |
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
toggles[i]->draw(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::addListeners() |
||||
|
{ |
||||
|
if (toggles.size() <= 0) return; |
||||
|
|
||||
|
int i; |
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
toggles[i]->addListener(this, &ofxRadioList::onToggleClicked); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::removeListeners() |
||||
|
{ |
||||
|
if (toggles.size() <= 0) return; |
||||
|
|
||||
|
int i; |
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
toggles[i]->removeListener(this, &ofxRadioList::onToggleClicked); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::unselectAll() |
||||
|
{ |
||||
|
int i; |
||||
|
|
||||
|
removeListeners(); |
||||
|
|
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggles[i]->getParameter()); |
||||
|
*toggles[i] = false; |
||||
|
} |
||||
|
|
||||
|
addListeners(); |
||||
|
} |
||||
|
|
||||
|
void ofxRadioList::onToggleClicked(bool &toggleValue) |
||||
|
{ |
||||
|
unselectAll(); |
||||
|
|
||||
|
// Search for the actual toggle triggering the event
|
||||
|
int i; |
||||
|
for (i = 0; i < toggles.size(); i++) { |
||||
|
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggles[i]->getParameter()); |
||||
|
|
||||
|
if (&(paramPtr->get()) == &toggleValue) { |
||||
|
removeListeners(); |
||||
|
*toggles[i] = true; |
||||
|
cout << toggles[i]->getName() << endl; |
||||
|
addListeners(); |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "ofGraphics.h" |
||||
|
#include "ofxToggle.h" |
||||
|
|
||||
|
class ofxRadioList |
||||
|
{ |
||||
|
public: |
||||
|
ofxRadioList(); |
||||
|
ofxRadioList(vector<string> &labels); |
||||
|
~ofxRadioList(); |
||||
|
|
||||
|
void setup(vector<string> &labels); |
||||
|
void draw(); |
||||
|
|
||||
|
private: |
||||
|
vector<ofxToggle*> toggles; |
||||
|
|
||||
|
void addListeners(); |
||||
|
void removeListeners(); |
||||
|
void unselectAll(); |
||||
|
void onToggleClicked(bool &toggleValue); |
||||
|
}; |
Loading…
Reference in new issue