UnRegisterOwned

 (Available in 00 TS Tools(Base) - TS_Tools_Root2)

Purpose

CALLBACK: Called when a owned unregisters itself

Arguments

oOwned
OBJECT
lOwned
LOGIC

Description

Can be overridden to detect when a owned object is unregisterd

Important! This is a event send by the library. Normally, it should not be called in/by your application code.

If the 'lOwned' parameter is TRUE the the 'UnRegisterOwned()' method has been invoked by the owned object, if the parameter is FALSE then the method has been called by SELF.

Returns

Return = TRUE if succeeded

Example

METHOD UnRegisterOwned( oOwned AS OBJECT, lOwned AS LOGIC ) AS LOGIC PASCAL CLASS  ; ...
...CLASS SomeObject
LOCAL lRetVal AS LOGIC
   DO CASE
   CASE SELF:_MyIX==oOwned
      SELF:_MyIX:=NULL_OBJECT
   CASE SELF:_MyIY==oOwned
      SELF:_MyIY:=NULL_OBJECT
   END
   lRetVal:=SUPER:UnRegisterIOwned( oOwned, lOwned )
RETURN lRetVal

Source

METHOD UnRegisterOwned( oOwned AS OBJECT, lOwned AS LOGIC ) AS LOGIC PASCAL CLASS  ; ...
...TS_Root2
LOCAL oDestructor AS TS_Destructor
LOCAL lRetVal AS LOGIC
LOCAL X AS DWORD
   TSTrace Enter
   IF SELF:_Owneds<>NULL_ARRAY
      X:=AScan( SELF:_Owneds, oOwned )
      IF LOGIC( _CAST, X )
         ADel( SELF:_Owneds, X )
         ASize( SELF:_Owneds, ALen( SELF:_Owneds  ; ...
        ... )-1 )
         IF !lOwned
            IF IsMethod( oOwned, #UnRegisterOwner )
               IF IsAccess( oOwned, #Owner )
                  IF IVarGet( oOwned, #Owner )==SELF
                     oDestructor:=Send( oOwned, #UnRegisterOwner, SELF, TRUE )
                     IF oDestructor<>NULL_OBJECT
                        oDestructor:UnRegisterAxit( )
                        oDestructor:Destroy( )
                        oDestructor:=NULL_OBJECT
                     END
                  END
               ELSE
                  TSTrace Warning "!IsAccess(oOwned,#Owner)"
               END
            END
         END
         IF !LOGIC( _CAST, ALen( SELF:_Owneds ) ) .AND. !LOGIC ; ...
        ... ( _CAST, _AND( SELF:_ObjectStat1, TS_OBJSTAT1_DISALLOWEDESTROY  ; ...
        ... ) )
            IF _AND( SELF:_ObjectStat2, TS_OBJSTAT2_TEST_NEEDSELFDESTRUCT1  ; ...
           ... )==TS_OBJSTAT2_TEST_NEEDSELFDESTRUCT2
               SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
              ... , TS_OBJSTAT2_SELFDESTRUCTED2 )
               oDestructor:=TS_Destructor1{ SELF, NIL, NIL }
            END
         END
         lRetVal:=TRUE
      ELSE
         TSTrace Warning "AScan(SELF:_Owneds,oOwned)==0"
         lRetVal:=FALSE
      END
   ELSE
      TSTrace Warning "SELF:_Owneds==NULL_ARRAY"
      lRetVal:=FALSE
   END
   TSTrace Leave
RETURN lRetVal