Restructured classes to better fit with style of the rest of the OSG.

This commit is contained in:
Robert Osfield
2008-07-25 19:57:17 +00:00
parent 727925a1c2
commit ff5da51dcb
18 changed files with 2230 additions and 2193 deletions

View File

@@ -7,115 +7,116 @@
namespace osgWidget {
#define META_UIObject(name) \
name * cloneAs(\
const std::string& newName, \
const osg::CopyOp& co = osg::CopyOp::DEEP_COPY_ALL \
) const { \
name * obj = dynamic_cast<name *>(this->clone(co)); \
obj->setName(newName); \
return obj; \
}
name * cloneAs(\
const std::string& newName, \
const osg::CopyOp& co = osg::CopyOp::DEEP_COPY_ALL \
) const { \
name * obj = dynamic_cast<name *>(this->clone(co)); \
obj->setName(newName); \
return obj; \
}
template <typename T>
class UIObjectParent {
public:
typedef T object_type;
typedef osg::observer_ptr<object_type> ptr_type;
typedef std::vector<ptr_type> Vector;
typedef typename Vector::iterator Iterator;
typedef typename Vector::const_iterator ConstIterator;
class UIObjectParent
{
public:
typedef T object_type;
typedef osg::observer_ptr<object_type> ptr_type;
typedef std::vector<ptr_type> Vector;
typedef typename Vector::iterator Iterator;
typedef typename Vector::const_iterator ConstIterator;
protected:
Vector _objects;
Iterator begin() {
return _objects.begin();
}
public:
Iterator begin() {
return _objects.begin();
}
ConstIterator begin() const {
return _objects.begin();
}
ConstIterator begin() const {
return _objects.begin();
}
Iterator end() {
return _objects.end();
}
Iterator end() {
return _objects.end();
}
ConstIterator end() const {
return _objects.end();
}
ConstIterator end() const {
return _objects.end();
}
typename Vector::size_type size() const {
return _objects.size();
}
typename Vector::size_type size() const {
return _objects.size();
}
object_type* getByName(const std::string& name) {
return _getByName(name);
}
private:
// I had to add this to avoid ambiguity errors with MSVC. Garbage.
object_type* _getByName(const std::string& name) const {
for(ConstIterator i = begin(); i != end(); i++) {
if(i->valid() && i->get()->getName() == name) return i->get();
}
const object_type* getByName(const std::string& name) const {
return _getByName(name);
}
return 0;
}
object_type* getByIndex(unsigned int index) {
return _getByIndex(index);
}
object_type* _getByIndex(unsigned int index) const {
for(ConstIterator i = begin(); i != end(); i++) {
if(i->valid() && i->get()->getIndex() == index) return i->get();
}
const object_type* getByIndex(unsigned int index) const {
return _getByIndex(index);
}
return 0;
}
unsigned int getNumObjects() const {
return _objects.size();
}
public:
object_type* getByName(const std::string& name) {
return _getByName(name);
}
Vector& getObjects() {
return _objects;
}
const object_type* getByName(const std::string& name) const {
return _getByName(name);
}
const Vector& getObjects() const {
return _objects;
}
object_type* getByIndex(unsigned int index) {
return _getByIndex(index);
}
protected:
const object_type* getByIndex(unsigned int index) const {
return _getByIndex(index);
}
bool _remove(object_type* obj) {
Iterator i = std::find(begin(), end(), obj);
unsigned int getNumObjects() const {
return _objects.size();
}
if(i == end()) return false;
Vector& getObjects() {
return _objects;
}
_objects.erase(i);
const Vector& getObjects() const {
return _objects;
}
return true;
}
protected:
bool _remove(object_type* obj) {
Iterator i = std::find(begin(), end(), obj);
bool _removeByName(const std::string& name) {
for(Iterator i = begin(); i != end(); i++) if(i->get()->getName() == name) {
_objects.erase(i);
if(i == end()) return false;
return true;
}
_objects.erase(i);
return false;
}
return true;
}
Vector _objects;
bool _removeByName(const std::string& name) {
for(Iterator i = begin(); i != end(); i++) if(i->get()->getName() == name) {
_objects.erase(i);
private:
return true;
}
// I had to add this to avoid ambiguity errors with MSVC. Garbage.
object_type* _getByName(const std::string& name) const {
for(ConstIterator i = begin(); i != end(); i++) {
if(i->valid() && i->get()->getName() == name) return i->get();
}
return 0;
}
object_type* _getByIndex(unsigned int index) const {
for(ConstIterator i = begin(); i != end(); i++) {
if(i->valid() && i->get()->getIndex() == index) return i->get();
}
return 0;
}
return false;
}
};
}