Show
Ignore:
Timestamp:
12/19/07 17:56:03 (9 months ago)
Author:
cneumann
Message:

changed: generic interface activated
fixed: single parent unlinking

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/Carsten_PtrWork2/Source/System/FieldContainer/Fields/OSGEditSFCPointerFieldHandle.inl

    r1032 r1033  
    289289} 
    290290 
     291 
     292/*! \class DynamicEditSFCPointerFieldHandle<FieldT> 
     293 
     294    Concrete \c EditFieldHandle for multi fields that store pointers. 
     295     
     296    \dev 
     297    Since a dynamically added field can not be manipulated by the container 
     298    it is added to (the container lacks static type information about the 
     299    field), this EditHandle does not call back into the container, but 
     300    manipulates the field directly. 
     301    \enddev 
     302*/ 
     303 
     304/*-------------------------------------------------------------------------*/ 
     305/* DynamicEditSFCPointerFieldHandle<FieldT>                                */ 
     306/*-------------------------------------------------------------------------*/ 
     307 
     308/*-------------------------------------------------------------------------*/ 
     309/* Helper                                                                  */ 
     310 
     311template <class FieldT> 
     312inline typename DynamicEditSFCPointerFieldHandle<FieldT>::HandledFieldType * 
     313DynamicEditSFCPointerFieldHandle<FieldT>::castFieldDown(void) const 
     314{ 
     315    return static_cast<HandledFieldType *>(_pField); 
     316} 
     317 
     318template <class FieldT> 
     319inline FieldContainer * 
     320DynamicEditSFCPointerFieldHandle<FieldT>::castPtrUp(HandledFieldValueType ptr) const 
     321{ 
     322    return static_cast<FieldContainer *>(static_cast<void *>(ptr)); 
     323} 
     324 
     325/*-------------------------------------------------------------------------*/ 
     326/* Constructors                                                            */ 
     327 
     328template <class FieldT> 
     329inline 
     330DynamicEditSFCPointerFieldHandle<FieldT>::DynamicEditSFCPointerFieldHandle( 
     331    Self const &other) 
     332     
     333    : Inherited (other) 
     334{ 
     335} 
     336 
     337template <class FieldT> 
     338inline 
     339DynamicEditSFCPointerFieldHandle<FieldT>::DynamicEditSFCPointerFieldHandle( 
     340    Field                      *pField, 
     341    FieldDescriptionBase const *pDescription) 
     342     
     343    : Inherited(pField, pDescription) 
     344{ 
     345} 
     346 
     347/*-------------------------------------------------------------------------*/ 
     348/* Destructor                                                              */ 
     349 
     350template <class FieldT> 
     351inline 
     352DynamicEditSFCPointerFieldHandle<FieldT>::~DynamicEditSFCPointerFieldHandle(void) 
     353{ 
     354} 
     355 
     356/*-------------------------------------------------------------------------*/ 
     357/* Type Query                                                              */ 
     358 
     359template <class FieldT> 
     360inline FieldType const & 
     361DynamicEditSFCPointerFieldHandle<FieldT>::getType(void) const 
     362{ 
     363    return HandledFieldType::getClassType(); 
     364} 
     365 
     366/*-------------------------------------------------------------------------*/ 
     367/* Stream IO                                                               */ 
     368 
     369template <class FieldT> 
     370inline void 
     371DynamicEditSFCPointerFieldHandle<FieldT>::pushValueToStream( 
     372    OutStream &str) const 
     373{ 
     374    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::pushValueToStream(): NIY\n")); 
     375} 
     376 
     377template <class FieldT> 
     378inline void 
     379DynamicEditSFCPointerFieldHandle<FieldT>::pushSizeToStream( 
     380    OutStream &str) const 
     381{ 
     382    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::pushSizeToStream(): NIY\n")); 
     383} 
     384 
     385template <class FieldT> 
     386inline void 
     387DynamicEditSFCPointerFieldHandle<FieldT>::pushValueFromCString( 
     388    Char8 const *str) 
     389{ 
     390    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::pushValueFromCString()\n")); 
     391} 
     392 
     393/*-------------------------------------------------------------------------*/ 
     394/* Generic Operations                                                      */ 
     395 
     396template <class FieldT> 
     397inline bool 
     398DynamicEditSFCPointerFieldHandle<FieldT>::equal(EditFieldHandlePtr rhs) 
     399{ 
     400    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::equal(): NIY\n")); 
     401} 
     402     
     403template <class FieldT> 
     404inline void 
     405DynamicEditSFCPointerFieldHandle<FieldT>::copyValues(GetFieldHandlePtr source) 
     406{ 
     407    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::copyValues(): NIY\n")); 
     408} 
     409 
     410template <class FieldT> 
     411inline void 
     412DynamicEditSFCPointerFieldHandle<FieldT>::shareValues(GetFieldHandlePtr source) 
     413{ 
     414    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::shareValues(): NIY\n")); 
     415} 
     416 
     417template <class FieldT> 
     418inline void 
     419DynamicEditSFCPointerFieldHandle<FieldT>::cloneValues( 
     420    GetFieldHandlePtr        pSrc, 
     421    TypePtrVector     const &shareTypes, 
     422    TypePtrVector     const &ignoreTypes, 
     423    TypeIdVector      const &shareGroupIds, 
     424    TypeIdVector      const &ignoreGroupIds) const 
     425{ 
     426    FWARNING(("DynamicEditSFCPointerFieldHandle<FieldT>::cloneValues(): NIY\n")); 
     427} 
     428 
     429/*-------------------------------------------------------------------------*/ 
     430/* Operations                                                              */ 
     431 
     432template <class FieldT> 
     433inline FieldContainer * 
     434DynamicEditSFCPointerFieldHandle<FieldT>::get(void) const 
     435{ 
     436    return castPtrUp(castFieldDown()->getValue()); 
     437} 
     438 
     439template <class FieldT> 
     440inline void 
     441DynamicEditSFCPointerFieldHandle<FieldT>::set(FieldContainer * const pNewValue) 
     442{ 
     443    HandledFieldValueType pTypedNewValue = 
     444        dynamic_cast<HandledFieldValueType>(pNewValue); 
     445 
     446    if(pTypedNewValue != NULL) 
     447    { 
     448        castFieldDown()->setValue(pTypedNewValue); 
     449    } 
     450} 
     451 
     452/*-------------------------------------------------------------------------*/ 
     453/* Typed Operations                                                        */ 
     454 
     455template <class FieldT> 
     456inline typename 
     457    DynamicEditSFCPointerFieldHandle<FieldT>::HandledFieldType * 
     458DynamicEditSFCPointerFieldHandle<FieldT>::operator->(void) const 
     459{ 
     460    return castFieldDown(); 
     461} 
     462 
     463template <class FieldT> 
     464inline typename 
     465    DynamicEditSFCPointerFieldHandle<FieldT>::HandledFieldType & 
     466DynamicEditSFCPointerFieldHandle<FieldT>::operator*(void) const 
     467{ 
     468    return *castFieldDown(); 
     469} 
     470 
     471template <class FieldT> 
     472inline typename 
     473    DynamicEditSFCPointerFieldHandle<FieldT>::HandledFieldType const * 
     474DynamicEditSFCPointerFieldHandle<FieldT>::getField(void) const 
     475{ 
     476    return castFieldDown(); 
     477} 
     478 
     479template <class FieldT> 
     480inline typename 
     481    DynamicEditSFCPointerFieldHandle<FieldT>::HandledFieldType * 
     482DynamicEditSFCPointerFieldHandle<FieldT>::editField(void) 
     483{ 
     484    return castFieldDown(); 
     485} 
     486 
     487 
    291488OSG_END_NAMESPACE 
    292489