osg::QFCItem Class Reference

#include <OSGQNodeTreeView_qt.h>

Inheritance diagram for osg::QFCItem:

osg::QSceneGraphItem osg::QNodeCoreItem osg::QNodeItem

List of all members.

Public Member Functions

 QFCItem (QListView *parent, const FieldContainerPtr &pFC)
 QFCItem (QListViewItem *parent, const FieldContainerPtr &pFC)
virtual ~QFCItem (void)
virtual FieldContainerPtr getFC (void) const
virtual void setup (void)
virtual void expand (void)
virtual void collapse (void)
virtual void setOpen (bool bOpen)

Static Public Member Functions

static QFCItem * dcast (QListViewItem *pItem)

Protected Member Functions

UInt32 getAspect (void)

Private Types

typedef QSceneGraphItem Inherited

Private Member Functions

void addRefedContainer (SFFieldContainerPtr *pSFFCPtr)
void addRefedContainer (MFFieldContainerPtr *pMFFCPtr, FieldDescription *pFieldDesc)
void addAttachments (SFAttachmentMap *pSFAttMap)
void addParents (MFFieldContainerPtr *pMFFCPtr)

Private Attributes

FieldContainerPtr _pFC


Detailed Description

Definition at line 95 of file OSGQNodeTreeView_qt.h.


Member Typedef Documentation

Reimplemented from osg::QSceneGraphItem.

Reimplemented in osg::QNodeItem, and osg::QNodeCoreItem.

Definition at line 113 of file OSGQNodeTreeView_qt.h.


Constructor & Destructor Documentation

QFCItem::QFCItem ( QListView *  parent,
const FieldContainerPtr &  pFC 
)

Definition at line 135 of file OSGQNodeTreeView_qt.cpp.

References osg::AttachmentContainerPtr::dcast(), getFC(), osg::getName(), and osg::NullFC.

Referenced by addAttachments(), addParents(), and addRefedContainer().

00136     : Inherited(parent),
00137       _pFC     (pFC   )
00138 {
00139     if(getFC() != NullFC)
00140     {
00141         setText(0, QString(getFC()->getType().getCName()));
00142 
00143         if(getName(AttachmentContainerPtr::dcast(getFC())))
00144             setText(1, 
00145                     QString(getName(AttachmentContainerPtr::dcast(getFC()))));
00146         else
00147             setText(1, QString("unnamed")       );
00148     }
00149 }

QFCItem::QFCItem ( QListViewItem *  parent,
const FieldContainerPtr &  pFC 
)

Definition at line 151 of file OSGQNodeTreeView_qt.cpp.

References osg::AttachmentContainerPtr::dcast(), getFC(), osg::getName(), and osg::NullFC.

00152     : Inherited(parent),
00153       _pFC     (pFC   )
00154 {
00155     if(getFC() != NullFC)
00156     {
00157         setText(0, QString(getFC()->getType().getCName()));
00158 
00159         if(getName(AttachmentContainerPtr::dcast(getFC())))
00160             setText(1, 
00161                     QString(getName(AttachmentContainerPtr::dcast(getFC()))));
00162         else
00163             setText(1, QString("unnamed")       );
00164     }
00165 }

QFCItem::~QFCItem ( void   )  [virtual]

Definition at line 167 of file OSGQNodeTreeView_qt.cpp.

00168 {
00169 }


Member Function Documentation

QFCItem * QFCItem::dcast ( QListViewItem *  pItem  )  [static]

Reimplemented from osg::QSceneGraphItem.

Reimplemented in osg::QNodeItem, and osg::QNodeCoreItem.

Definition at line 172 of file OSGQNodeTreeView_qt.cpp.

00173 {
00174     return dynamic_cast<QFCItem *>(pItem);
00175 }

FieldContainerPtr QFCItem::getFC ( void   )  const [virtual]

Implements osg::QSceneGraphItem.

Definition at line 178 of file OSGQNodeTreeView_qt.cpp.

