1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/*
*
* Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* Further, this software is distributed without any warranty that it is
* free of the rightful claim of any third person regarding infringement
* or the like. Any license provided herein, whether implied or
* otherwise, applies only to this software file. Patent licenses, if
* any, provided herein do not apply to combinations of this program with
* other software, or any other product whatsoever.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
* Mountain View, CA 94043, or:
*
* http://www.sgi.com
*
* For further information regarding this notice, see:
*
* http://oss.sgi.com/projects/GenInfo/NoticeExplan/
*
*/
// -*- C++ -*-
/*
* Copyright (C) 1990,91,92 Silicon Graphics, Inc.
*
_______________________________________________________________________
______________ S I L I C O N G R A P H I C S I N C . ____________
|
| $Revision: 1.1.1.1 $
|
| Description:
| This file contains the definition of the extender SoChildList
| class.
|
| Author(s) : Paul S. Strauss
|
______________ S I L I C O N G R A P H I C S I N C . ____________
_______________________________________________________________________
*/
#ifndef _SO_CHILD_LIST_
#define _SO_CHILD_LIST_
#include <Inventor/SoLists.h>
//////////////////////////////////////////////////////////////////////////////
//
// Class: SoChildList
//
// This class maintains a list of child nodes for any node. It allows
// children to be added, removed, replaced, and accessed. The SoGroup
// class has an instance of this class and provides public methods
// for dealing with children. Other classes can also have an instance
// of this class and may choose to publicize whatever methods they
// wish for dealing with them. The SoNode::getChildren() method
// returns the child list for any node class.
//
// SoChildList automatically maintains the auditor list for parent
// nodes. That is, when a child is added to the list, the parent node
// is automatically added as a parent auditor of the child. To make
// this possible, the parent node must be passed in to the
// constructors of the SoChildList class.
//
//////////////////////////////////////////////////////////////////////////////
class SoAction;
SoEXTENDER class SoChildList : public SoNodeList {
public:
// Constructors and destructor.
SoChildList(SoNode *parentNode);
SoChildList(SoNode *parentNode, int size);
SoChildList(SoNode *parentNode, const SoChildList &l);
~SoChildList();
// All of these override the standard SoBaseList methods so they
// can maintain auditors correctly.
void append(SoNode * child);
void insert(SoNode *child, int addBefore);
void remove(int which);
void truncate(int start);
void copy(const SoChildList &l);
void set(int i, SoNode *child);
// Traverses all children to apply action. Stops if action's
// termination condition is reached
void traverse(SoAction *action)
{ traverse(action, 0, getLength() - 1); }
// Traverses just one child
void traverse(SoAction *action, int childIndex)
{ traverse(action, childIndex, childIndex); }
// Traverses all children between two indices, inclusive. Stops if
// action's termination condition is reached.
void traverse(SoAction *action,
int firstChild, int lastChild);
SoINTERNAL public:
// SoPath calls these to be notified of changes in scene graph
// topology:
void addPathAuditor(SoPath *p) { auditors.append(p); }
void removePathAuditor(SoPath *p)
{ auditors.remove(auditors.find(p)); }
private:
SoNode *parent;
// This is a PList and not a PathList because PathList ref()s the
// paths it contains, and that screws up Path reference counting.
SbPList auditors;
};
#endif /* _SO_CHILD_LIST_ */
|