' Gambas class file

EXPORT
INHERITS ReportControl

PRIVATE $sText AS String = ""
PRIVATE $iAlignment AS Integer '= Align.Center
PRIVATE $iMaxLength AS Integer = 10
PRIVATE $iIndex AS Integer
PROPERTY Data AS String
PROPERTY Alignment AS Integer
PROPERTY MaxLength AS Integer
PROPERTY READ Index AS Integer


EVENT Data

PUBLIC SUB _New()
  
  'ME.Height = "1 cm"
  
END


PRIVATE FUNCTION Data_Read() AS String

  RETURN $sText

END

PRIVATE SUB Data_Write(Value AS String)

  $sText = Value

END

PRIVATE FUNCTION Alignment_Read() AS Integer

  RETURN $iAlignment

END

PRIVATE SUB Alignment_Write(Value AS Integer)

  $iAlignment = Value

END


PUBLIC SUB _GetSizeHints(AvailableW AS Float, AvailableH AS Float, TotalWidth AS Float, TotalHeight AS Float) AS TSizeHint

  DIM hMyHints AS NEW TSizeHint
  DIM fTextHeight AS Float
  DIM fTextWidth AS Float
  DIM $sTmpText AS String = String($iMaxLength, "W")
  
  ' IF $iMaxLength = 0 THEN 
  '   RAISE Data(VirtualId)
  '   $sTmpText = $sText
  ' ENDIF
   
  'IF ME._RelativeWidth THEN PRINT "percent"
  hMyHints.Height = ME._Height + (2 * ME._Padding)
  
  IF NOT IsNull(ME.Font) THEN draw.Font = ME.Font
  draw.Font.size = draw.Font.size 

  'if the size choosed by the user is less than the font height, set the object to the font height
  fTextHeight = MRTools.PixelsToUnits(Draw.TextHeight($sTmpText))
  fTextWidth = MRTools.PixelsToUnits(Draw.TextWidth($sTmpText))
  
  IF hMyHints.Height < fTextHeight THEN hMyHints.Height = fTextHeight + (2 * ME._Padding)
  IF ME._RelativeHeight THEN hMyHints.Height = TotalHeight * ME._Height / 100
  IF ME._Width > 0 AND NOT ME.Autoresize THEN 
    hMyHints.Width = ME._Width
  ELSE 
    
    hMyHints.Width = fTextWidth + (2 * ME._Padding)
  
    IF hMyHints.Width < ME._Width THEN hMyHints.Width = ME._Width
  ENDIF
    IF ME._RelativeWidth THEN hMyHints.Width = AvailableW * ME._Width / 100
    IF hMyHints.Width > AvailableW THEN hMyHints.Width = AvailableW
  
  RETURN hMyHints
  
END

PUBLIC SUB _DrawBefore(Page AS Integer, X AS Integer, Y AS Integer, hControl AS TControl, VirtualId AS Integer)
  $iIndex = VirtualId
  RAISE Data
  SUPER._DrawBefore(Page, X, Y, hControl, VirtualId)
  
END

PUBLIC SUB _Draw(Page AS Integer, X AS Integer, Y AS Integer, hControl AS TControl, VirtualId AS Integer)
  $iIndex = VirtualId
  RAISE Data 
    
  Draw.ForeColor = ME.ForeColor
  
  'Set the Font if it is initialized
  IF NOT IsNull(ME.Font) THEN Draw.Font = ME.Font
  draw.Font.size = draw.Font.size * MRTools.ReportZoom '* MRTools.ResolutionAffichage
  
  Draw.Clip((x + hControl.RealLeft + MRTools.UnitsToPixels(ME.Padding)) * MRTools.ReportZoom, (y + hControl.RealTop + MRTools.UnitsToPixels(ME.Padding)) * MRTools.ReportZoom, hControl.RealWidth * MRTools.ReportZoom, hControl.RealHeight * MRTools.ReportZoom)
    Draw.Text(Left($sText, $iMaxLength), (x + hControl.RealLeft + MRTools.UnitsToPixels(ME.Padding)) * MRTools.ReportZoom, (y + hControl.RealTop + MRTools.UnitsToPixels(ME.Padding)) * MRTools.ReportZoom, hControl.RealWidth * MRTools.ReportZoom, hControl.RealHeight * MRTools.ReportZoom, $iAlignment)
  Draw.Clip.Enabled = FALSE
  
END

PUBLIC FUNCTION _SetGeometry(X AS Float, Y AS Float, W AS Float, H AS Float) AS Float
  
  DIM X1, Y1, X2, Y2 AS Float
  
  X1 = MRTools.UnitsToPixels(X)
  Y1 = MRTools.UnitsToPixels(Y)
  X2 = MRTools.UnitsToPixels(X + W)
  Y2 = MRTools.UnitsToPixels(Y + H)
  
  ME.RealLeft = X1
  ME.RealTop = Y1
  ME.RealWidth = X2 - X1
  ME.RealHeight = Y2 - Y1
  
END

PRIVATE FUNCTION MaxLength_Read() AS Integer

  RETURN $iMaxLength 

END

PRIVATE SUB MaxLength_Write(Value AS Integer)

  $iMaxLength = Value

END

PRIVATE FUNCTION Index_Read() AS Integer

  RETURN $iIndex

END
