INIT

 (Available in 01 TS COM - TS_COM_DelegateISink)

Purpose

Create an instance of the 'TS_DelegateISink' class

Syntax

oDelegateISink:=TS_DelegateISink{ oOwner, oInvokeHandler }

Arguments

uoOwner
OBJECT, Must be instance of TS_DelegateIDispatch
uoInvokeHandler
NIL, OBJECT
uloSelfDestruct
NIL, LOGIC, OBJECT

Description

Create an instance of the 'TS_DelegateISink' class. Normaly this class is used to delegate events from the 'ISink' interface to the 'InvokeHandler' object. If no 'InvokeHandler' object is specified then the 'TS_DelegateISink' instance will try to delegate the event to 'SELF' before signaling an error.

Example

CLASS TS_HOutlookApplicationEvents INHERIT TS_DelegateISink

ACCESS IID AS _WinGUID PTR PASCAL CLASS TS_HOutlookApplicationEvents
LOCAL STATIC pstruIID AS _WinGUID
   IF pstruIID==NULL_PTR
      pstruIID:=MemAlloc( _SIZEOF( _WinGUID ) )
      pstruIID.Data1:=0x0006304EU
      pstruIID.Data2:=0x0000
      pstruIID.Data3:=0x0000
      pstruIID.Data4[ 1 ]:=0xC0
      pstruIID.Data4[ 2 ]:=0x00
      pstruIID.Data4[ 3 ]:=0x00
      pstruIID.Data4[ 4 ]:=0x00
      pstruIID.Data4[ 5 ]:=0x00
      pstruIID.Data4[ 6 ]:=0x00
      pstruIID.Data4[ 7 ]:=0x00
      pstruIID.Data4[ 8 ]:=0x46
   END
RETURN pstruIID

