Browse Source

Add ofxGuiGroup as the container for toggles

Add event that notifies its listeners about selected radio button/toggle
master
Krisjanis Rijnieks 11 years ago
parent
commit
022d31de5d
  1. 74
      src/ui/ofxRadioList.cpp
  2. 15
      src/ui/ofxRadioList.h

74
src/ui/ofxRadioList.cpp

@ -9,13 +9,12 @@ ofxRadioList::ofxRadioList(vector<string> &labels)
ofxRadioList::~ofxRadioList() ofxRadioList::~ofxRadioList()
{ {
removeListeners();
int i; int i;
for (i = 0; i < toggles.size(); i++) { for (i = 0; i < guiGroup.getNumControls(); i++) {
delete toggles[i]; ofxToggle* toggle = static_cast<ofxToggle*>(guiGroup.getControl(i));
toggle->removeListener(this, &ofxRadioList::onToggleClicked);
} }
toggles.clear();
} }
void ofxRadioList::setup(vector<string> &labels) void ofxRadioList::setup(vector<string> &labels)
@ -26,53 +25,51 @@ void ofxRadioList::setup(vector<string> &labels)
ofxToggle* toggle = new ofxToggle(); ofxToggle* toggle = new ofxToggle();
toggle->setup(false); toggle->setup(false);
toggle->setName(labels[i]); toggle->setName(labels[i]);
toggle->setPosition(0, toggle->getHeight() * i); toggle->addListener(this, &ofxRadioList::onToggleClicked);
toggles.push_back(toggle); guiGroup.add(toggle);
} }
addListeners();
} }
void ofxRadioList::draw() void ofxRadioList::draw()
{ {
int i; guiGroup.draw();
for (i = 0; i < toggles.size(); i++) {
toggles[i]->draw();
}
} }
void ofxRadioList::addListeners() void ofxRadioList::setPosition(ofPoint p)
{ {
if (toggles.size() <= 0) return; guiGroup.setPosition(p);
int i;
for (i = 0; i < toggles.size(); i++) {
toggles[i]->addListener(this, &ofxRadioList::onToggleClicked);
} }
void ofxRadioList::setPosition(float x, float y)
{
guiGroup.setPosition(x, y);
} }
void ofxRadioList::removeListeners() ofPoint ofxRadioList::getPosition()
{ {
if (toggles.size() <= 0) return; return guiGroup.getPosition();
}
int i; float ofxRadioList::getWidth()
for (i = 0; i < toggles.size(); i++) { {
toggles[i]->removeListener(this, &ofxRadioList::onToggleClicked); return guiGroup.getWidth();
} }
float ofxRadioList::getHeight()
{
return guiGroup.getHeight();
} }
void ofxRadioList::unselectAll() void ofxRadioList::unselectAll()
{ {
int i; int i;
for (i = 0; i < guiGroup.getNumControls(); i++) {
removeListeners(); ofxToggle* toggle = static_cast<ofxToggle*>(guiGroup.getControl(i));
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggle->getParameter());
for (i = 0; i < toggles.size(); i++) { toggle->removeListener(this, &ofxRadioList::onToggleClicked);
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggles[i]->getParameter()); *toggle = false;
*toggles[i] = false; toggle->addListener(this, &ofxRadioList::onToggleClicked);
} }
addListeners();
} }
void ofxRadioList::onToggleClicked(bool &toggleValue) void ofxRadioList::onToggleClicked(bool &toggleValue)
@ -81,14 +78,17 @@ void ofxRadioList::onToggleClicked(bool &toggleValue)
// Search for the actual toggle triggering the event // Search for the actual toggle triggering the event
int i; int i;
for (i = 0; i < toggles.size(); i++) { for (i = 0; i < guiGroup.getNumControls(); i++) {
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggles[i]->getParameter()); ofxToggle* toggle = static_cast<ofxToggle*>(guiGroup.getControl(i));
ofParameter<bool>* paramPtr = static_cast<ofParameter<bool>*>(&toggle->getParameter());
if (&(paramPtr->get()) == &toggleValue) { if (&(paramPtr->get()) == &toggleValue) {
removeListeners(); toggle->removeListener(this, &ofxRadioList::onToggleClicked);
*toggles[i] = true; *toggle = true; // Select the specific radio button
cout << toggles[i]->getName() << endl; toggle->addListener(this, &ofxRadioList::onToggleClicked);
addListeners(); string name = toggle->getName();
ofNotifyEvent(radioSelectedEvent, name, this);
//cout << toggle->getName() << endl; // debug
break; break;
} }
} }

15
src/ui/ofxRadioList.h

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "ofGraphics.h" #include "ofGraphics.h"
#include "ofxGuiGroup.h"
#include "ofxToggle.h" #include "ofxToggle.h"
class ofxRadioList class ofxRadioList
@ -12,12 +13,20 @@ public:
void setup(vector<string> &labels); void setup(vector<string> &labels);
void draw(); void draw();
void setPosition(ofPoint p);
void setPosition(float x, float y);
ofPoint getPosition();
float getWidth();
float getHeight();
// This event notifies about a toggle being selected and passes it's name to the listeners
// Use ofAddListener(ofxRadioListInstance.radioSelectedEvent, listenerClassPtr, &listenerClass::listenerMethod)
// to listen to this. Listner method void listenerMethod(string & radioName)
ofEvent<string> radioSelectedEvent;
private: private:
vector<ofxToggle*> toggles; ofxGuiGroup guiGroup;
void addListeners();
void removeListeners();
void unselectAll(); void unselectAll();
void onToggleClicked(bool &toggleValue); void onToggleClicked(bool &toggleValue);
}; };
Loading…
Cancel
Save