' Gambas class file

EXPORT
CREATE PRIVATE 
INHERITS ReportControl

PRIVATE $aChild AS NEW Object[]
PRIVATE $fSpacing AS Float
'PRIVATE $fPadding AS Float
PRIVATE $sSpacingUnit AS String
'PRIVATE $sPaddingUnit AS String
PRIVATE $bRelativeSpacing AS Boolean
PROPERTY READ Children AS Object[]
PROPERTY Spacing AS String
'PROPERTY Padding AS String
PROPERTY READ _Spacing AS Float
'PROPERTY READ _Padding AS Float
PROPERTY READ _RelativeSpacing AS Boolean

PUBLIC _RealSpacing AS Integer

PUBLIC FUNCTION _Add(cControl AS ReportControl) AS TControl
  DIM hTControl AS NEW TControl
  
  hTControl.Ctrl = cControl
  $aChild.Add(hTControl)
  ReportControl._ObjectFromId[cControl.Id] = cControl
  RETURN hTControl
END

PUBLIC SUB _Remove(id AS Integer)
  
  $aChild.Remove($aChild.Find(ReportControl._ObjectFromId[id]))
  
END


PUBLIC SUB _Free()
  
  DIM hCtrl AS Object
  FOR EACH hCtrl IN $aChild
    TRY ReportControl._ObjectFromId.Remove(hCtrl.Ctrl.Id)
    'hctrl = NULL
  NEXT 
  $aChild.Clear
    
END

PRIVATE FUNCTION Children_Read() AS Object[]

  RETURN $aChild

END


PRIVATE FUNCTION Spacing_Read() AS String

  RETURN Units.CmToUnit($fSpacing, $sSpacingUnit) & " " & $sSpacingUnit

END

PRIVATE SUB Spacing_Write(Value AS String)

  DIM hSizeParse AS TSizeParse
  hSizeParse = MRTools.ScanValue(value)
  IF Units.AllowedUnits.Find(hSizeParse.Unit) = -1 AND IF hSizeParse.Unit <> "%" THEN error.Raise("Unknown unit")
  IF hSizeParse.Unit = "%" THEN 
    $fSpacing = hSizeParse.Value
    $bRelativeSpacing = TRUE
  ELSE 
    $fSpacing = Units.UnitToCm(Value, hSizeParse.Unit)
    $sSpacingUnit = hSizeParse.Unit
    $bRelativeSpacing = FALSE
  ENDIF
END

' PRIVATE FUNCTION Padding_Read() AS String
' 
'   RETURN Units.CmToUnit($fPadding, $sPaddingUnit) & " " & $sPaddingUnit
' 
' END

' ' PRIVATE SUB Padding_Write(Value AS String)
' ' DIM hSizeParse AS TSizeParse
' '   hSizeParse = MRTools.ScanValue(value)
' '   IF NOT Units.AllowedUnits.Find(hSizeParse.Unit) = -1 THEN error.Raise("Unknown unit")
' '   $fPadding = Units.UnitToCm(Value, hSizeParse.Unit)
' '   $sPaddingUnit = hSizeParse.Unit
' ' 
' END

PUBLIC SUB _DrawBefore(Page AS Integer, X AS Integer, Y AS Integer, hControl AS TControl, VirtualId AS Integer)
  DIM hChild AS Object
  DIM vi AS Integer
  
  SUPER._DrawBefore(Page, X, Y, hControl, VirtualId)
  FOR EACH hChild IN ME.Children
    
    vi = VirtualId
    IF hControl.VirtualId > -1 THEN vi = hControl.VirtualId
    'Draw Before
    IF hChild.RelPage = -1 THEN        
     hChild.ctrl._DrawBefore(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ELSE IF hChild.RelPage + hControl.RealPage = Page THEN 
      hChild.ctrl._DrawBefore(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ENDIF 
  
  NEXT
  
END

PUBLIC SUB _Draw(Page AS Integer, X AS Integer, Y AS Integer, hControl AS TControl, VirtualId AS Integer)
  DIM hChild AS Object
  DIM vi AS Integer

  FOR EACH hChild IN ME.Children
  vi = VirtualId
  IF hControl.VirtualId > -1 THEN vi = hControl.VirtualId
  
    IF hChild.RelPage = -1 THEN        
     hChild.ctrl._Draw(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ELSE IF hChild.RelPage + hControl.RealPage = Page THEN 
      hChild.ctrl._Draw(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ENDIF 
  NEXT 
  
END

PUBLIC SUB _DrawAfter(Page AS Integer, X AS Integer, Y AS Integer, hControl AS TControl, VirtualId AS Integer)
  DIM hChild AS TControl
  DIM vi AS Integer
  SUPER._DrawAfter(Page, X, Y, hControl, VirtualId)
  FOR EACH hChild IN ME.Children
    'Draw After
    IF hChild.RelPage = -1 THEN        
     hChild.ctrl._DrawAfter(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ELSE IF hChild.RelPage + hControl.RealPage = Page THEN 
      hChild.ctrl._DrawAfter(Page, X + hControl.RealLeft, Y + hControl.RealTop, hChild, vi)
    ENDIF 
  NEXT
  
END



PRIVATE FUNCTION _Spacing_Read() AS Float

  RETURN $fSpacing

END

' ' PRIVATE FUNCTION _Padding_Read() AS Float
' ' 
' '   RETURN $fPadding
' ' 
' END

PRIVATE FUNCTION _RelativeSpacing_Read() AS Boolean

  RETURN $bRelativeSpacing

END
