#include "hbclass.ch"

CREATE CLASS TId1011Context

   DATA hCurrent INIT { => }
   METHOD New() CONSTRUCTOR
   METHOD GetData()
   METHOD PushRegistroDetalle( hRecord, nIndex, nTotal, hPrevious, hNext )
   METHOD PopRegistroDetalle()
   METHOD EvaluarFormula( cFormula )
   METHOD EvaluarCondicion( cCondition )
   METHOD CapaActiva( oObject )
   METHOD DescartarObjeto( oObject, cReason )
   METHOD AddAviso( cWarning )
   METHOD EsModoDisenador()

ENDCLASS

METHOD New() CLASS TId1011Context
RETURN Self

METHOD GetData() CLASS TId1011Context
RETURN { "DetalleVar" => { "ROWS" => { ;
   { "CAT" => "A", "VAL" => 10 }, ;
   { "CAT" => "B", "VAL" => 20 } } } }

METHOD PushRegistroDetalle( hRecord, nIndex, nTotal, hPrevious, hNext ) CLASS TId1011Context
   HB_SYMBOL_UNUSED( nIndex )
   HB_SYMBOL_UNUSED( nTotal )
   HB_SYMBOL_UNUSED( hPrevious )
   HB_SYMBOL_UNUSED( hNext )
   ::hCurrent := hRecord
RETURN Self

METHOD PopRegistroDetalle() CLASS TId1011Context
   ::hCurrent := { => }
RETURN Self

METHOD EvaluarFormula( cFormula ) CLASS TId1011Context
   IF hb_HHasKey( ::hCurrent, cFormula )
      RETURN ::hCurrent[ cFormula ]
   ENDIF
   IF cFormula == Chr( 34 ) + "A" + Chr( 34 )
      RETURN "A"
   ENDIF
   IF cFormula == Chr( 34 ) + "B" + Chr( 34 )
      RETURN "B"
   ENDIF
RETURN Val( cFormula )

METHOD EvaluarCondicion( cCondition ) CLASS TId1011Context
   HB_SYMBOL_UNUSED( cCondition )
RETURN { "lVisible" => .T., "cMotivo" => "" }

METHOD CapaActiva( oObject ) CLASS TId1011Context
   HB_SYMBOL_UNUSED( oObject )
RETURN .T.

METHOD DescartarObjeto( oObject, cReason ) CLASS TId1011Context
   HB_SYMBOL_UNUSED( oObject )
   HB_SYMBOL_UNUSED( cReason )
RETURN NIL

METHOD AddAviso( cWarning ) CLASS TId1011Context
   HB_SYMBOL_UNUSED( cWarning )
RETURN NIL

METHOD EsModoDisenador() CLASS TId1011Context
RETURN .F.

PROCEDURE Main()

   LOCAL oContext := TId1011Context():New()
   LOCAL oChart := TChart():New():Load( { ;
      "cChartKind" => "chart", ;
      "hChartSpec" => { "cCategoryFormula" => "CAT", "cValueFormula" => "VAL" } } )
   LOCAL oCross := TChart():New():Load( { ;
      "cChartKind" => "crosstab", ;
      "hChartSpec" => { "aDefinitions" => { ;
         { "nRowLevel" => 0, "nColumnLevel" => 0, "cRowFormula" => "CAT", "cColumnFormula" => Chr( 34 ) + "B" + Chr( 34 ), "cCellFormula" => "VAL" }, ;
         { "nRowLevel" => 0, "nColumnLevel" => 1, "cRowFormula" => "CAT", "cCellFormula" => "VAL", "cColumnLabelFormula" => Chr( 34 ) + "Total" + Chr( 34 ) }, ;
         { "nRowLevel" => 1, "nColumnLevel" => 0, "cColumnFormula" => Chr( 34 ) + "B" + Chr( 34 ), "cCellFormula" => "VAL", "cRowLabelFormula" => Chr( 34 ) + "Total" + Chr( 34 ) }, ;
         { "nRowLevel" => 1, "nColumnLevel" => 1, "cCellFormula" => "VAL", "cRowLabelFormula" => Chr( 34 ) + "Total" + Chr( 34 ), "cColumnLabelFormula" => Chr( 34 ) + "Total" + Chr( 34 ) } } } } )
   LOCAL oRich := TFormattedText():New():Load( { ;
      "cText" => Chr( 34 ) + "AB" + Chr( 34 ), ;
      "aRichTextRuns" => { ;
         { "cExpression" => Chr( 34 ) + "A" + Chr( 34 ), "lFontBold" => .T. }, ;
         { "cExpression" => Chr( 34 ) + "B" + Chr( 34 ), "lFontBold" => .F. } } } )
   LOCAL hChart := oChart:GenerarRenderizable( oContext )
   LOCAL hCross := oCross:GenerarRenderizable( oContext )
   LOCAL hRich := oRich:GenerarRenderizable( oContext )
   LOCAL aPages := TMotorPaginacion():New():Create():DividirObjetos( { { ;
      "id" => "rich-pages", ;
      "tipo" => "texto_formateado", ;
      "texto" => "AB" + Chr( 10 ) + "CD", ;
      "runs" => { ;
         { "cText" => "AB", "lFontBold" => .T. }, ;
         { "cText" => Chr( 10 ) + "CD", "lFontBold" => .F. } }, ;
      "permiteSaltoPagina" => .T., ;
      "ajusteLinea" => .F., ;
      "ancho" => 40, ;
      "alto" => 4, ;
      "tamano" => 10 } } )
   LOCAL nFailures := 0

   nFailures += AssertId1011( "chart type", hChart[ "tipo" ] == "chart" )
   nFailures += AssertId1011( "chart points", Len( hChart[ "puntos" ] ) == 2 )
   nFailures += AssertId1011( "chart value", hChart[ "puntos" ][ 2 ][ "value" ] == 20 )
   nFailures += AssertId1011( "crosstab type", hCross[ "tipo" ] == "crosstab" )
   nFailures += AssertId1011( "crosstab sum", hCross[ "celdas" ][ "A" ][ "B" ] == 10 )
   nFailures += AssertId1011( "crosstab grand total", hCross[ "celdas" ][ "__summary_row_1" ][ "__summary_col_1" ] == 30 )
   nFailures += AssertId1011( "formatted type", hRich[ "tipo" ] == "texto_formateado" )
   nFailures += AssertId1011( "formatted runs", Len( hRich[ "runs" ] ) == 2 )
   nFailures += AssertId1011( "formatted bold", hRich[ "runs" ][ 1 ][ "lFontBold" ] == .T. )
   nFailures += AssertId1011( "formatted pagination", Len( aPages ) == 2 )
   nFailures += AssertId1011( "formatted first page runs", Len( aPages[ 1 ][ 1 ][ "runs" ] ) > 0 )

   IF nFailures == 0
      OutStd( "ID 10/11 Harbour OK" + hb_eol() )
   ENDIF
   ErrorLevel( nFailures )

RETURN

FUNCTION AssertId1011( cName, lCondition )
   IF lCondition
      RETURN 0
   ENDIF
   OutStd( "FAIL " + cName + hb_eol() )
RETURN 1