METHOD INIT( uoOwner, uoInvokeHandler, uloSelfDestruct ) CLASS TS_HOutlookApplicationEvents
   SUPER:INIT( uoOwner, uoInvokeHandler, uloSelfDestruct  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationItemSend, 0x0000F002  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationNewMail, 0x0000F003  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationReminder, 0x0000F004  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationOptionsPagesAdd, 0x0000F005  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationStartup, 0x0000F006  ; ...
  ... )
   SELF:CreateClassMember( #OnApplicationQuit, 0x0000F007 )
RETURN SELF

METHOD OnApplicationItemSend( oIItem, rlCancel ) CLASS TS_HOutlookApplicationEvents
// Responde to the event
RETURN NIL

Source

METHOD INIT( uoOwner, uoInvokeHandler, uloSelfDestruct ) CLASS TS_DelegateISink
LOCAL cAccessTypeList AS STRING
LOCAL oInvokeHandler AS OBJECT
LOCAL oIUnknwnSink AS TS_IUnknown
LOCAL oAIUnknown AS TS_AbstractIUnknown
LOCAL oOwner AS OBJECT
LOCAL lInit AS LOGIC
   TSTrace Enter CREATE
   IF LOGIC( _CAST, _AND( SELF:_ObjectStat1, TS_OBJSTAT1_ININIT  ; ...
  ... ) )
      SELF:_ObjectStat1+=TS_OBJSTAT1_COUNTVALUE
      cAccessTypeList:=TS_AccessTypeList( uoOwner, uoInvokeHandler, uloSelfDestruct  ; ...
     ... )
      DO CASE
      CASE cAccessTypeList=="OUU" .OR. cAccessTypeList=="OUL" .OR. cAccessTypeList ; ...
     ... =="OUO"
         oInvokeHandler:=SELF
         lInit:=TRUE
      CASE cAccessTypeList=="OOU" .OR. cAccessTypeList=="OOL" .OR. cAccessTypeList ; ...
     ... =="OOO"
         IF uoInvokeHandler==NULL_OBJECT
            oInvokeHandler:=SELF
         ELSE
            oInvokeHandler:=uoInvokeHandler
         END
         lInit:=TRUE
      OTHERWISE
         TSTrace Warning "Invalid parameter(s), Expected 'O', 'U|O' and 'U|L|O', " ; ...
        ... +"Found '"+cAccessTypeList+"'"
         SELF:InvalidateObject( )
         lInit:=FALSE
      END
      IF lInit
         IF TS_IsInstanceOf( uoOwner, #TS_DelegateIDispatch ) .OR. TS_IsInstanceOf ; ...
        ... ( uoOwner, #TS_DelegateIDispatchAuto )
            IF TS_IsInstanceOf( uoOwner, #TS_DelegateIDispatchAuto )
               SUPER:INIT( IVarGet( uoOwner, #DelegateIDispatch  ; ...
              ... ), NIL, uloSelfDestruct )
            ELSE
               SUPER:INIT( uoOwner, NIL, uloSelfDestruct  ; ...
              ... )
            END
            IF SELF:IsInvalidated
               TSTrace Warning "SELF:IsInvalidated"
               SELF:InvalidateObject( )
            ELSE
               oOwner:=SELF:Owner
               IF IsAccess( oOwner, #AIThis ) .AND. IsMethod( oOwner, #_RegisterDelegateISink  ; ...
              ... )
                  oAIUnknown:=IVarGet( oOwner, #AIThis )
                  IF oAIUnknown<>NULL_OBJECT
                     SELF:_InvokeHandler:=oInvokeHandler
                     IF SELF:_InvokeHandler==NULL_OBJECT
                        TSTrace Warning "SELF:_InvokeHandler==NULL_OBJECT"
                        SELF:_InvokeHandler:=NULL_OBJECT
                        SELF:InvalidateObject( )
                     ELSE
                        oIUnknwnSink:=TS_CreateInstanceStatic( #TS_ISink, SELF, oAIUnknown ; ...
                       ... , SELF:_InvokeHandler, SELF:IID ; ...
                       ... , NIL )
                        SELF:_ISink:=OBJECT( _CAST, oIUnknwnSink  ; ...
                       ... )
                        oIUnknwnSink:=NULL_OBJECT
                        TSTrace SetCreatedAt( SELF:_ISink )
                        DO CASE
                        CASE SELF:_ISink==NULL_OBJECT
                           TSTrace Warning "SELF:_ISink:=TS_CreateInstanceStatic(#TS_ISink" ; ...
                          ... +",NULL_OBJECT,oAIUnknown,SELF:_InvokeHandler,SELF:" ; ...
                          ... +"IID,NIL)==NULL_OBJECT"
                           SELF:_InvokeHandler:=NULL_OBJECT
                           SELF:InvalidateObject( )
                        CASE SELF:_ISink:Advise( )
                           Send( oOwner, #_RegisterDelegateISink, SELF )
                           SELF:RegisterAxit( )
                        OTHERWISE
                           TSTrace Warning "!SELF:_ISink:Advise()"
                           SELF:_InvokeHandler:=NULL_OBJECT
                           SELF:InvalidateObject( )
                        END
                     END
                     #IFDEF TS_TRACETIMED_ENABLE
                        _TS_TraceTimedEnter( TS_TT_SYM_EXTERNAL, TS_TT_SYM_IUNKNOWN ; ...
                       ... , #Release )
                     #ENDIF
                     oAIUnknown:Release( )
                     #IFDEF TS_TRACETIMED_ENABLE
                        _TS_TraceTimedLeave( TS_TT_SYM_EXTERNAL, TS_TT_SYM_IUNKNOWN ; ...
                       ... , #Release )
                     #ENDIF
                     oAIUnknown:=NULL_OBJECT
                  ELSE
                     TSTrace Warning "oAIUnknown:=IVarGet(oOwner,#AIThis)==NULL_OBJECT"
                     SELF:InvalidateObject( )
                  END
               ELSE
                  TSTrace Warning "!(IsAccess(oOwner,#AIThis) .AND. IsMethod(oOwner" ; ...
                 ... +",#_RegisterDelegateISink))"
                  SELF:InvalidateObject( )
               END
            END
         ELSE
            TSTrace Warning "!(TS_IsInstanceOf(uoOwner,#TS_DelegateIDispatch) .OR" ; ...
           ... +". TS_IsInstanceOf(uoOwner,#TS_DelegateIDispatchAuto))"
            SELF:InvalidateObject( )
         END
      END
      SELF:_ObjectStat1-=TS_OBJSTAT1_COUNTVALUE
      IF _AND( SELF:_ObjectStat1, TS_OBJSTAT1_NEWTEST )==TS_OBJSTAT1_NEEDNEW
         SELF:_ObjectStat1:=_AND( SELF:_ObjectStat1 ; ...
        ... , _NOT( TS_OBJSTAT1_NEEDNEW ) )
         IF SELF:IsValidObject
            SELF:NEW( uoOwner, uoInvokeHandler, uloSelfDestruct  ; ...
           ... )
         ELSE
            TSTrace Warning TS_TEXT_GEN_CAN_NOT_INITIALIZE
            SELF:InvalidateObject( )
         END
      END
   ELSE
      TSTrace Warning "!LOGIC(_CAST,_And(SELF:_ObjectStat1,TS_OBJECT_STATUS_ININIT))"
   END
   TSTrace Leave
RETURN SELF