UnRegisterOwner

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

Purpose

CALLBACK: Called when a owner unregisters itself

Arguments

oOwner
OBJECT
lOwner
LOGIC

Description

Can be overridden to detect when a owner 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 'lOwner' parameter is TRUE the the 'UnRegisterOwner()' method has been invoked by the owner object, if the parameter is FALSE then the method has been called by SELF.

Returns

oDestructor = OBJECT(TS_Destructor|NULL_OBJECT)

Source

METHOD UnRegisterOwner( oOwner AS OBJECT, lOwner AS LOGIC ) AS TS_Destructor PASCAL  ; ...
...CLASS TS_Root2
LOCAL oDestructor AS TS_Destructor
   TSTrace Enter
   SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
  ... , TS_OBJSTAT2_REGISTER_DISABLED )
   DO CASE
   CASE SELF:_Owner==NULL_OBJECT
      TSTrace Warning "SELF:_Owner==NULL_OBJECT"
      oDestructor:=NULL_OBJECT
   CASE SELF:_Owner<>oOwner
      TSTrace Warning "SELF:_Owner<>oOwner"
      oDestructor:=NULL_OBJECT
   CASE LOGIC( _CAST, _AND( SELF:_ObjectStat2, TS_OBJSTAT2_SELFDESTRUCTED1  ; ...
  ... ) )
      TSTrace Warning "LOGIC(_CAST,_And(SELF:_ObjectStat2,TS_OBJSTAT2_SELFDESTRUCTED1))"
      oDestructor:=NULL_OBJECT
   CASE LOGIC( _CAST, _AND( SELF:_ObjectStat2, TS_OBJSTAT2_SELFDESTRUCTED2  ; ...
  ... ) )
      TSTrace Warning "LOGIC(_CAST,_And(SELF:_ObjectStat2,TS_OBJSTAT2_SELFDESTRUCTED2))"
      oDestructor:=NULL_OBJECT
   OTHERWISE
      SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
     ... , TS_OBJSTAT2_SELFDESTRUCTED1 )
      SELF:_Owner:=NULL_OBJECT
      IF !LOGIC( _CAST, _AND( SELF:_ObjectStat2, TS_OBJSTAT2_NOTREGISTERED  ; ...
     ... ) )
         SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
        ... , TS_OBJSTAT2_NOTREGISTERED )
         IF !lOwner .AND. !LOGIC( _CAST, _AND( SELF:_ObjectStat2 ; ...
        ... , TS_OBJSTAT2_UNREGISTERED ) )
            IF IsMethod( oOwner, #UnRegisterOwned )
               IF Send( oOwner, #UnRegisterOwned, SELF, TRUE )
                  SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
                 ... , TS_OBJSTAT2_UNREGISTERED )
               ELSE
                  TSTrace Warning "!Send(oOwner,#UnRegisterOwned,SELF,TRUE)"
               END
            ELSE
               SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
              ... , TS_OBJSTAT2_UNREGISTERED )
            END
         END
      END
      DO CASE
      CASE LOGIC( _CAST, ALen( SELF:_Owneds ) ) .AND. LOGIC(  ; ...
     ... _CAST, _AND( SELF:_ObjectStat2, TS_OBJSTAT2_NOSELFDESTRUCTIFOWNEDS  ; ...
     ... ) )
         SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
        ... , TS_OBJSTAT2_SELFDESTRUCT_ENABLED2 )
         oDestructor:=NULL_OBJECT
      CASE LOGIC( _CAST, _AND( SELF:_ObjectStat1, TS_OBJSTAT1_DISALLOWEDESTROY  ; ...
     ... ) )
         oDestructor:=NULL_OBJECT
      CASE LOGIC( _CAST, _AND( SELF:_ObjectStat2, TS_OBJSTAT2_SELFDESTRUCT_ENABLED1  ; ...
     ... ) )
         SELF:_ObjectStat2:=_OR( SELF:_ObjectStat2 ; ...
        ... , TS_OBJSTAT2_SELFDESTRUCTED2 )
         oDestructor:=TS_Destructor1{ SELF, NIL, NIL }
      OTHERWISE
         oDestructor:=NULL_OBJECT
      END
      SELF:_ObjectStat2:=_AND( SELF:_ObjectStat2 ; ...
     ... , _NOT( TS_OBJSTAT2_SELFDESTRUCTED1 ) )
   END
   SELF:_ObjectStat2:=_AND( SELF:_ObjectStat2 ; ...
  ... , _NOT( TS_OBJSTAT2_REGISTERED ) )
   TSTrace Leave
RETURN oDestructor