unit DocumentEvents;

interface

uses
  cBaseEvents,
  ks2DCOM_TLB,
  ActiveX,
  LtDefine;

type
////////////////////////////////////////////////////////////////////////////////
// DocumentEvent  -    
//
DocumentEvent = class ( cBaseEvent, IDocumentFileNotify )
public
  constructor Create( docRef : Reference ); overload;
  destructor  Destroy(); override;
  function    Advise(): boolean; override;

protected
  //    true   notifyType  
  function IsNotifyProcess(notifyType: SYSINT): WORDBOOL; virtual; stdcall;
  //kdBeginCloseDocument -   .
  function BeginCloseDocument() : WORDBOOL; virtual; stdcall;
  //kdCloseDocument -  .
  function CloseDocument() : WORDBOOL; virtual; stdcall;
  //kdBeginSaveDocument -   .
  function BeginSaveDocument( fileName : PChar ) : WORDBOOL; virtual; stdcall;
  //kdSaveDocument -  .
  function SaveDocument() : WORDBOOL; virtual; stdcall;
  //kdActiveDocument -  .
  function Activate() : WORDBOOL; virtual; stdcall;
  //kdDeactiveDocument -  .
  function Deactivate() : WORDBOOL; virtual; stdcall;
  //kdBeginSaveAsDocument -   .
  function BeginSaveAsDocument() : WORDBOOL; virtual; stdcall;
  //kdDocumentFrameOpen -   .
  function DocumentFrameOpen(const v: IUnknown): WORDBOOL; virtual; stdcall;
  //kdProcessActivate -  
  function ProcessActivate(Id: Integer): WORDBOOL; virtual; stdcall;
  //kdProcessActivate -  
  function ProcessDeactivate(Id: Integer): WORDBOOL; virtual; stdcall;
end;

////////////////////////////////////////////////////////////////////////////////
//
// Object2DEvent  -    2D 
//
////////////////////////////////////////////////////////////////////////////////
Object2DEvent = class ( cBaseEvent, IObject2DNotify )

public
	constructor Create( doc : LongInt; obj : LongInt ); overload;
  destructor  Destroy(); override;
  function    Advise(): boolean; override;