References _pFC.

Referenced by addParents(), expand(), QFCItem(), and setup().

00179 {
00180     return _pFC;
00181 }

void QFCItem::setup ( void   )  [virtual]

Definition at line 184 of file OSGQNodeTreeView_qt.cpp.

References osg::QSceneGraphItem::getAspect(), osg::FieldContainerPtrBase::getAspectCPtr(), osg::FieldDescription::getCName(), getFC(), osg::FieldContainer::getField(), osg::FieldContainerType::getFieldDescription(), osg::FieldContainerType::getNumFieldDescs(), osg::FieldContainer::getType(), osg::SField< FieldTypeT, fieldNameSpace >::getValue(), osg::isMFFieldContainerPtr(), osg::isSFFieldContainerPtr(), osg::NullFC, setup(), osg::MField< FieldTypeT, fieldNameSpace >::size(), and osg::stringcmp().

00185 {
00186     FieldContainer *pFCAsp = getFC().getAspectCPtr(getAspect());
00187 
00188     if(!pFCAsp)
00189         return;
00190 
00191     UInt32 uiNumFields = pFCAsp->getType().getNumFieldDescs();
00192     
00193     for(UInt32  fieldId = 1; fieldId <= uiNumFields; ++fieldId)
00194     {
00195         FieldDescription *pDesc     = 
00196             pFCAsp->getType().getFieldDescription     (fieldId);
00197         Field            *pField    = pFCAsp->getField(fieldId);
00198         
00199         if(isSFFieldContainerPtr(pField))
00200         {
00201             if(stringcmp(pDesc->getCName(), "parent" ) == 0)
00202                 continue;
00203 
00204             SFFieldContainerPtr *pSFFCPtr = 
00205                 reinterpret_cast<SFFieldContainerPtr *>(pField);
00206 
00207             if(pSFFCPtr->getValue() != NullFC)
00208             {
00209                 setExpandable(this);
00210                 break;
00211             }
00212         }
00213         else if(isMFFieldContainerPtr(pField))
00214         {
00215             MFFieldContainerPtr *pMFFCPtr =
00216                 reinterpret_cast<MFFieldContainerPtr *>(pField);
00217 
00218             if(stringcmp(pDesc->getCName(), "parents") == 0)
00219             {
00220                 if(pMFFCPtr->size() > 1)
00221                 {
00222                     setExpandable(this);
00223                     break;
00224                 }
00225             }
00226             else
00227             {
00228                 if(pMFFCPtr->size() > 0)
00229                 {
00230                     setExpandable(this);
00231                     break;
00232                 }
00233             }
00234         }
00235     }
00236 
00237     Inherited::setup();
00238 }

void QFCItem::expand ( void   )  [virtual]

Implements osg::QSceneGraphItem.

Definition at line 241 of file OSGQNodeTreeView_qt.cpp.

References addAttachments(), addParents(), addRefedContainer(), osg::endLog(), osg::QSceneGraphItem::getAspect(), osg::FieldContainerPtrBase::getAspectCPtr(), osg::FieldDescription::getCName(), getFC(), osg::FieldContainer::getField(), osg::FieldContainerType::getFieldDescription(), osg::FieldContainerType::getNumFieldDescs(), osg::FieldContainer::getType(), osg::isMFFieldContainerPtr(), osg::isSFFieldContainerPtr(), PNOTICE, and osg::stringcmp().

