/*
 * Xailer source code:
 *
 * AppData.prg
 * Clase TAppData
 *
 * Copyright 2003, 2007 Ignacio Ortiz de Zúñiga
 * Copyright 2003, 2007 Xailer.com
 * All rights reserved
 *
 */

#include "Xailer.ch"
#include "error.ch"

//--------------------------------------------------------------------------

CLASS XAppData FROM TComponent

PUBLISHED:
	EVENT OnClose( oSender )

PUBLIC:
   METHOD Initialize()  CONSTRUCTOR
   METHOD Create()      INLINE ::Initialize()

   METHOD Destroy()     INLINE ::OnClose()      // --> Nil
   METHOD AddData( cName, uValue )              // --> Nil
   METHOD SetData( cName, uValue )              // --> Nil
   METHOD IsData( cName ) INLINE  __objHasData( Self, cName ) // --> lValue

ENDCLASS

//--------------------------------------------------------------------------

METHOD Initialize() CLASS XAppData

   IF ValType( AppData ) != "O"
      AppData := Self
   ELSE
      Self := AppData
   ENDIF

RETURN Self

//--------------------------------------------------------------------------

METHOD AddData( cName, uValue ) CLASS XAppData

	LOCAL aData

   IF __objHasMsg( Self, cName )
      WITH OBJECT ErrorNew()
         :SubSystem   := "XAILER"
         :SubCode     := 0
         :Severity    := ES_ERROR
         :Description := "Class member already exists. Data can not be created"
         :Operation   := "TAppData:AddData( '" + cName + "', ... )"
         Eval( ErrorBlock(), :__WithObject() )
      END WITH
   ELSE
      aData := Array( 11 )
      aData[ 1 ] := cName
      aData[ 2 ] := uValue
      aData[ 4 ] := HB_OO_CLSTP_PUBLISHED
      aData[ 5 ] := .F.
      aData[ 11 ] := .F.

      AAdd( ::aProperties, aData )
      __objAddData( Self, cName )
      __objSendMsg( Self, "_" + cName, uValue )
   ENDIF

RETURN Nil

//--------------------------------------------------------------------------

METHOD SetData( cName, uValue ) CLASS XAppData

	LOCAL aData

   IF  __objHasData( Self, cName )
      __objSendMsg( Self, "_" + cName, uValue )
   ELSE
      WITH OBJECT ErrorNew()
         :SubSystem   := "XAILER"
         :SubCode     := 0
         :Severity    := ES_ERROR
         :Description := "Invalid Data name"
         :Operation   := "TAppData:SetData( '" + cName + "', ... )"
         Eval( ErrorBlock(), :__WithObject() )
      END WITH
   ENDIF

RETURN Nil