protected
  //    true   notifyType  
  function IsNotifyProcess(notifyType: SYSINT): WORDBOOL; virtual; stdcall;
  //koChangeActive    //   ( , )
  function ChangeActive( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginDelete     //   , false -  
  function BeginDelete( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koDelete          //  
  function Delete( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koCreate          //  
  function CreateObject( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginEdit       //   , false -  
  function BeginEdit( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koEditObject      //  
  function EditObject( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginMove       //   , false -  
  function BeginMove( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koMove            //  
  function Move( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginRotate     //   , false -  
  function BeginRotate( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koRotate          //  
  function Rotate( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginScale     //   , false -  
  function BeginScale( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koScale          //  
  function Scale( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginTransform  //   , false -  
  function BeginTransform( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koTransform       //  
  function Transform( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginCopy       //   , false -  
  function BeginCopy( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koCopy            //  
  function Copy( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koBeginSymmetry   //    , false -  
  function BeginSymmetry( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koSymmetry        //  
  function Symmetry( objRef : Reference ) : WORDBOOL; virtual; stdcall;
  //koSymmetry        //  
  function BeginProcess(pType: Integer; objRef: Integer): WORDBOOL; virtual; stdcall;
  //koSymmetry        //  
  function EndProcess(pType: Integer): WORDBOOL; virtual; stdcall;
  //koUpdateObject    //   
  function UpdateObject(objRef: Integer): WORDBOOL; virtual; stdcall;
  //koBeginDestroy    //  
  function  BeginDestroyObject(objRef: Integer): WordBool; virtual; stdcall;
  //koDestroy         //  
  function  DestroyObject(objRef: Integer): WordBool; virtual; stdcall;

end;

  function NewDocumentEvent( doc : reference ) : DocumentEvent;
  function NewObj2DEvent( doc : Reference; objType : Integer ) : Object2DEvent;


implementation

uses
  Libtool,
  ksConstTLB;

constructor DocumentEvent.Create( docRef : Reference );
begin
  inherited Create( ntDocumentFileNotify, docRef, docRef, 0 );
end;

destructor DocumentEvent.Destroy();
begin
  inherited Destroy;
end;

//------------------------------------------------------------------------------
// Advise
//---
function DocumentEvent.Advise() : boolean;
begin
  if not m_advise and ( m_params.ifType <> 0 ) then
    m_advise := boolean( ksConnectionAdvise( @m_params, PIUnknown(IDocumentFileNotify(self)) ) );
	Result := m_advise;
end;

function DocumentEvent.IsNotifyProcess( notifyType: SYSINT ) : WORDBOOL;
begin
  Result := ( notifyType >= kdBeginCloseDocument ) And ( notifyType <= kdBeginSaveAsDocument )
end;

//kdCloseDocument -   .
function DocumentEvent.BeginCloseDocument() : WORDBOOL;
begin
  Result := YesNo( ' .'#13#10'?' ) = 1;
end;

//kdCloseDocument -  .
function DocumentEvent.CloseDocument() : WORDBOOL;
begin
  ksMessage( ' .' );
  TerminateEventsByParam( 0, refDoc, -1, nil );
  Result := true;
end;

  //kdBeginSaveDocument -   .
function DocumentEvent.BeginSaveDocument( fileName : PChar ) : WORDBOOL;
begin
  Result := YesNo( ' ?' ) = 1;
end;

  //kdSaveDocument -  .
function DocumentEvent.SaveDocument() : WORDBOOL;
begin
  ksMessage( ' ' );
  Result := true;
end;

//kdActiveDocument -  .
function DocumentEvent.Activate() : WORDBOOL;
begin
  ksMessage( ' ' );
  Result := true;
end;

  //kdDeactiveDocument -  .
function DocumentEvent.Deactivate() : WORDBOOL;
begin
  ksMessage( ' ' );
  Result := true;
end;

  //kdBeginSaveAsDocument -   .
function DocumentEvent.BeginSaveAsDocument() : WORDBOOL;
begin
  Result := YesNo( '    ?' ) = 1;
end;

//kdProcessActivate -  .
function DocumentEvent.ProcessActivate( Id: Integer ) : WORDBOOL;
begin
  Result := true;
end;

//kdProcessActivate -  .
function DocumentEvent.ProcessDeactivate( Id: Integer ) : WORDBOOL;
begin
  Result := true;
end;

//kdDocumentFrameOpen -   .
function DocumentEvent.DocumentFrameOpen( const v: IUnknown ) : WORDBOOL;
begin
  Result := true;
end;

constructor Object2DEvent.Create( doc : LongInt; obj : LongInt );
begin
  inherited Create( ntObject2DNotify, doc, doc, obj );
end;

destructor Object2DEvent.Destroy();
begin
  inherited Destroy;
end;

//------------------------------------------------------------------------------
// Advise
//---
function Object2DEvent.Advise() : boolean;
begin
  if not m_advise and ( m_params.ifType <> 0 ) then
    m_advise := boolean( ksConnectionAdvise( @m_params, PIUnknown(IObject2DNotify(self)) ) );
	Result := m_advise;
end;

function Object2DEvent.IsNotifyProcess( notifyType: SYSINT ) : WORDBOOL;
begin
  Result := ( notifyType >= koChangeActive ) And ( notifyType <= koUpdateObject )
end;

//koChangeActive    //   ( , )
function Object2DEvent.ChangeActive( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginDelete     //   , false -  
function Object2DEvent.BeginDelete( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koDelete          //  
function Object2DEvent.Delete( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koCreate          //  
function Object2DEvent.CreateObject( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginEdit       //   , false -  
function Object2DEvent.BeginEdit( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koEditObject      //  
function Object2DEvent.EditObject( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginMove       //   , false -  
function Object2DEvent.BeginMove( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koMove            //  
function Object2DEvent.Move( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginRotate     //   , false -  
function Object2DEvent.BeginRotate( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koRotate          //  
function Object2DEvent.Rotate( objRef : Reference) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginScale     //   , false -  
function Object2DEvent.BeginScale( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koScale          //  
function Object2DEvent.Scale( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginTransform  //   , false -  
function Object2DEvent.BeginTransform( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koTransform       //  
function Object2DEvent.Transform( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginCopy       //   , false -  
function Object2DEvent.BeginCopy( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koCopy            //  
function Object2DEvent.Copy( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

  //koBeginSymmetry   //    , false -  
function Object2DEvent.BeginSymmetry( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

//koSymmetry        //   
function Object2DEvent.Symmetry( objRef : Reference ) : WORDBOOL;
begin
  Result := true;
end;

function Object2DEvent.BeginProcess(pType: Integer; objRef: Integer): WordBool;
begin
  Result := true;
end;

function Object2DEvent.EndProcess(pType: Integer): WordBool;
begin
  Result := true;
end;

function Object2DEvent.UpdateObject(objRef: Integer): WordBool;
begin
  Result := true;
end;

// koBeginDestroy    //  
function  Object2DEvent.BeginDestroyObject(objRef: Integer): WordBool;
begin
  Result := true;
end;

// koDestroy         //  
function  Object2DEvent.DestroyObject(objRef: Integer): WordBool;
begin
  Result := true;
end;

function NewDocumentEvent( doc : reference ) : DocumentEvent;
begin
  Result := nil;
  if doc <> 0 then begin
		if cBaseEvent.FindEvents( ntDocumentFileNotify, doc, 0, nil ) = nil then begin
			Result := DocumentEvent.Create( doc );
			if not Result.Advise() then begin
        Result.Free;
				Result := nil;
			end
		end
	end
end;

//-------------------------------------------------------------------------------
//    
// ---
function NewObj2DEvent( doc : Reference; objType : Integer ) : Object2DEvent;
begin
	Result := nil;
	if doc <> 0 then
	begin
  	if cBaseEvent.FindEvents( ntObject2DNotify, doc, objType, nil ) = nil then
    begin
			NewDocumentEvent( doc ); //     
			Result := Object2DEvent.Create( doc, objType );
			if not Result.Advise then
			begin
      	Result.Free;
				Result := nil;
			end;
		end;
	end;
end;

end.