00242 {
00243     if(childCount() != 0)
00244         return;
00245 
00246     FieldContainer *pFCAsp = getFC().getAspectCPtr(getAspect());
00247 
00248     if(!pFCAsp)
00249         return;
00250 
00251     FieldContainerType &fcType      = pFCAsp->getType();
00252     UInt32              uiNumFields = fcType.getNumFieldDescs();
00253 
00254     for(UInt32 fieldId = 1; fieldId <= uiNumFields; ++fieldId)
00255     {
00256         FieldDescription *pFieldDesc = fcType.getFieldDescription(fieldId);
00257         Field            *pField     = pFCAsp->getField          (fieldId);
00258         
00259         //add Items for all referenced containers (except parents)
00260         if(isSFFieldContainerPtr(pField))
00261         {
00262             if(stringcmp(pFieldDesc->getCName(), "parent" ) == 0)
00263                 continue;
00264 
00265             addRefedContainer(
00266                 reinterpret_cast<SFFieldContainerPtr *>(pField));
00267         }
00268         else if(isMFFieldContainerPtr(pField))
00269         {
00270             if(stringcmp(pFieldDesc->getCName(), "parents") == 0)
00271             {
00272                 addParents(
00273                     reinterpret_cast<MFFieldContainerPtr *>(pField));
00274             }
00275             else
00276             {
00277                 addRefedContainer(
00278                     reinterpret_cast<MFFieldContainerPtr *>(pField), 
00279                     pFieldDesc   );
00280             }
00281         }
00282 
00283         //add attachments
00284         if(stringcmp(pFieldDesc->getCName(), "attachments") == 0)
00285         {
00286             addAttachments(dynamic_cast<SFAttachmentMap *>(pField));
00287         }
00288     }
00289 
00290     PNOTICE << endLog;
00291 }

void QFCItem::collapse ( void   )  [virtual]

Implements osg::QSceneGraphItem.

Definition at line 294 of file OSGQNodeTreeView_qt.cpp.

00295 {
00296 }

void QFCItem::addRefedContainer ( SFFieldContainerPtr *  pSFFCPtr  )  [private]

Definition at line 299 of file OSGQNodeTreeView_qt.cpp.

References osg::AttachmentContainerPtr::dcast(), osg::NodePtr::dcast(), osg::SField< FieldTypeT, fieldNameSpace >::getValue(), osg::NullFC, and QFCItem().

Referenced by expand().

00300 {
00301     if(!pSFFCPtr || (pSFFCPtr->getValue() == NullFC))
00302         return;
00303 
00304     if(pSFFCPtr->getValue()->getType().isNode())
00305     {
00306         new QNodeItem(this, NodePtr::dcast(pSFFCPtr->getValue()));
00307     }
00308     else if(pSFFCPtr->getValue()->getType().isNodeCore())
00309     {
00310         new QNodeCoreItem(this, NodeCorePtr::dcast(pSFFCPtr->getValue()));
00311     }
00312     else
00313     {
00314         new QFCItem(this, pSFFCPtr->getValue());
00315     }
00316 }

void QFCItem::addRefedContainer ( MFFieldContainerPtr *  pMFFCPtr,
FieldDescription *  pFieldDesc 
) [private]

Definition at line 319 of file OSGQNodeTreeView_qt.cpp.

References osg::AttachmentContainerPtr::dcast(), osg::NodePtr::dcast(), osg::FieldDescription::getCName(), QFCItem(), osg::MField< FieldTypeT, fieldNameSpace >::rbegin(), and osg::MField< FieldTypeT, fieldNameSpace >::rend().

00321 {
00322     if(!pMFFCPtr || !pFieldDesc)
00323         return;
00324 
00325     MFFieldContainerPtr::reverse_iterator mfIter = pMFFCPtr->rbegin();
00326     MFFieldContainerPtr::reverse_iterator mfEnd  = pMFFCPtr->rend();
00327 
00328     QHeaderItem *pHeaderItem;
00329 
00330     if(mfIter != mfEnd)
00331         pHeaderItem = new QHeaderItem(this, pFieldDesc->getCName());
00332 
00333     for(; mfIter != mfEnd; ++mfIter)
00334     {
00335         if((*mfIter)->getType().isNode())
00336         {
00337             new QNodeItem(pHeaderItem, NodePtr::dcast(*mfIter));
00338         }
00339         else if((*mfIter)->getType().isNodeCore())
00340         {
00341             new QNodeCoreItem(pHeaderItem, NodeCorePtr::dcast(*mfIter));
00342         }
00343         else
00344         {
00345             new QFCItem(pHeaderItem, *mfIter);
00346         }
00347     }
00348 }

void QFCItem::addAttachments ( SFAttachmentMap *  pSFAttMap  )  [private]

Definition at line 351 of file OSGQNodeTreeView_qt.cpp.

References osg::SField< FieldTypeT, fieldNameSpace >::getValue(), and QFCItem().

Referenced by expand().

00352 {
00353     AttachmentMap::reverse_iterator mapIter = pSFAttMap->getValue().rbegin();
00354     AttachmentMap::reverse_iterator mapEnd  = pSFAttMap->getValue().rend();
00355 
00356     if(mapIter == mapEnd)
00357         return;
00358         
00359     QHeaderItem *pHeaderItem = new QHeaderItem(this, "attachments");
00360 
00361     for(; mapIter != mapEnd; ++mapIter)
00362     {
00363         new QFCItem(pHeaderItem, (*mapIter).second);
00364     }
00365 }

void QFCItem::addParents ( MFFieldContainerPtr *  pMFFCPtr  )  [private]

Definition at line 368 of file OSGQNodeTreeView_qt.cpp.

References osg::AttachmentContainerPtr::dcast(), osg::NodePtr::dcast(), getFC(), QFCItem(), osg::MField< FieldTypeT, fieldNameSpace >::rbegin(), osg::MField< FieldTypeT, fieldNameSpace >::rend(), and osg::MField< FieldTypeT, fieldNameSpace >::size().

Referenced by expand().

00369 {
00370     if(!pMFFCPtr)
00371         return;
00372 
00373     MFFieldContainerPtr::reverse_iterator mfIter = pMFFCPtr->rbegin();
00374     MFFieldContainerPtr::reverse_iterator mfEnd  = pMFFCPtr->rend();
00375 
00376     if((mfIter == mfEnd) || (pMFFCPtr->size() <= 1))
00377         return;
00378 
00379     QHeaderItem *pHeaderItem = new QHeaderItem(this, "parents");  
00380 
00381     for( ; mfIter != mfEnd; ++mfIter)
00382     {
00383         if(*mfIter == getFC())
00384             continue;
00385         
00386         if((*mfIter)->getType().isNode())
00387         {
00388             new QNodeItem(pHeaderItem, NodePtr::dcast(*mfIter));
00389         }
00390         else if((*mfIter)->getType().isNodeCore())
00391         {
00392             new QNodeCoreItem(pHeaderItem, NodeCorePtr::dcast(*mfIter));
00393         }
00394         else
00395         {
00396             new QFCItem(pHeaderItem, *mfIter);
00397         }
00398     }   
00399 }    

void QSceneGraphItem::setOpen ( bool  bOpen  )  [virtual, inherited]

Definition at line 107 of file OSGQNodeTreeView_qt.cpp.

References osg::QSceneGraphItem::collapse(), and osg::QSceneGraphItem::expand().

00108 {
00109     if(bOpen)
00110         expand();
00111     else
00112         collapse();
00113 
00114     Inherited::setOpen(bOpen);
00115 }

UInt32 QSceneGraphItem::getAspect ( void   )  [protected, inherited]

Definition at line 118 of file OSGQNodeTreeView_qt.cpp.

References osg::QNodeTreeView::dcast(), and osg::QNodeTreeView::getAspect().

Referenced by expand(), and setup().

00119 {
00120     if(!this->listView())
00121         return 0;
00122 
00123     QNodeTreeView *pView = QNodeTreeView::dcast(this->listView());
00124 
00125     if(!pView)
00126         return 0;
00127 
00128     return pView->getAspect();
00129 }


Member Data Documentation

Definition at line 121 of file OSGQNodeTreeView_qt.h.

Referenced by getFC().


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:26:18 2008 for OpenSG by  doxygen 1.5.5